From 7558bddcc9cf5ee14441304c2cfc7cffb566daba Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 22 Nov 2017 21:07:29 -0800 Subject: [PATCH] port elisp-compilation support to emacs-23.1 and newer In May of 2017, Emacs' support for using the long-deprecated byte-compile-dest-file function was removed, and that removal broke automake's elisp-compiling rule for any .el file not in the current directory. In emacs-23.1 (July 2009) byte-compile-dest-file-function became the recommended way to adjust the byte-compiler's destination. We expect the removed functionality to be restored for Emacs-26, albeit with dissuasive diagnostics warning about the imminent removal of this functionality. It may be removed in Emacs-27. * lib/am/lisp.am (.el.elc): Use byte-compile-dest-file-function, rather than byte-compile-dest-file. * t/lisp-readonly-srcdir.sh: New file, to test for the above. * t/list-of-tests.mk (handwritten_TESTS): Add it. * NEWS (Bugs fixed): Mention this problem. --- NEWS | 5 +++++ lib/am/lisp.am | 2 +- t/lisp-readonly-srcdir.sh | 46 ++++++++++++++++++++++++++++++++++++++++++++++ t/list-of-tests.mk | 1 + 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 t/lisp-readonly-srcdir.sh diff --git a/NEWS b/NEWS index 04a285565..dd057b7b1 100644 --- a/NEWS +++ b/NEWS @@ -121,6 +121,11 @@ New in ?.?.?: - The time printed by 'mdate-sh' is now using the UTC time zone to support the reproducible build effort. (automake bug#20314) + - The elisp byte-compilation rule now uses byte-compile-dest-file-function, + rather than byte-compile-dest-file, which was obsoleted in 2009. We expect + that Emacs-26 will continue to support the old function, but will complain + loudly, and that Emacs-27 will remove support for it altogether. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ New in 1.15.1: diff --git a/lib/am/lisp.am b/lib/am/lisp.am index 881bf3457..cacbc6feb 100644 --- a/lib/am/lisp.am +++ b/lib/am/lisp.am @@ -41,7 +41,7 @@ endif %?INSTALL% $(EMACS) --batch \ $(AM_ELCFLAGS) $(ELCFLAGS) \ $$am__subdir_includes -L $(builddir) -L $(srcdir) \ - --eval "(defun byte-compile-dest-file (f) \"address@hidden")" \ + --eval "(setq byte-compile-dest-file-function (lambda (_) \"address@hidden"))" \ --eval "(unless (byte-compile-file \"$<\") (kill-emacs 1))"; \ else :; fi diff --git a/t/lisp-readonly-srcdir.sh b/t/lisp-readonly-srcdir.sh new file mode 100644 index 000000000..38b866404 --- /dev/null +++ b/t/lisp-readonly-srcdir.sh @@ -0,0 +1,46 @@ +#! /bin/sh +# Copyright (C) 2017 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Ensure that building elisp from a read-only srcdir works. + +required=emacs +. test-init.sh + +cat > Makefile.am << 'EOF' +lisp_LISP = am-one.el +EOF + +cat >> configure.ac << 'EOF' +AM_PATH_LISPDIR +AC_OUTPUT +EOF + +echo > am-one.el + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +mkdir sub +chmod a=rx . + +cd sub +../configure +$MAKE + +test -f am-one.elc + +: diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index b49a3ad0f..33e5adc49 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -655,6 +655,7 @@ t/lisp5.sh \ t/lisp6.sh \ t/lisp7.sh \ t/lisp8.sh \ +t/lisp-readonly-srcdir.sh \ t/lisp-loadpath.sh \ t/lisp-subdir.sh \ t/lisp-subdir2.sh \ -- 2.14.1.729.g59c0ea183