doc/haskell: Dedup and edit justStaticExecutables

Make sure all relevant info is in the user manual and avoid duplication
of efforts, or things going out of sync.
This commit is contained in:
Robert Hensing 2024-06-12 12:44:07 +02:00 committed by sternenseemann
parent 1ed7eb0f9a
commit 299bd6aa7c
2 changed files with 6 additions and 16 deletions

View File

@ -929,10 +929,12 @@ for this to work.
Haskell dependencies, but will still link dynamically against libc, GMP and
other system library dependencies.
If the library being built or its dependencies use their Cabal-generated
If a library or its dependencies use their Cabal-generated
`Paths_*` module, this may not work as well if GHC's dead code elimination is
unable to remove the references to the dependency's store path that module
contains. (See [nixpkgs#164630][164630] for more information.)
contains.
As a consequence, an unused reference may be created from the static binary to such a _library_ store path.
(See [nixpkgs#164630][164630] for more information.)
Importing the `Paths_*` module may cause builds to fail with this message:

View File

@ -117,20 +117,8 @@ in
# This is used by `haskell.lib.justStaticExecutables` to help prevent static
# Haskell binaries from having erroneous dependencies on GHC.
#
# Generated `Paths_*` modules include paths for the runtime library
# directory (and similar) of the package being built. If the `Paths_*`
# module is imported, this creates a dependency from the static binary
# being built to the _library_ being built (which is dynamically linked
# and depends on the GHC used to build it).
#
# To avoid this:
# 1. Build the impacted derivation.
# 2. Run `strings` on the built binary of the impacted derivation to
# locate the store paths it depends on.
# 3. Add `remove-references-to -t ${bad-store-path-in-binary}` to the
# impacted derivation's `postInstall`.
#
# See: https://github.com/NixOS/nixpkgs/issues/164630
# See https://nixos.org/manual/nixpkgs/unstable/#haskell-packaging-helpers
# or its source doc/languages-frameworks/haskell.section.md
, disallowGhcReference ? false
, # Cabal 3.8 which is shipped by default for GHC >= 9.3 always calls
# `pkg-config --libs --static` as part of the configure step. This requires