2022-09-13 18:33:18 +02:00
|
|
|
{ depot, pkgs, lib, ... }:
|
|
|
|
|
|
|
|
let
|
|
|
|
# Trivial test program that outputs argv[0] and exits
|
|
|
|
prog =
|
|
|
|
depot.nix.buildLisp.program {
|
|
|
|
name = "argv0-test";
|
|
|
|
|
|
|
|
srcs = [
|
|
|
|
(pkgs.writeText "argv0-test.lisp" ''
|
|
|
|
(defpackage :argv0-test (:use :common-lisp :uiop) (:export :main))
|
|
|
|
(in-package :argv0-test)
|
|
|
|
|
|
|
|
(defun main ()
|
|
|
|
(format t "~A~%" (uiop:argv0)))
|
|
|
|
'')
|
|
|
|
];
|
|
|
|
|
|
|
|
deps = [
|
|
|
|
{
|
|
|
|
sbcl = depot.nix.buildLisp.bundled "uiop";
|
|
|
|
default = depot.nix.buildLisp.bundled "asdf";
|
|
|
|
}
|
|
|
|
];
|
2022-01-29 13:59:24 +01:00
|
|
|
};
|
2022-09-13 18:33:18 +02:00
|
|
|
|
|
|
|
# Extract verify argv[0] output for given buildLisp program
|
|
|
|
checkImplementation = prog:
|
|
|
|
pkgs.runCommand "check-argv0" { } ''
|
|
|
|
set -eux
|
|
|
|
|
|
|
|
checkInvocation() {
|
|
|
|
invocation="$1"
|
|
|
|
test "$invocation" = "$("$invocation")"
|
|
|
|
}
|
|
|
|
|
|
|
|
checkInvocation "${prog}/bin/argv0-test"
|
|
|
|
|
|
|
|
cd ${prog}
|
|
|
|
checkInvocation "./bin/argv0-test"
|
|
|
|
|
|
|
|
cd bin
|
|
|
|
checkInvocation ./argv0-test
|
|
|
|
|
|
|
|
set +x
|
|
|
|
|
|
|
|
touch "$out"
|
|
|
|
'';
|
|
|
|
|
|
|
|
inherit (prog.meta.ci) targets;
|
|
|
|
in
|
|
|
|
|
|
|
|
(checkImplementation prog).overrideAttrs (_: {
|
|
|
|
# Wire up a subtarget all (active) non-default implementations
|
|
|
|
passthru = lib.genAttrs targets (name: checkImplementation prog.${name});
|
|
|
|
|
|
|
|
meta.ci = { inherit targets; };
|
|
|
|
})
|