Archived
1
0
Fork 0

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.
This commit is contained in:
Ludovic Courtès 2021-09-06 18:00:51 +02:00
parent 78dab5a6c4
commit f8ae824cad
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; 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. ;;; This file is part of GNU Guix.
;;; ;;;
@ -21,6 +21,8 @@
#:use-module (guix diagnostics) #:use-module (guix diagnostics)
#:autoload (guix utils) (source-properties->location) #:autoload (guix utils) (source-properties->location)
#:export (define-deprecated #:export (define-deprecated
define-deprecated/public
define-deprecated/alias define-deprecated/alias
warn-about-deprecation)) warn-about-deprecation))
@ -39,6 +41,8 @@
(warning location (G_ "'~a' is deprecated~%") (warning location (G_ "'~a' is deprecated~%")
variable)))) variable))))
(define-syntax public (syntax-rules ())) ;private syntactic keyword
(define-syntax define-deprecated (define-syntax define-deprecated
(lambda (s) (lambda (s)
"Define a deprecated variable or procedure, along these lines: "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 #'(define-deprecated proc replacement
(lambda* (formals ...) body ...))) (lambda* (formals ...) body ...)))
((_ variable replacement exp) ((_ variable replacement exp)
#'(define-deprecated private variable replacement exp))
((_ visibility variable replacement exp)
(identifier? #'variable) (identifier? #'variable)
(with-syntax ((real (datum->syntax (with-syntax ((real (datum->syntax
#'variable #'variable
@ -74,11 +80,23 @@ This will write a deprecation warning to GUIX-WARNING-PORT."
#'(real args (... ...))) #'(real args (... ...)))
(id (id
(identifier? #'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) ((_ variable alias)
(identifier? #'alias) (identifier? #'alias)
#'(define-deprecated variable alias 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-syntax-rule (define-deprecated/alias deprecated replacement)
"Define as an alias a deprecated variable, procedure, or macro, along "Define as an alias a deprecated variable, procedure, or macro, along
these lines: these lines: