[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/11: licenses: Let 'license?' expand to #t in trivial cases.
From: |
guix-commits |
Subject: |
01/11: licenses: Let 'license?' expand to #t in trivial cases. |
Date: |
Mon, 10 Oct 2022 05:18:46 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 79b390a207adc70a1169c80e52c590d8b358f488
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sat Oct 1 16:49:17 2022 +0200
licenses: Let 'license?' expand to #t in trivial cases.
With this change, we have:
> ,expand (license? gpl3+)
$2 = #t
> ,expand (license? something-else)
$3 = (let ((obj something-else))
(and ((@@ (srfi srfi-9) struct?) obj)
((@@ (srfi srfi-9) eq?)
((@@ (srfi srfi-9) struct-vtable) obj)
(@@ (guix licenses) <license>))))
* guix/licenses.scm (define-license-predicate)
(begin-license-definitions): New macros
<top level>: Wrap definitions in 'begin-license-definitions'.
---
guix/licenses.scm | 58 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 49 insertions(+), 9 deletions(-)
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 3b820ae07e..80cf0f1114 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2014, 2015, 2017, 2019, 2020 Ludovic Courtès
<ludo@gnu.org>
+;;; Copyright © 2012, 2014, 2015, 2017, 2019, 2020, 2022 Ludovic Courtès
<ludo@gnu.org>
;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
@@ -109,13 +109,6 @@
hpnd
fsdg-compatible))
-(define-record-type <license>
- (license name uri comment)
- license?
- (name license-name)
- (uri license-uri)
- (comment license-comment))
-
;;; Commentary:
;;;
;;; Available licenses.
@@ -129,6 +122,53 @@
;;;
;;; Code:
+(define-record-type <license>
+ (license name uri comment)
+ actual-license?
+ (name license-name)
+ (uri license-uri)
+ (comment license-comment))
+
+(define-syntax define-license-predicate
+ (syntax-rules (define define*)
+ "Define PREDICATE as a license predicate that, when applied to trivial
+cases, reduces to #t at macro-expansion time."
+ ((_ predicate (variables ...) (procedures ...)
+ (define variable _) rest ...)
+ (define-license-predicate
+ predicate
+ (variable variables ...) (procedures ...)
+ rest ...))
+ ((_ predicate (variables ...) (procedures ...)
+ (define* (procedure _ ...) _ ...)
+ rest ...)
+ (define-license-predicate
+ predicate
+ (variables ...) (procedure procedures ...)
+ rest ...))
+ ((_ predicate (variables ...) (procedures ...))
+ (define-syntax predicate
+ (lambda (s)
+ (syntax-case s (variables ... procedures ...)
+ ((_ variables) #t) ...
+ ((_ (procedures _)) #t) ...
+ ((_ obj) #'(actual-license? obj))
+ (id
+ (identifier? #'id)
+ #'actual-license?)))))))
+
+(define-syntax begin-license-definitions
+ (syntax-rules ()
+ ((_ predicate definitions ...)
+ (begin
+ ;; Define PREDICATE such that it expands to #t when passed one of the
+ ;; identifiers in DEFINITIONS.
+ (define-license-predicate predicate () () definitions ...)
+
+ definitions ...))))
+
+(begin-license-definitions license?
+
(define agpl1
(license "AGPL 1"
"https://gnu.org/licenses/agpl.html"
@@ -717,6 +757,6 @@ Data. More details can be found at URI. See also
https://www.gnu.org/distros/free-system-distribution-guidelines.en.html#non-functional-data."
(license "FSDG-compatible"
uri
- comment))
+ comment)))
;;; licenses.scm ends here
- branch master updated (3c54b28ea3 -> 5f856c5954), guix-commits, 2022/10/10
- 05/11: gnu: gtk: Use librsvg-2.40 for non-x86_64., guix-commits, 2022/10/10
- 06/11: gnu: Add nm-tray., guix-commits, 2022/10/10
- 10/11: gnu: Add corosync., guix-commits, 2022/10/10
- 07/11: gnu: Move libqb to high-availability., guix-commits, 2022/10/10
- 03/11: gnu: openexr: Apply 'guix style'., guix-commits, 2022/10/10
- 04/11: gnu: openexr: Skip failing tests on i686., guix-commits, 2022/10/10
- 08/11: gnu: libqb: Update to 2.0.6., guix-commits, 2022/10/10
- 01/11: licenses: Let 'license?' expand to #t in trivial cases.,
guix-commits <=
- 09/11: gnu: Add kronosnet., guix-commits, 2022/10/10
- 02/11: packages: Raise an exception for invalid 'license' values., guix-commits, 2022/10/10
- 11/11: gnu: Add pacemaker., guix-commits, 2022/10/10