lol

pkgs/development/compilers/ghc/with-packages.nix: simply this wrapper on top of buildenv

+23 -107
+23 -107
pkgs/development/compilers/ghc/with-packages.nix
··· 1 - {stdenv, ghc, packages ? [], makeWrapper}: 2 - 3 - stdenv.mkDerivation rec { 4 - name = "haskell-env-${ghc.name}"; 5 - 6 - allPackages = stdenv.lib.closePropagation packages; 7 - buildInputs = allPackages ++ [makeWrapper]; 8 - propagatedBuildInputs = packages; 9 - 10 - unpackPhase = "true"; 11 - 12 - installPhase = '' 13 - numversion=$(${ghc}/bin/ghc --numeric-version) 14 - majorversion=''${numversion%%.*} 15 - minorversion=''${numversion#*.} 16 - minorversion=''${minorversion%%.*} 17 - 18 - if [[ $majorversion -gt 6 ]] && [[ $minorversion -gt 4 ]]; then 19 - globalConf="--global-package-db" 20 - else 21 - globalConf="--global-conf" 22 - fi 23 - 24 - originalTopDir="${ghc}/lib/ghc-${ghc.version}" 25 - originalPkgDir="$originalTopDir/package.conf.d" 26 - linkedTopDir="$out/lib" 27 - linkedPkgDir="$linkedTopDir/package.conf.d" 28 - 29 - mkdir -p $out/bin 30 - mkdir -p $linkedTopDir 31 - mkdir -p $linkedPkgDir 32 - 33 - echo "Linking GHC core libraries:" 34 - 35 - echo -n "Linking $originalTopDir " 36 - for f in "$originalTopDir/"*; do 37 - if test -f $f; then 38 - ln -s $f $linkedTopDir 39 - echo -n . 40 - fi 41 - done 42 - echo 43 - 44 - echo -n "Linking $originalPkgDir " 45 - for f in "$originalPkgDir/"*.conf; do 46 - ln -s $f $linkedPkgDir 47 - echo -n . 48 - done 49 - echo 50 - 51 - echo "Linking selected packages and dependencies:" 52 - 53 - for currentPath in ${stdenv.lib.concatStringsSep " " allPackages}; do 54 - currentPkgDir="$currentPath/lib/ghc-${ghc.version}/package.conf.d/" 55 - # Check if current path is a Cabal package for the current GHC 56 - if test -d $currentPkgDir; then 57 - echo -n "Linking $currentPath " 58 - for f in "$currentPath/bin/"*; do 59 - ln -s $f $out/bin 60 - echo -n . 61 - done 62 - for f in "$currentPath/etc/bash_completion.d/"*; do 63 - mkdir -p $out/etc/bash_completion.d 64 - ln -s $f $out/etc/bash_completion.d/ 65 - echo -n . 66 - done 67 - for s in 1 2 3 4 5 6 7 8 9; do 68 - for f in "$currentPath/share/man/man$s/"*; do 69 - mkdir -p $out/share/man/man$s 70 - ln -sv $f $out/share/man/man$s/ 71 - echo -n . 72 - done 73 - done 74 - for f in "$currentPath/share/emacs/site-lisp/"*; do 75 - mkdir -p $out/share/emacs/site-lisp 76 - ln -s $f $out/share/emacs/site-lisp/ 77 - echo -n . 78 - done 79 - for f in "$currentPkgDir/"*.conf; do 80 - ln -s $f $linkedPkgDir 81 - echo -n . 82 - done 83 - echo 84 - fi 85 - done 1 + { stdenv, ghc, packages, buildEnv, makeWrapper }: 86 2 87 - echo -n "Generating package cache " 88 - ${ghc}/bin/ghc-pkg $globalConf $linkedPkgDir recache 89 - echo . 3 + assert packages != []; 90 4 91 - echo -n "Generating wrappers " 5 + let 6 + ghc761OrLater = stdenv.lib.versionOlder "7.6.1" ghc.version; 7 + packageDBFlag = if ghc761OrLater then "--package-db" else "--package-conf"; 8 + libDir = "$out/lib/ghc-${ghc.version}"; 9 + packageCfgDir = "${libDir}/package.conf.d"; 10 + in 11 + buildEnv { 12 + name = "haskell-env-${ghc.name}"; 13 + paths = stdenv.lib.closePropagation (packages ++ [ghc]); 14 + postBuild = '' 15 + . ${makeWrapper}/nix-support/setup-hook 92 16 93 17 for prg in ghc ghci ghc-${ghc.version} ghci-${ghc.version}; do 94 - # The NIX env-vars are picked up by our patched version of ghc-paths. 95 - makeWrapper ${ghc}/bin/$prg $out/bin/$prg \ 96 - --add-flags "-B$linkedTopDir" \ 97 - --set "NIX_GHC" "$out/bin/ghc" \ 98 - --set "NIX_GHCPKG" "$out/bin/ghc-pkg" \ 99 - --set "NIX_GHC_LIBDIR" "$linkedTopDir" 100 - echo -n . 18 + rm -f $out/bin/$prg 19 + makeWrapper ${ghc}/bin/$prg $out/bin/$prg \ 20 + --add-flags '"-B$NIX_GHC_LIBDIR"' \ 21 + --set "NIX_GHC" "$out/bin/ghc" \ 22 + --set "NIX_GHCPKG" "$out/bin/ghc-pkg" \ 23 + --set "NIX_GHC_LIBDIR" "${libDir}" 101 24 done 102 25 103 26 for prg in runghc runhaskell; do 27 + rm -f $out/bin/$prg 104 28 makeWrapper ${ghc}/bin/$prg $out/bin/$prg --add-flags "-f $out/bin/ghc" 105 - echo -n . 106 29 done 107 30 108 31 for prg in ghc-pkg ghc-pkg-${ghc.version}; do 109 - makeWrapper ${ghc}/bin/$prg $out/bin/$prg --add-flags "$globalConf $linkedPkgDir" 110 - echo -n . 32 + rm -f $out/bin/$prg 33 + makeWrapper ${ghc}/bin/$prg $out/bin/$prg --add-flags "${packageDBFlag} ${packageCfgDir}" 111 34 done 112 35 113 - for prg in hp2ps hpc hasktags hsc2hs haddock haddock-${ghc.version}; do 114 - if test -x ${ghc}/bin/$prg -a ! -x $out/bin/$prg; then 115 - ln -s ${ghc}/bin/$prg $out/bin/$prg && echo -n . 116 - fi 117 - done 118 - echo 36 + $out/bin/ghc-pkg recache 119 37 ''; 120 - 121 - meta = ghc.meta; 122 38 }