ncurses: make static binaries not depend on Nix store paths

One of the most popular features of static binaries is portability
across distros. However, static binaries built against the ncurses
package are currently not portable. This is because the current ncurses
package configures dependant packages to use the ncurses store path as
their terminfo search path. This unfortunately makes static binaries
built against ncurses not portable across NixOS systems too, as it
introduces a dependency on a specific build of ncurses.

To fix this problem, this change adds common paths from FHS systems and
the NixOS system profile path to the default terminfo search path.
This commit is contained in:
midchildan 2022-05-13 22:47:16 +09:00
parent d89d7af1ba
commit 8fa427ef9f
No known key found for this signature in database
GPG key ID: A64DE57FA5963935

View file

@ -43,7 +43,17 @@ stdenv.mkDerivation rec {
++ lib.optionals stdenv.hostPlatform.isWindows [
"--enable-sp-funcs"
"--enable-term-driver"
];
] ++ lib.optionals (stdenv.hostPlatform.isUnix && stdenv.hostPlatform.isStatic) [
# For static binaries, the point is to have a standalone binary with
# minimum dependencies. So here we make sure that binaries using this
# package won't depend on a terminfo database located in the Nix store.
"--with-terminfo-dirs=${lib.concatStringsSep ":" [
"/etc/terminfo" # Debian, Fedora, Gentoo
"/lib/terminfo" # Debian
"/usr/share/terminfo" # upstream default, probably all FHS-based distros
"/run/current-system/sw/share/terminfo" # NixOS
]}"
];
# Only the C compiler, and explicitly not C++ compiler needs this flag on solaris:
CFLAGS = lib.optionalString stdenv.isSunOS "-D_XOPEN_SOURCE_EXTENDED";