diff options
| -rw-r--r-- | nix/mkDub.nix | 31 | ||||
| -rw-r--r-- | org/spine_build_scaffold.org | 71 | ||||
| -rwxr-xr-x[l---------] | spine.nix | 139 | 
3 files changed, 183 insertions, 58 deletions
| 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 <nixpkgs> {}, +  stdenv ? pkgs.stdenv, +  ldc ? pkgs.ldc, +  dub ? pkgs.dub +}: +#with import ./nix/mkDub.nix { inherit pkgs; }; +with ( # mkDub.nix +  <<mkDub_nix>> +); +mkDubDerivation rec { +  name = "spine-${version}"; +  version = "<<version_spine>>"; +  src = ./.; +  buildInputs = [ +    pkgs.sqlite +    ( +      <<nix_dub2nix_with_pkgs>> +    ) +  ]; +  shellHook = '' +    # nix-build -I nixpkgs=<provide local nix path> +    nix-build +    echo "built spine" +  ''; +  installPhase = '' +    install -m755 -D spine $out/bin/spine +    echo "built $out/bin/spine" +  ''; +  <<nix_project_meta>> +} +#+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  }: +<<mkDub_nix>> +#+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 index ef4723a..0dc3f67 120000..100755 --- a/spine.nix +++ b/spine.nix @@ -1 +1,138 @@ -project.nix
\ No newline at end of file +#!/usr/bin/env -S nix-build +{ pkgs ? import <nixpkgs> {}, +  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=<provide local nix path> +    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 ]; +  }; +} | 
