diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix index 3a3928f561800a..85a2d0f665e4c2 100644 --- a/pkgs/development/haskell-modules/configuration-common.nix +++ b/pkgs/development/haskell-modules/configuration-common.nix @@ -728,7 +728,7 @@ self: super: { }; in overrideCabal super.servant (old: { postInstall = old.postInstall or "" + '' - ln -s ${docs} $out/share/doc/servant + ln -s ${docs} $doc/share/doc/servant ''; }); diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix index 8675d40fd23b47..36e391183fad9f 100644 --- a/pkgs/development/haskell-modules/generic-builder.nix +++ b/pkgs/development/haskell-modules/generic-builder.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, ghc, pkgconfig, glibcLocales, coreutils, gnugrep, gnused -, jailbreak-cabal, hscolour, cpphs, nodejs, lib +, jailbreak-cabal, hscolour, cpphs, nodejs, lib, removeReferencesTo }: let isCross = (ghc.cross or null) != null; in { pname @@ -53,6 +53,8 @@ , coreSetup ? false # Use only core packages to build Setup.hs. , useCpphs ? false , hardeningDisable ? lib.optional (ghc.isHaLVM or false) "all" +, enableSeparateDataOutput ? false +, enableSeparateDocOutput ? doHaddock } @ args: assert editedCabalFile != null -> revision != null; @@ -108,6 +110,8 @@ let defaultConfigureFlags = [ "--verbose" "--prefix=$out" "--libdir=\\$prefix/lib/\\$compiler" "--libsubdir=\\$pkgid" + (optionalString enableSeparateDataOutput "--datadir=$data/share/${ghc.name}") + (optionalString enableSeparateDocOutput "--docdir=$doc/share/doc") "--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}") @@ -144,7 +148,7 @@ let allPkgconfigDepends = pkgconfigDepends ++ libraryPkgconfigDepends ++ executablePkgconfigDepends ++ optionals doCheck testPkgconfigDepends ++ optionals withBenchmarkDepends benchmarkPkgconfigDepends; - nativeBuildInputs = buildTools ++ libraryToolDepends ++ executableToolDepends; + nativeBuildInputs = buildTools ++ libraryToolDepends ++ executableToolDepends ++ [ removeReferencesTo ]; propagatedBuildInputs = buildDepends ++ libraryHaskellDepends ++ executableHaskellDepends; otherBuildInputs = setupHaskellDepends ++ extraLibraries ++ librarySystemDepends ++ executableSystemDepends ++ optionals (allPkgconfigDepends != []) ([pkgconfig] ++ allPkgconfigDepends) ++ @@ -173,6 +177,9 @@ assert allPkgconfigDepends != [] -> pkgconfig != null; stdenv.mkDerivation ({ name = "${pname}-${version}"; + outputs = if (args ? outputs) then args.outputs else ([ "out" ] ++ (optional enableSeparateDataOutput "data") ++ (optional enableSeparateDocOutput "doc")); + setOutputFlags = false; + pos = builtins.unsafeGetAttrPos "pname" args; prePhases = ["setupCompilerEnvironmentPhase"]; @@ -323,6 +330,14 @@ stdenv.mkDerivation ({ done ''} + ${optionalString enableSeparateDocOutput '' + for x in $doc/share/doc/html/src/*.html; do + remove-references-to -t $out $x + done + mkdir -p $doc + ''} + ${optionalString enableSeparateDataOutput "mkdir -p $data"} + runHook postInstall ''; diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix index 30d82d3efc933e..81cf298e0e6169 100644 --- a/pkgs/development/haskell-modules/lib.nix +++ b/pkgs/development/haskell-modules/lib.nix @@ -111,4 +111,6 @@ rec { overrideSrc = drv: { src, version ? drv.version }: overrideCabal drv (_: { inherit src version; editedCabalFile = null; }); + hasNoDataOutput = drv: overrideCabal drv (drv: { hasDataDir = false; }); + hasNoDocOutput = drv: overrideCabal drv (drv: { hasDocDir = false; }); }