summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Müller <ulm@gentoo.org>2019-12-20 12:23:55 +0100
committerUlrich Müller <ulm@gentoo.org>2019-12-21 10:52:38 +0100
commitd70654fdc9ea013e2f299b9d2032dae11d29d960 (patch)
tree64c466bcb3e046cf2d0fe9413b28d92e5f4ac597
parentapp-editors/emacs-vcs: Delete old snapshot. (diff)
downloadgentoo-d70654fdc9ea013e2f299b9d2032dae11d29d960.tar.gz
gentoo-d70654fdc9ea013e2f299b9d2032dae11d29d960.tar.bz2
gentoo-d70654fdc9ea013e2f299b9d2032dae11d29d960.zip
elisp-common.eclass: New function elisp-check-emacs-version.
Tests if the Emacs version is at least the (full) version specified by NEED_EMACS, otherwise dies. Intended as a replacement for function elisp-need-emacs, which did only a simple numeric comparison of the major version. Call the new function before doing any actual work in elisp-compile() and elisp-make-autoload-file(), so ebuilds inheriting only elisp-common.eclass (but not elisp.eclass) won't have to add a pkg_setup phase function. Drop support for EAPIs 0 to 3. Signed-off-by: Ulrich Müller <ulm@gentoo.org>
-rw-r--r--eclass/elisp-common.eclass52
1 files changed, 51 insertions, 1 deletions
diff --git a/eclass/elisp-common.eclass b/eclass/elisp-common.eclass
index 05b03f493957..8e5d70046bc9 100644
--- a/eclass/elisp-common.eclass
+++ b/eclass/elisp-common.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2015 Gentoo Foundation
+# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: elisp-common.eclass
@@ -156,6 +156,12 @@
# environment, so it is no problem when you unset USE=emacs between
# merge and unmerge of a package.
+case ${EAPI:-0} in
+ 4|5|6) inherit eapi7-ver ;;
+ 7) ;;
+ *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
+esac
+
# @ECLASS-VARIABLE: SITELISP
# @DESCRIPTION:
# Directory where packages install Emacs Lisp files.
@@ -182,6 +188,17 @@ EMACSFLAGS="-batch -q --no-site-file"
# Emacs flags used for byte-compilation in elisp-compile().
BYTECOMPFLAGS="-L ."
+# @ECLASS-VARIABLE: NEED_EMACS
+# @DESCRIPTION:
+# The minimum Emacs version required for the package.
+: ${NEED_EMACS:=23.1}
+
+# @ECLASS-VARIABLE: _ELISP_EMACS_VERSION
+# @INTERNAL
+# @DESCRIPTION:
+# Cached value of Emacs version detected in elisp-check-emacs-version().
+_ELISP_EMACS_VERSION=""
+
# @FUNCTION: elisp-emacs-version
# @RETURN: exit status of Emacs
# @DESCRIPTION:
@@ -212,6 +229,35 @@ elisp-emacs-version() {
echo "${version}"
}
+# @FUNCTION: elisp-check-emacs-version
+# @USAGE: [version]
+# @DESCRIPTION:
+# Test if the eselected Emacs version is at least the version of
+# GNU Emacs specified in the NEED_EMACS variable, or die otherwise.
+
+elisp-check-emacs-version() {
+ if [[ -z ${_ELISP_EMACS_VERSION} ]]; then
+ local have_emacs
+ have_emacs=$(elisp-emacs-version) \
+ || die "Could not determine Emacs version"
+ elog "Emacs version: ${have_emacs}"
+ if [[ ${have_emacs} =~ XEmacs|Lucid ]]; then
+ die "XEmacs detected. This package needs GNU Emacs."
+ fi
+ # GNU Emacs versions have only numeric components.
+ if ! [[ ${have_emacs} =~ ^[0-9]+(\.[0-9]+)*$ ]]; then
+ die "Malformed version string: ${have_emacs}"
+ fi
+ _ELISP_EMACS_VERSION=${have_emacs}
+ fi
+
+ if ! ver_test "${_ELISP_EMACS_VERSION}" -ge "${NEED_EMACS}"; then
+ eerror "This package needs at least Emacs ${NEED_EMACS}."
+ eerror "Use \"eselect emacs\" to select the active version."
+ die "Emacs version too low"
+ fi
+}
+
# @FUNCTION: elisp-need-emacs
# @USAGE: <version>
# @RETURN: 0 if true, 1 if false, 2 if trouble
@@ -249,6 +295,8 @@ elisp-need-emacs() {
# in case they require or load one another.
elisp-compile() {
+ elisp-check-emacs-version
+
ebegin "Compiling GNU Emacs Elisp files"
${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@"
eend $? "elisp-compile: batch-byte-compile failed" || die
@@ -262,6 +310,8 @@ elisp-compile() {
elisp-make-autoload-file() {
local f="${1:-${PN}-autoloads.el}" null="" page=$'\f'
shift
+ elisp-check-emacs-version
+
ebegin "Generating autoload file for GNU Emacs"
cat >"${f}" <<-EOF