depot/third_party/nixpkgs/pkgs/tools/package-management/akku/akkuDerivation.nix
Default email f34ce41345 Project import generated by Copybara.
GitOrigin-RevId: b73c2221a46c13557b1b3be9c2070cc42cf01eb3
2024-07-27 08:49:29 +02:00

98 lines
2.6 KiB
Nix

{ 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
# build, filter out guile warnings
akku install 2>&1 | grep -v "\(guile-user\)" - | cat
# 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" ])