diff options
Diffstat (limited to 'pkgs/development/haskell-modules')
-rw-r--r-- | pkgs/development/haskell-modules/generic-builder.nix | 12 | ||||
-rw-r--r-- | pkgs/development/haskell-modules/hoogle.nix | 5 | ||||
-rw-r--r-- | pkgs/development/haskell-modules/with-packages-wrapper.nix | 14 |
3 files changed, 24 insertions, 7 deletions
diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix index 87d3b5ae496c..018979cf7aed 100644 --- a/pkgs/development/haskell-modules/generic-builder.nix +++ b/pkgs/development/haskell-modules/generic-builder.nix @@ -40,7 +40,7 @@ in # They must be propagated to the environment of any executable linking with the library , libraryFrameworkDepends ? [], executableFrameworkDepends ? [] , homepage ? "https://hackage.haskell.org/package/${pname}" -, platforms ? with stdenv.lib.platforms; unix ++ windows # GHC can cross-compile +, platforms ? with stdenv.lib.platforms; all # GHC can cross-compile , hydraPlatforms ? null , hyperlinkSource ? true , isExecutable ? false, isLibrary ? !isExecutable @@ -131,9 +131,13 @@ let ''; crossCabalFlags = [ - "--with-ghc=${ghc.targetPrefix}ghc" + "--with-ghc=${ghcCommand}" "--with-ghc-pkg=${ghc.targetPrefix}ghc-pkg" - "--with-gcc=${stdenv.cc.targetPrefix}cc" + # Pass the "wrong" C compiler rather than none at all so packages that just + # use the C preproccessor still work, see + # https://github.com/haskell/cabal/issues/6466 for details. + "--with-gcc=${(if stdenv.hasCC then stdenv else buildPackages.stdenv).cc.targetPrefix}cc" + ] ++ optionals stdenv.hasCC [ "--with-ld=${stdenv.cc.bintools.targetPrefix}ld" "--with-ar=${stdenv.cc.bintools.targetPrefix}ar" # use the one that comes with the cross compiler. @@ -156,7 +160,9 @@ let "--libsubdir=\\$abi/\\$libname" (optionalString enableSeparateDataOutput "--datadir=$data/share/${ghc.name}") (optionalString enableSeparateDocOutput "--docdir=${docdir "$doc"}") + ] ++ optionals stdenv.hasCC [ "--with-gcc=$CC" # Clang won't work without that extra information. + ] ++ [ "--package-db=$packageConfDir" (optionalString (enableSharedExecutables && stdenv.isLinux) "--ghc-option=-optl=-Wl,-rpath=$out/lib/${ghc.name}/${pname}-${version}") (optionalString (enableSharedExecutables && stdenv.isDarwin) "--ghc-option=-optl=-Wl,-headerpad_max_install_names") diff --git a/pkgs/development/haskell-modules/hoogle.nix b/pkgs/development/haskell-modules/hoogle.nix index 0bb930a8bb3a..0f620d46cccd 100644 --- a/pkgs/development/haskell-modules/hoogle.nix +++ b/pkgs/development/haskell-modules/hoogle.nix @@ -23,7 +23,8 @@ # This will build mmorph and monadControl, and have the hoogle installation # refer to their documentation via symlink so they are not garbage collected. -{ lib, stdenv, hoogle, writeText, ghc +{ lib, stdenv, buildPackages +, hoogle, writeText, ghc , packages }: @@ -53,7 +54,7 @@ let (map (lib.getOutput "doc") packages); in -stdenv.mkDerivation { +buildPackages.stdenv.mkDerivation { name = "hoogle-local-0.1"; buildInputs = [ghc hoogle]; diff --git a/pkgs/development/haskell-modules/with-packages-wrapper.nix b/pkgs/development/haskell-modules/with-packages-wrapper.nix index 49beed8549db..404fd0d94408 100644 --- a/pkgs/development/haskell-modules/with-packages-wrapper.nix +++ b/pkgs/development/haskell-modules/with-packages-wrapper.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, ghc, llvmPackages, packages, symlinkJoin, makeWrapper +{ lib, stdenv, ghc, llvmPackages, packages, buildEnv, makeWrapper , withLLVM ? false , postBuild ? "" , ghcLibdir ? null # only used by ghcjs, when resolving plugins @@ -51,15 +51,25 @@ let ++ lib.optional stdenv.targetPlatform.isDarwin llvmPackages.clang); in if paths == [] && !withLLVM then ghc else -symlinkJoin { +buildEnv { # this makes computing paths from the name attribute impossible; # if such a feature is needed, the real compiler name should be saved # as a dedicated drv attribute, like `compiler-name` name = ghc.name + "-with-packages"; paths = paths ++ [ghc]; + extraOutputsToInstall = ["doc"]; postBuild = '' . ${makeWrapper}/nix-support/setup-hook + # We make changes to ghc binaries in $out/bin. buildEnv gives a + # symlink if only one of the paths has the subdirectory. If so, + # we need to remove it for our new wrappers. + + if [ -L "$out/bin" ]; then + rm -f "$out/bin" + mkdir -p "$out/bin" + fi + # wrap compiler executables with correct env variables for prg in ${ghcCommand} ${ghcCommand}i ${ghcCommand}-${ghc.version} ${ghcCommand}i-${ghc.version}; do |