diff options
Diffstat (limited to 'nixpkgs/pkgs/development/haskell-modules/generic-builder.nix')
-rw-r--r-- | nixpkgs/pkgs/development/haskell-modules/generic-builder.nix | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/nixpkgs/pkgs/development/haskell-modules/generic-builder.nix b/nixpkgs/pkgs/development/haskell-modules/generic-builder.nix index faf80da0c7d9..a9c8f11223f7 100644 --- a/nixpkgs/pkgs/development/haskell-modules/generic-builder.nix +++ b/nixpkgs/pkgs/development/haskell-modules/generic-builder.nix @@ -72,7 +72,7 @@ in , shellHook ? "" , coreSetup ? false # Use only core packages to build Setup.hs. , useCpphs ? false -, hardeningDisable ? lib.optional (ghc.isHaLVM or false) "all" +, hardeningDisable ? null , enableSeparateBinOutput ? false , enableSeparateDataOutput ? false , enableSeparateDocOutput ? doHaddock @@ -417,6 +417,17 @@ stdenv.mkDerivation ({ configurePlatforms = []; inherit configureFlags; + # Note: the options here must be always added, regardless of whether the + # package specifies `hardeningDisable`. + hardeningDisable = lib.optionals (args ? hardeningDisable) hardeningDisable + ++ lib.optional (ghc.isHaLVM or false) "all" + # Static libraries (ie. all of pkgsStatic.haskellPackages) fail to build + # because by default Nix adds `-pie` to the linker flags: this + # conflicts with the `-r` and `-no-pie` flags added by GHC (see + # https://gitlab.haskell.org/ghc/ghc/-/issues/19580). hardeningDisable + # changes the default Nix behavior regarding adding "hardening" flags. + ++ lib.optional enableStaticLibraries "pie"; + configurePhase = '' runHook preConfigure @@ -464,7 +475,12 @@ stdenv.mkDerivation ({ installPhase = '' runHook preInstall - ${if !isLibrary then "${setupCommand} install" else '' + ${if !isLibrary && buildTarget == "" then "${setupCommand} install" + # ^^ if the project is not a library, and no build target is specified, we can just use "install". + else if !isLibrary then "${setupCommand} copy ${buildTarget}" + # ^^ if the project is not a library, and we have a build target, then use "copy" to install + # just the target specified; "install" will error here, since not all targets have been built. + else '' ${setupCommand} copy local packageConfDir="$out/lib/${ghc.name}/package.conf.d" local packageConfFile="$packageConfDir/${pname}-${version}.conf" @@ -669,7 +685,6 @@ stdenv.mkDerivation ({ // optionalAttrs (args ? preFixup) { inherit preFixup; } // optionalAttrs (args ? postFixup) { inherit postFixup; } // optionalAttrs (args ? dontStrip) { inherit dontStrip; } -// optionalAttrs (args ? hardeningDisable) { inherit hardeningDisable; } // optionalAttrs (stdenv.buildPlatform.libc == "glibc"){ LOCALE_ARCHIVE = "${glibcLocales}/lib/locale/locale-archive"; } ) ) |