Subject: bug#59885: closed (Re: bug#59885: [PATCH] gnu: cross-base: Standardize API to use keyword arguments.)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 03 Jan 2023 21:15:01 +0000

Your bug report

#59885: [PATCH] gnu: cross-base: Standardize API to use keyword arguments.

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
59885: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=59885
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#59885: [PATCH] gnu: cross-base: Standardize API to use keyword arguments.
From: Maxim Cournoyer <[email-masked]>
To: [email-masked]
Date: Tue, 03 Jan 2023 16:14:32 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

Maxim Cournoyer <[email-masked]> writes:

> This makes it possible to invoke the procedures with a single or fewer
> optional arguments.
>
> * gnu/packages/cross-base.scm (contains-keyword?): New procedure.
> (cross-binutils): Dispatch to either...
> (cross-binutils/deprecated): ... this renamed procedure or ...
> (cross-binutils*): ... this new procedure.
> (cross-kernel-headers, cross-libc/deprecated): Likewise.

Applied with 2707b6ccd7.

Closing.

-- 
Thanks,
Maxim

Subject: [PATCH] gnu: cross-base: Standardize API to use keyword arguments.
From: Maxim Cournoyer <[email-masked]>
To: [email-masked]
Cc: Maxim Cournoyer <[email-masked]>
Date: Wed, 7 Dec 2022 10:44:33 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

This makes it possible to invoke the procedures with a single or fewer
optional arguments.

* gnu/packages/cross-base.scm (contains-keyword?): New procedure.
(cross-binutils): Dispatch to either...
(cross-binutils/deprecated): ... this renamed procedure or ...
(cross-binutils*): ... this new procedure.
(cross-kernel-headers, cross-libc/deprecated): Likewise.
---
 gnu/packages/cross-base.scm | 74 +++++++++++++++++++++++++++++++------
 1 file changed, 62 insertions(+), 12 deletions(-)

diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 44c1bb0ef2..add9a2f901 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019, 2020, 2021 Marius Bakke <[email-masked]>
 ;;; Copyright © 2019 Carl Dong <[email-masked]>
 ;;; Copyright © 2020 Mathieu Othacehe <[email-masked]>
+;;; Copyright © 2022 Maxim Cournoyer <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +33,9 @@ (define-module (gnu packages cross-base)
   #:use-module (gnu packages mingw)
   #:use-module (guix platform)
   #:use-module (guix packages)
+  #:use-module (guix diagnostics)
   #:use-module (guix download)
+  #:use-module (guix i18n)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
@@ -74,7 +77,20 @@ (define (cross p target)
         `(cons ,(string-append "--target=" target)
                ,flags))))))
 
-(define* (cross-binutils target #:optional (binutils binutils))
+(define (contains-keyword? args)
+  "Check if ARGS contains a keyword object."
+  (find keyword? args))
+
+(define* (cross-binutils . args)
+  (if (or (= (length args) 1) (contains-keyword? args))
+      (apply cross-binutils* args)
+      (apply cross-binutils/deprecated args)))
+
+(define* (cross-binutils/deprecated target #:optional (binutils binutils))
+  (warning (G_ "'cross-binutils' must be used with keyword arguments~%"))
+  (cross-binutils* target #:binutils binutils))
+
+(define* (cross-binutils* target #:key (binutils binutils))
   "Return a cross-Binutils for TARGET using BINUTILS."
   (let ((binutils (package
                     (inherit binutils)
@@ -333,11 +349,27 @@ (define* (cross-gcc target
                              %gcc-cross-include-paths)))
     (native-search-paths '())))
 
-(define* (cross-kernel-headers target
-                               #:optional
-                               (linux-headers linux-libre-headers)
-                               (xgcc (cross-gcc target))
-                               (xbinutils (cross-binutils target)))
+(define* (cross-kernel-headers . args)
+  (if (or (= (length args) 1) (contains-keyword? args))
+      (apply cross-kernel-headers* args)
+      (apply cross-kernel-headers/deprecated args)))
+
+(define* (cross-kernel-headers/deprecated target
+                                          #:optional
+                                          (linux-headers linux-libre-headers)
+                                          (xgcc (cross-gcc target))
+                                          (xbinutils (cross-binutils target)))
+  (warning (G_ "'cross-kernel-headers' must be used with keyword arguments~%"))
+  (cross-kernel-headers* target
+                         #:linux-headers linux-headers
+                         #:xgcc xgcc
+                         #:xbinutils xbinutils))
+
+(define* (cross-kernel-headers* target
+                                #:key
+                                (linux-headers linux-libre-headers)
+                                (xgcc (cross-gcc target))
+                                (xbinutils (cross-binutils target)))
   "Return headers depending on TARGET."
 
   (define xlinux-headers
@@ -491,12 +523,30 @@ (define xhurd-core-headers
     ((or "i586-pc-gnu" "i586-gnu") xhurd-core-headers)
     (_ xlinux-headers)))
 
-(define* (cross-libc target
-                     #:optional
-                     (libc glibc)
-                     (xgcc (cross-gcc target))
-                     (xbinutils (cross-binutils target))
-                     (xheaders (cross-kernel-headers target)))
+(define* (cross-libc . args)
+  (if (or (= (length args) 1) (contains-keyword? args))
+      (apply cross-libc* args)
+      (apply cross-libc/deprecated args)))
+
+(define* (cross-libc/deprecated target
+                                #:optional
+                                (libc glibc)
+                                (xgcc (cross-gcc target))
+                                (xbinutils (cross-binutils target))
+                                (xheaders (cross-kernel-headers target)))
+  (warning (G_ "'cross-libc' must be used with keyword arguments~%"))
+  (cross-libc* target
+               #:libc libc
+               #:xgcc xgcc
+               #:xbinutils xbinutils
+               #:xheaders xheaders))
+
+(define* (cross-libc* target
+                      #:key
+                      (libc glibc)
+                      (xgcc (cross-gcc target))
+                      (xbinutils (cross-binutils target))
+                      (xheaders (cross-kernel-headers target)))
   "Return LIBC cross-built for TARGET, a GNU triplet. Use XGCC and XBINUTILS
 and the cross tool chain."
   (if (target-mingw? target)

base-commit: dfc6957a5af7d179d4618eb19d4f555c519bc6f2
prerequisite-patch-id: 660177fb9eee55d11983ea9360c072730d0d21a5
prerequisite-patch-id: 776778c03bce9b7ad3ab94a120f42b764c00fcae
prerequisite-patch-id: eeb2523a77c9c422a5785549dbd29ec0220118d7
prerequisite-patch-id: fd4074fb4cf068ccac3122c19138f098a610542a
-- 
2.38.1