diff options
| author | Daniel Mendler <mail@daniel-mendler.de> | 2023-02-11 01:46:07 +0100 |
|---|---|---|
| committer | Daniel Mendler <mail@daniel-mendler.de> | 2023-02-11 01:46:07 +0100 |
| commit | 5bd2c405cfbf0b7adff3dbd2316baec650271eea (patch) | |
| tree | 8b9574f0368793e6ee86adc6a1c61e6da65b2ae3 | |
| parent | 99facb3a764aa282a22c256bedf39113a29041b5 (diff) | |
More robust method to require libraries conditionally
| -rw-r--r-- | compat-25.el | 5 | ||||
| -rw-r--r-- | compat-26.el | 6 | ||||
| -rw-r--r-- | compat-27.el | 8 | ||||
| -rw-r--r-- | compat-28.el | 6 | ||||
| -rw-r--r-- | compat-29.el | 12 | ||||
| -rw-r--r-- | compat-macs.el | 15 | ||||
| -rw-r--r-- | compat.el | 10 |
7 files changed, 40 insertions, 22 deletions
diff --git a/compat-25.el b/compat-25.el index e710f86..f6ad2ad 100644 --- a/compat-25.el +++ b/compat-25.el @@ -21,8 +21,9 @@ ;;; Code: -(eval-when-compile (load "compat-macs.el" nil t t)) -(compat-declare-version "25.1") +(eval-when-compile (require 'compat-macs)) + +(compat-version "25.1") ;;;; Defined in alloc.c diff --git a/compat-26.el b/compat-26.el index 367b45e..956c4a7 100644 --- a/compat-26.el +++ b/compat-26.el @@ -21,8 +21,10 @@ ;;; Code: -(eval-when-compile (load "compat-macs.el" nil t t)) -(compat-declare-version "26.1") +(eval-when-compile (require 'compat-macs)) +(compat-require compat-25 "25.1") + +(compat-version "26.1") ;;;; Defined in fns.c diff --git a/compat-27.el b/compat-27.el index 19db3a6..30aa97c 100644 --- a/compat-27.el +++ b/compat-27.el @@ -21,8 +21,10 @@ ;;; Code: -(eval-when-compile (load "compat-macs.el" nil t t)) -(compat-declare-version "27.1") +(eval-when-compile (require 'compat-macs)) +(compat-require compat-26 "26.1") + +(compat-version "27.1") ;;;; Defined in fns.c @@ -825,7 +827,7 @@ discarded." ;;;; Defined in map-ynp.el -(compat-declare-version "26.2") +(compat-version "26.2") (compat-defvar read-answer-short 'auto ;; <compat-tests:read-answer> "If non-nil, the `read-answer' function accepts single-character answers. diff --git a/compat-28.el b/compat-28.el index e3bde86..57a40f7 100644 --- a/compat-28.el +++ b/compat-28.el @@ -21,8 +21,10 @@ ;;; Code: -(eval-when-compile (load "compat-macs.el" nil t t)) -(compat-declare-version "28.1") +(eval-when-compile (require 'compat-macs)) +(compat-require compat-27 "27.1") + +(compat-version "28.1") ;;;; Defined in fns.c diff --git a/compat-29.el b/compat-29.el index 11cccb6..9cf4a76 100644 --- a/compat-29.el +++ b/compat-29.el @@ -21,13 +21,15 @@ ;;; Code: -(eval-when-compile (load "compat-macs.el" nil t t)) -;; TODO Update to 29.1 as soon as the Emacs emacs-29 branch version bumped -(compat-declare-version "29.0") +(eval-when-compile (require 'compat-macs)) +(compat-require compat-28 "28.1") -;;;; Preloaded in loadup.el +;; Preloaded in loadup.el +;; TODO Update to 29.1 as soon as the Emacs emacs-29 branch version bumped +(compat-require seq "29.0") ;; <compat-tests:seq> -(compat-guard t (require 'seq)) ;; <compat-tests:seq> +;; TODO Update to 29.1 as soon as the Emacs emacs-29 branch version bumped +(compat-version "29.0") ;;;; Defined in xdisp.c diff --git a/compat-macs.el b/compat-macs.el index 25b1088..9370b02 100644 --- a/compat-macs.el +++ b/compat-macs.el @@ -250,13 +250,16 @@ definition is generated. ,@(and local `((make-variable-buffer-local ',name))) ,@(and (eq local 'permanent) `((put ',name 'permanent-local t))))))) -(defmacro compat-declare-version (version) +(defmacro compat-version (version) "Set the Emacs version that is currently being handled to VERSION." - (prog1 - (let ((before (1- (car (version-to-list version))))) - (when (and (< 24 before) (< emacs-major-version before)) - `(require ',(require (intern (format "compat-%d" before)))))) - (setq compat-macs--version version))) + (setq compat-macs--version version) + nil) + +(defmacro compat-require (feature version) + "Require FEATURE if the Emacs version is less than VERSION." + (when (version< emacs-version version) + (require feature) + `(require ',feature))) (provide 'compat-macs) ;;; compat-macs.el ends here @@ -46,8 +46,14 @@ ;;; Code: -(when (eval-when-compile (< emacs-major-version 29)) - (require 'compat-29)) +;; Ensure that the newest compatibility layer is required at compile +;; time and runtime, but only if needed. +(eval-when-compile + (defmacro compat--maybe-require-29 () + (when (< emacs-major-version 29) + (require 'compat-29) + '(require 'compat-29)))) +(compat--maybe-require-29) ;;;; Macros for extended compatibility function calls |
