[PATCH] init: ensure $ac_aux_dir is defined before being used

Stefano Lattarini <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <0789d871ecf98b38f39ad6b38badf2283843bdb3.1398164232.git.stefano.lattarini@gmail.com>
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 <[email protected]>
---
 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             [email protected]
 Peter Breitenlohner             [email protected]
 Peter Eisentraut                [email protected]
 Peter Gavin                     [email protected]
+Peter Hutterer                  [email protected]
 Peter Johansson                 [email protected]
 Peter Mattis                    [email protected]
 Peter Muir                      [email protected]
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.