ncurses: Modernize build

This commit is contained in:
William A. Kennington III 2015-04-30 18:04:37 -07:00
parent c06df0b064
commit ee78173b21
3 changed files with 86 additions and 81 deletions

View File

@ -1,14 +1,25 @@
{ lib, stdenv, fetchurl, unicode ? true }:
{ stdenv, fetchurl
# Optional Dependencies
, gpm ? null
# Extra Options
, unicode ? true
}:
let
/* C++ bindings fail to build on `i386-pc-solaris2.11' with GCC 3.4.3:
<http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6395191>.
It seems that it could be worked around by #including <wchar.h> in the
right place, according to
<http://mail.python.org/pipermail/python-bugs-list/2006-September/035362.html>,
but this is left as an exercise to the reader.
So disable them for now. */
cxx = !stdenv.isSunOS;
mkFlag = trueStr: falseStr: cond: name: val:
if cond == null then null else
"--${if cond != false then trueStr else falseStr}${name}${if val != null && cond != false then "=${val}" else ""}";
mkEnable = mkFlag "enable-" "disable-";
mkWith = mkFlag "with-" "without-";
mkOther = mkFlag "" "" true;
shouldUsePkg = pkg: if pkg != null && stdenv.lib.any (x: x == stdenv.system) pkg.meta.platforms then pkg else null;
buildShared = !stdenv.isDarwin;
optGpm = shouldUsePkg gpm;
in
stdenv.mkDerivation rec {
name = "ncurses-5.9";
@ -18,12 +29,33 @@ stdenv.mkDerivation rec {
sha256 = "0fsn7xis81za62afan0vvm38bvgzg5wfmv1m86flqcj0nj7jjilh";
};
patches = [ ./patch-ac ./clang.patch ];
patches = [ ./clang.patch ];
configureFlags = ''
--with-shared --without-debug --enable-pc-files --enable-symlinks
${if unicode then "--enable-widec" else ""}${if cxx then "" else "--without-cxx-binding"}
'';
buildInputs = [ gpm ];
configureFlags = [
(mkWith true "cxx" null)
(mkWith true "cxx-binding" null)
(mkWith false "ada" null)
(mkWith true "manpages" null)
(mkWith true "progs" null)
(mkWith doCheck "tests" null)
(mkWith true "curses-h" null)
(mkEnable true "pc-files" null)
(mkWith buildShared "shared" null)
(mkWith true "normal" null)
(mkWith false "debug" null)
(mkWith false "termlib" null)
(mkWith false "ticlib" null)
(mkWith optGpm "gpm" null)
(mkEnable true "overwrite" null)
(mkEnable true "database" null)
(mkWith true "xterm-new" null)
(mkEnable true "symlinks" null)
(mkEnable unicode "widec" null)
(mkEnable true "ext-colors" null)
(mkEnable true "ext-mouse" null)
];
# PKG_CONFIG_LIBDIR is where the *.pc files will be installed. If this
# directory doesn't exist, the configure script will disable installation of
@ -32,7 +64,6 @@ stdenv.mkDerivation rec {
# the place we want to put *.pc files from other packages anyway. So we must
# tell it explicitly where to install with PKG_CONFIG_LIBDIR.
preConfigure = ''
export configureFlags="$configureFlags --includedir=$out/include"
export PKG_CONFIG_LIBDIR="$out/lib/pkgconfig"
mkdir -p "$PKG_CONFIG_LIBDIR"
'';
@ -41,33 +72,48 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true;
preBuild =
# On Darwin, we end up using the native `sed' during bootstrap, and it
# fails to run this command, which isn't needed anyway.
lib.optionalString (!stdenv.isDarwin)
''sed -e "s@\([[:space:]]\)sh @\1''${SHELL} @" -i */Makefile Makefile'';
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).
postInstall = if unicode then ''
${if cxx then "chmod 644 $out/lib/libncurses++w.a" else ""}
for lib in curses ncurses form panel menu; do
if test -e $out/lib/lib''${lib}w.a; then
rm -f $out/lib/lib$lib.so
echo "INPUT(-l''${lib}w)" > $out/lib/lib$lib.so
ln -svf lib''${lib}w.a $out/lib/lib$lib.a
ln -svf lib''${lib}w.so.5 $out/lib/lib$lib.so.5
ln -svf ''${lib}w.pc $out/lib/pkgconfig/$lib.pc
fi
done;
# Create a non-abi versioned config
cfg=$(basename $out/bin/ncurses*-config)
ln -svf $cfg $out/bin/ncursesw-config
ln -svf $cfg $out/bin/ncurses-config
# Allow for end users who #include <ncurses?w/*.h>
ln -svf . $out/include/ncursesw
ln -svf ncursesw5-config $out/bin/ncurses5-config
'' else "";
ln -svf . $out/include/ncurses
postFixup = lib.optionalString stdenv.isDarwin "rm $out/lib/*.so";
# Create non-unicode compatability
libs="$(find $out/lib -name \*w.a | sed 's,.*lib\(.*\)w.a.*,\1,g')"
for lib in $libs; do
if [ -e "$out/lib/lib''${lib}w.so" ]; then
echo "INPUT(-l''${lib}w)" > $out/lib/lib$lib.so
fi
ln -svf lib''${lib}w.a $out/lib/lib$lib.a
ln -svf ''${lib}w.pc $out/lib/pkgconfig/$lib.pc
done
meta = {
# Create curses compatability
echo "INPUT(-lncursesw)" > $out/lib/libcursesw.so
echo "INPUT(-lncursesw)" > $out/lib/libcurses.so
ln -svf libncurses
'' else ''
# Create a non-abi versioned config
cfg=$(basename $out/bin/ncurses*-config)
ln -svf $cfg $out/bin/ncurses-config
# Allow for end users who #include <ncurses/*.h>
ln -svf . $out/include/ncurses
# Create curses compatability
echo "INPUT(-lncurses)" > $out/lib/libcurses.so
'';
meta = with stdenv.lib; {
description = "Free software emulation of curses in SVR4 and more";
longDescription = ''
@ -86,9 +132,10 @@ stdenv.mkDerivation rec {
homepage = http://www.gnu.org/software/ncurses/;
license = lib.licenses.mit;
maintainers = [ ];
platforms = lib.platforms.all;
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ wkennington ];
};
passthru.ldflags = if unicode then "-lncursesw" else "-lncurses";
}

View File

@ -1,40 +0,0 @@
$NetBSD: patch-ac,v 1.18 2011/11/01 14:47:46 hans Exp $
--- ncurses-5.9/configure.orig 2011-02-21 01:40:36.000000000 +0000
+++ ncurses-5.9/configure
@@ -7096,6 +7096,13 @@ sco*) #(vi
# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
;;
solaris2.1[0-9]) #(vi
+ case "$GCC_VERSION" in
+ 4.[67].*)
+ cf_XOPEN_SOURCE=600
+ cf_add_cflags=-std=c99
+ CPPFLAGS="$CPPFLAGS -std=c99"
+ ;;
+ esac
cf_xopen_source="-D__EXTENSIONS__ -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
;;
solaris2.[1-9]) #(vi
@@ -9640,12 +9647,7 @@ case ".$MANPAGE_RENAMES" in #(vi
.no) #(vi
;;
.|.yes)
- # Debian 'man' program?
- if test -f /etc/debian_version ; then
- MANPAGE_RENAMES=`cd $srcdir && pwd`/man/man_db.renames
- else
MANPAGE_RENAMES=no
- fi
;;
esac
@@ -18449,7 +18444,7 @@ echo "${ECHO_T}$LIB_SUBSETS" >&6
### Construct the list of include-directories to be generated
-CPPFLAGS="$CPPFLAGS -I. -I../include"
+CPPFLAGS="-I. -I../include $CPPFLAGS"
if test "$srcdir" != "."; then
CPPFLAGS="$CPPFLAGS -I\${srcdir}/../include"
fi

View File

@ -7222,9 +7222,7 @@ let
nanomsg = callPackage ../development/libraries/nanomsg { };
ncurses = callPackage ../development/libraries/ncurses {
unicode = system != "i686-cygwin";
};
ncurses = callPackage ../development/libraries/ncurses { };
neon = callPackage ../development/libraries/neon {
compressionSupport = true;