diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2021-10-23 19:49:43 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2021-11-27 19:51:25 -0500 | 
| commit | c4f6c86999ec8fe3b610ac269a121c9fa424daf5 (patch) | |
| tree | 9251611c030c29af99bfa59bda94521c3500ad94 /sundry/spine_search_cgi/derivation.nix | |
| parent | nix .envrc related (diff) | |
dlang dub & nix build related, includes dep update
- nix-shell --pure
  - nix-build
  - dub build --compiler=ldc2 --build=release --force
Diffstat (limited to 'sundry/spine_search_cgi/derivation.nix')
| -rw-r--r-- | sundry/spine_search_cgi/derivation.nix | 108 | 
1 files changed, 108 insertions, 0 deletions
diff --git a/sundry/spine_search_cgi/derivation.nix b/sundry/spine_search_cgi/derivation.nix new file mode 100644 index 0000000..5bde866 --- /dev/null +++ b/sundry/spine_search_cgi/derivation.nix @@ -0,0 +1,108 @@ +{ pkgs ? import <nixpkgs> {}, +  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/share/cgi-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/share/cgi-bin +        cp -r "${targetOf package}" $out/share/cgi-bin +        install -m755 -D $out/share/cgi-bin/spine_search spine_search +        runHook postInstall +      ''; +      postInstall = '' +        echo "HERE ${targetOf package} $out/share/cgi-bin" +        echo `ls -la $out/share/cgi-bin/spine_search` +      ''; +      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-search-${version}"; +  version = "0.11.3"; +  src = ./.; +  buildInputs = [ +    pkgs.sqlite ( +      with pkgs; [ +        nixFlakes +        rund +        dub +        ldc +        sqlite +      ] +    ) +  ]; +  meta = with pkgs.lib; { +    homepage    = https://sisudoc.org; +    description = "a sisu like document parser"; +    license     = licenses.agpl3Plus; +    platforms   = platforms.linux; +    maintainers = [ RalphAmissah ]; +  }; +}  | 
