diff --git a/pkgs/development/libraries/ncurses/default.nix b/pkgs/development/libraries/ncurses/default.nix index a4b8c8d4567..e1f912ae50b 100644 --- a/pkgs/development/libraries/ncurses/default.nix +++ b/pkgs/development/libraries/ncurses/default.nix @@ -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: - . - It seems that it could be worked around by #including in the - right place, according to - , - 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 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 + 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"; } diff --git a/pkgs/development/libraries/ncurses/patch-ac b/pkgs/development/libraries/ncurses/patch-ac deleted file mode 100644 index 73578f8a367..00000000000 --- a/pkgs/development/libraries/ncurses/patch-ac +++ /dev/null @@ -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 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aee77e849ec..1a560cdb97f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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;