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
|
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";
|
||||||
}
|
}
|
||||||
|
@ -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 { };
|
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user