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 Haskell dependencies, but will still link dynamically against libc, GMP and
other system library dependencies. 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 `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 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: 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 # This is used by `haskell.lib.justStaticExecutables` to help prevent static
# Haskell binaries from having erroneous dependencies on GHC. # Haskell binaries from having erroneous dependencies on GHC.
# #
# Generated `Paths_*` modules include paths for the runtime library # See https://nixos.org/manual/nixpkgs/unstable/#haskell-packaging-helpers
# directory (and similar) of the package being built. If the `Paths_*` # or its source doc/languages-frameworks/haskell.section.md
# 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
, disallowGhcReference ? false , disallowGhcReference ? false
, # Cabal 3.8 which is shipped by default for GHC >= 9.3 always calls , # 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 # `pkg-config --libs --static` as part of the configure step. This requires