about summary refs log tree commit diff
path: root/nix/buildLisp/tests/argv0.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix/buildLisp/tests/argv0.nix')
-rw-r--r--nix/buildLisp/tests/argv0.nix92
1 files changed, 57 insertions, 35 deletions
diff --git a/nix/buildLisp/tests/argv0.nix b/nix/buildLisp/tests/argv0.nix
index bc29337d06cd..ca5f2b9741e6 100644
--- a/nix/buildLisp/tests/argv0.nix
+++ b/nix/buildLisp/tests/argv0.nix
@@ -1,36 +1,58 @@
-{ depot, pkgs, ... }:
-
-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";
-    }
-  ];
-
-  passthru.meta.ci = {
-    extraSteps.verify = {
-      label = "verify argv[0] output";
-      needsOutput = true;
-      command = pkgs.writeShellScript "check-argv0" ''
-        set -eux
-
-        for invocation in "$(pwd)/result/bin/argv0-test" "./result/bin/argv0-test"; do
-          test "$invocation" = "$("$invocation")"
-        done
-      '';
+{ 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";
+        }
+      ];
     };
-  };
-}
+
+  # 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; };
+})