Subject: Re: bug#11806: (setq load-path ..) of elisp-comp

From: Stefano Lattarini <[email-masked]>
Date: Thu, 05 Jul 2012 19:56:02 +0200

tags 11806  + patch
thanks

On 07/01/2012 01:03 AM, Jack Kelly wrote:
> On Sat, Jun 30, 2012 at 11:19 AM, Makoto Fujiwara <[email-masked]> wrote:
>> With your advice for VPATH issue, I am now using attached patch,
>> thanks a lot,
>> --- lib/elisp-comp.orig 2012-01-31 20:41:18.000000000 +0900
>> +++ lib/elisp-comp      2012-04-13 22:14:39.000000000 +0900
>> @@ -62,6 +62,7 @@
>>  fi
>>
>>  tempdir=elc.$$
>> +currdir=`pwd`
>>
>>  # Cleanup the temporary directory on exit.
>>  trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0
>> @@ -72,7 +73,7 @@
>>
>>  (
>>    cd $tempdir
>> -  echo "(setq load-path (cons nil load-path))" > script
>> +  echo "(setq load-path (cons \"$currdir\" (cons nil load-path)))" > script
>>    $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $?
>>    mv *.elc ..
>>  ) || exit $?
> 
> Hi,
> 
> Unfortunately your patch doesn't quite work, because in a VPATH build
> the build dir is not the sourcedir, so when you set $currdir, you are
> setting the wrong path.
> 
> I'm not sure of the best way to fix this. The rules for calling
> elisp-comp could be updated so that $(abs_srcdir) is passed along:
> 
>         abs_srcdir="$(abs_srcdir)" EMACS="$(EMACS)" $(SHELL)
> $(elisp_comp) "$$@" || exit 1; \
> 
> , which is then added to load-path. elisp-comp would still need a
> patch, but that's ok.
> 
> As to providing test cases, something like this should work:
> 
> configure.ac:
> 
> AC_INIT([foo], [bar], [[email-masked]])
> AM_INIT_AUTOMAKE([foreign])
> AM_PATH_LISPDIR
> AC_CONFIG_FILES([Makefile])
> AC_OUTPUT
> 
> Makefile.am:
> 
> lisp_LISP = foo.el
> lisp_DATA = bar.el
> 
> foo.el:
> 
> (require 'bar)
> 
> bar.el:
> 
> (provide 'bar)
> 
> Once elisp-comp (and whatever else) is fixed, this setup should
> survive a ./configure && make in both a normal and VPATH build.
>
Thanks.  I've condensed a patch from you explanation (see attachment).
I will push it shortly if there are no objections.

> (Aside: my copyright paperwork should still be in order. Email me
> off-list if it is not.)
>
I don't have an account on fencepost, so I can't check this, sorry.
Since your part of the changes are short enough to be classified as
"tiny change", I've just added a 'Copyright-paperwork-exempt' field
to the patch to get the easiest way out.

> -- Jack

Thanks,
  Stefano
>From 5c94d97d90aa5b731a11c538f8b835e57bf39fee Mon Sep 17 00:00:00 2001
Message-Id: <5c94d97d9[email-masked]>
From: Jack Kelly <[email-masked]>
Date: Thu, 5 Jul 2012 18:50:37 +0200
Subject: [PATCH] lisp: better support of VPATH builds

Fixes automake bug#11806.

* lib/am/lisp.am: Pass the value of '$(abs_srcdir)' to the
elisp-compile script in the environment.
* lib/elisp-comp: Add the vale of '$abs_srcdir' to the emacs
load-path.
* t/lisp-pr11806.sh: New test.
* t/list-of-tests.mk: Add it.

Copyright-paperwork-exempt: yes
Co-authored-by: Stefano Lattarini <[email-masked]>
Reported-by: Makoto Fujiwara <[email-masked]>
Signed-off-by: Stefano Lattarini <[email-masked]>
---
 lib/am/lisp.am     |    3 ++-
 lib/elisp-comp     |    4 ++--
 t/lisp-pr11806.sh  |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 t/list-of-tests.mk |    1 +
 4 files changed, 56 insertions(+), 3 deletions(-)
 create mode 100755 t/lisp-pr11806.sh

diff --git a/lib/am/lisp.am b/lib/am/lisp.am
index ba5c92a..050d7dc 100644
--- a/lib/am/lisp.am
+++ b/lib/am/lisp.am
@@ -36,7 +36,8 @@ elc-stamp: $(LISP)
 	  done; \
 ## Finally call elisp-comp for all files.
 	  shift; \
-	  EMACS="$(EMACS)" $(SHELL) $(elisp_comp) "$$@" || exit 1; \
+	  abs_srcdir="$(abs_srcdir)" EMACS="$(EMACS)" $(SHELL) \
+	    $(elisp_comp) "$$@" || exit 1; \
 	else : ; fi
 	@mv -f elc-temp $@
 
diff --git a/lib/elisp-comp b/lib/elisp-comp
index 7766db4..b646640 100755
--- a/lib/elisp-comp
+++ b/lib/elisp-comp
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Copyright (C) 1995-2012 Free Software Foundation, Inc.
 
-scriptversion=2010-02-06.18; # UTC
+scriptversion=2012-07-05.17; # UTC
 
 # Franc,ois Pinard <[email-masked]>, 1995.
 #
@@ -75,7 +75,7 @@ cp "$@" $tempdir
 
 (
   cd $tempdir
-  echo "(setq load-path (cons nil load-path))" > script
+  echo "(setq load-path (cons \"$abs_srcdir\" (cons nil load-path)))" > script
   $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $?
   mv *.elc ..
 ) || exit $?
diff --git a/t/lisp-pr11806.sh b/t/lisp-pr11806.sh
new file mode 100755
index 0000000..c372ea5
--- /dev/null
+++ b/t/lisp-pr11806.sh
@@ -0,0 +1,51 @@
+#! /bin/sh
+# Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.
+
+# Compiling .el files that requires each other in a VPATH build.
+# See automake bug#11806.
+
+required=emacs
+. ./defs || exit 1
+
+cat >> configure.ac << 'END'
+AM_PATH_LISPDIR
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lisp_LISP = foo.el
+lisp_DATA = bar.el
+END
+
+echo "(require 'bar)" > foo.el
+echo "(provide 'bar)" > bar.el
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE -a
+
+mkdir build
+cd build
+../configure
+$MAKE
+test -f foo.elc
+cd ..
+
+./configure
+$MAKE
+test -f foo.elc
+
+:
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index 852b87a..dd88819 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -640,6 +640,7 @@ t/lisp6.sh \
 t/lisp7.sh \
 t/lisp8.sh \
 t/lispdry.sh \
+t/lisp-pr11806.sh \
 t/listval.sh \
 t/location.sh \
 t/longline.sh \
-- 
1.7.9.5