f485b2e71f
This includes fixes for CVE-2018-10754. While we're changing things, also set the `--with-manpage-format=normal` configure flag, which prevents the `configure` script from looking in /usr to determine whether to compress manpages. This was already the format on NixOS (where these directories don't exist), but making this explicit makes the build more reproducible on other distros.
174 lines
6.0 KiB
Nix
174 lines
6.0 KiB
Nix
{ lib, stdenv, fetchurl, pkgconfig
|
|
|
|
, abiVersion ? "6"
|
|
, mouseSupport ? false
|
|
, unicode ? true
|
|
, enableStatic ? stdenv.hostPlatform.useAndroidPrebuilt
|
|
, withCxx ? !stdenv.hostPlatform.useAndroidPrebuilt
|
|
|
|
, gpm
|
|
|
|
, buildPackages
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
version = "6.1-20181027";
|
|
name = "ncurses-${version}" + lib.optionalString (abiVersion == "5") "-abi5-compat";
|
|
|
|
src = fetchurl {
|
|
urls = [
|
|
"https://invisible-mirror.net/archives/ncurses/current/ncurses-${version}.tgz"
|
|
"ftp://ftp.invisible-island.net/ncurses/current/ncurses-${version}.tgz"
|
|
];
|
|
sha256 = "1xn6wpi22jc61158w4ifq6s1fvilhmsy1in2srn3plk8pm0d4902";
|
|
};
|
|
|
|
patches = lib.optional (!stdenv.cc.isClang) ./clang.patch;
|
|
|
|
outputs = [ "out" "dev" "man" ];
|
|
setOutputFlags = false; # some aren't supported
|
|
|
|
configureFlags = [
|
|
"--with-shared"
|
|
"--without-debug"
|
|
"--enable-pc-files"
|
|
"--enable-symlinks"
|
|
"--with-manpage-format=normal"
|
|
] ++ lib.optional unicode "--enable-widec"
|
|
++ lib.optional (!withCxx) "--without-cxx"
|
|
++ lib.optional (abiVersion == "5") "--with-abi-version=5"
|
|
++ lib.optionals stdenv.hostPlatform.isWindows [
|
|
"--enable-sp-funcs"
|
|
"--enable-term-driver"
|
|
];
|
|
|
|
# Only the C compiler, and explicitly not C++ compiler needs this flag on solaris:
|
|
CFLAGS = lib.optionalString stdenv.isSunOS "-D_XOPEN_SOURCE_EXTENDED";
|
|
|
|
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
|
nativeBuildInputs = [
|
|
pkgconfig
|
|
] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
|
buildPackages.ncurses
|
|
];
|
|
buildInputs = lib.optional (mouseSupport && stdenv.isLinux) gpm;
|
|
|
|
preConfigure = ''
|
|
export PKG_CONFIG_LIBDIR="$dev/lib/pkgconfig"
|
|
mkdir -p "$PKG_CONFIG_LIBDIR"
|
|
configureFlagsArray+=(
|
|
"--libdir=$out/lib"
|
|
"--includedir=$dev/include"
|
|
"--bindir=$dev/bin"
|
|
"--mandir=$man/share/man"
|
|
"--with-pkg-config-libdir=$PKG_CONFIG_LIBDIR"
|
|
)
|
|
''
|
|
+ lib.optionalString stdenv.isSunOS ''
|
|
sed -i -e '/-D__EXTENSIONS__/ s/-D_XOPEN_SOURCE=\$cf_XOPEN_SOURCE//' \
|
|
-e '/CPPFLAGS="$CPPFLAGS/s/ -D_XOPEN_SOURCE_EXTENDED//' \
|
|
configure
|
|
CFLAGS=-D_XOPEN_SOURCE_EXTENDED
|
|
'';
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
doCheck = false;
|
|
|
|
# When building a wide-character (Unicode) build, create backward
|
|
# compatibility links from the the "normal" libraries to the
|
|
# wide-character libraries (e.g. libncurses.so to libncursesw.so).
|
|
postFixup = let
|
|
abiVersion-extension = if stdenv.isDarwin then "${abiVersion}.$dylibtype" else "$dylibtype.${abiVersion}"; in
|
|
''
|
|
# Determine what suffixes our libraries have
|
|
suffix="$(awk -F': ' 'f{print $3; f=0} /default library suffix/{f=1}' config.log)"
|
|
libs="$(ls $dev/lib/pkgconfig | tr ' ' '\n' | sed "s,\(.*\)$suffix\.pc,\1,g")"
|
|
suffixes="$(echo "$suffix" | awk '{for (i=1; i < length($0); i++) {x=substr($0, i+1, length($0)-i); print x}}')"
|
|
|
|
# Get the path to the config util
|
|
cfg=$(basename $dev/bin/ncurses*-config)
|
|
|
|
# symlink the full suffixed include directory
|
|
ln -svf . $dev/include/ncurses$suffix
|
|
|
|
for newsuffix in $suffixes ""; do
|
|
# Create a non-abi versioned config util links
|
|
ln -svf $cfg $dev/bin/ncurses$newsuffix-config
|
|
|
|
# Allow for end users who #include <ncurses?w/*.h>
|
|
ln -svf . $dev/include/ncurses$newsuffix
|
|
|
|
for library in $libs; do
|
|
for dylibtype in so dll dylib; do
|
|
if [ -e "$out/lib/lib''${library}$suffix.$dylibtype" ]; then
|
|
ln -svf lib''${library}$suffix.$dylibtype $out/lib/lib$library$newsuffix.$dylibtype
|
|
ln -svf lib''${library}$suffix.${abiVersion-extension} $out/lib/lib$library$newsuffix.${abiVersion-extension}
|
|
if [ "ncurses" = "$library" ]
|
|
then
|
|
# make libtinfo symlinks
|
|
ln -svf lib''${library}$suffix.$dylibtype $out/lib/libtinfo$newsuffix.$dylibtype
|
|
ln -svf lib''${library}$suffix.${abiVersion-extension} $out/lib/libtinfo$newsuffix.${abiVersion-extension}
|
|
fi
|
|
fi
|
|
done
|
|
for statictype in a dll.a la; do
|
|
if [ -e "$out/lib/lib''${library}$suffix.$statictype" ]; then
|
|
ln -svf lib''${library}$suffix.$statictype $out/lib/lib$library$newsuffix.$statictype
|
|
if [ "ncurses" = "$library" ]
|
|
then
|
|
# make libtinfo symlinks
|
|
ln -svf lib''${library}$suffix.$statictype $out/lib/libtinfo$newsuffix.$statictype
|
|
fi
|
|
fi
|
|
done
|
|
ln -svf ''${library}$suffix.pc $dev/lib/pkgconfig/$library$newsuffix.pc
|
|
done
|
|
done
|
|
|
|
# move some utilities to $bin
|
|
# these programs are used at runtime and don't really belong in $dev
|
|
moveToOutput "bin/clear" "$out"
|
|
moveToOutput "bin/reset" "$out"
|
|
moveToOutput "bin/tabs" "$out"
|
|
moveToOutput "bin/tic" "$out"
|
|
moveToOutput "bin/tput" "$out"
|
|
moveToOutput "bin/tset" "$out"
|
|
moveToOutput "bin/captoinfo" "$out"
|
|
moveToOutput "bin/infotocap" "$out"
|
|
'';
|
|
|
|
preFixup = lib.optionalString (!stdenv.hostPlatform.isCygwin && !enableStatic) ''
|
|
rm "$out"/lib/*.a
|
|
'';
|
|
|
|
meta = {
|
|
description = "Free software emulation of curses in SVR4 and more";
|
|
|
|
longDescription = ''
|
|
The Ncurses (new curses) library is a free software emulation of
|
|
curses in System V Release 4.0, and more. It uses Terminfo
|
|
format, supports pads and color and multiple highlights and
|
|
forms characters and function-key mapping, and has all the other
|
|
SYSV-curses enhancements over BSD Curses.
|
|
|
|
The ncurses code was developed under GNU/Linux. It has been in
|
|
use for some time with OpenBSD as the system curses library, and
|
|
on FreeBSD and NetBSD as an external package. It should port
|
|
easily to any ANSI/POSIX-conforming UNIX. It has even been
|
|
ported to OS/2 Warp!
|
|
'';
|
|
|
|
homepage = http://www.gnu.org/software/ncurses/;
|
|
|
|
license = lib.licenses.mit;
|
|
platforms = lib.platforms.all;
|
|
maintainers = [ lib.maintainers.wkennington ];
|
|
};
|
|
|
|
passthru = {
|
|
ldflags = "-lncurses";
|
|
inherit unicode abiVersion;
|
|
};
|
|
}
|