summaryrefslogtreecommitdiff
path: root/aclocal.in
diff options
context:
space:
mode:
authorStefano Lattarini <stefano.lattarini@gmail.com>2012-07-04 15:37:46 +0200
committerStefano Lattarini <stefano.lattarini@gmail.com>2012-11-10 10:21:08 +0100
commitfd60ad28737e90d8732f28ce85d6cdaa781bdeed (patch)
treef997eb3102fabb8f4510b1b5924a709a34e1f9da /aclocal.in
parentd2155d50e6ef6d11845583af0113a717642f53df (diff)
downloadautomake-fd60ad28737e90d8732f28ce85d6cdaa781bdeed.tar.gz
aclocal: diagnose non-existing directories in AC_CONFIG_MACRO_DIRS better
This new implementation ensures that any directory (possibly excluding the first one, if the '--install' option is used) that is declared with AC_CONFIG_MACRO_DIRS and that is non-existent will cause an error from aclocal. * aclocal.in (scan_m4_dirs): Add a new argument, telling whether it's OK for the scanned directory to be non-existing. Adjust the implementation accordingly. ($first_user_m4dir): Remove, no more needed. (scan_m4_files): Update 'scan_m4_dirs' invocations so that aclocal will not complain if the first user macro directory is non-existing and the '--install' option is given: such directory will be created later by aclocal itself. * t/aclocal-macrodir.tap: Do not mark the last test as TODO anymore; it now passes. Make stricter by ensuring a non-existing directory in AC_CONFIG_MACRO_DIRS causes an hard error, not a warning. Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Diffstat (limited to 'aclocal.in')
-rw-r--r--aclocal.in35
1 files changed, 17 insertions, 18 deletions
diff --git a/aclocal.in b/aclocal.in
index ea9602538..751ab4909 100644
--- a/aclocal.in
+++ b/aclocal.in
@@ -164,7 +164,7 @@ sub check_acinclude ();
sub reset_maps ();
sub install_file ($$);
sub list_compare (\@\@);
-sub scan_m4_dirs ($@);
+sub scan_m4_dirs ($$@);
sub scan_m4_files ();
sub add_macro ($);
sub scan_configure_dep ($);
@@ -344,28 +344,20 @@ sub list_compare (\@\@)
################################################################
-# scan_m4_dirs($TYPE, @DIRS)
-# --------------------------
+# scan_m4_dirs($TYPE, $ERR_ON_NONEXISTING, @DIRS)
+# -----------------------------------------------
# Scan all M4 files installed in @DIRS for new macro definitions.
# Register each file as of type $TYPE (one of the FT_* constants).
-my $first_user_m4dir = 1;
-sub scan_m4_dirs ($@)
+sub scan_m4_dirs ($$@)
{
- my ($type, @dirlist) = @_;
+ my ($type, $err_on_nonexisting, @dirlist) = @_;
foreach my $m4dir (@dirlist)
{
if (! opendir (DIR, $m4dir))
{
- if ($install && $type == FT_USER && $first_user_m4dir)
- {
- # We will try to create this directory later, so don't
- # complain if it doesn't exist.
- # TODO: maybe we should avoid complaining only if errno
- # is ENONENT?
- $first_user_m4dir = 0;
- next;
- }
+ # TODO: maybe avoid complaining only if errno == ENONENT?
+ next unless $err_on_nonexisting;
fatal "couldn't open directory '$m4dir': $!";
}
@@ -400,9 +392,16 @@ sub scan_m4_files ()
}
# Finally, scan all files in our search paths.
- scan_m4_dirs (FT_USER, @user_includes);
- scan_m4_dirs (FT_AUTOMAKE, @automake_includes);
- scan_m4_dirs (FT_SYSTEM, @system_includes);
+
+ if (@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_AUTOMAKE, 1, @automake_includes);
+ scan_m4_dirs (FT_SYSTEM, 1, @system_includes);
# Construct a new function that does the searching. We use a
# function (instead of just evaluating $search in the loop) so that