Files
eljamm ea15d85621 termcap: fix build with gcc15
The ISO C23, which is the default in GCC 15, changes the meaning of an
empty argument list from an unspecified list to no arguments, thus
breaking the build.

This is fixed by switching the language standard to `gnu89` (dialect of
ISO C90).
2026-01-12 07:46:41 +01:00

81 lines
2.0 KiB
Nix

{
lib,
stdenv,
fetchurl,
fetchpatch,
autoreconfHook,
enableStatic ? stdenv.hostPlatform.isStatic,
enableShared ? !stdenv.hostPlatform.isStatic,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "termcap";
version = "1.3.1";
src = fetchurl {
url = "mirror://gnu/termcap/termcap-${finalAttrs.version}.tar.gz";
hash = "sha256-kaDiLlOHykRntbyxjt8cUbkwJi/UZtX9o5bdnSZxkQA=";
};
patches = [
(fetchpatch {
name = "0001-tparam-replace-write-with-fprintf.patch";
url = "https://github.com/msys2/MINGW-packages/raw/c6691ad1bd9d4c6823a18068ca0683c3e32ea005/mingw-w64-termcap/0001-tparam-replace-write-with-fprintf.patch";
hash = "sha256-R9XaLfa8fzQBt+M+uA1AFTvKYCeOWLUD/7GViazXwto=";
})
];
outputs = [
"out"
"dev"
];
enableParallelBuilding = true;
strictDeps = true;
nativeBuildInputs = [ autoreconfHook ];
makeFlags = [
"AR=${stdenv.cc.targetPrefix}ar"
];
env.NIX_CFLAGS_COMPILE = toString (
[
"-DSTDC_HEADERS"
"-std=gnu89"
]
++ lib.optionals stdenv.cc.isClang [
"-Wno-implicit-function-declaration"
]
);
# Library only statically links by default
postInstall =
lib.optionalString (!enableStatic) ''
rm $out/lib/libtermcap.a
''
+ lib.optionalString enableShared (
let
libName = "libtermcap${stdenv.hostPlatform.extensions.sharedLibrary}";
impLibName = "libtermcap.dll.a";
winImpLib = lib.optionalString stdenv.hostPlatform.isWindows "-Wl,--out-implib,${impLibName}";
in
''
${stdenv.cc.targetPrefix}cc -shared -o ${libName} termcap.o tparam.o version.o ${winImpLib}
install -Dm644 ${libName} $out/lib
''
+ lib.optionalString stdenv.hostPlatform.isWindows ''
install -Dm644 ${impLibName} $out/lib
''
);
meta = {
description = "Terminal feature database";
homepage = "https://www.gnu.org/software/termutils/";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ wegank ];
platforms = lib.platforms.all;
};
})