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 let
/* C++ bindings fail to build on `i386-pc-solaris2.11' with GCC 3.4.3: mkFlag = trueStr: falseStr: cond: name: val:
<http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6395191>. if cond == null then null else
It seems that it could be worked around by #including <wchar.h> in the "--${if cond != false then trueStr else falseStr}${name}${if val != null && cond != false then "=${val}" else ""}";
right place, according to mkEnable = mkFlag "enable-" "disable-";
<http://mail.python.org/pipermail/python-bugs-list/2006-September/035362.html>, mkWith = mkFlag "with-" "without-";
but this is left as an exercise to the reader. mkOther = mkFlag "" "" true;
So disable them for now. */
cxx = !stdenv.isSunOS; 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 in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "ncurses-5.9"; name = "ncurses-5.9";
@ -18,12 +29,33 @@ stdenv.mkDerivation rec {
sha256 = "0fsn7xis81za62afan0vvm38bvgzg5wfmv1m86flqcj0nj7jjilh"; sha256 = "0fsn7xis81za62afan0vvm38bvgzg5wfmv1m86flqcj0nj7jjilh";
}; };
patches = [ ./patch-ac ./clang.patch ]; patches = [ ./clang.patch ];
configureFlags = '' buildInputs = [ gpm ];
--with-shared --without-debug --enable-pc-files --enable-symlinks
${if unicode then "--enable-widec" else ""}${if cxx then "" else "--without-cxx-binding"} 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 # PKG_CONFIG_LIBDIR is where the *.pc files will be installed. If this
# directory doesn't exist, the configure script will disable installation of # 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 # 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. # tell it explicitly where to install with PKG_CONFIG_LIBDIR.
preConfigure = '' preConfigure = ''
export configureFlags="$configureFlags --includedir=$out/include"
export PKG_CONFIG_LIBDIR="$out/lib/pkgconfig" export PKG_CONFIG_LIBDIR="$out/lib/pkgconfig"
mkdir -p "$PKG_CONFIG_LIBDIR" mkdir -p "$PKG_CONFIG_LIBDIR"
''; '';
@ -41,33 +72,48 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true; enableParallelBuilding = true;
preBuild = doCheck = false;
# 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'';
# When building a wide-character (Unicode) build, create backward # When building a wide-character (Unicode) build, create backward
# compatibility links from the the "normal" libraries to the # compatibility links from the the "normal" libraries to the
# wide-character libraries (e.g. libncurses.so to libncursesw.so). # wide-character libraries (e.g. libncurses.so to libncursesw.so).
postInstall = if unicode then '' postInstall = if unicode then ''
${if cxx then "chmod 644 $out/lib/libncurses++w.a" else ""} # Create a non-abi versioned config
for lib in curses ncurses form panel menu; do cfg=$(basename $out/bin/ncurses*-config)
if test -e $out/lib/lib''${lib}w.a; then ln -svf $cfg $out/bin/ncursesw-config
rm -f $out/lib/lib$lib.so ln -svf $cfg $out/bin/ncurses-config
echo "INPUT(-l''${lib}w)" > $out/lib/lib$lib.so
ln -svf lib''${lib}w.a $out/lib/lib$lib.a # Allow for end users who #include <ncurses?w/*.h>
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;
ln -svf . $out/include/ncursesw ln -svf . $out/include/ncursesw
ln -svf ncursesw5-config $out/bin/ncurses5-config ln -svf . $out/include/ncurses
'' else "";
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"; description = "Free software emulation of curses in SVR4 and more";
longDescription = '' longDescription = ''
@ -86,9 +132,10 @@ stdenv.mkDerivation rec {
homepage = http://www.gnu.org/software/ncurses/; homepage = http://www.gnu.org/software/ncurses/;
license = lib.licenses.mit; license = licenses.mit;
platforms = platforms.all;
maintainers = [ ]; maintainers = with maintainers; [ wkennington ];
platforms = lib.platforms.all;
}; };
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 { }; nanomsg = callPackage ../development/libraries/nanomsg { };
ncurses = callPackage ../development/libraries/ncurses { ncurses = callPackage ../development/libraries/ncurses { };
unicode = system != "i686-cygwin";
};
neon = callPackage ../development/libraries/neon { neon = callPackage ../development/libraries/neon {
compressionSupport = true; compressionSupport = true;