guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/05: deprecation: Add 'define-deprecated/public'.


From: guix-commits
Subject: 03/05: deprecation: Add 'define-deprecated/public'.
Date: Mon, 6 Sep 2021 16:57:41 -0400 (EDT)

civodul pushed a commit to branch core-updates-frozen
in repository guix.

commit f8ae824cadb97a5c0b70e69fd44c1d97c46be820
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Mon Sep 6 18:00:51 2021 +0200

    deprecation: Add 'define-deprecated/public'.
    
    * guix/deprecation.scm (public): New macro.
    (define-deprecated): Add (_ visibility variable replacement exp) clause.
    Honor VISIBILITY.
    (define-deprecated/public): New macro.
---
 guix/deprecation.scm | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/guix/deprecation.scm b/guix/deprecation.scm
index 04d4d4a..c66c936 100644
--- a/guix/deprecation.scm
+++ b/guix/deprecation.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +21,8 @@
   #:use-module (guix diagnostics)
   #:autoload   (guix utils) (source-properties->location)
   #:export (define-deprecated
+
+            define-deprecated/public
             define-deprecated/alias
             warn-about-deprecation))
 
@@ -39,6 +41,8 @@
         (warning location (G_ "'~a' is deprecated~%")
                  variable))))
 
+(define-syntax public (syntax-rules ()))          ;private syntactic keyword
+
 (define-syntax define-deprecated
   (lambda (s)
     "Define a deprecated variable or procedure, along these lines:
@@ -53,6 +57,8 @@ This will write a deprecation warning to GUIX-WARNING-PORT."
        #'(define-deprecated proc replacement
            (lambda* (formals ...) body ...)))
       ((_ variable replacement exp)
+       #'(define-deprecated private variable replacement exp))
+      ((_ visibility variable replacement exp)
        (identifier? #'variable)
        (with-syntax ((real (datum->syntax
                             #'variable
@@ -74,11 +80,23 @@ This will write a deprecation warning to GUIX-WARNING-PORT."
                     #'(real args (... ...)))
                    (id
                     (identifier? #'id)
-                    #'real)))))))
+                    #'real))))
+
+             ;; When asking for public visibility, export both REAL and
+             ;; VARIABLE.  Exporting REAL is useful when defining deprecated
+             ;; packages: there must be a public variable bound to a package
+             ;; so that the (guix discover) machinery finds it.
+             #,(if (free-identifier=? #'visibility #'public)
+                   #'(export real variable)
+                   #'(begin)))))
       ((_ variable alias)
        (identifier? #'alias)
        #'(define-deprecated variable alias alias)))))
 
+(define-syntax-rule (define-deprecated/public body ...)
+  "Like 'define/deprecated', but export all the newly introduced bindings."
+  (define-deprecated public body ...))
+
 (define-syntax-rule (define-deprecated/alias deprecated replacement)
   "Define as an alias a deprecated variable, procedure, or macro, along
 these lines:



reply via email to

[Prev in Thread] Current Thread [Next in Thread]