From patchwork Sat Feb 25 19:00:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 47331 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id AC59316AFC; Sat, 25 Feb 2023 19:01:28 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id B525716B42 for ; Sat, 25 Feb 2023 19:01:21 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVznD-0003cv-R3; Sat, 25 Feb 2023 14:01:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVzn6-0003LS-H1 for guix-patches@gnu.org; Sat, 25 Feb 2023 14:01:07 -0500 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVzn6-0001Mt-3h for guix-patches@gnu.org; Sat, 25 Feb 2023 14:01:04 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pVzn5-00086Y-Ty; Sat, 25 Feb 2023 14:01:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#61790] [PATCH core-updates 5/5] gnu: ncurses: Rewrite using gexps. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: andreas@enge.fr, guix-patches@gnu.org Resent-Date: Sat, 25 Feb 2023 19:01:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61790 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 61790@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= , andreas@enge.fr X-Debbugs-Original-Xcc: andreas@enge.fr Received: via spool by 61790-submit@debbugs.gnu.org id=B61790.167735165531095 (code B ref 61790); Sat, 25 Feb 2023 19:01:03 +0000 Received: (at 61790) by debbugs.gnu.org; 25 Feb 2023 19:00:55 +0000 Received: from localhost ([127.0.0.1]:41531 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVzmw-00085N-79 for submit@debbugs.gnu.org; Sat, 25 Feb 2023 14:00:55 -0500 Received: from eggs.gnu.org ([209.51.188.92]:35354) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVzmr-00084P-7X for 61790@debbugs.gnu.org; Sat, 25 Feb 2023 14:00:50 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVzml-0001EW-FM; Sat, 25 Feb 2023 14:00:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=DnMaJBOOlL8lImmNan+TqRcDC+Q0NeGQyhl+wLSIyFY=; b=MAPEaKrdT4MCoZH3zTmr ODiKPub5l3fKnVNv0DqCdDUrExgVZdPi93Qgsd+Z/GmnqJ7W4EFIXx2kiqthshDJv62+4vQE9iZb0 7hQctklhR7JS42JrookgagYuDyMYxHtq3svdfmfejbN21Yp0Dwz1GoX4FRutKSGYT+NKvwiNmMYKk ZYDcDu95ZKogByJjNLmYcRvcxLw6HJuQhXumosAG3c9U1arwLohoAS3/TwO3O9NpprmAyeofTB8CL ji5ObWA0g5Dg9ir5ACgPXMWTJxPrnq1S2wsuZtA7d41D66Yul2wYZmEQX0hjn0yS8/UP2ALPkww1V g5KMG9rM6MIkig==; Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201] helo=gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVzml-0005iV-2x; Sat, 25 Feb 2023 14:00:43 -0500 From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Sat, 25 Feb 2023 20:00:30 +0100 Message-Id: <20230225190030.5289-5-ludo@gnu.org> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230225190030.5289-1-ludo@gnu.org> References: <20230225190030.5289-1-ludo@gnu.org> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * gnu/packages/ncurses.scm (ncurses-rollup-patch): New procedure. (ncurses)[arguments]: Rewrite using gexps. [native-inputs]: Remove labels and remove "rollup-patch" input. (ncurses/gpm, ncurses/tinfo): Rewrite using gexps and remove input label. --- gnu/packages/ncurses.scm | 301 +++++++++++++++++++-------------------- 1 file changed, 148 insertions(+), 153 deletions(-) diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm index 5b00da25bb..a191c29854 100644 --- a/gnu/packages/ncurses.scm +++ b/gnu/packages/ncurses.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018, 2019 Ludovic Courtès +;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018, 2019, 2023 Ludovic Courtès ;;; Copyright © 2014, 2016 Mark H Weaver ;;; Copyright © 2015, 2017 Leo Famulari ;;; Copyright © 2016 Nikita @@ -27,6 +27,7 @@ (define-module (gnu packages ncurses) #:use-module (gnu packages) #:use-module (guix licenses) + #:use-module (guix gexp) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) @@ -37,8 +38,22 @@ (define-module (gnu packages ncurses) #:use-module (gnu packages swig) #:use-module (gnu packages linux) #:use-module (guix utils) + #:use-module ((guix memoization) #:select (mlambda)) #:use-module (ice-9 match)) +(define ncurses-rollup-patch + (mlambda (version) + (origin + (method url-fetch) + (uri (match (string-split (version-major+minor+point version) #\.) + ((major minor point) + (string-append "https://invisible-mirror.net/archives" + "/ncurses/" major "." minor "/ncurses-" + major "." minor "-" point "-patch.sh.bz2")))) + (sha256 + (base32 + "1b6522cvi4066bgh9lp93q8lk93zcjjssvnw1512z447xvazy2y6"))))) + (define-public ncurses (package (name "ncurses") @@ -56,170 +71,152 @@ (define-public ncurses "doc")) ;1 MiB of man pages (arguments (let ((patch-makefile-phase - '(lambda _ - (for-each patch-makefile-SHELL - (find-files "." "Makefile.in")))) + #~(lambda _ + (for-each patch-makefile-SHELL + (find-files "." "Makefile.in")))) (configure-phase ;; The 'configure' script does not understand '--docdir', so we must ;; override that and use '--mandir' instead. - '(lambda* (#:key build target outputs configure-flags - #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (doc (assoc-ref outputs "doc"))) - (apply invoke "./configure" - (string-append "SHELL=" (which "sh")) - (string-append "--build=" build) - (string-append "--prefix=" out) - (string-append "--mandir=" doc "/share/man") - (if target - (cons (string-append "--host=" target) - configure-flags) - configure-flags))))) + #~(lambda* (#:key build target outputs configure-flags + #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (doc (assoc-ref outputs "doc"))) + (apply invoke "./configure" + (string-append "SHELL=" (which "sh")) + (string-append "--build=" build) + (string-append "--prefix=" out) + (string-append "--mandir=" doc "/share/man") + (if target + (cons (string-append "--host=" target) + configure-flags) + configure-flags))))) (apply-rollup-patch-phase ;; Ncurses distributes "stable" patchsets to be applied on top ;; of the release tarball. These are only available as shell ;; scripts(!) so we decompress and apply them in a phase. ;; See . - '(lambda* (#:key inputs native-inputs #:allow-other-keys) - (let ((rollup-patch (assoc-ref (or native-inputs inputs) - "rollup-patch"))) - (when rollup-patch - (copy-file rollup-patch - (string-append (getcwd) "/rollup-patch.sh.bz2")) - (invoke "bzip2" "-d" "rollup-patch.sh.bz2") - (invoke "sh" "rollup-patch.sh"))))) + #~(lambda* (#:key inputs native-inputs #:allow-other-keys) + (let ((rollup-patch #$(ncurses-rollup-patch + (package-version this-package)))) + (copy-file rollup-patch + (string-append (getcwd) "/rollup-patch.sh.bz2")) + (invoke "bzip2" "-d" "rollup-patch.sh.bz2") + (invoke "sh" "rollup-patch.sh")))) (remove-shebang-phase - '(lambda _ - ;; To avoid retaining a reference to the bootstrap Bash via the - ;; shebang of the 'ncursesw6-config' script, simply remove that - ;; shebang: it'll work just as well without it. Likewise, do not - ;; retain a reference to the "doc" output. - (substitute* "misc/ncurses-config.in" - (("#!@SHELL@") - "# No shebang here, use /bin/sh!\n") - (("@SHELL@ \\$0") - "$0") - (("mandir=.*$") - "mandir=share/man")))) + #~(lambda _ + ;; To avoid retaining a reference to the bootstrap Bash via the + ;; shebang of the 'ncursesw6-config' script, simply remove that + ;; shebang: it'll work just as well without it. Likewise, do not + ;; retain a reference to the "doc" output. + (substitute* "misc/ncurses-config.in" + (("#!@SHELL@") + "# No shebang here, use /bin/sh!\n") + (("@SHELL@ \\$0") + "$0") + (("mandir=.*$") + "mandir=share/man")))) (post-install-phase - `(lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - ;; When building a wide-character (Unicode) build, create backward - ;; compatibility links from the the "normal" libraries to the - ;; wide-character ones (e.g. libncurses.so to libncursesw.so). - ,@(if (target-mingw?) - '( ;; TODO: create .la files to link to the .dll? - (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")) + #~(lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; When building a wide-character (Unicode) build, create backward + ;; compatibility links from the the "normal" libraries to the + ;; wide-character ones (e.g. libncurses.so to libncursesw.so). + #$@(if (target-mingw?) + '( ;; TODO: create .la files to link to the .dll? + (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))) - '("curses" "ncurses" "form" "panel" "menu")))) - '()) - (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? libw6.dll) + (format #t "creating symlinks for `lib~a'~%" lib) + (symlink libw6.dll lib.dll))) + '("curses" "ncurses" "form" "panel" "menu")))) + #~()) + (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")) - ,@(if (not (target-mingw?)) - '((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")) - (define packagew.pc - (string-append lib "w.pc")) - (define package.pc - (string-append lib ".pc"))) - '()) + #$@(if (not (target-mingw?)) + #~((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")) + (define packagew.pc + (string-append lib "w.pc")) + (define package.pc + (string-append lib ".pc"))) + #~()) - (when (file-exists? libw.a) - (format #t "creating symlinks for `lib~a'~%" lib) - (symlink libw.a lib.a) - ,@(if (not (target-mingw?)) - '((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))) - (with-directory-excursion "pkgconfig" - (format #t "creating symlink for `~a'~%" - package.pc) - (when (file-exists? packagew.pc) - (symlink packagew.pc package.pc)))) - '()))) - '("curses" "ncurses" "form" "panel" "menu"))))))) - `(#:configure-flags - ,(cons* - 'quasiquote - `(("--with-shared" "--without-debug" "--enable-widec" + (when (file-exists? libw.a) + (format #t "creating symlinks for `lib~a'~%" lib) + (symlink libw.a lib.a) + #$@(if (not (target-mingw?)) + '((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))) + (with-directory-excursion "pkgconfig" + (format #t "creating symlink for `~a'~%" + package.pc) + (when (file-exists? packagew.pc) + (symlink packagew.pc package.pc)))) + #~()))) + '("curses" "ncurses" "form" "panel" "menu"))))))) + (list #:configure-flags + #~`("--with-shared" "--without-debug" "--enable-widec" - "--enable-pc-files" - ,(list 'unquote '(string-append "--with-pkg-config-libdir=" - (assoc-ref %outputs "out") - "/lib/pkgconfig")) + "--enable-pc-files" + ,(string-append "--with-pkg-config-libdir=" + #$output "/lib/pkgconfig") - ;; By default headers land in an `ncursesw' subdir, which is not - ;; what users expect. - ,(list 'unquote '(string-append "--includedir=" (assoc-ref %outputs "out") - "/include")) - "--enable-overwrite" ;really honor --includedir + ;; By default headers land in an `ncursesw' subdir, which is not + ;; what users expect. + ,(string-append "--includedir=" #$output "/include") + "--enable-overwrite" ;really honor --includedir - ;; Make sure programs like 'tic', 'reset', and 'clear' have a - ;; correct RUNPATH. - ,(list 'unquote '(string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") - "/lib")) + ;; Make sure programs like 'tic', 'reset', and 'clear' have a + ;; correct RUNPATH. + ,(string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib") - ;; Starting from ncurses 6.1, "make install" runs "install -s" - ;; by default, which doesn't work for cross-compiled binaries - ;; because it invokes 'strip' instead of 'TRIPLET-strip'. Work - ;; around this. - ,@(if (%current-target-system) '("--disable-stripping") '()) + ;; Starting from ncurses 6.1, "make install" runs "install -s" + ;; by default, which doesn't work for cross-compiled binaries + ;; because it invokes 'strip' instead of 'TRIPLET-strip'. Work + ;; around this. + #$@(if (%current-target-system) #~("--disable-stripping") #~()) - ;; Do not assume a default search path in ld, even if it is only to - ;; filter it out in ncurses-config. Mainly because otherwise it ends - ;; up using the libdir from binutils, which makes little sense and - ;; causes an unnecessary runtime dependency. - "cf_cv_ld_searchpath=/no-ld-searchpath" + ;; Do not assume a default search path in ld, even if it is only to + ;; filter it out in ncurses-config. Mainly because otherwise it ends + ;; up using the libdir from binutils, which makes little sense and + ;; causes an unnecessary runtime dependency. + "cf_cv_ld_searchpath=/no-ld-searchpath" - ;; MinGW: Use term-driver created for the MinGW port. - ,@(if (target-mingw?) '("--enable-term-driver") '())))) - #:tests? #f ; no "check" target - #:phases (modify-phases %standard-phases - (add-after 'unpack 'apply-rollup-patch - ,apply-rollup-patch-phase) - (replace 'configure ,configure-phase) - (add-after 'install 'post-install - ,post-install-phase) - (add-before 'configure 'patch-makefile-SHELL - ,patch-makefile-phase) - (add-before 'patch-source-shebangs 'remove-unneeded-shebang - ,remove-shebang-phase))))) + ;; MinGW: Use term-driver created for the MinGW port. + #$@(if (target-mingw?) #~("--enable-term-driver") #~())) + #:tests? #f ; no "check" target + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'apply-rollup-patch + #$apply-rollup-patch-phase) + (replace 'configure #$configure-phase) + (add-after 'install 'post-install + #$post-install-phase) + (add-before 'configure 'patch-makefile-SHELL + #$patch-makefile-phase) + (add-before 'patch-source-shebangs 'remove-unneeded-shebang + #$remove-shebang-phase))))) (native-inputs - `(,@(if (%current-target-system) - `(("self" ,this-package)) ;for `tic' - '()) - ("rollup-patch" - ,(origin - (method url-fetch) - (uri (match (string-split (version-major+minor+point version) #\.) - ((major minor point) - (string-append "https://invisible-mirror.net/archives" - "/ncurses/" major "." minor "/ncurses-" - major "." minor "-" point "-patch.sh.bz2")))) - (sha256 - (base32 - "1b6522cvi4066bgh9lp93q8lk93zcjjssvnw1512z447xvazy2y6")))) - ("pkg-config" ,pkg-config))) + (if (%current-target-system) + (list pkg-config this-package) ;for 'tic' + (list pkg-config))) (native-search-paths (list (search-path-specification (variable "TERMINFO_DIRS") @@ -240,12 +237,11 @@ (define-public ncurses/gpm (arguments (substitute-keyword-arguments (package-arguments ncurses) ((#:configure-flags cf) - `(cons (string-append "--with-gpm=" - (assoc-ref %build-inputs "gpm") - "/lib/libgpm.so.2") - ,cf)))) - (inputs - `(("gpm" ,gpm))))) + #~(cons (string-append "--with-gpm=" + #$(this-package-input "gpm") + "/lib/libgpm.so.2") + #$cf)))) + (inputs (list gpm)))) ;; Needed by u-boot 2022.04+ ;; Consider merging into ncurses for next core-updates cycle. @@ -255,8 +251,7 @@ (define-public ncurses/tinfo (arguments (substitute-keyword-arguments (package-arguments ncurses) ((#:configure-flags cf) - `(cons "--with-termlib=tinfo" - ,cf)))))) + #~(cons "--with-termlib=tinfo" #$cf)))))) (define-public dialog (package