diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-07-04 15:37:46 +0200 |
---|---|---|
committer | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-11-10 10:21:08 +0100 |
commit | fd60ad28737e90d8732f28ce85d6cdaa781bdeed (patch) | |
tree | f997eb3102fabb8f4510b1b5924a709a34e1f9da /aclocal.in | |
parent | d2155d50e6ef6d11845583af0113a717642f53df (diff) | |
download | automake-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.in | 35 |
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 |