GNU bug report logs - #15981
regression: 1.14 may use ac_aux_dir before it is defined

Previous Next

Package: automake;

Reported by: Peter Hutterer <peter.hutterer <at> who-t.net>

Date: Wed, 27 Nov 2013 00:46:01 UTC

Severity: normal

Done: Stefano Lattarini <stefano.lattarini <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 15981 in the body.
You can then email your comments to 15981 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-automake <at> gnu.org:
bug#15981; Package automake. (Wed, 27 Nov 2013 00:46:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Peter Hutterer <peter.hutterer <at> who-t.net>:
New bug report received and forwarded. Copy sent to bug-automake <at> gnu.org. (Wed, 27 Nov 2013 00:46:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Peter Hutterer <peter.hutterer <at> who-t.net>
To: bug-automake <at> gnu.org
Cc: David Herrmann <dh.herrmann <at> gmail.com>
Subject: regression: 1.14 may use ac_aux_dir before it is defined
Date: Wed, 27 Nov 2013 10:43:42 +1000
automake 1.14 may use $ac_aux_dir before it is defined, leading to error
messages such as 

   /bin/sh: /home/david/missing: No such file or directory

The configure script runs this:

    # expand $ac_aux_dir to an absolute path
    am_aux_dir=`cd $ac_aux_dir && pwd`

before the definition of ac_aux_dir, so $am_aux_dir is always $HOME, which
causes the above error later.

Turns out the culprit is, at least in our case, AC_SYSTEM_EXTENSIONS. Simple
reproducer:

    AC_PREREQ([2.62])
    AC_INIT([test], [0.0])
    AC_USE_SYSTEM_EXTENSIONS
    AM_INIT_AUTOMAKE([1.11 foreign])

    AC_CONFIG_FILES([Makefile])
    AC_OUTPUT

With automake 1.13.4 this works, 1.14 breaks. Moving the call to
AC_USE_SYSTEM_EXTENSIONS below AM_INIT_AUTOMAKE makes it work again. It gets
a bit convoluted to find the direct cause but I suspect it's the AC_PROG_CC
changes in 34001a987a6de, and it looks like AC_USE_SYSTEM_EXTENSIONS calls
that after a few levels of nesting (where I got lost, sorry). In case it
matters, above testcase tested with autoconf from git (v2.69-112-gf181785).

Bisect range:
    good: 1.13.4
    bad: b7bdb2c3f2fb66a2384123670fb47b83d30c4bf9
Bisected to:
    commit 34001a987a6defdb70f6f3c17cce9d9c665fe6e8
    "compile: use 'compile' script when "-c -o" is used with losing compilers"

Cheers,
   Peter





Reply sent to Stefano Lattarini <stefano.lattarini <at> gmail.com>:
You have taken responsibility. (Tue, 22 Apr 2014 10:59:02 GMT) Full text and rfc822 format available.

Notification sent to Peter Hutterer <peter.hutterer <at> who-t.net>:
bug acknowledged by developer. (Tue, 22 Apr 2014 10:59:03 GMT) Full text and rfc822 format available.

Message #10 received at 15981-done <at> debbugs.gnu.org (full text, mbox):

From: Stefano Lattarini <stefano.lattarini <at> gmail.com>
To: automake-patches <at> gnu.org
Cc: peter.hutterer <at> who-t.net, 15981-done <at> debbugs.gnu.org
Subject: [PATCH] init: ensure $ac_aux_dir is defined before being used
Date: Tue, 22 Apr 2014 11:57:47 +0100
Since we use $ac_aux_dir to define $am_aux_dir, we need to ensure
the former has been initialized before we try to define the latter,
otherwise the definition:

   am_aux_dir=`cd $ac_aux_dir && pwd`

will set $am_aux_dir to $HOME, causing weird and unexpected
behaviours.

This change fixes automake bug#15981.

* m4/auxdir.m4: AC_REQUIRE expansion of 'AC_CONFIG_AUX_DIR_DEFAULT'.
Fix redundant comment and AC_PREREQ, add extra quoting around
'$ac_aux_dir'.
* t/auxdir-pr15981.sh: New test.
* t/auxdir-cc-pr15981.sh: Likewise.
* t/list-of-tests.mk (handwritten_TESTS): Add them.
* THANKS: Update.
* bin/automake.in: Fix a harmless typo in comments, that I happened
to notice while writing this patch.

Signed-off-by: Stefano Lattarini <stefano.lattarini <at> gmail.com>
---
 THANKS                 |  1 +
 bin/automake.in        |  2 +-
 m4/auxdir.m4           |  7 +++----
 t/auxdir-cc-pr15981.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++
 t/auxdir-pr15981.sh    | 39 ++++++++++++++++++++++++++++++++++
 t/list-of-tests.mk     |  2 ++
 6 files changed, 103 insertions(+), 5 deletions(-)
 create mode 100644 t/auxdir-cc-pr15981.sh
 create mode 100644 t/auxdir-pr15981.sh

diff --git a/THANKS b/THANKS
index 550b565..eef67c3 100644
--- a/THANKS
+++ b/THANKS
@@ -317,6 +317,7 @@ Per Oyvind Hvidsten             poeh <at> enter.vg
 Peter Breitenlohner             peb <at> mppmu.mpg.de
 Peter Eisentraut                peter_e <at> gmx.net
 Peter Gavin                     pgavin <at> debaser.kicks-ass.org
+Peter Hutterer                  peter.hutterer <at> who-t.net
 Peter Johansson                 trojkan <at> gmail.com
 Peter Mattis                    petm <at> scam.XCF.Berkeley.EDU
 Peter Muir                      iyhi <at> yahoo.com
diff --git a/bin/automake.in b/bin/automake.in
index 996a9de..f9cc611 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -313,7 +313,7 @@ my $seen_ar = 0;
 # Location of AC_REQUIRE_AUX_FILE calls, indexed by their argument.
 my %required_aux_file = ();
 
-# Where AM_INIT_AUTOMAKE is called;
+# Where AM_INIT_AUTOMAKE is called.
 my $seen_init_automake = 0;
 
 # TRUE if we've seen AM_AUTOMAKE_VERSION.
diff --git a/m4/auxdir.m4 b/m4/auxdir.m4
index 1f8614d..93fc225 100644
--- a/m4/auxdir.m4
+++ b/m4/auxdir.m4
@@ -45,8 +45,7 @@
 # configured tree to be moved without reconfiguration.
 
 AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 ])
diff --git a/t/auxdir-cc-pr15981.sh b/t/auxdir-cc-pr15981.sh
new file mode 100644
index 0000000..74157cb
--- /dev/null
+++ b/t/auxdir-cc-pr15981.sh
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2014 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/>.
+
+# Test automake bug#15981: automake 1.14 may use $ac_aux_dir
+# before it is defined, leading to error messages such as:
+# "/bin/sh: /home/david/missing: No such file or directory"
+
+required=cc
+. test-init.sh
+
+cat > configure.ac <<END
+AC_INIT([$me], [0.0])
+AC_USE_SYSTEM_EXTENSIONS
+AM_INIT_AUTOMAKE([1.11 foreign])
+AC_CONFIG_FILES([Makefile])
+AC_SUBST([MISSING])
+AC_OUTPUT
+test -n "\${MISSING}"
+END
+
+echo 'int main (void) { return 0; }' > foo.c
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = foo
+
+# Without quotes around '--help' and with an empty $(MISSING), make might
+# strip the trailing '--', call Bash's 'help' builtin, and have this test
+# succeed spuriously.  Yes, that has happened in practice :-(
+test:
+	$(MISSING) '--help'
+END
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure 2>stderr || { cat stderr >&2; exit 1; }
+cat stderr >&2
+$FGREP "missing" stderr && exit 1
+
+$MAKE all
+$MAKE test
+
+:
diff --git a/t/auxdir-pr15981.sh b/t/auxdir-pr15981.sh
new file mode 100644
index 0000000..f09d551
--- /dev/null
+++ b/t/auxdir-pr15981.sh
@@ -0,0 +1,39 @@
+#! /bin/sh
+# Copyright (C) 2014 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/>.
+
+# AM_AUX_DIR_EXPAND should ensure $ac_aux_dir is properly initialized.
+# Issue revealed by related automake bug#15981.
+
+. test-init.sh
+
+cat > configure.ac <<'END'
+AC_INIT([test], [0.0])
+AM_AUX_DIR_EXPAND
+printf '%s\n' "ac_aux_dir: '$ac_aux_dir'"
+printf '%s\n' "am_aux_dir: '$am_aux_dir'"
+test "$ac_aux_dir" = . || AS_EXIT([1])
+test "$am_aux_dir" = "`pwd`" || AS_EXIT([1])
+AS_EXIT([0])
+END
+
+$ACLOCAL
+$AUTOCONF
+
+test -f install-sh  # sanity check
+
+./configure
+
+:
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index 6b2eebe..e6ee856 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -116,6 +116,8 @@ t/aclocal-scan-configure-ac-pr319.sh \
 t/aclocal-serial.sh \
 t/aclocal-underquoted-defun.sh \
 t/aclocal-verbose-install.sh \
+t/auxdir-pr15981.sh \
+t/auxdir-cc-pr15981.sh \
 t/ac-output-old.tap \
 t/acsilent.sh \
 t/acsubst.sh \
-- 
1.9.1





bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 20 May 2014 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 11 years and 29 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.