9e69398287
patch is already in upstream git repository ~> just sync Version: 1.13.1-8 Related: #901333
277 lines
8.8 KiB
Diff
277 lines
8.8 KiB
Diff
diff --git a/NEWS b/NEWS
|
|
index ef594b4..5a23a3b 100644
|
|
--- a/NEWS
|
|
+++ b/NEWS
|
|
@@ -55,6 +55,13 @@ New in 1.13.1:
|
|
causes a clear and helpful error message, instead of obscure ones
|
|
(issue introduced in Automake 1.13).
|
|
|
|
+ - Aclocal no longer error out if the first local m4 directory (as
|
|
+ specified by the '-I' option or the 'AC_CONFIG_MACRO_DIRS' or
|
|
+ 'AC_CONFIG_MACRO_DIR' macros) doesn't exist; it merely report a
|
|
+ warning in the 'unsupported' category. This is done to support
|
|
+ some pre-existing real-world usages; refer to automake bug#13514
|
|
+ for more details.
|
|
+
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
New in 1.13:
|
|
diff --git a/THANKS b/THANKS
|
|
index 5fa307d..0c143c4 100644
|
|
--- a/THANKS
|
|
+++ b/THANKS
|
|
@@ -295,6 +295,7 @@ Paul Jarc prj@po.cwru.edu
|
|
Paul Lunau temp@lunau.me.uk
|
|
Paul Martinolich martinol@datasync.com
|
|
Paul Thomas PTHOMAS@novell.com
|
|
+Pavel Raiskup praiskup@redhat.com
|
|
Pavel Roskin pavel_roskin@geocities.com
|
|
Pavel Sanda ps@twin.jikos.cz
|
|
Per Bothner bothner@cygnus.com
|
|
diff --git a/aclocal.in b/aclocal.in
|
|
index b51c09d..d68ea33 100644
|
|
--- a/aclocal.in
|
|
+++ b/aclocal.in
|
|
@@ -165,6 +165,11 @@ my @ac_config_macro_dirs;
|
|
# If set, names a temporary file that must be erased on abnormal exit.
|
|
my $erase_me;
|
|
|
|
+# Constants for the $ERR_LEVEL parameter of the 'scan_m4_dirs' function.
|
|
+use constant SCAN_M4_DIRS_SILENT => 0;
|
|
+use constant SCAN_M4_DIRS_WARN => 1;
|
|
+use constant SCAN_M4_DIRS_ERROR => 2;
|
|
+
|
|
################################################################
|
|
|
|
# Prototypes for all subroutines.
|
|
@@ -355,21 +360,42 @@ sub list_compare (\@\@)
|
|
|
|
################################################################
|
|
|
|
-# scan_m4_dirs($TYPE, $ERR_ON_NONEXISTING, @DIRS)
|
|
+# scan_m4_dirs($TYPE, $ERR_LEVEL, @DIRS)
|
|
# -----------------------------------------------
|
|
# Scan all M4 files installed in @DIRS for new macro definitions.
|
|
# Register each file as of type $TYPE (one of the FT_* constants).
|
|
+# If a directory in @DIRS cannot be read:
|
|
+# - fail hard if $ERR_LEVEL == SCAN_M4_DIRS_ERROR
|
|
+# - just print a warning if $ERR_LEVEL == SCAN_M4_DIRS_WA
|
|
+# - continue silently if $ERR_LEVEL == SCAN_M4_DIRS_SILENT
|
|
sub scan_m4_dirs ($$@)
|
|
{
|
|
- my ($type, $err_on_nonexisting, @dirlist) = @_;
|
|
+ my ($type, $err_level, @dirlist) = @_;
|
|
|
|
foreach my $m4dir (@dirlist)
|
|
{
|
|
if (! opendir (DIR, $m4dir))
|
|
{
|
|
# TODO: maybe avoid complaining only if errno == ENONENT?
|
|
- next unless $err_on_nonexisting;
|
|
- fatal "couldn't open directory '$m4dir': $!";
|
|
+ my $message = "couldn't open directory '$m4dir': $!";
|
|
+
|
|
+ if ($err_level == SCAN_M4_DIRS_ERROR)
|
|
+ {
|
|
+ fatal $message;
|
|
+ }
|
|
+ elsif ($err_level == SCAN_M4_DIRS_WARN)
|
|
+ {
|
|
+ msg ('unsupported', $message);
|
|
+ next;
|
|
+ }
|
|
+ elsif ($err_level == SCAN_M4_DIRS_SILENT)
|
|
+ {
|
|
+ next; # Silently ignore.
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ prog_error "invalid \$err_level value '$err_level'";
|
|
+ }
|
|
}
|
|
|
|
# We reverse the directory contents so that foo2.m4 gets
|
|
@@ -406,13 +432,27 @@ sub scan_m4_files ()
|
|
|
|
if (@user_includes)
|
|
{
|
|
+ # Don't explore the same directory multiple times. This is here not
|
|
+ # only for speedup purposes. We need this when the user has e.g.
|
|
+ # specified 'ACLOCAL_AMFLAGS = -I m4' and has also set
|
|
+ # AC_CONFIG_MACRO_DIR[S]([m4]) in configure.ac. This makes the 'm4'
|
|
+ # directory to occur twice here and fail on the second call to
|
|
+ # scan_m4_dirs([m4]) when the 'm4' directory doesn't exist.
|
|
+ # TODO: Shouldn't there be rather a check in scan_m4_dirs for
|
|
+ # @user_includes[0]?
|
|
+ @user_includes = uniq @user_includes;
|
|
+
|
|
# Don't complain if the first user directory doesn't exist, in case
|
|
# we need to create it later (can happen if '--install' was given).
|
|
- scan_m4_dirs (FT_USER, !$install, $user_includes[0]);
|
|
- scan_m4_dirs (FT_USER, 1, @user_includes[1..$#user_includes]);
|
|
+ scan_m4_dirs (FT_USER,
|
|
+ $install ? SCAN_M4_DIRS_SILENT : SCAN_M4_DIRS_WARN,
|
|
+ $user_includes[0]);
|
|
+ scan_m4_dirs (FT_USER,
|
|
+ SCAN_M4_DIRS_ERROR,
|
|
+ @user_includes[1..$#user_includes]);
|
|
}
|
|
- scan_m4_dirs (FT_AUTOMAKE, 1, @automake_includes);
|
|
- scan_m4_dirs (FT_SYSTEM, 1, @system_includes);
|
|
+ scan_m4_dirs (FT_AUTOMAKE, SCAN_M4_DIRS_ERROR, @automake_includes);
|
|
+ scan_m4_dirs (FT_SYSTEM, SCAN_M4_DIRS_ERROR, @system_includes);
|
|
|
|
# Construct a new function that does the searching. We use a
|
|
# function (instead of just evaluating $search in the loop) so that
|
|
diff --git a/t/aclocal-macrodir.tap b/t/aclocal-macrodir.tap
|
|
index 3c66e53..051fdb5 100755
|
|
--- a/t/aclocal-macrodir.tap
|
|
+++ b/t/aclocal-macrodir.tap
|
|
@@ -20,7 +20,7 @@
|
|
am_create_testdir=empty
|
|
. test-init.sh
|
|
|
|
-plan_ 6
|
|
+plan_ 7
|
|
|
|
ocwd=$(pwd) || fatal_ "getting current working directory"
|
|
ACLOCAL_PATH=; unset ACLOCAL_PATH
|
|
@@ -157,16 +157,44 @@ test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
-test_begin "AC_CONFIG_MACRO_DIR([non-existent]) errors out (1)"
|
|
+test_begin "AC_CONFIG_MACRO_DIR([non-existent]) warns with -Wunsupported"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
AC_CONFIG_MACRO_DIR([non-existent])
|
|
+AM_INIT_AUTOMAKE
|
|
END
|
|
|
|
-not $ACLOCAL -Wnone 2>stderr \
|
|
+$ACLOCAL -Wno-error 2>stderr \
|
|
&& cat stderr >&2 \
|
|
&& grep "couldn't open directory 'non-existent'" stderr \
|
|
+ && test -f aclocal.m4 \
|
|
+ || r='not ok'
|
|
+
|
|
+rm -rf aclocal.m4 autom4te*.cache
|
|
+
|
|
+$ACLOCAL -Werror -Wno-unsupported \
|
|
+ && test -f aclocal.m4 \
|
|
+ || r='not ok'
|
|
+
|
|
+test_end
|
|
+
|
|
+#---------------------------------------------------------------------------
|
|
+
|
|
+test_begin "AC_CONFIG_MACRO_DIR([not-exist]) and ACLOCAL_AMFLAGS = -I not-exist"
|
|
+
|
|
+cat > configure.ac << 'END'
|
|
+AC_INIT([oops], [1.0])
|
|
+AC_CONFIG_MACRO_DIR([not-exist])
|
|
+END
|
|
+
|
|
+cat > Makefile.am << 'END'
|
|
+ACLOCAL_AMFLAGS = -I not-exist
|
|
+END
|
|
+
|
|
+$ACLOCAL -Wno-error 2>stderr \
|
|
+ && cat stderr >&2 \
|
|
+ && test $(grep -c "couldn't open directory 'not-exist'" stderr) -eq 1 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
diff --git a/t/aclocal-macrodirs.tap b/t/aclocal-macrodirs.tap
|
|
index 89e424d..0deae72 100755
|
|
--- a/t/aclocal-macrodirs.tap
|
|
+++ b/t/aclocal-macrodirs.tap
|
|
@@ -20,7 +20,7 @@
|
|
am_create_testdir=empty
|
|
. test-init.sh
|
|
|
|
-plan_ 14
|
|
+plan_ 15
|
|
|
|
ocwd=$(pwd) || fatal_ "getting current working directory"
|
|
ACLOCAL_PATH=; unset ACLOCAL_PATH
|
|
@@ -317,23 +317,31 @@ test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
-test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) errors out (1)"
|
|
+test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) warns (1)"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
AC_CONFIG_MACRO_DIRS([non-existent])
|
|
+AM_INIT_AUTOMAKE
|
|
END
|
|
|
|
-not $ACLOCAL 2>stderr \
|
|
+$ACLOCAL -Wno-error 2>stderr \
|
|
&& cat stderr >&2 \
|
|
&& grep "couldn't open directory 'non-existent'" stderr \
|
|
+ && test -f aclocal.m4 \
|
|
+ || r='not ok'
|
|
+
|
|
+rm -rf aclocal.m4 autom4te*.cache
|
|
+
|
|
+$ACLOCAL -Werror -Wno-unsupported \
|
|
+ && test -f aclocal.m4 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
-test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) errors out (2)"
|
|
+test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) warns (2)"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
@@ -346,13 +354,14 @@ not $ACLOCAL 2>stderr \
|
|
&& cat stderr >&2 \
|
|
&& grep "couldn't open directory 'dir-ko'" stderr \
|
|
&& not grep "dir-ok" stderr \
|
|
+ && test ! -e aclocal.m4 \
|
|
|| r='not ok'
|
|
|
|
test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
-test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) errors out (tricky setup)"
|
|
+test_begin "AC_CONFIG_MACRO_DIRS([existent non-existent]) errors out"
|
|
|
|
cat > configure.ac << 'END'
|
|
AC_INIT([oops], [1.0])
|
|
@@ -372,6 +381,26 @@ test_end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
+test_begin "AC_CONFIG_MACRO_DIRS([not-exist]) and ACLOCAL_AMFLAGS = -I not-exist"
|
|
+
|
|
+cat > configure.ac << 'END'
|
|
+AC_INIT([oops], [1.0])
|
|
+AC_CONFIG_MACRO_DIRS([not-exist])
|
|
+END
|
|
+
|
|
+cat > Makefile.am << 'END'
|
|
+ACLOCAL_AMFLAGS = -I not-exist
|
|
+END
|
|
+
|
|
+$ACLOCAL -Wno-error 2>stderr \
|
|
+ && cat stderr >&2 \
|
|
+ && test $(grep -c "couldn't open directory 'not-exist'" stderr) -eq 1 \
|
|
+ || r='not ok'
|
|
+
|
|
+test_end
|
|
+
|
|
+#---------------------------------------------------------------------------
|
|
+
|
|
# Avoid spurious failures with pre-2.70 autoconf.
|
|
# FIXME: remove this in automake 1.14, once we require Autoconf 2.70.
|
|
if echo 'AC_INIT AC_CONFIG_MACRO_DIRS' | $AUTOCONF -o/dev/null -; then
|