f34ce41345
GitOrigin-RevId: b73c2221a46c13557b1b3be9c2070cc42cf01eb3
98 lines
2.6 KiB
Nix
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" ])
|