[Top][All Lists]

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

Re: dirlist

From: Charles Wilson
Subject: Re: dirlist
Date: Sat, 20 Jul 2002 12:02:05 -0400
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.4) Gecko/20011019 Netscape6/6.2

Alexandre Duret-Lutz wrote:

Hi Chuck,

| How about a note there, which says "Reminder: acdir is not ordinarily
| used by end-users; it is used by automake's test suite".

sounds good


| +aclocalver=`(aclocal --version) 2>/dev/null | sed -n -e 1p | \
| + gawk '{print $NF}' | sed -e 's/\.[^\.]*$//'`
This will give bad results for single-dot versions like `1.6' or
`1.6a' (plus gawk is not available everywhere).  How about
something like

(aclocal --version) 2>/dev/null | \
  sed 's/^.* \([0-9][0-9]*\.[0-9][0-9]*[a-z]*\).*$/\1/;1q'


| +    libtool_found=no
| +    for d in $extra_includes $aclocaldir ; do
| +       if [ "x$d" != "x-I" ] && [ -f "$d/libtool.m4" ] ; then
| +          libtool_found=yes
| +       fi
| +    done
| +    test "x$libtool_found" = "xyes" || exit 77
| +    ACLOCAL="$ACLOCAL -I $srcdir/../m4 $extra_includes -I $aclocaldir"

No idea why this appends both `$extra_includes' and `-I $aclocaldir'.
Shouldn't we add only the directory where the macro was found?
I guess I'm missing something.

Not done.  Left as is.  Discussion in sibling message.

New patch & changelog attached, with the first two modifications. This supersedes both of the previous submissions.

2002-07-19  Charles Wilson  <address@hidden>

        * add support for extending default macro
        search path, using a ``dirlist'' file within the
        acdir-APIVERSION directory
        * NEWS: announce the new capability
        * automake.texi: document the new capability
        * tests/dirlist.test: test it
        * tests/ add the new test
        * m4/dirlist: support file for dirlist.test
        * m4/ add dirlist to EXTRA_DIST
        * tests/defs: be smarter when searching for
        libtool.m4 and gettext.m4

diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/NEWS 
--- automake-1.6.2-orig/NEWS    2002-06-14 03:12:14.000000000 -0400
+++ automake-1.6.2/NEWS 2002-07-19 16:27:30.000000000 -0400
@@ -1,3 +1,6 @@
+  - add support for extending aclocal's default macro search path
+    using a ``dirlist'' file within the acdir-APIVERSION directory
 New in 1.6.2:
 * Many bug fixes, including:
   - Requiring the current version works.
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/ 
--- automake-1.6.2-orig/      2002-04-22 03:35:15.000000000 -0400
+++ automake-1.6.2/   2002-07-19 18:13:58.000000000 -0400
@@ -46,6 +46,11 @@
 # Note also that the versioned directory is handled later.
 $acdir = "@datadir@/aclocal";
 $default_acdir = $acdir;
+# contains a list of directories, one per line, to be added
+# to the dirlist in addition to $acdir, as if -I had been
+# added to the command line.  If acdir has been redirected,
+# we will also check the specified acdir (this is done later).
+$default_dirlist = "$acdir-$APIVERSION/dirlist";
 # Some globals.
@@ -215,6 +220,26 @@
        exit 0;
+    $default_dirlist="$acdir/dirlist"
+       if $acdir ne $default_acdir;
+    if (open (DEFAULT_DIRLIST, $default_dirlist))
+    {
+       while (<DEFAULT_DIRLIST>)
+       {
+           # Ignore '#' lines.
+           next if /^#/;
+           # strip off newlines and end-of-line comments
+           s/\s*\#.*$//;
+           chomp ($contents=$_);
+           if (-d $contents )
+           {
+               push (@dirlist, $contents);
+           }   
+       }
+       close (DEFAULT_DIRLIST);
+    }
     # Search the versioned directory near the end, and then the
     # unversioned directory last.  Only do this if the user didn't
     # override acdir.
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/automake.texi 
--- automake-1.6.2-orig/automake.texi   2002-06-11 05:07:59.000000000 -0400
+++ automake-1.6.2/automake.texi        2002-07-20 11:52:50.000000000 -0400
@@ -1301,7 +1301,8 @@
 to supply their own macros.
 At startup, @code{aclocal} scans all the @file{.m4} files it can find,
-looking for macro definitions.  Then it scans @file{}.  Any
+looking for macro definitions (@pxref{Macro search path}).  Then it 
+scans @file{}.  Any
 mention of one of the macros found in the first step causes that macro,
 and any macros it in turn requires, to be put into @file{aclocal.m4}.
@@ -1316,6 +1317,17 @@
 comment which will be completely ignored by @code{aclocal}, use
 @samp{##} as the comment leader.
+* aclocal options::             Options supported by aclocal
+* Macro search path::           How aclocal finds .m4 files
address@hidden menu
address@hidden aclocal options, Macro search path, Invoking aclocal, Invoking 
address@hidden aclocal options
address@hidden aclocal, Options
address@hidden Options, aclocal
 @code{aclocal} accepts the following options:
 @table @code
@@ -1353,6 +1365,143 @@
 Print the version number of Automake and exit.
 @end table
address@hidden Macro search path, , aclocal options, Invoking aclocal
address@hidden Macro search path
address@hidden Macro search path
address@hidden aclocal search path
+By default, @command{aclocal} searches for @file{.m4} files in the following
+directories, in this order:
address@hidden @code
address@hidden @var{acdir-APIVERSION}
+This is where the @file{.m4} macros distributed with automake itself
+are stored.  @var{APIVERSION} depends on the automake release used; 
+for automake 1.6.x, @var{APIVERSION} = @code{1.6}.  
address@hidden @var{acdir}
+This directory is intended for third party @file{.m4} files, and is
+configured when @command{automake} itself is built.  This is 
address@hidden@@datadir@@/aclocal/}, which typically 
+expands to @address@hidden@}/share/aclocal/}.  To find the compiled-in 
+value of @var{acdir}, use the @code{--print-ac-dir} option 
+(@pxref{aclocal options}).
address@hidden table
+As an example, suppose that automake-1.6.2 was configured with
address@hidden/usr/local}.  Then, the search path would be:
address@hidden @file{/usr/local/share/aclocal-1.6/}
address@hidden @file{/usr/local/share/aclocal/}
address@hidden enumerate
+As explained in (@pxref{aclocal options}), there are several options that
+can be used to change or extend this search path.
address@hidden Modifying the macro search path: @code{--acdir}
+The most obvious option to modify the search path is 
address@hidden@var{dir}}, which changes default directory and
+drops the @var{APIVERSION} directory.  For example, if one specifies 
address@hidden/opt/private/}, then the search path becomes:
address@hidden @file{/opt/private/}
address@hidden enumerate
+Note that this option, @code{--acdir}, is intended for use
+by the internal automake test suite only; it is not ordinarily
+needed by end-users.
address@hidden Modifying the macro search path: @code{-I} @var{dir}
+Any extra directories specified using @code{-I} options 
+(@pxref{aclocal options}) are @emph{prepended} to this search list.  Thus,
address@hidden -I /foo -I /bar} results in the following search path:
address@hidden @file{/foo}
address@hidden @file{/bar}
address@hidden @address@hidden
address@hidden @var{acdir}
address@hidden enumerate
address@hidden Modifying the macro search path: @file{dirlist}
+There is a third mechanism for customizing the search path.  If a 
address@hidden file exists in @var{acdir-APIVERSION}, then that
+file is assumed to contain a list of directories, one per line, to
+be added to the search list.  These directories are searched @emph{after} 
+any directories specified on the command line using @code{-I}, but
address@hidden the @var{acdir} and @var{acdir-APIVERSION} directories.
+For example, suppose 
address@hidden/dirlist} contains the following:
address@hidden example
+and that @code{aclocal} was called with the @code{-I /foo -I /bar} options.
+Then, the search path would be
address@hidden @file{/foo}
address@hidden @file{/bar}
address@hidden @file{/test1}
address@hidden @file{/test2}
address@hidden @address@hidden
address@hidden @var{acdir}
address@hidden enumerate
+If the @address@hidden option is used, 
+then @command{aclocal} will search for the @file{dirlist} file in 
+the @emph{redirected} @var{acdir} directory.  In the 
address@hidden example above, @command{aclocal} will search the 
address@hidden/opt/private/} directory for @file{dirlist}.  Again, however,
+the @code{--acdir} option is intended for use by the internal
+automake test suite only; @code{--acdir} is not ordinarily 
+needed by end-users.
address@hidden is useful in the following situation: suppose that 
address@hidden version @code{1.6.2} is installed with 
+$prefix=/usr by the system vendor. Thus, the default search 
+directories are 
address@hidden @file{/usr/share/aclocal-1.6/}
address@hidden @file{/usr/share/aclocal/}
address@hidden enumerate
+However, suppose further that many packages have been manually 
+installed on the system, with $prefix=/usr/local, as is typical.
+In that case, many of these ``extra'' @file{.m4} files are in 
address@hidden/usr/local/share/aclocal}.  The only way to force 
address@hidden/usr/bin/aclocal} to find these ``extra'' @file{.m4} files 
+is to always call @code{aclocal -I /usr/local/share/aclocal}.  
+This is inconvenient.  With @file{dirlist}, one may create the file
+which contains only the single line
+Now, the ``default'' search path on the affected system is
address@hidden @file{/usr/local/share/aclocal/}
address@hidden @file{/usr/share/aclocal-1.6/}
address@hidden @file{/usr/share/aclocal/}
address@hidden enumerate
+without the need for @code{-I} options; @code{-I} options can be reserved 
+for project-specific needs (@file{my-source-dir/m4/}), rather than
+using it to work around local system-dependent tool installation
 @node Macros, Extending aclocal, Invoking aclocal, configure
 @section Autoconf macros supplied with Automake
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/m4/ 
--- automake-1.6.2-orig/m4/  2002-06-10 03:18:42.000000000 -0400
+++ automake-1.6.2/m4/       2002-07-19 16:27:31.000000000 -0400
@@ -29,3 +29,4 @@
 nodist_m4data_DATA = amversion.m4
 DISTCLEANFILES = amversion.m4
+EXTRA_DIST = dirlist
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/m4/dirlist 
--- automake-1.6.2-orig/m4/dirlist      1969-12-31 19:00:00.000000000 -0500
+++ automake-1.6.2/m4/dirlist   2002-07-19 18:32:18.000000000 -0400
@@ -0,0 +1,3 @@
+# This file is used by the testsuite (dirlist.test)
+# it should not be installed
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/tests/ 
--- automake-1.6.2-orig/tests/       2002-06-11 13:00:08.000000000 
+++ automake-1.6.2/tests/    2002-07-19 16:27:31.000000000 -0400
@@ -124,6 +124,7 @@
 depend3.test \
 depend4.test \
 dirforbid.test \
+dirlist.test \
 dirname.test \
 discover.test \
 distcommon.test \
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/tests/defs 
--- automake-1.6.2-orig/tests/defs      2002-03-26 04:38:47.000000000 -0500
+++ automake-1.6.2/tests/defs   2002-07-20 11:55:25.000000000 -0400
@@ -112,14 +112,37 @@
 # other `-I' directories added for libtool and gettext might contain
 # files from an old version of Automake that we don't want to use.
 aclocaldir=`(aclocal --print-ac-dir) 2>/dev/null`
+aclocalver=`(aclocal --version) 2>/dev/null | \
+   sed 's/^.* \([0-9][0-9]*\.[0-9][0-9]*[a-z]*\).*$/\1/;1q'`
+if [ -f ${dirlistdir}/dirlist ] ; then
+   extra_includes=`(tmp_inc=""
+   while read LINE ; do
+      tmp_inc="$tmp_inc -I $LINE"
+   done
+   echo $tmp_inc) < ${dirlistdir}/dirlist`
 case $required in
   *libtool* )
-    test -f "$aclocaldir/libtool.m4" || exit 77
-    ACLOCAL="$ACLOCAL -I $srcdir/../m4 -I $aclocaldir"
+    libtool_found=no
+    for d in $extra_includes $aclocaldir ; do
+       if [ "x$d" != "x-I" ] && [ -f "$d/libtool.m4" ] ; then
+          libtool_found=yes
+       fi
+    done
+    test "x$libtool_found" = "xyes" || exit 77
+    ACLOCAL="$ACLOCAL -I $srcdir/../m4 $extra_includes -I $aclocaldir"
   *gettext* )
-    test -f "$aclocaldir/gettext.m4" || exit 77
-    ACLOCAL="$ACLOCAL -I $srcdir/../m4 -I $aclocaldir"
+    gettext_found=no
+    for d in $extra_includes $aclocaldir ; do
+       if [ "x$d" != "x-I" ] && [ -f "$d/gettext.m4" ] ; then
+          gettext_found=yes
+       fi
+    done
+    test "x$gettext_found" = "xyes" || exit 77
+    ACLOCAL="$ACLOCAL -I $srcdir/../m4 $extra_includes -I $aclocaldir"
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/tests/dirlist.test 
--- automake-1.6.2-orig/tests/dirlist.test      1969-12-31 19:00:00.000000000 
+++ automake-1.6.2/tests/dirlist.test   2002-07-19 18:33:10.000000000 -0400
@@ -0,0 +1,26 @@
+#! /bin/sh
+# Check dirlist support.
+# This test relies on m4/dirlist
+. $srcdir/defs || exit 1
+cat > <<EOF
+mkdir dirlist-test
+cat >>dirlist-test/dirlist-check.m4 << 'END'
+. $srcdir/../GUILE-VERSION
+$ACLOCAL || exit 1
+grep 'DEFUN.*AM_INIT_GUILE_MODULE' aclocal.m4

reply via email to

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