diff options
author | Silvan Mosberger <infinisil@icloud.com> | 2018-09-17 23:18:43 +0200 |
---|---|---|
committer | Peter Simons <simons@cryp.to> | 2018-10-03 18:00:29 +0200 |
commit | 56da05d459de4605a53763a14be8387e65c5204b (patch) | |
tree | 4eda5143ba8575d700121ef489915588ed474b4d /pkgs | |
parent | 7c5c3fceff06ecadf21297d2b5cbed4e7e6168b4 (diff) | |
download | nixlib-56da05d459de4605a53763a14be8387e65c5204b.tar nixlib-56da05d459de4605a53763a14be8387e65c5204b.tar.gz nixlib-56da05d459de4605a53763a14be8387e65c5204b.tar.bz2 nixlib-56da05d459de4605a53763a14be8387e65c5204b.tar.lz nixlib-56da05d459de4605a53763a14be8387e65c5204b.tar.xz nixlib-56da05d459de4605a53763a14be8387e65c5204b.tar.zst nixlib-56da05d459de4605a53763a14be8387e65c5204b.zip |
haskellPackages.shellFor: Clean and fixup
- Now correctly sets NIX_GHC* env vars
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/development/haskell-modules/make-package-set.nix | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix index b6fe399058c3..bc794cf641d6 100644 --- a/pkgs/development/haskell-modules/make-package-set.nix +++ b/pkgs/development/haskell-modules/make-package-set.nix @@ -259,20 +259,46 @@ in package-set { inherit pkgs stdenv callPackage; } self // { shellFor = { packages, withHoogle ? false, ... } @ args: let selected = packages self; - packageInputs = builtins.map getBuildInputs selected; - haskellInputs = - builtins.filter - (input: pkgs.lib.all (p: input.outPath != p.outPath) selected) - (pkgs.lib.concatMap (p: p.haskellBuildInputs) packageInputs); + + packageInputs = map getBuildInputs selected; + + name = if pkgs.lib.length selected == 1 + then "ghc-shell-for-${(pkgs.lib.head selected).name}" + else "ghc-shell-for-packages"; + + # If `packages = [ a b ]` and `a` depends on `b`, don't build `b`, + # because cabal will end up ignoring that built version, assuming + # new-style commands. + haskellInputs = pkgs.lib.filter + (input: pkgs.lib.all (p: input.outPath != p.outPath) selected) + (pkgs.lib.concatMap (p: p.haskellBuildInputs) packageInputs); systemInputs = pkgs.lib.concatMap (p: p.systemBuildInputs) packageInputs; + withPackages = if withHoogle then self.ghcWithHoogle else self.ghcWithPackages; + ghcEnv = withPackages (p: haskellInputs); + nativeBuildInputs = pkgs.lib.concatMap (p: p.nativeBuildInputs) selected; + + ghcCommand' = if ghc.isGhcjs or false then "ghcjs" else "ghc"; + ghcCommand = "${ghc.targetPrefix}${ghcCommand'}"; + ghcCommandCaps= pkgs.lib.toUpper ghcCommand'; + mkDrvArgs = builtins.removeAttrs args ["packages" "withHoogle"]; in pkgs.stdenv.mkDerivation (mkDrvArgs // { - name = "ghc-shell-for-packages"; - nativeBuildInputs = [(withPackages (_: haskellInputs))] ++ mkDrvArgs.nativeBuildInputs or []; + name = mkDrvArgs.name or name; + buildInputs = systemInputs ++ mkDrvArgs.buildInputs or []; + nativeBuildInputs = [ ghcEnv ] ++ nativeBuildInputs ++ mkDrvArgs.nativeBuildInputs or []; phases = ["installPhase"]; installPhase = "echo $nativeBuildInputs $buildInputs > $out"; + LANG = "en_US.UTF-8"; + LOCALE_ARCHIVE = pkgs.lib.optionalString (stdenv.hostPlatform.libc == "glibc") "${buildPackages.glibcLocales}/lib/locale/locale-archive"; + "NIX_${ghcCommandCaps}" = "${ghcEnv}/bin/${ghcCommand}"; + "NIX_${ghcCommandCaps}PKG" = "${ghcEnv}/bin/${ghcCommand}-pkg"; + # TODO: is this still valid? + "NIX_${ghcCommandCaps}_DOCDIR" = "${ghcEnv}/share/doc/ghc/html"; + "NIX_${ghcCommandCaps}_LIBDIR" = if ghc.isHaLVM or false + then "${ghcEnv}/lib/HaLVM-${ghc.version}" + else "${ghcEnv}/lib/${ghcCommand}-${ghc.version}"; }); ghc = ghc // { |