haskellPackages.shellFor: Clean and fixup
- Now correctly sets NIX_GHC* env vars
This commit is contained in:
parent
7c5c3fceff
commit
56da05d459
@ -259,20 +259,46 @@ in package-set { inherit pkgs stdenv callPackage; } self // {
|
|||||||
shellFor = { packages, withHoogle ? false, ... } @ args:
|
shellFor = { packages, withHoogle ? false, ... } @ args:
|
||||||
let
|
let
|
||||||
selected = packages self;
|
selected = packages self;
|
||||||
packageInputs = builtins.map getBuildInputs selected;
|
|
||||||
haskellInputs =
|
packageInputs = map getBuildInputs selected;
|
||||||
builtins.filter
|
|
||||||
(input: pkgs.lib.all (p: input.outPath != p.outPath) selected)
|
name = if pkgs.lib.length selected == 1
|
||||||
(pkgs.lib.concatMap (p: p.haskellBuildInputs) packageInputs);
|
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;
|
systemInputs = pkgs.lib.concatMap (p: p.systemBuildInputs) packageInputs;
|
||||||
|
|
||||||
withPackages = if withHoogle then self.ghcWithHoogle else self.ghcWithPackages;
|
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"];
|
mkDrvArgs = builtins.removeAttrs args ["packages" "withHoogle"];
|
||||||
in pkgs.stdenv.mkDerivation (mkDrvArgs // {
|
in pkgs.stdenv.mkDerivation (mkDrvArgs // {
|
||||||
name = "ghc-shell-for-packages";
|
name = mkDrvArgs.name or name;
|
||||||
nativeBuildInputs = [(withPackages (_: haskellInputs))] ++ mkDrvArgs.nativeBuildInputs or [];
|
|
||||||
buildInputs = systemInputs ++ mkDrvArgs.buildInputs or [];
|
buildInputs = systemInputs ++ mkDrvArgs.buildInputs or [];
|
||||||
|
nativeBuildInputs = [ ghcEnv ] ++ nativeBuildInputs ++ mkDrvArgs.nativeBuildInputs or [];
|
||||||
phases = ["installPhase"];
|
phases = ["installPhase"];
|
||||||
installPhase = "echo $nativeBuildInputs $buildInputs > $out";
|
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 // {
|
ghc = ghc // {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user