diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-09-06 18:00:51 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-09-06 22:02:11 +0200 |
commit | f8ae824cadb97a5c0b70e69fd44c1d97c46be820 (patch) | |
tree | 076298e74e9a8f2f1f4a8c9dc87524a39a0f6c2e | |
parent | 78dab5a6c4979a62c3ff3df977d895a840c7ef20 (diff) | |
download | guix-f8ae824cadb97a5c0b70e69fd44c1d97c46be820.tar.gz |
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.
-rw-r--r-- | guix/deprecation.scm | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/guix/deprecation.scm b/guix/deprecation.scm index 04d4d4a337..c66c9367f6 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: |