]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
aclocal: diagnose non-existing directories in AC_CONFIG_MACRO_DIRS better
authorStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 4 Jul 2012 13:37:46 +0000 (15:37 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Sat, 10 Nov 2012 09:21:08 +0000 (10:21 +0100)
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>
aclocal.in
t/aclocal-macrodir.tap
t/aclocal-macrodirs.tap

index ea96025387f5dd2c9e7ad3003ef5892e1f0b08fe..751ab49096b90d9f65b7231f7d87bbfaecce0fac 100644 (file)
@@ -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
index 5ef1ee443b2409e5347f0623aa5639cbbc559bb3..4114edb3a01825a95eeb8cd5cb549012e29d944e 100755 (executable)
@@ -164,7 +164,7 @@ AC_INIT([oops], [1.0])
 AC_CONFIG_MACRO_DIR([non-existent])
 END
 
-not $ACLOCAL 2>stderr \
+not $ACLOCAL -Wnone 2>stderr \
   && cat stderr >&2 \
   && grep "couldn't open directory 'non-existent'" stderr \
   || r='not ok'
@@ -173,5 +173,4 @@ test_end
 
 #---------------------------------------------------------------------------
 
-
 :
index aaac4b45eff02209c3ae1339ac431faeb7d6675b..2440d8f3f959f90ea15a080ef3df505356e60c55 100755 (executable)
@@ -294,8 +294,7 @@ test_end
 
 #---------------------------------------------------------------------------
 
-test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) errors out (tricky setup)" \
-           TODO
+test_begin "AC_CONFIG_MACRO_DIRS([non-existent]) errors out (tricky setup)"
 
 cat > configure.ac << 'END'
 AC_INIT([oops], [1.0])
@@ -305,7 +304,7 @@ END
 
 mkdir dir-ok
 
-not $ACLOCAL --install 2>stderr \
+not $ACLOCAL -Wnone --install 2>stderr \
   && cat stderr >&2 \
   && grep "couldn't open directory 'dir-ko'" stderr \
   && test ! -e dir-ko \