about summary refs log tree commit diff
path: root/pkgs/development/haskell-modules/generic-builder.nix
diff options
context:
space:
mode:
authorMoritz Angermann <moritz.angermann@gmail.com>2018-03-01 13:35:48 +0800
committerJohn Ericson <John.Ericson@Obsidian.Systems>2018-05-23 10:27:41 -0400
commit38fbdcc7267d84aa224a8711038caa2b8ef8a418 (patch)
tree4e681cdc1fb7aec7564184fb04d2b801f682a8f6 /pkgs/development/haskell-modules/generic-builder.nix
parente1b9419dec7fa09a4d08482ed8156b4bba90bd51 (diff)
downloadnixlib-38fbdcc7267d84aa224a8711038caa2b8ef8a418.tar
nixlib-38fbdcc7267d84aa224a8711038caa2b8ef8a418.tar.gz
nixlib-38fbdcc7267d84aa224a8711038caa2b8ef8a418.tar.bz2
nixlib-38fbdcc7267d84aa224a8711038caa2b8ef8a418.tar.lz
nixlib-38fbdcc7267d84aa224a8711038caa2b8ef8a418.tar.xz
nixlib-38fbdcc7267d84aa224a8711038caa2b8ef8a418.tar.zst
nixlib-38fbdcc7267d84aa224a8711038caa2b8ef8a418.zip
haskell generic builder: Use setup package database for setup-depends
Adapted from https://github.com/obsidiansystems/nixpkgs/commit/b69f420121120433220c568e4b35ade539ef60f2 by @Ericson2314
Diffstat (limited to 'pkgs/development/haskell-modules/generic-builder.nix')
-rw-r--r--pkgs/development/haskell-modules/generic-builder.nix54
1 files changed, 39 insertions, 15 deletions
diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix
index 0a668fd38ca7..b0cf228f8c76 100644
--- a/pkgs/development/haskell-modules/generic-builder.nix
+++ b/pkgs/development/haskell-modules/generic-builder.nix
@@ -194,6 +194,22 @@ let
 
   nativeGhcCommand = "${nativeGhc.targetPrefix}ghc";
 
+  buildPkgDb = ghcName: ''
+    if [ -d "$p/lib/${ghcName}/package.conf.d" ]; then
+      cp -f "$p/lib/${ghcName}/package.conf.d/"*.conf $packageConfDir/
+      continue
+    fi
+    if [ -d "$p/include" ]; then
+      configureFlags+=" --extra-include-dirs=$p/include"
+    fi
+    if [ -d "$p/lib" ]; then
+      configureFlags+=" --extra-lib-dirs=$p/lib"
+    fi
+    if [[ -d "$p/Library/Frameworks" ]]; then
+      configureFlags+=" --extra-framework-dirs=$p/Library/Frameworks"
+    fi
+  '';
+
 in
 
 assert allPkgconfigDepends != [] -> pkgconfig != null;
@@ -234,27 +250,31 @@ stdenv.mkDerivation ({
     echo "Build with ${ghc}."
     ${optionalString (hasActiveLibrary && hyperlinkSource) "export PATH=${hscolour}/bin:$PATH"}
 
+  '' + (optionalString (setupHaskellDepends != []) ''
+    setupPackageConfDir="$TMPDIR/setup-package.conf.d"
+    mkdir -p $setupPackageConfDir
+  '') + ''
     packageConfDir="$TMPDIR/package.conf.d"
     mkdir -p $packageConfDir
 
     setupCompileFlags="${concatStringsSep " " setupCompileFlags}"
     configureFlags="${concatStringsSep " " defaultConfigureFlags} $configureFlags"
+  ''
+  # We build the Setup.hs on the *build* machine, and as such should only add
+  # dependencies for the build machine.
+  #
+  # pkgs* arrays defined in stdenv/setup.hs
+  + (optionalString (setupHaskellDepends != []) ''
+    for p in "''${pkgsBuildBuild[@]}" "''${pkgsBuildHost[@]}" "''${pkgsBuildTarget[@]}"; do
+      ${buildPkgDb nativeGhc.name}
+    done
+    ${nativeGhcCommand}-pkg --${nativePackageDbFlag}="$setupPackageConfDir" recache
+  '')
 
-    # host.*Pkgs defined in stdenv/setup.hs
+    # For normal components
+  + ''
     for p in "''${pkgsHostHost[@]}" "''${pkgsHostTarget[@]}"; do
-      if [ -d "$p/lib/${ghc.name}/package.conf.d" ]; then
-        cp -f "$p/lib/${ghc.name}/package.conf.d/"*.conf $packageConfDir/
-        continue
-      fi
-      if [ -d "$p/include" ]; then
-        configureFlags+=" --extra-include-dirs=$p/include"
-      fi
-      if [ -d "$p/lib" ]; then
-        configureFlags+=" --extra-lib-dirs=$p/lib"
-      fi
-      if [[ -d "$p/Library/Frameworks" ]]; then
-        configureFlags+=" --extra-framework-dirs=$p/Library/Frameworks"
-      fi
+      ${buildPkgDb ghc.name}
     done
   ''
   # only use the links hack if we're actually building dylibs. otherwise, the
@@ -289,7 +309,11 @@ stdenv.mkDerivation ({
     done
 
     echo setupCompileFlags: $setupCompileFlags
-    ${nativeGhcCommand} $setupCompileFlags --make -o Setup -odir $TMPDIR -hidir $TMPDIR $i
+    ${optionalString (setupHaskellDepends != [])
+       ''
+       echo GHC_PACKAGE_PATH="$setupPackageConfDir:"
+       GHC_PACKAGE_PATH="$setupPackageConfDir:" ''
+    }${nativeGhcCommand} $setupCompileFlags --make -o Setup -odir $TMPDIR -hidir $TMPDIR $i
 
     runHook postCompileBuildDriver
   '';