From 924fabf26347cf2da0a770cd16f956c26e4064f9 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sat, 15 May 2021 18:10:04 -0400 Subject: nix-build cleanup, external sources localized - clean up as external sources kept locally, in ./src/ext_depends/ - remove dub2nix dependency, no longer needed/used --- default.nix | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 98 insertions(+), 10 deletions(-) (limited to 'default.nix') diff --git a/default.nix b/default.nix index f3ad1cd..fa1969f 100755 --- a/default.nix +++ b/default.nix @@ -1,22 +1,110 @@ -{ pkgs ? import {} }: -with import ./nix/mkDub.nix { inherit pkgs; }; +#!/usr/bin/env -S nix-build +{ pkgs ? import {}, + stdenv ? pkgs.stdenv, + lib ? pkgs.lib, + ldc ? null, + dcompiler ? pkgs.ldc, + dub ? pkgs.dub +}: +assert dcompiler != null; +with ( + assert dcompiler != null; + with lib; + let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + # Remove reference to build tools and library sources + disallowedReferences = deps: [ dcompiler dub ]; + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + in { + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + pname = package.name; + nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + passthru = passthru // { + inherit dub dcompiler pkgs; + }; + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + buildPhase = '' + runHook preBuild + export HOME=$PWD + for dc_ in dmd ldmd2 gdmd; do + echo "- check for D compiler $dc_" + dc=$(type -P $dc_ || echo "") + if [ ! "$dc" == "" ]; then + break + fi + done + if [ "$dc" == "" ]; then + exit "Error: could not find D compiler" + fi + echo "$dc_ used as D compiler to build $pname" + dub build --compiler=$dc --build=release --combined --skip-registry=all + runHook postBuild + ''; + checkPhase = '' + runHook preCheck + export HOME=$PWD + dub test --combined --skip-registry=all + runHook postCheck + ''; + installPhase = '' + runHook preInstall + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + runHook postInstall + ''; + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); + } +); mkDubDerivation rec { name = "spine-${version}"; version = "0.11.3"; src = ./.; buildInputs = [ pkgs.sqlite - (import ./nix/pkglst/shell-pkgs.nix { inherit pkgs; }) + ( + with pkgs; [ + nixFlakes + rund + dub + ldc + sqlite + ] + ) ]; - # installPhase = '' - # install -m755 -D spine $out/bin/spine - # echo "built $out/bin/spine" - # ''; + # buildPhase = [ ]; + installPhase = '' + install -m755 -D spine $out/bin/spine + echo "built $out/bin/spine" + ''; meta = with pkgs.lib; { - homepage = https://sisudoc.org; + homepage = https://sisudoc.org; description = "a sisu like document parser"; - license = licenses.agpl3Plus; - platforms = platforms.linux; + license = licenses.agpl3Plus; + platforms = platforms.linux; maintainers = [ RalphAmissah ]; }; } -- cgit v1.2.3