Skip to content

Commit

Permalink
elisp-common.eclass: New function elisp-check-emacs-version.
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
ulm committed Dec 21, 2019
1 parent 681c5bd commit d70654f
Showing 1 changed file with 51 additions and 1 deletion.
52 changes: 51 additions & 1 deletion eclass/elisp-common.eclass
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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.
Expand All @@ -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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit d70654f

Please sign in to comment.