From f8ec07e836dfd224c41216cbd82a8cfc3de50b8a Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 13 Jun 2018 13:44:16 -0400 Subject: [PATCH 1/2] haskell generic-builder: Always use separate pkg db for custom setup This decreases complexity and ensures setup dependencies are properly specified with `setup-depends` as they should be. Testing will say if this is a reasonable change. --- .../haskell-modules/generic-builder.nix | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix index 1cc38586458..7f3ddc48103 100644 --- a/pkgs/development/haskell-modules/generic-builder.nix +++ b/pkgs/development/haskell-modules/generic-builder.nix @@ -166,14 +166,8 @@ let "--configure-option=--host=${hostPlatform.config}" ] ++ crossCabalFlags); - useSeparateSetupDb = setupHaskellDepends != [] || isCross || isGhcjs; - setupCompileFlags = [ - (optionalString (!coreSetup) "-${nativePackageDbFlag}=${ - if useSeparateSetupDb - then "$setupPackageConfDir" - else "$packageConfDir" - }") + (optionalString (!coreSetup) "-${nativePackageDbFlag}=$setupPackageConfDir") (optionalString (isGhcjs || isHaLVM || versionOlder "7.8" ghc.version) "-j$NIX_BUILD_CORES") # https://github.com/haskell/cabal/issues/2398 (optionalString (versionOlder "7.10" ghc.version && !isHaLVM) "-threaded") @@ -270,10 +264,8 @@ stdenv.mkDerivation ({ echo "Build with ${ghc}." ${optionalString (hasActiveLibrary && hyperlinkSource) "export PATH=${hscolour}/bin:$PATH"} - '' + (optionalString useSeparateSetupDb '' setupPackageConfDir="$TMPDIR/setup-package.conf.d" mkdir -p $setupPackageConfDir - '') + '' packageConfDir="$TMPDIR/package.conf.d" mkdir -p $packageConfDir @@ -284,14 +276,13 @@ stdenv.mkDerivation ({ # dependencies for the build machine. # # pkgs* arrays defined in stdenv/setup.hs - + (optionalString useSeparateSetupDb '' + + '' for p in "''${pkgsBuildBuild[@]}" "''${pkgsBuildHost[@]}" "''${pkgsBuildTarget[@]}"; do ${buildPkgDb nativeGhc.name "$setupPackageConfDir"} done ${nativeGhcCommand}-pkg --${nativePackageDbFlag}="$setupPackageConfDir" recache - '') - - # For normal components + '' + # For normal components + '' for p in "''${pkgsHostHost[@]}" "''${pkgsHostTarget[@]}"; do ${buildPkgDb ghc.name "$packageConfDir"} From 6d5751bfa564a365add8a3d7d7d070541a9e33fc Mon Sep 17 00:00:00 2001 From: Kirill Elagin Date: Fri, 27 Apr 2018 20:14:15 +0300 Subject: [PATCH 2/2] haskell: Add setup depends for Cabal --- .../haskell-modules/configuration-common.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix index a9db4a8ce72..c420c19d075 100644 --- a/pkgs/development/haskell-modules/configuration-common.nix +++ b/pkgs/development/haskell-modules/configuration-common.nix @@ -1068,3 +1068,14 @@ self: super: { in { inherit amazonka amazonka-core amazonka-test; }) + +// + +# The actual Cabal library gets built while building its `Setup.hs`. +(let + inherit (pkgs.lib) filterAttrs flip mapAttrs hasPrefix; + cabals = filterAttrs (n: v: hasPrefix "Cabal_" n) super; + fixCabal = n: v: addSetupDepends v [ self.mtl self.parsec ]; +in + mapAttrs fixCabal cabals +)