on iko/ghcjs-patch-master help sign in
Build without GHC environment files, instead using wrappers

Lets development shells work.

commitae3ef84a8ed76424f6e9797d4a7d64fbb55882ee authorRodney Lorrimar <rodney.lorrimar@iohk.io> dateMon 4 Mar 2019, 06:38 (8 years ago) parentc4c9c01
2 files changed+35−29
builder/comp-builder.nix+1−2 builder/with-package-wrapper.nix+34−27
builder/comp-builder.nix+1−2
@@ -221,7 +221,6 @@ stdenv.mkDerivation ({
221221 };
222222
223223 CABAL_CONFIG = configFiles + /cabal.config;
224− GHC_ENVIRONMENT = configFiles + /ghc-environment;
225224 LANG = "en_US.UTF-8"; # GHC needs the locale configured during the Haddock phase.
226225 LC_ALL = "en_US.UTF-8";
227226
@@ -232,7 +231,7 @@ stdenv.mkDerivation ({
232231 ++ component.pkgconfig;
233232
234233 nativeBuildInputs =
235− [ghc buildPackages.removeReferencesTo]
234+ [shellWrappers buildPackages.removeReferencesTo]
236235 ++ lib.optional (component.pkgconfig != []) pkgconfig
237236 ++ executableToolDepends;
238237
builder/with-package-wrapper.nix+34−27
@@ -10,15 +10,15 @@
1010}:
1111
1212let
13− isGhcjs = ghc.isGhcjs or false;
13+ isGhcjs = ghc.isGhcjs or false;
1414 ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
15− ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
16− ghcCommandCaps= lib.toUpper ghcCommand';
17− libDir = "$out/lib/${ghcCommand}-${ghc.version}";
18− docDir = "$out/share/doc/ghc/html";
19− packageCfgDir = "${libDir}/package.conf.d";
15+ ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
16+ ghcCommandCaps = lib.toUpper ghcCommand';
17+ libDir = "$out/lib/${ghcCommand}-${ghc.version}";
18+ docDir = "$out/share/doc/ghc/html";
19+ packageCfgDir = "${libDir}/package.conf.d";
2020
21−in runCommand "${ghc.name}-with-${package.identifier.name}" {
21+in runCommand "${ghc.name}-for-${package.identifier.name}" {
2222 preferLocalBuild = true;
2323 passthru = {
2424 inherit (ghc) version meta;
@@ -32,49 +32,56 @@ in runCommand "${ghc.name}-with-${package.identifier.name}" {
3232 # Start with a ghc...
3333 mkdir -p $out/bin
3434 ${lndir}/bin/lndir -silent ${ghc} $out
35−
36− # ...and replace package database with the one from target package config.
37− rm -rf ${libDir}
38− mkdir -p ${libDir}
39− # ... yet retain the lib/.../bin directory. This contains `unlit' and friends.
40− ${lndir}/bin/lndir -silent ${ghc}/lib/${ghcCommand}-${ghc.version}/bin ${libDir}
41−
35+ # ... remove all of the package directories
36+ rm -rf ${libDir}/*/
37+ # ... but retain the lib/ghc/bin directory. This contains `unlit' and friends.
38+ ln -s ${ghc}/lib/${ghcCommand}-${ghc.version}/bin ${libDir}
39+ # Replace the package database with the one from target package config.
4240 ln -s ${configFiles}/package.conf.d ${packageCfgDir}
4341
4442 # Wrap compiler executables with correct env variables.
4543 # The NIX_ variables are used by the patched Paths_ghc module.
46− # The GHC_ENVIRONMENT variable forces ghc to use the build
47− # dependencies of the component.
4844
49− for prg in ${ghcCommand} ${ghcCommand}i ${ghcCommand}-${ghc.version} ${ghcCommand}i-${ghc.version} runghc runhaskell; do
45+ for prg in ${ghcCommand} ${ghcCommand}i ${ghcCommand}-${ghc.version} ${ghcCommand}i-${ghc.version}; do
5046 if [[ -x "${ghc}/bin/$prg" ]]; then
5147 rm -f $out/bin/$prg
5248 makeWrapper ${ghc}/bin/$prg $out/bin/$prg \
49+ --add-flags '"-B$NIX_${ghcCommandCaps}_LIBDIR"' \
5350 --set "NIX_${ghcCommandCaps}" "$out/bin/${ghcCommand}" \
5451 --set "NIX_${ghcCommandCaps}PKG" "$out/bin/${ghcCommand}-pkg" \
5552 --set "NIX_${ghcCommandCaps}_DOCDIR" "${docDir}" \
56− --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}" \
57− --set "${ghcCommandCaps}_ENVIRONMENT" "${configFiles}/ghc-environment"
53+ --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}"
5854 fi
5955 done
6056
61− # Point ghc-pkg to the package database of the component using the
62− # GHC_PACKAGE_PATH variable.
63−
64− for prg in ${ghcCommand}-pkg ${ghcCommand}-pkg-${ghc.version}; do
57+ for prg in runghc runhaskell; do
6558 if [[ -x "${ghc}/bin/$prg" ]]; then
6659 rm -f $out/bin/$prg
67− makeWrapper ${ghc}/bin/$prg $out/bin/$prg \
68− --set "${ghcCommandCaps}_PACKAGE_PATH" "${configFiles}/package.conf.d"
60+ makeWrapper ${ghc}/bin/$prg $out/bin/$prg \
61+ --add-flags "-f $out/bin/${ghcCommand}" \
62+ --set "NIX_${ghcCommandCaps}" "$out/bin/${ghcCommand}" \
63+ --set "NIX_${ghcCommandCaps}PKG" "$out/bin/${ghcCommand}-pkg" \
64+ --set "NIX_${ghcCommandCaps}_DOCDIR" "${docDir}" \
65+ --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}"
6966 fi
7067 done
7168
72− # fixme: check if this is needed
73− # haddock was referring to the base ghc, https://github.com/NixOS/nixpkgs/issues/36976
69+ # Wrap haddock, if the base GHC provides it.
7470 if [[ -x "${ghc}/bin/haddock" ]]; then
7571 rm -f $out/bin/haddock
7672 makeWrapper ${ghc}/bin/haddock $out/bin/haddock \
73+ --add-flags '"-B$NIX_${ghcCommandCaps}_LIBDIR"' \
7774 --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}"
7875 fi
76+
77+ # Point ghc-pkg to the package database of the component using the
78+ # --global-package-db flag.
79+
80+ for prg in ${ghcCommand}-pkg ${ghcCommand}-pkg-${ghc.version}; do
81+ if [[ -x "${ghc}/bin/$prg" ]]; then
82+ rm -f $out/bin/$prg
83+ makeWrapper ${ghc}/bin/$prg $out/bin/$prg --add-flags "--global-package-db=${packageCfgDir}"
84+ fi
85+ done
7986 ''
8087)