diff options
Diffstat (limited to 'derivation.nix')
| -rw-r--r-- | derivation.nix | 172 | 
1 files changed, 91 insertions, 81 deletions
diff --git a/derivation.nix b/derivation.nix index e7f5232..dee2286 100644 --- a/derivation.nix +++ b/derivation.nix @@ -1,95 +1,105 @@ -{ pkgs ? import <nixpkgs> {}, +{ +  pkgs ? import <nixpkgs> {},    stdenv ? pkgs.stdenv,    lib ? pkgs.lib,    ldc ? null,    dcompiler ? pkgs.ldc, -  dub ? pkgs.dub +  dub ? pkgs.dub,  }:  assert dcompiler != null;  with ( -  with lib; -  let -    filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( # filter function to remove the .dub package folder from src -      type == "directory" && baseName == ".dub" -    ); +  with lib; let +    filterDub = name: type: let +      baseName = baseNameOf (toString name); +    in +      ! ( # filter function to remove the .dub package folder from src +        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 ]; +    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 -        HOME="$PWD" -        DFLAGS="-O2 -inline" -        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 -        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)) { -      name = package.name; # use name from dub.json, unless pname and version are specified -    })); +        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 +              HOME="$PWD" +              DFLAGS="-O2 -inline" +              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 +              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)) { +            name = package.name; # use name from dub.json, unless pname and version are specified +          }));    }  ); -mkDubDerivation rec { -  pname         = "spine"; -  version       = "0.12.0"; -  src           = ./.; -  nativeBuildInputs = with pkgs; [ dub ldc ]; -  buildInputs = with pkgs; [ nixVersions.unstable sqlite ]; -  meta = with pkgs.lib; { -    description = "A sisu like parser & document generator"; -    longDescription = '' -      a sisu like parser & document generator -    ''; -    homepage    = "https://sisudoc.org"; -    license     = licenses.agpl3Plus; -    platforms   = platforms.linux; -    maintainers = [ "RalphAmissah" ]; -  }; -} +  mkDubDerivation rec { +    pname = "spine"; +    version = "0.12.0"; +    src = ./.; +    nativeBuildInputs = with pkgs; [dub ldc]; +    buildInputs = with pkgs; [nixVersions.unstable sqlite]; +    meta = with pkgs.lib; { +      description = "A sisu like parser & document generator"; +      longDescription = '' +        a sisu like parser & document generator +      ''; +      homepage = "https://sisudoc.org"; +      license = licenses.agpl3Plus; +      platforms = platforms.linux; +      maintainers = ["RalphAmissah"]; +    }; +  }  | 
