ncurses: Modernize build
This commit is contained in:
parent
c06df0b064
commit
ee78173b21
@ -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";
|
||||
}
|
||||
|
@ -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
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user