diff options
Diffstat (limited to 'derivation.nix')
-rw-r--r-- | derivation.nix | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/derivation.nix b/derivation.nix new file mode 100644 index 0000000..b53e408 --- /dev/null +++ b/derivation.nix @@ -0,0 +1,120 @@ +{ 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)) { + name = package.name; # use name from dub.json, unless pname and version are specified + })); + } +); +mkDubDerivation rec { + name = "spine-search-${version}"; + version = "0.12.0"; + src = ./.; + buildInputs = [ + pkgs.sqlite ( + with pkgs; [ + nixVersions.unstable #nixFlakes + ## package manager + dub + ## compiler + ldc + rund + ## linker + #lld + #mold + ## builder + #ninja + sqlite + ] + ) + ]; + meta = with pkgs.lib; { + pname = "spine-search"; + version = "0.12.0"; + homepage = "https://sisudoc.org"; + description = "cgi sqlite search form for document object search"; + longDescription = '' + A sisu like parser and document generator + ... + ''; + license = licenses.agpl3Plus; + platforms = platforms.linux; + maintainers = [ "RalphAmissah" ]; + }; +} |