automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/2] aclocal: diagnose non-existing directories in AC_CONFIG_MACR


From: Stefano Lattarini
Subject: [PATCH 2/2] aclocal: diagnose non-existing directories in AC_CONFIG_MACRO_DIR better
Date: Wed, 4 Jul 2012 17:24:59 +0200

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_DIR 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_DIR causes an hard error, not a warning.

Signed-off-by: Stefano Lattarini <address@hidden>
---
 aclocal.in             |   35 +++++++++++++++++------------------
 t/aclocal-macrodir.tap |    7 +++----
 2 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/aclocal.in b/aclocal.in
index 46286bb..f348264 100644
--- a/aclocal.in
+++ b/aclocal.in
@@ -164,7 +164,7 @@ sub check_acinclude ();
 sub reset_maps ();
 sub install_file ($$);
 sub list_compare (address@hidden@);
-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 (address@hidden@)
 
 ################################################################
 
-# 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
diff --git a/t/aclocal-macrodir.tap b/t/aclocal-macrodir.tap
index aa59c40..d8ffacb 100755
--- a/t/aclocal-macrodir.tap
+++ b/t/aclocal-macrodir.tap
@@ -260,7 +260,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'
@@ -288,8 +288,7 @@ test_end
 
 #---------------------------------------------------------------------------
 
-test_begin "AC_CONFIG_MACRO_DIR([non-existent]) errors out (tricky setup)" \
-           TODO
+test_begin "AC_CONFIG_MACRO_DIR([non-existent]) errors out (tricky setup)"
 
 cat > configure.ac << 'END'
 AC_INIT([oops], [1.0])
@@ -299,7 +298,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 \
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]