about summary refs log tree commit diff
path: root/pkgs/development/lisp-modules/define-package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/lisp-modules/define-package.nix')
-rw-r--r--pkgs/development/lisp-modules/define-package.nix53
1 files changed, 40 insertions, 13 deletions
diff --git a/pkgs/development/lisp-modules/define-package.nix b/pkgs/development/lisp-modules/define-package.nix
index 2af5530aa5c1..1a155b3e9339 100644
--- a/pkgs/development/lisp-modules/define-package.nix
+++ b/pkgs/development/lisp-modules/define-package.nix
@@ -1,7 +1,10 @@
-args @ {stdenv, clwrapper, baseName, packageName ? baseName, testSystems ? [packageName]
+args @ {stdenv, clwrapper, baseName, packageName ? baseName
+  , parasites ? []
+  , buildSystems ? ([packageName] ++ parasites)
   , version ? "latest"
   , src, description, deps, buildInputs ? [], meta ? {}, overrides?(x: {})
-  , propagatedBuildInputs ? []}:
+  , propagatedBuildInputs ? []
+  , asdFilesToKeep ? [(builtins.concatStringsSep "" [packageName ".asd"])]}:
 let
   deployConfigScript = ''
     outhash="$out"
@@ -43,11 +46,34 @@ let
     echo "export LD_LIBRARY_PATH=\"\$NIX_LISP_LD_LIBRARY_PATH\''${NIX_LISP_LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"" >> "$launch_script"
     echo '"${clwrapper}/bin/common-lisp.sh" "$@"' >> "$launch_script"
   '';
+  moveAsdFiles = ''
+    find $out/lib/common-lisp/ -name '*.asd' | while read ASD_FILE; do
+      KEEP_THIS_ASD=0
+      for ALLOWED_ASD in $asdFilesToKeep; do
+        ALLOWED_ASD="/$ALLOWED_ASD"
+        ALLOWED_ASD_LENGTH=${"$"}{#ALLOWED_ASD}
+        ASD_FILE_LENGTH=${"$"}{#ASD_FILE}
+        ASD_FILE_SUFFIX_INDEX=$(expr "$ASD_FILE_LENGTH" - "$ALLOWED_ASD_LENGTH")
+        ASD_FILE_SUFFIX_INDEX=$(expr "$ASD_FILE_SUFFIX_INDEX" + 1)
+        echo $ALLOWED_ASD $ASD_FILE $ASD_FILE_SUFFIX_INDEX $(expr substr "$ASD_FILE" "$ASD_FILE_SUFFIX_INDEX" "$ASD_FILE_LENGTH")
+        if [ "$(expr substr "$ASD_FILE" "$ASD_FILE_SUFFIX_INDEX" "$ASD_FILE_LENGTH")" == "$ALLOWED_ASD" ]; then
+          KEEP_THIS_ASD=1
+          break
+        fi
+      done
+      if [ "$KEEP_THIS_ASD" == 0 ]; then
+        mv "$ASD_FILE"{,.sibling}
+      fi
+    done
+  '';
 basePackage = {
   name = "lisp-${baseName}-${version}";
   inherit src;
 
+  dontBuild = true;
+
   inherit deployConfigScript deployLaunchScript;
+  inherit asdFilesToKeep moveAsdFiles;
   installPhase = ''
     eval "$preInstall"
 
@@ -58,18 +84,19 @@ basePackage = {
 
     ${deployConfigScript}
     ${deployLaunchScript}
+    ${moveAsdFiles}
 
-    ${stdenv.lib.concatMapStrings (testSystem: ''
-       env -i \
-       NIX_LISP="$NIX_LISP" \
-       NIX_LISP_PRELAUNCH_HOOK='nix_lisp_run_single_form "(progn
-             (asdf:compile-system :${testSystem})
-             (asdf:load-system :${testSystem})
-             (asdf:operate (quote asdf::compile-bundle-op) :${testSystem})
-             (ignore-errors (asdf:operate (quote asdf::deploy-asd-op) :${testSystem}))
-             )"' \
-          "$out/bin/${args.baseName}-lisp-launcher.sh"
-    '') testSystems}
+    env -i \
+    NIX_LISP="$NIX_LISP" \
+    NIX_LISP_PRELAUNCH_HOOK='nix_lisp_run_single_form "(progn
+          ${stdenv.lib.concatMapStrings (system: ''
+            (asdf:compile-system :${system})
+            (asdf:load-system :${system})
+            (asdf:operate (quote asdf::compile-bundle-op) :${system})
+            (ignore-errors (asdf:operate (quote asdf::deploy-asd-op) :${system}))
+'') buildSystems}
+          )"' \
+       "$out/bin/${args.baseName}-lisp-launcher.sh"
 
     eval "$postInstall"
   '';