Patchwork [09/11] gnu: ncurses: build mingw with libtool.

login
register
mail settings
Submitter Jan Nieuwenhuizen
Date May 8, 2016, 8:42 p.m.
Message ID <1462740169-15029-10-git-send-email-janneke@gnu.org>
Download mbox | patch
Permalink /patch/12156/
State New
Headers show

Comments

Jan Nieuwenhuizen - May 8, 2016, 8:42 p.m.
* gnu/packages/ncurses.scm (ncurses)[MINGW]: Build with libtool, as
recommended; enables dlopen'ing.
---
 gnu/packages/ncurses.scm | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)
Andy Wingo - May 9, 2016, 7:44 a.m.
On Sun 08 May 2016 22:42, Jan Nieuwenhuizen <janneke@gnu.org> writes:

> * gnu/packages/ncurses.scm (ncurses)[MINGW]: Build with libtool, as
> recommended; enables dlopen'ing.

I think Ludovic should review this short one, as he has more of the
bigger picture in his head and the question about
`standard-cross-packages' is a good one.

Andy

Patch

diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index 840dcf2..4c255c9 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -27,6 +27,11 @@ 
   #:use-module (guix utils)
   #:use-module (guix build-system gnu))
 
+(define* (cross-libtool #:optional (target (%current-target-system)))
+  (let* ((libtool (resolve-interface '(gnu packages cross-base)))
+         (cross-libtool (module-ref libtool 'cross-libtool)))
+    `(("xlibtool" ,(cross-libtool target)))))
+
 (define-public ncurses
   (let ((patch-makefile-phase
          '(lambda _
@@ -80,14 +85,13 @@ 
                    (lambda (lib)
                      (define lib.dll
                        (string-append "lib" lib ".dll"))
-                     (define libw6.dll
-                       (string-append "lib" lib "w6.dll"))
+                     (define libw-6.dll
+                       (string-append "lib" lib "w-6.dll"))
 
-                     (when (file-exists? libw6.dll)
+                     (when (file-exists? libw-6.dll)
                        (format #t "creating symlinks for `lib~a'~%" lib)
-                       (symlink libw6.dll lib.dll)))
+                       (symlink libw-6.dll lib.dll)))
                    libraries))
-                ;; TODO: create .la files to link to the .dll?
                 (with-directory-excursion (string-append out "/lib")
                   (for-each
                    (lambda (lib)
@@ -95,10 +99,17 @@ 
                        (string-append "lib" lib "w.a"))
                      (define lib.a
                        (string-append "lib" lib ".a"))
+                     (define libw.la
+                       (string-append "lib" lib "w.la"))
+                     (define lib.la
+                       (string-append "lib" lib ".la"))
 
                      (when (file-exists? libw.a)
                        (format #t "creating symlinks for `lib~a'~%" lib)
-                       (symlink libw.a lib.a)))
+                       (symlink libw.a lib.a))
+                     (when (file-exists? libw.la)
+                       (format #t "creating symlinks for `lib~a'~%" lib)
+                       (symlink libw.la lib.la)))
                    libraries)))
                (else
                 (with-directory-excursion (string-append out "/lib")
@@ -135,6 +146,10 @@ 
               (sha256
                (base32
                 "0q3jck7lna77z5r42f13c4xglc7azd19pxfrjrpgp2yf615w4lgm"))))
+     ;; add to gnu:standard-cross-packages?
+     (native-inputs `(,@(if (mingw-target?)
+                            `(,@(cross-libtool))
+                            '())))
      (build-system gnu-build-system)
      (outputs '("out"
                 "doc"))                          ;1 MiB of man pages
@@ -152,8 +167,9 @@ 
           ;; correct RUNPATH.
           ,(string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out")
                           "/lib")
-          ;; MinGW: Provide termcap api, created for the MinGW port.
-          ,@(if ,(mingw-target?) '("--enable-term-driver") '()))
+          ;; MinGW: Provide termcap api, created for the MinGW port,
+          ;; use litbool to build .la files to dlopen.
+          ,@(if ,(mingw-target?) `("--enable-term-driver" "--with-libtool") '()))
         #:tests? #f                               ; no "check" target
         #:phases (modify-phases %standard-phases
                    (replace 'configure ,configure-phase)