diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/ncurses')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/ncurses/clang.patch | 42 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/libraries/ncurses/default.nix | 178 |
2 files changed, 220 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/ncurses/clang.patch b/nixpkgs/pkgs/development/libraries/ncurses/clang.patch new file mode 100644 index 000000000000..ce33049bf405 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/ncurses/clang.patch @@ -0,0 +1,42 @@ +diff -ruNp ncurses-5.8.orig/c++/cursesf.h ncurses-5.8/c++/cursesf.h +--- ncurses-5.8.orig/c++/cursesf.h 2005-08-13 21:08:24.000000000 +0300 ++++ ncurses-5.8/c++/cursesf.h 2011-04-03 18:29:29.000000000 +0300 +@@ -681,7 +681,7 @@ public: + const T* p_UserData = STATIC_CAST(T*)(0), + bool with_frame=FALSE, + bool autoDelete_Fields=FALSE) +- : NCursesForm (Fields, with_frame, autoDelete_Fields) { ++ : NCursesForm (&Fields, with_frame, autoDelete_Fields) { + if (form) + set_user (const_cast<void *>(p_UserData)); + }; +@@ -694,7 +694,7 @@ public: + const T* p_UserData = STATIC_CAST(T*)(0), + bool with_frame=FALSE, + bool autoDelete_Fields=FALSE) +- : NCursesForm (Fields, nlines, ncols, begin_y, begin_x, ++ : NCursesForm (&Fields, nlines, ncols, begin_y, begin_x, + with_frame, autoDelete_Fields) { + if (form) + set_user (const_cast<void *>(p_UserData)); +diff -ruNp ncurses-5.8.orig/c++/cursesm.h ncurses-5.8/c++/cursesm.h +--- ncurses-5.8.orig/c++/cursesm.h 2005-08-13 21:10:36.000000000 +0300 ++++ ncurses-5.8/c++/cursesm.h 2011-04-03 18:31:42.000000000 +0300 +@@ -639,7 +639,7 @@ public: + const T* p_UserData = STATIC_CAST(T*)(0), + bool with_frame=FALSE, + bool autoDelete_Items=FALSE) +- : NCursesMenu (Items, with_frame, autoDelete_Items) { ++ : NCursesMenu (&Items, with_frame, autoDelete_Items) { + if (menu) + set_user (const_cast<void *>(p_UserData)); + }; +@@ -651,7 +651,7 @@ public: + int begin_x = 0, + const T* p_UserData = STATIC_CAST(T*)(0), + bool with_frame=FALSE) +- : NCursesMenu (Items, nlines, ncols, begin_y, begin_x, with_frame) { ++ : NCursesMenu (&Items, nlines, ncols, begin_y, begin_x, with_frame) { + if (menu) + set_user (const_cast<void *>(p_UserData)); + }; diff --git a/nixpkgs/pkgs/development/libraries/ncurses/default.nix b/nixpkgs/pkgs/development/libraries/ncurses/default.nix new file mode 100644 index 000000000000..0e75bfbd5b51 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/ncurses/default.nix @@ -0,0 +1,178 @@ +{ lib, stdenv, fetchurl, pkgconfig + +, abiVersion ? "6" +, mouseSupport ? false +, unicode ? true +, enableStatic ? stdenv.hostPlatform.useAndroidPrebuilt +, enableShared ? !enableStatic +, withCxx ? !stdenv.hostPlatform.useAndroidPrebuilt + +, gpm + +, buildPackages +}: + +stdenv.mkDerivation rec { + # Note the revision needs to be adjusted. + version = "6.2"; + name = "ncurses-${version}" + lib.optionalString (abiVersion == "5") "-abi5-compat"; + + # We cannot use fetchFromGitHub (which calls fetchzip) + # because we need to be able to use fetchurlBoot. + src = let + # Note the version needs to be adjusted. + rev = "v${version}"; + in fetchurl { + url = "https://github.com/mirror/ncurses/archive/${rev}.tar.gz"; + sha256 = "15r2456g0mlq2q7gh2z52vl6zv6y0z8sdchrs80kg4idqd8sm8fd"; + }; + + patches = lib.optional (!stdenv.cc.isClang) ./clang.patch; + + outputs = [ "out" "dev" "man" ]; + setOutputFlags = false; # some aren't supported + + configureFlags = [ + (lib.withFeature enableShared "shared") + "--without-debug" + "--enable-pc-files" + "--enable-symlinks" + "--with-manpage-format=normal" + "--disable-stripping" + ] ++ lib.optional unicode "--enable-widec" + ++ lib.optional (!withCxx) "--without-cxx" + ++ lib.optional (abiVersion == "5") "--with-abi-version=5" + ++ lib.optionals stdenv.hostPlatform.isWindows [ + "--enable-sp-funcs" + "--enable-term-driver" + ]; + + # Only the C compiler, and explicitly not C++ compiler needs this flag on solaris: + CFLAGS = lib.optionalString stdenv.isSunOS "-D_XOPEN_SOURCE_EXTENDED"; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + nativeBuildInputs = [ + pkgconfig + ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ + buildPackages.ncurses + ]; + buildInputs = lib.optional (mouseSupport && stdenv.isLinux) gpm; + + preConfigure = '' + export PKG_CONFIG_LIBDIR="$dev/lib/pkgconfig" + mkdir -p "$PKG_CONFIG_LIBDIR" + configureFlagsArray+=( + "--libdir=$out/lib" + "--includedir=$dev/include" + "--bindir=$dev/bin" + "--mandir=$man/share/man" + "--with-pkg-config-libdir=$PKG_CONFIG_LIBDIR" + ) + '' + + lib.optionalString stdenv.isSunOS '' + sed -i -e '/-D__EXTENSIONS__/ s/-D_XOPEN_SOURCE=\$cf_XOPEN_SOURCE//' \ + -e '/CPPFLAGS="$CPPFLAGS/s/ -D_XOPEN_SOURCE_EXTENDED//' \ + configure + CFLAGS=-D_XOPEN_SOURCE_EXTENDED + ''; + + enableParallelBuilding = true; + + 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). + postFixup = let + abiVersion-extension = if stdenv.isDarwin then "${abiVersion}.$dylibtype" else "$dylibtype.${abiVersion}"; in + '' + # Determine what suffixes our libraries have + suffix="$(awk -F': ' 'f{print $3; f=0} /default library suffix/{f=1}' config.log)" + libs="$(ls $dev/lib/pkgconfig | tr ' ' '\n' | sed "s,\(.*\)$suffix\.pc,\1,g")" + suffixes="$(echo "$suffix" | awk '{for (i=1; i < length($0); i++) {x=substr($0, i+1, length($0)-i); print x}}')" + + # Get the path to the config util + cfg=$(basename $dev/bin/ncurses*-config) + + # symlink the full suffixed include directory + ln -svf . $dev/include/ncurses$suffix + + for newsuffix in $suffixes ""; do + # Create a non-abi versioned config util links + ln -svf $cfg $dev/bin/ncurses$newsuffix-config + + # Allow for end users who #include <ncurses?w/*.h> + ln -svf . $dev/include/ncurses$newsuffix + + for library in $libs; do + for dylibtype in so dll dylib; do + if [ -e "$out/lib/lib''${library}$suffix.$dylibtype" ]; then + ln -svf lib''${library}$suffix.$dylibtype $out/lib/lib$library$newsuffix.$dylibtype + ln -svf lib''${library}$suffix.${abiVersion-extension} $out/lib/lib$library$newsuffix.${abiVersion-extension} + if [ "ncurses" = "$library" ] + then + # make libtinfo symlinks + ln -svf lib''${library}$suffix.$dylibtype $out/lib/libtinfo$newsuffix.$dylibtype + ln -svf lib''${library}$suffix.${abiVersion-extension} $out/lib/libtinfo$newsuffix.${abiVersion-extension} + fi + fi + done + for statictype in a dll.a la; do + if [ -e "$out/lib/lib''${library}$suffix.$statictype" ]; then + ln -svf lib''${library}$suffix.$statictype $out/lib/lib$library$newsuffix.$statictype + if [ "ncurses" = "$library" ] + then + # make libtinfo symlinks + ln -svf lib''${library}$suffix.$statictype $out/lib/libtinfo$newsuffix.$statictype + fi + fi + done + ln -svf ''${library}$suffix.pc $dev/lib/pkgconfig/$library$newsuffix.pc + done + done + + # move some utilities to $bin + # these programs are used at runtime and don't really belong in $dev + moveToOutput "bin/clear" "$out" + moveToOutput "bin/reset" "$out" + moveToOutput "bin/tabs" "$out" + moveToOutput "bin/tic" "$out" + moveToOutput "bin/tput" "$out" + moveToOutput "bin/tset" "$out" + moveToOutput "bin/captoinfo" "$out" + moveToOutput "bin/infotocap" "$out" + moveToOutput "bin/infocmp" "$out" + ''; + + preFixup = lib.optionalString (!stdenv.hostPlatform.isCygwin && !enableStatic) '' + rm "$out"/lib/*.a + ''; + + meta = { + description = "Free software emulation of curses in SVR4 and more"; + + longDescription = '' + The Ncurses (new curses) library is a free software emulation of + curses in System V Release 4.0, and more. It uses Terminfo + format, supports pads and color and multiple highlights and + forms characters and function-key mapping, and has all the other + SYSV-curses enhancements over BSD Curses. + + The ncurses code was developed under GNU/Linux. It has been in + use for some time with OpenBSD as the system curses library, and + on FreeBSD and NetBSD as an external package. It should port + easily to any ANSI/POSIX-conforming UNIX. It has even been + ported to OS/2 Warp! + ''; + + homepage = "https://www.gnu.org/software/ncurses/"; + + license = lib.licenses.mit; + platforms = lib.platforms.all; + }; + + passthru = { + ldflags = "-lncurses"; + inherit unicode abiVersion; + }; +} |