nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at 17.09 155 lines 5.4 kB view raw
1{ lib, stdenv, fetchurl, pkgconfig 2 3, abiVersion 4, mouseSupport ? false 5, unicode ? true 6 7, gpm 8 9, buildPlatform, hostPlatform 10, buildPackages 11}: 12 13stdenv.mkDerivation rec { 14 version = if abiVersion == "5" then "5.9" else "6.0-20170902"; 15 name = "ncurses-${version}"; 16 17 src = fetchurl (if abiVersion == "5" then { 18 url = "mirror://gnu/ncurses/${name}.tar.gz"; 19 sha256 = "0fsn7xis81za62afan0vvm38bvgzg5wfmv1m86flqcj0nj7jjilh"; 20 } else { 21 url = "ftp://ftp.invisible-island.net/ncurses/current/${name}.tgz"; 22 sha256 = "1cks4gsz4148jw6wpqia4w5jx7cfxr29g2kmpvp0ssmvwczh8dr4"; 23 }); 24 25 patches = [ ./clang.patch ] ++ lib.optional (abiVersion == "5" && stdenv.cc.isGNU) ./gcc-5.patch; 26 27 outputs = [ "out" "dev" "man" ]; 28 setOutputFlags = false; # some aren't supported 29 30 configureFlags = [ 31 "--with-shared" 32 "--without-debug" 33 "--enable-pc-files" 34 "--enable-symlinks" 35 ] ++ lib.optional unicode "--enable-widec"; 36 37 # Only the C compiler, and explicitly not C++ compiler needs this flag on solaris: 38 CFLAGS = lib.optionalString stdenv.isSunOS "-D_XOPEN_SOURCE_EXTENDED"; 39 40 nativeBuildInputs = [ 41 pkgconfig 42 ] ++ lib.optionals (buildPlatform != hostPlatform) [ 43 buildPackages.ncurses buildPackages.stdenv.cc 44 ]; 45 buildInputs = lib.optional (mouseSupport && stdenv.isLinux) gpm; 46 47 preConfigure = '' 48 export PKG_CONFIG_LIBDIR="$dev/lib/pkgconfig" 49 mkdir -p "$PKG_CONFIG_LIBDIR" 50 configureFlagsArray+=( 51 "--libdir=$out/lib" 52 "--includedir=$dev/include" 53 "--bindir=$dev/bin" 54 "--mandir=$man/share/man" 55 "--with-pkg-config-libdir=$PKG_CONFIG_LIBDIR" 56 ) 57 '' 58 + lib.optionalString stdenv.isSunOS '' 59 sed -i -e '/-D__EXTENSIONS__/ s/-D_XOPEN_SOURCE=\$cf_XOPEN_SOURCE//' \ 60 -e '/CPPFLAGS="$CPPFLAGS/s/ -D_XOPEN_SOURCE_EXTENDED//' \ 61 configure 62 CFLAGS=-D_XOPEN_SOURCE_EXTENDED 63 ''; 64 65 enableParallelBuilding = true; 66 67 doCheck = false; 68 69 # When building a wide-character (Unicode) build, create backward 70 # compatibility links from the the "normal" libraries to the 71 # wide-character libraries (e.g. libncurses.so to libncursesw.so). 72 postFixup = '' 73 # Determine what suffixes our libraries have 74 suffix="$(awk -F': ' 'f{print $3; f=0} /default library suffix/{f=1}' config.log)" 75 libs="$(ls $dev/lib/pkgconfig | tr ' ' '\n' | sed "s,\(.*\)$suffix\.pc,\1,g")" 76 suffixes="$(echo "$suffix" | awk '{for (i=1; i < length($0); i++) {x=substr($0, i+1, length($0)-i); print x}}')" 77 78 # Get the path to the config util 79 cfg=$(basename $dev/bin/ncurses*-config) 80 81 # symlink the full suffixed include directory 82 ln -svf . $dev/include/ncurses$suffix 83 84 for newsuffix in $suffixes ""; do 85 # Create a non-abi versioned config util links 86 ln -svf $cfg $dev/bin/ncurses$newsuffix-config 87 88 # Allow for end users who #include <ncurses?w/*.h> 89 ln -svf . $dev/include/ncurses$newsuffix 90 91 for library in $libs; do 92 for dylibtype in so dll dylib; do 93 if [ -e "$out/lib/lib''${library}$suffix.$dylibtype" ]; then 94 ln -svf lib''${library}$suffix.$dylibtype $out/lib/lib$library$newsuffix.$dylibtype 95 ln -svf lib''${library}$suffix.$dylibtype.${abiVersion} $out/lib/lib$library$newsuffix.$dylibtype.${abiVersion} 96 if [ "ncurses" = "$library" ] 97 then 98 # make libtinfo symlinks 99 ln -svf lib''${library}$suffix.$dylibtype $out/lib/libtinfo$newsuffix.$dylibtype 100 ln -svf lib''${library}$suffix.$dylibtype.${abiVersion} $out/lib/libtinfo$newsuffix.$dylibtype.${abiVersion} 101 fi 102 fi 103 done 104 for statictype in a dll.a la; do 105 if [ -e "$out/lib/lib''${library}$suffix.$statictype" ]; then 106 ln -svf lib''${library}$suffix.$statictype $out/lib/lib$library$newsuffix.$statictype 107 fi 108 done 109 ln -svf ''${library}$suffix.pc $dev/lib/pkgconfig/$library$newsuffix.pc 110 done 111 done 112 113 # move some utilities to $bin 114 # these programs are used at runtime and don't really belong in $dev 115 moveToOutput "bin/clear" "$out" 116 moveToOutput "bin/reset" "$out" 117 moveToOutput "bin/tabs" "$out" 118 moveToOutput "bin/tic" "$out" 119 moveToOutput "bin/tput" "$out" 120 moveToOutput "bin/tset" "$out" 121 ''; 122 123 preFixup = lib.optionalString (!hostPlatform.isCygwin) '' 124 rm "$out"/lib/*.a 125 ''; 126 127 meta = { 128 description = "Free software emulation of curses in SVR4 and more"; 129 130 longDescription = '' 131 The Ncurses (new curses) library is a free software emulation of 132 curses in System V Release 4.0, and more. It uses Terminfo 133 format, supports pads and color and multiple highlights and 134 forms characters and function-key mapping, and has all the other 135 SYSV-curses enhancements over BSD Curses. 136 137 The ncurses code was developed under GNU/Linux. It has been in 138 use for some time with OpenBSD as the system curses library, and 139 on FreeBSD and NetBSD as an external package. It should port 140 easily to any ANSI/POSIX-conforming UNIX. It has even been 141 ported to OS/2 Warp! 142 ''; 143 144 homepage = http://www.gnu.org/software/ncurses/; 145 146 license = lib.licenses.mit; 147 platforms = lib.platforms.all; 148 maintainers = [ lib.maintainers.wkennington ]; 149 }; 150 151 passthru = { 152 ldflags = "-lncurses"; 153 inherit unicode abiVersion; 154 }; 155}