diff options
Diffstat (limited to 'pkgs/tools/package-management/akku/akkuDerivation.nix')
-rw-r--r-- | pkgs/tools/package-management/akku/akkuDerivation.nix | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/pkgs/tools/package-management/akku/akkuDerivation.nix b/pkgs/tools/package-management/akku/akkuDerivation.nix new file mode 100644 index 0000000000000..5b4609c3abaa6 --- /dev/null +++ b/pkgs/tools/package-management/akku/akkuDerivation.nix @@ -0,0 +1,97 @@ +{ stdenv, akku, chez, guile, chibi, makeWrapper, lib, writeShellScriptBin }: +{ pname, version, src, buildInputs ? [ ], r7rs ? false, nativeBuildInputs ? [ ], ... } @ args: +let + parse-akku_ = writeShellScriptBin "parse-akku" + "${guile}/bin/guile --no-auto-compile ${./parse-akku.scm} \"$@\""; + parse-akku = "${parse-akku_}/bin/parse-akku"; +in +stdenv.mkDerivation ({ + inherit version src; + + pname = "akku-${pname}"; + propagatedBuildInputs = buildInputs; + buildInputs = [ ]; + nativeBuildInputs = [ makeWrapper akku chez chibi ] ++ nativeBuildInputs; + buildPhase = '' + runHook preBuild + + # only install the project + rm -f Akku.lock Akku.manifest + + akku install + + # make sure akku metadata is present during testing and onwards + echo $PWD $CHEZSCHEMELIBDIRS \ + | sed "s/:/ /g" \ + | xargs find \ + | grep "metadata.sls" \ + | xargs ${parse-akku} merge ${pname} ${version} > temp___ + mv temp___ .akku/lib/akku/metadata.sls + + runHook postBuild + ''; + checkPhase = '' + IS_R7RS=false + runHook preCheck + + + propagated_chez=$CHEZSCHEMELIBDIRS + propagated_chibi=$CHIBI_MODULE_PATH + + export CHEZSCHEMELIBDIRS="$PWD/.akku/lib:$CHEZSCHEMELIBDIRS" + export CHIBI_MODULE_PATH="$PWD/.akku/lib:$CHIBI_MODULE_PATH" + + # Run all test .sps files if they exist + # and run tests for libs mirrored from snow-fort. + for path in $(find test* -type f | grep -e "\.sps") \ + $(find . | grep "run-test" | grep "\.scm"); do + echo Running test: $path + [[ "\n$SKIP\n" =~ $(basename $path) ]] && continue + if [ -x $path ]; then + patchShebangs $path + ./$path + elif ${lib.trivial.boolToString r7rs}; then + chibi-scheme $path + else + scheme-script $path + fi + done + + runHook postCheck + + export CHEZSCHEMELIBDIRS=$propagated_chez + export CHIBI_MODULE_PATH=$propagated_chibi + ''; + doCheck = true; + installPhase = '' + runHook preInstall + + mkdir -p $out/lib + + cd .akku + + rm -f bin/activate* + + cp -rL lib $out/lib/scheme-libs + cp -rL bin $out/bin + + [ -d ffi ] && cp -rL ffi $out/lib + [ -d libobj ] && cp -rL libobj $out/lib + + CHEZSCHEMELIBDIRS="$out/lib/scheme-libs:$CHEZSCHEMELIBDIRS" + + # add support for other schemes + for f in $out/bin/* + do + patchShebangs $f + wrapProgram $f \ + --prefix CHEZSCHEMELIBDIRS : $CHEZSCHEMELIBDIRS + done + + runHook postInstall + ''; + meta = { + inherit (akku.meta) platforms; + } // args.meta or { }; + setupHook = ./setup-hook.sh; +} // builtins.removeAttrs args [ "name" "buildInputs" "meta" "nativeBuildInputs" ]) |