diff options
Diffstat (limited to 'derivation.nix')
| -rw-r--r-- | derivation.nix | 110 | 
1 files changed, 110 insertions, 0 deletions
diff --git a/derivation.nix b/derivation.nix new file mode 100644 index 0000000..3b9ce81 --- /dev/null +++ b/derivation.nix @@ -0,0 +1,110 @@ +{ pkgs ? import <nixpkgs> {}, +  stdenv ? pkgs.stdenv, +  lib ? pkgs.lib, +  ldc ? null, +  dcompiler ? pkgs.ldc, +  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" +    ); +    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 +        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 +        #cp -rv "${targetOf package}" $out/spine-markup-samples/. +        #cp -rv ./markup $out/spine-markup-samples/. +        runHook postInstall +      ''; +      #postInstall= '' +      #  cp -rv ./markup $out/spine-markup-samples/. +      #''; +      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"; +  zipfile       = "spine-0.12.0-tag-0.11.2.r107.gf89a107.tar.gz"; +  src = fetchTarball { +    #url         = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/tarball/${pname}-${version}.tar.gz"; +    #url         = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine/tarballGitHEAD/${pname}-${version}.tar.gz"; +    #sha256      = "sha256:0000000000000000000000000000000000000000000000000000"; +    url         = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/tarball/spine-0.12.0-tag-0.11.2.r107.gf89a107.tar.gz"; +    sha256      = "sha256:03dr7dn7kq6arw4ry7qar13iqmi1caw70imfjwi8qr7g2j4mnk2q"; +  }; +  nativeBuildInputs = with pkgs; [ dub ldc ]; +  buildInputs = with pkgs; [ +    nixVersions.unstable #nixFlakes +    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" ]; +  }; +}  | 
