nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at 20.03 116 lines 5.6 kB view raw
1args @ {stdenv, clwrapper, baseName, packageName ? baseName 2 , parasites ? [] 3 , buildSystems ? ([packageName] ++ parasites) 4 , version ? "latest" 5 , src, description, deps, buildInputs ? [], meta ? {}, overrides?(x: {}) 6 , propagatedBuildInputs ? [] 7 , asdFilesToKeep ? [(builtins.concatStringsSep "" [packageName ".asd"])]}: 8let 9 deployConfigScript = '' 10 outhash="$out" 11 outhash="''${outhash##*/}" 12 outhash="''${outhash%%-*}" 13 config_script="$out"/lib/common-lisp-settings/${args.baseName}-shell-config.sh 14 path_config_script="$out"/lib/common-lisp-settings/${args.baseName}-path-config.sh 15 store_translation="$(dirname "$out"):$(dirname "$out")" 16 mkdir -p "$(dirname "$config_script")" 17 touch "$config_script" 18 touch "$path_config_script" 19 chmod a+x "$config_script" 20 chmod a+x "$path_config_script" 21 echo "if test -z \"\''${_''${outhash}_NIX_LISP_CONFIG:-}\"; then export _''${outhash}_NIX_LISP_CONFIG=1; " >> "$config_script" 22 echo "export NIX_CFLAGS_COMPILE='$NIX_CFLAGS_COMPILE'\"\''${NIX_CFLAGS_COMPILE:+ \$NIX_CFLAGS_COMPILE}\"" >> "$config_script" 23 echo "export NIX_LDFLAGS='$NIX_LDFLAGS'\"\''${NIX_LDFLAGS:+ \$NIX_LDFLAGS}\"" >> "$config_script" 24 echo "export NIX_LISP_COMMAND='$NIX_LISP_COMMAND'" >> "$config_script" 25 echo "export NIX_LISP_ASDF='$NIX_LISP_ASDF'" >> "$config_script" 26 set | grep NIX_CC_WRAPPER_ | sed -e 's@^NIX_CC_WRAPPER@export &@' >> "$config_script" 27 echo "export PATH=\"\''${PATH:+\$PATH:}$PATH\"" >> "$config_script" 28 echo "echo \"\$ASDF_OUTPUT_TRANSLATIONS\" | grep -E '(^|:)$store_translation(:|\$)' >/dev/null || export ASDF_OUTPUT_TRANSLATIONS=\"\''${ASDF_OUTPUT_TRANSLATIONS:+\$ASDF_OUTPUT_TRANSLATIONS:}\"'$store_translation'" >> "$config_script" 29 echo "source '$path_config_script'" >> "$config_script" 30 echo "fi" >> "$config_script" 31 echo "if test -z \"\''${_''${outhash}_NIX_LISP_PATH_CONFIG:-}\"; then export _''${outhash}_NIX_LISP_PATH_CONFIG=1; " >> "$path_config_script" 32 echo "export NIX_LISP_ASDF_PATHS=\"$( ( echo "\''${NIX_LISP_ASDF_PATHS:-}"; echo "$NIX_LISP_ASDF_PATHS"; echo "$out/lib/common-lisp/${args.baseName}" ) | grep . | sort | uniq)\"" >> "$path_config_script" 33 test -n "$LD_LIBRARY_PATH" && 34 echo "export LD_LIBRARY_PATH=\"\$LD_LIBRARY_PATH\''${LD_LIBRARY_PATH:+:}\"'$LD_LIBRARY_PATH'" >> "$path_config_script" 35 test -n "$NIX_LISP_LD_LIBRARY_PATH" && 36 echo "export NIX_LISP_LD_LIBRARY_PATH=\"\''${NIX_LISP_LD_LIBRARY_PATH:-}\''${NIX_LISP_LD_LIBRARY_PATH:+:}\"'$(echo "$NIX_LISP_LD_LIBRARY_PATH" | tr -d '\n' | tr : '\n' | sort | uniq | tr '\n' ':' | sed -e 's/:$//')'" >> "$path_config_script" 37 echo "fi" >> "$path_config_script" 38 ''; 39 deployLaunchScript = '' 40 launch_script="$out"/bin/${args.baseName}-lisp-launcher.sh 41 mkdir -p "$(dirname "$launch_script")" 42 touch "$launch_script" 43 chmod a+x "$launch_script" 44 echo "#! ${stdenv.shell}" >> "$launch_script" 45 echo "source '$config_script'" >> "$launch_script" 46 echo "test -n \"\$NIX_LISP_LD_LIBRARY_PATH\" export LD_LIBRARY_PATH=\"\$NIX_LISP_LD_LIBRARY_PATH\''${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH\"" >> "$launch_script" 47 echo '"${clwrapper}/bin/common-lisp.sh" "$@"' >> "$launch_script" 48 ''; 49 moveAsdFiles = '' 50 find $out/lib/common-lisp/ -name '*.asd' | while read ASD_FILE; do 51 KEEP_THIS_ASD=0 52 for ALLOWED_ASD in $asdFilesToKeep; do 53 ALLOWED_ASD="/$ALLOWED_ASD" 54 ALLOWED_ASD_LENGTH=${"$"}{#ALLOWED_ASD} 55 ASD_FILE_LENGTH=${"$"}{#ASD_FILE} 56 ASD_FILE_SUFFIX_INDEX=$(expr "$ASD_FILE_LENGTH" - "$ALLOWED_ASD_LENGTH") 57 ASD_FILE_SUFFIX_INDEX=$(expr "$ASD_FILE_SUFFIX_INDEX" + 1) 58 echo $ALLOWED_ASD $ASD_FILE $ASD_FILE_SUFFIX_INDEX $(expr substr "$ASD_FILE" "$ASD_FILE_SUFFIX_INDEX" "$ASD_FILE_LENGTH") 59 if [ "$(expr substr "$ASD_FILE" "$ASD_FILE_SUFFIX_INDEX" "$ASD_FILE_LENGTH")" == "$ALLOWED_ASD" ]; then 60 KEEP_THIS_ASD=1 61 break 62 fi 63 done 64 if [ "$KEEP_THIS_ASD" == 0 ]; then 65 mv "$ASD_FILE"{,.sibling} 66 fi 67 done 68 ''; 69basePackage = { 70 name = "lisp-${baseName}-${version}"; 71 inherit src; 72 73 dontBuild = true; 74 75 inherit deployConfigScript deployLaunchScript; 76 inherit asdFilesToKeep moveAsdFiles; 77 installPhase = '' 78 eval "$preInstall" 79 80 mkdir -p "$out"/share/doc/${args.baseName}; 81 mkdir -p "$out"/lib/common-lisp/${args.baseName}; 82 cp -r . "$out"/lib/common-lisp/${args.baseName}; 83 cp -rf doc/* LICENCE LICENSE COPYING README README.html README.md readme.html "$out"/share/doc/${args.baseName} || true 84 85 ${deployConfigScript} 86 ${deployLaunchScript} 87 ${moveAsdFiles} 88 89 env -i \ 90 NIX_LISP="$NIX_LISP" \ 91 NIX_LISP_PRELAUNCH_HOOK='nix_lisp_run_single_form "(progn 92 ${stdenv.lib.concatMapStrings (system: '' 93 (asdf:compile-system :${system}) 94 (asdf:load-system :${system}) 95 (asdf:operate (quote asdf::compile-bundle-op) :${system}) 96 (ignore-errors (asdf:operate (quote asdf::deploy-asd-op) :${system})) 97'') buildSystems} 98 )"' \ 99 "$out/bin/${args.baseName}-lisp-launcher.sh" 100 101 eval "$postInstall" 102 ''; 103 propagatedBuildInputs = (args.deps or []) ++ [clwrapper clwrapper.lisp clwrapper.asdf] 104 ++ (args.propagatedBuildInputs or []); 105 buildInputs = buildInputs; 106 dontStrip=true; 107 108 ASDF_OUTPUT_TRANSLATIONS="${builtins.storeDir}/:${builtins.storeDir}"; 109 110 meta = { 111 inherit description version; 112 } // meta; 113}; 114package = basePackage // (overrides basePackage); 115in 116stdenv.mkDerivation package