[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Export major version of latest Emacs supported by emacs-module.h
From: |
Philipp Stephani |
Subject: |
[PATCH] Export major version of latest Emacs supported by emacs-module.h. |
Date: |
Wed, 24 Apr 2019 10:31:40 +0200 |
This is useful if module authors want to support multiple versions of
emacs-module.h.
* configure.ac (emacs_major_version): Define substitution.
* src/emacs-module.h.in (EMACS_MAJOR_VERSION): Define macro.
* doc/lispref/internals.texi (Module Initialization): Document
EMACS_MODULE_VERSION preprocessor macro.
---
configure.ac | 2 ++
doc/lispref/internals.texi | 11 +++++++++++
etc/NEWS | 3 +++
src/emacs-module.h.in | 2 ++
4 files changed, 18 insertions(+)
diff --git a/configure.ac b/configure.ac
index 810c3219e4..79fe0c98c6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3697,6 +3697,8 @@ AC_DEFUN
module_env_snippet_25="$srcdir/src/module-env-25.h"
module_env_snippet_26="$srcdir/src/module-env-26.h"
module_env_snippet_27="$srcdir/src/module-env-27.h"
+emacs_major_version="${PACKAGE_VERSION%%.*}"
+AC_SUBST(emacs_major_version)
### Use -lpng if available, unless '--with-png=no'.
HAVE_PNG=no
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index 25892d4b57..d4adb1d7d9 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -1191,6 +1191,17 @@ Module Initialization
can use only the parts of the module @acronym{API} that existed in
that version, since those parts are identical in later versions.
address@hidden defines a preprocessor macro
address@hidden It expands to an integer literal which
+is the latest major version of Emacs supported by the header.
address@hidden Info}. Note that the value of
address@hidden is a compile-time constant and does not
+represent the version of Emacs that is currently running and has
+loaded your module. If you want your module to be compatible with
+various versions of @file{emacs-module.h} as well as various versions
+of Emacs, you can use conditional compilation based on
address@hidden
+
We recommend that modules always perform the compatibility
verification, unless they do their job entirely in the initialization
function, and don't access any Lisp objects or use any Emacs functions
diff --git a/etc/NEWS b/etc/NEWS
index b13ab47768..483f1dc958 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1910,6 +1910,9 @@ returns a regexp that never matches anything, which is an
identity for
this operation. Previously, the empty string was returned in this
case.
+** emacs-module.h now defines a macro EMACS_MAJOR_VERSION that expands
+to the major version of the latest Emacs supported by the header.
+
* Changes in Emacs 27.1 on Non-Free Operating Systems
diff --git a/src/emacs-module.h.in b/src/emacs-module.h.in
index 009d1583fe..dad4453cd8 100644
--- a/src/emacs-module.h.in
+++ b/src/emacs-module.h.in
@@ -27,6 +27,8 @@ along with GNU Emacs. If not, see
<https://www.gnu.org/licenses/>. */
#include <stdbool.h>
#endif
+#define EMACS_MAJOR_VERSION @emacs_major_version@
+
#if defined __cplusplus && __cplusplus >= 201103L
# define EMACS_NOEXCEPT noexcept
#else
--
2.20.1 (Apple Git-117)
- [PATCH] Export major version of latest Emacs supported by emacs-module.h.,
Philipp Stephani <=