From ef05733de0b5f308a8b3dcfb3c0fd547426883dd Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sun, 24 Jan 2021 14:51:52 -0500 Subject: mkDub.nix project.nix spine.nix --- nix/mkDub.nix | 31 +--------- org/spine_build_scaffold.org | 71 +++++++++++++--------- spine.nix | 139 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 183 insertions(+), 58 deletions(-) mode change 120000 => 100755 spine.nix diff --git a/nix/mkDub.nix b/nix/mkDub.nix index bfcb038..8f4014b 100644 --- a/nix/mkDub.nix +++ b/nix/mkDub.nix @@ -3,56 +3,44 @@ ldc ? pkgs.ldc, dub ? pkgs.dub }: - with stdenv; let # Filter function to remove the .dub package folder from src filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( type == "directory" && baseName == ".dub" ); - # Convert a GIT rev string (tag) to a simple semver version rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; - dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; - # Fetch a dependency (source only for now) fromDub = dubDep: mkDerivation rec { name = "${src.name}-${version}"; version = rev-to-version dubDep.fetch.rev; nativeBuildInputs = [ ldc dub ]; src = dep2src dubDep; - buildPhase = '' runHook preBuild - export HOME=$PWD + export HOME=$NIX_BUILD_TOP + #export HOME=$PWD dub build -b=release runHook postBuild ''; - # outputs = [ "lib" ]; - # installPhase = '' # runHook preInstall # mkdir -p $out/bin # runHook postInstall # ''; }; - # Adds a local package directory (e.g. a git repository) to Dub dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; - # The target output of the Dub package targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; - # Remove reference to build tools and library sources disallowedReferences = deps: [ ldc dub ] ++ builtins.map dep2src deps; - removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; - in { inherit fromDub; - mkDubDerivation = lib.makeOverridable ({ src, nativeBuildInputs ? [], @@ -63,54 +51,39 @@ in { package ? lib.importJSON dubJSON, ... } @ attrs: stdenv.mkDerivation (attrs // { - pname = package.name; - nativeBuildInputs = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; disallowedReferences = disallowedReferences deps; - passthru = passthru // { inherit dub ldc 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 ${lib.concatMapStringsSep "\n" dub-add-local deps} dub build --compiler=ldc2 --build=release --combined --skip-registry=all - runHook postBuild ''; - checkPhase = '' runHook preCheck - export HOME=$PWD ${lib.concatMapStringsSep "\n" dub-add-local deps} 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 {}; diff --git a/org/spine_build_scaffold.org b/org/spine_build_scaffold.org index 5bd2a6b..ace6bc7 100644 --- a/org/spine_build_scaffold.org +++ b/org/spine_build_scaffold.org @@ -2099,6 +2099,41 @@ mkDubDerivation rec { } #+END_SRC +** spine.nix (project.nix including import mkDub.nix) :project: + +#+BEGIN_SRC nix :tangle ../spine.nix :tangle-mode (identity #o755) :shebang "#!/usr/bin/env -S nix-build" +{ pkgs ? import {}, + stdenv ? pkgs.stdenv, + ldc ? pkgs.ldc, + dub ? pkgs.dub +}: +#with import ./nix/mkDub.nix { inherit pkgs; }; +with ( # mkDub.nix + <> +); +mkDubDerivation rec { + name = "spine-${version}"; + version = "<>"; + src = ./.; + buildInputs = [ + pkgs.sqlite + ( + <> + ) + ]; + shellHook = '' + # nix-build -I nixpkgs= + nix-build + echo "built spine" + ''; + installPhase = '' + install -m755 -D spine $out/bin/spine + echo "built $out/bin/spine" + ''; + <> +} +#+END_SRC + - unused - installPhase @@ -2146,56 +2181,51 @@ aria2c https://raw.githubusercontent.com/lionello/dub2nix/master/mkDub.nix ./nix ldc ? pkgs.ldc, dub ? pkgs.dub }: +<> +#+END_SRC +** mkDub.nix shared + +#+NAME: mkDub_nix +#+BEGIN_SRC nix with stdenv; let # Filter function to remove the .dub package folder from src filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( type == "directory" && baseName == ".dub" ); - # Convert a GIT rev string (tag) to a simple semver version rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; - dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; - # Fetch a dependency (source only for now) fromDub = dubDep: mkDerivation rec { name = "${src.name}-${version}"; version = rev-to-version dubDep.fetch.rev; nativeBuildInputs = [ ldc dub ]; src = dep2src dubDep; - buildPhase = '' runHook preBuild - export HOME=$PWD + export HOME=$NIX_BUILD_TOP + #export HOME=$PWD dub build -b=release runHook postBuild ''; - # outputs = [ "lib" ]; - # installPhase = '' # runHook preInstall # mkdir -p $out/bin # runHook postInstall # ''; }; - # Adds a local package directory (e.g. a git repository) to Dub dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; - # The target output of the Dub package targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; - # Remove reference to build tools and library sources disallowedReferences = deps: [ ldc dub ] ++ builtins.map dep2src deps; - removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; - in { inherit fromDub; - mkDubDerivation = lib.makeOverridable ({ src, nativeBuildInputs ? [], @@ -2206,54 +2236,39 @@ in { package ? lib.importJSON dubJSON, ... } @ attrs: stdenv.mkDerivation (attrs // { - pname = package.name; - nativeBuildInputs = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; disallowedReferences = disallowedReferences deps; - passthru = passthru // { inherit dub ldc 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 ${lib.concatMapStringsSep "\n" dub-add-local deps} dub build --compiler=ldc2 --build=release --combined --skip-registry=all - runHook postBuild ''; - checkPhase = '' runHook preCheck - export HOME=$PWD ${lib.concatMapStringsSep "\n" dub-add-local deps} 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 {}; diff --git a/spine.nix b/spine.nix deleted file mode 120000 index ef4723a..0000000 --- a/spine.nix +++ /dev/null @@ -1 +0,0 @@ -project.nix \ No newline at end of file diff --git a/spine.nix b/spine.nix new file mode 100755 index 0000000..0dc3f67 --- /dev/null +++ b/spine.nix @@ -0,0 +1,138 @@ +#!/usr/bin/env -S nix-build +{ pkgs ? import {}, + stdenv ? pkgs.stdenv, + ldc ? pkgs.ldc, + dub ? pkgs.dub +}: +#with import ./nix/mkDub.nix { inherit pkgs; }; +with ( # mkDub.nix + with stdenv; + let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ ldc dub ]; + src = dep2src dubDep; + buildPhase = '' + runHook preBuild + export HOME=$NIX_BUILD_TOP + #export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + # outputs = [ "lib" ]; + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + # Remove reference to build tools and library sources + disallowedReferences = deps: [ ldc dub ] ++ builtins.map dep2src deps; + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + in { + inherit fromDub; + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/nix/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + pname = package.name; + nativeBuildInputs = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + passthru = passthru // { + inherit dub ldc 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 + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build --compiler=ldc2 --build=release --combined --skip-registry=all + runHook postBuild + ''; + checkPhase = '' + runHook preCheck + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + 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.1"; + src = ./.; + buildInputs = [ + pkgs.sqlite + ( + let + dub2nix-src = fetchTarball { + url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; + }; + dub2nix = (import dub2nix-src) { inherit pkgs; }; + in + with pkgs; [ + nixFlakes + dub + ldc + sqlite + nix-prefetch-git + validatePkgConfig + ] + ) + ]; + shellHook = '' + # nix-build -I nixpkgs= + nix-build + echo "built spine" + ''; + installPhase = '' + install -m755 -D spine $out/bin/spine + echo "built $out/bin/spine" + ''; + meta = with stdenv.lib; { + homepage = http://sisudoc.org; + description = "a sisu like document parser"; + license = licenses.agpl3Plus; + platforms = platforms.linux; + maintainers = [ RalphAmissah ]; + }; +} -- cgit v1.2.3