lol
at v192 77 lines 2.3 kB view raw
1{ stdenv, ghc, makeWrapper, coreutils, writeScript }: 2let 3 ghcjs = ghc; 4 packageDBFlag = "-package-db"; 5 6 GHCGetPackages = writeScript "ghc-get-packages.sh" '' 7 #! ${stdenv.shell} 8 # Usage: 9 # $1: version of GHC 10 # $2: invocation path of GHC 11 # $3: prefix 12 version="$1" 13 if test -z "$3"; then 14 prefix="${packageDBFlag} " 15 else 16 prefix="$3" 17 fi 18 PATH="$PATH:$2" 19 IFS=":" 20 for p in $PATH; do 21 for i in "$p/../share/ghcjs/$system-${ghcjs.version}-${ghcjs.ghc.version}"{,/lib,/ghcjs}"/package.conf.d" "$p/../lib/ghcjs-${ghc.version}_ghc-${ghc.ghc.version}/package.conf.d" ; do 22 # output takes place here 23 test -f $i/package.cache && echo -n " $prefix$i" 24 done 25 done 26 ''; 27 28 GHCPackages = writeScript "ghc-packages.sh" '' 29 #! ${stdenv.shell} -e 30 declare -A GHC_PACKAGES_HASH # using bash4 hashs to get uniq paths 31 32 for arg in $(${GHCGetPackages} ${ghcjs.version} "$(dirname $0)"); do # Why is ghc.version passed in from here instead of captured in the other script directly? 33 case "$arg" in 34 ${packageDBFlag}) ;; 35 *) 36 CANONICALIZED="$(${coreutils}/bin/readlink -f -- "$arg")" 37 GHC_PACKAGES_HASH["$CANONICALIZED"]= ;; 38 esac 39 done 40 41 for path in ''${!GHC_PACKAGES_HASH[@]}; do 42 echo -n "$path:" 43 done 44 ''; 45in 46stdenv.mkDerivation { 47 name = "ghcjs-ghc${ghcjs.ghc.version}-${ghcjs.version}-wrapper"; 48 49 buildInputs = [makeWrapper]; 50 propagatedBuildInputs = [ghcjs]; 51 52 unpackPhase = "true"; 53 installPhase = '' 54 runHook preInstall 55 56 mkdir -p $out/bin 57 for prg in ghcjs ; do 58 makeWrapper $ghc/bin/$prg $out/bin/$prg --add-flags "\$(${GHCGetPackages} ${ghcjs.version} \"\$(dirname \$0)\")" 59 done 60 for prg in ghcjs-pkg ; do 61 makeWrapper $ghc/bin/$prg $out/bin/$prg --add-flags "\$(${GHCGetPackages} ${ghcjs.version} \"\$(dirname \$0)\" -${packageDBFlag}=)" 62 done 63 64 mkdir -p $out/nix-support 65 ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages 66 67 mkdir -p $out/share/doc 68 ln -s $ghc/lib $out/lib 69 ln -s $ghc/share/doc/ghc $out/share/doc/ghc-${ghcjs.version} 70 71 runHook postInstall 72 ''; 73 74 ghc = ghcjs; 75 inherit GHCGetPackages GHCPackages; 76 inherit (ghcjs) meta version; 77}