diff options
author | Ulrich Müller <ulm@gentoo.org> | 2019-12-20 12:23:55 +0100 |
---|---|---|
committer | Ulrich Müller <ulm@gentoo.org> | 2019-12-21 10:52:38 +0100 |
commit | d70654fdc9ea013e2f299b9d2032dae11d29d960 (patch) | |
tree | 64c466bcb3e046cf2d0fe9413b28d92e5f4ac597 /eclass | |
parent | app-editors/emacs-vcs: Delete old snapshot. (diff) | |
download | gentoo-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>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/elisp-common.eclass | 52 |
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 |