From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Nieuwenhuizen Subject: [PATCH 07/11] gnu: ncurses: support mingw. Date: Tue, 9 Aug 2016 08:41:35 +0200 Message-ID: <20160809064139.27872-8-janneke@gnu.org> References: <20160809064139.27872-1-janneke@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:38008) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bX0k0-0001xv-41 for guix-devel@gnu.org; Tue, 09 Aug 2016 02:42:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bX0jw-0001cH-Ue for guix-devel@gnu.org; Tue, 09 Aug 2016 02:42:19 -0400 In-Reply-To: <20160809064139.27872-1-janneke@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org * gnu/packages/patches/ncurses-mingw.patch: New file. * gnu-system.am (dist_patch_DATA): Add it. * gnu/packages/ncurses.scm (ncurses): Support mingw. --- gnu/local.mk | 1 + gnu/packages/ncurses.scm | 88 +++++++++++++++++++++++--------- gnu/packages/patches/ncurses-mingw.patch | 24 +++++++++ 3 files changed, 89 insertions(+), 24 deletions(-) create mode 100644 gnu/packages/patches/ncurses-mingw.patch diff --git a/gnu/local.mk b/gnu/local.mk index d468280..8829830 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -669,6 +669,7 @@ dist_patch_DATA = \ %D%/packages/patches/mutt-store-references.patch \ %D%/packages/patches/mysql-fix-failing-test.patch \ %D%/packages/patches/nasm-no-ps-pdf.patch \ + %D%/packages/patches/ncurses-mingw.patch \ %D%/packages/patches/net-tools-bitrot.patch \ %D%/packages/patches/netcdf-config-date.patch \ %D%/packages/patches/ngircd-handle-zombies.patch \ diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm index 147033a..840dcf2 100644 --- a/gnu/packages/ncurses.scm +++ b/gnu/packages/ncurses.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès ;;; Copyright © 2014 Mark H Weaver ;;; Copyright © 2015 Leo Famulari +;;; Copyright © 2016 Jan Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,9 +20,11 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages ncurses) + #:use-module (gnu packages) #:use-module (guix licenses) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix utils) #:use-module (guix build-system gnu)) (define-public ncurses @@ -36,6 +39,7 @@ #:allow-other-keys) (let ((out (assoc-ref outputs "out")) (doc (assoc-ref outputs "doc"))) + (format #t "configure flags: ~s~%" configure-flags) (zero? (apply system* "./configure" (string-append "SHELL=" (which "sh")) (string-append "--build=" build) @@ -60,33 +64,66 @@ "mandir=share/man")) #t)) (post-install-phase - '(lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) + `(lambda* (#:key outputs target #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (mingw-target? (lambda* (#:optional (target target)) + (and target + (string-suffix? "-mingw32" target)))) + (libraries '("curses" "ncurses" "form" "panel" "menu"))) ;; 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). - (with-directory-excursion (string-append out "/lib") - (for-each (lambda (lib) - (define libw.a - (string-append "lib" lib "w.a")) - (define lib.a - (string-append "lib" lib ".a")) - (define libw.so.x - (string-append "lib" lib "w.so.6")) - (define lib.so.x - (string-append "lib" lib ".so.6")) - (define lib.so - (string-append "lib" lib ".so")) + (cond + ((mingw-target? target) + (with-directory-excursion (string-append out "/bin") + (for-each + (lambda (lib) + (define lib.dll + (string-append "lib" lib ".dll")) + (define libw6.dll + (string-append "lib" lib "w6.dll")) + + (when (file-exists? libw6.dll) + (format #t "creating symlinks for `lib~a'~%" lib) + (symlink libw6.dll lib.dll))) + libraries)) + ;; TODO: create .la files to link to the .dll? + (with-directory-excursion (string-append out "/lib") + (for-each + (lambda (lib) + (define libw.a + (string-append "lib" lib "w.a")) + (define lib.a + (string-append "lib" lib ".a")) + + (when (file-exists? libw.a) + (format #t "creating symlinks for `lib~a'~%" lib) + (symlink libw.a lib.a))) + libraries))) + (else + (with-directory-excursion (string-append out "/lib") + (for-each + (lambda (lib) + (define libw.a + (string-append "lib" lib "w.a")) + (define lib.a + (string-append "lib" lib ".a")) + (define libw.so.x + (string-append "lib" lib "w.so.6")) + (define lib.so.x + (string-append "lib" lib ".so.6")) + (define lib.so + (string-append "lib" lib ".so")) - (when (file-exists? libw.a) - (format #t "creating symlinks for `lib~a'~%" lib) - (symlink libw.a lib.a) - (symlink libw.so.x lib.so.x) - (false-if-exception (delete-file lib.so)) - (call-with-output-file lib.so - (lambda (p) - (format p "INPUT (-l~aw)~%" lib))))) - '("curses" "ncurses" "form" "panel" "menu"))))))) + (when (file-exists? libw.a) + (format #t "creating symlinks for `lib~a'~%" lib) + (symlink libw.a lib.a) + (symlink libw.so.x lib.so.x) + (false-if-exception (delete-file lib.so)) + (call-with-output-file lib.so + (lambda (p) + (format p "INPUT (-l~aw)~%" lib))))) + libraries)))))))) (package (name "ncurses") (version "6.0") @@ -94,6 +131,7 @@ (method url-fetch) (uri (string-append "mirror://gnu/ncurses/ncurses-" version ".tar.gz")) + (patches (search-patches "ncurses-mingw.patch")) (sha256 (base32 "0q3jck7lna77z5r42f13c4xglc7azd19pxfrjrpgp2yf615w4lgm")))) @@ -113,7 +151,9 @@ ;; Make sure programs like 'tic', 'reset', and 'clear' have a ;; correct RUNPATH. ,(string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") - "/lib")) + "/lib") + ;; MinGW: Provide termcap api, created for the MinGW port. + ,@(if ,(mingw-target?) '("--enable-term-driver") '())) #:tests? #f ; no "check" target #:phases (modify-phases %standard-phases (replace 'configure ,configure-phase) diff --git a/gnu/packages/patches/ncurses-mingw.patch b/gnu/packages/patches/ncurses-mingw.patch new file mode 100644 index 0000000..0f6a313 --- /dev/null +++ b/gnu/packages/patches/ncurses-mingw.patch @@ -0,0 +1,24 @@ +Taken from Eli Zaretskii's gdb bug report + + https://sourceware.org/ml/gdb-patches/2012-04/msg01052.html + +Upstream status: Not presented to upstream. + +--- ncurses-6.0.orig/include/curses.h.in 2014-08-09 22:39:44.000000000 +0200 ++++ ncurses-6.0/include/curses.h.in 2016-04-09 20:47:14.266679000 +0200 +@@ -1420,3 +1420,15 @@ + #define KEY_BREAK 0401 /* Break key (unreliable) */ + #define KEY_SRESET 0530 /* Soft (partial) reset (unreliable) */ + #define KEY_RESET 0531 /* Reset or hard reset (unreliable) */ ++ ++#ifdef __MINGW32__ ++/* Windows API headers, included e.g. by serial.h, define MOUSE_MOVED, ++ and so does PDCurses's curses.h, but for an entirely different ++ purpose. Since we don't use the Windows semantics of MOUSE_MOVED ++ anywhere, avoid compiler warnings by undefining MOUSE_MOVED before ++ including curses.h. */ ++#undef MOUSE_MOVED ++/* Likewise, KEY_EVENT is defined by ncurses.h, but also by Windows ++ API headers. */ ++#undef KEY_EVENT ++#endif -- 2.9.2