automake-patches
[Top][All Lists]
Advanced

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

Re: dirlist


From: Charles Wilson
Subject: Re: dirlist
Date: Sun, 21 Jul 2002 21:01:20 -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:


Maybe this explains why there is not a lot of reaction to
patches against aclocal <wink>.


Perhaps. One can always hope, after all.



 Charles> Back on topic: so do you want me to change the patch
 Charles> over to using $acdir and not acdir-APIVERSION?

I'd prefer, thanks.  But don't hurry; it'll take some time
before the paperwork is done, and Tom might went to make
additional comments when he comes back next week.


Okay, see attached.  Let this one simmer until Tom comes back.

--Chuck



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

        * aclocal.in: 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/Makefile.am: add the new test
        * m4/dirlist: support file for dirlist.test
        * m4/Makefile.am: 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/NEWS
--- automake-1.6.2-orig/NEWS    2002-06-14 03:12:14.000000000 -0400
+++ automake-1.6.2/NEWS 2002-07-21 20:16:36.000000000 -0400
@@ -1,3 +1,6 @@
+  - add support for extending aclocal's default macro search path
+    using a ``dirlist'' file within the $acdir 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/aclocal.in 
automake-1.6.2/aclocal.in
--- automake-1.6.2-orig/aclocal.in      2002-04-22 03:35:15.000000000 -0400
+++ automake-1.6.2/aclocal.in   2002-07-21 20:01:51.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 = "$default_acdir/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/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-21 20:10:02.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{configure.in}.  Any
+looking for macro definitions (@pxref{Macro search path}).  Then it 
+scans @file{configure.in}.  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.
 
address@hidden
+* 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 
aclocal
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
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
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
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}, 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@var{acdir}/dirlist} contains the following:
+
address@hidden
+/test1
+/test2
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
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
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
+
address@hidden/usr/share/aclocal/dirlist}
+
+which contains only the single line
+
address@hidden/usr/local/share/aclocal}
+
+Now, the ``default'' search path on the affected system is
+
address@hidden
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
+directories.
 
 @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/Makefile.am 
automake-1.6.2/m4/Makefile.am
--- automake-1.6.2-orig/m4/Makefile.am  2002-06-10 03:18:42.000000000 -0400
+++ automake-1.6.2/m4/Makefile.am       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/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
+./dirlist-test
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/tests/Makefile.am 
automake-1.6.2/tests/Makefile.am
--- automake-1.6.2-orig/tests/Makefile.am       2002-06-11 13:00:08.000000000 
-0400
+++ automake-1.6.2/tests/Makefile.am    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/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'`
+dirlistdir=${aclocaldir}-${aclocalver}
+extra_includes=""
+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`
+fi
 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"
     ;;
 esac
 
diff -urN -x .build -x .inst -x .sinst automake-1.6.2-orig/tests/dirlist.test 
automake-1.6.2/tests/dirlist.test
--- automake-1.6.2-orig/tests/dirlist.test      1969-12-31 19:00:00.000000000 
-0500
+++ 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 > configure.in <<EOF
+AC_INIT
+AM_INIT_GUILE_MODULE
+EOF
+
+mkdir dirlist-test
+
+cat >>dirlist-test/dirlist-check.m4 << 'END'
+AC_DEFUN([AM_INIT_GUILE_MODULE],[
+. $srcdir/../GUILE-VERSION
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+AC_CONFIG_AUX_DIR(..)
+module=[$1]
+AC_SUBST(module)])
+END
+
+$ACLOCAL || exit 1
+
+grep 'DEFUN.*AM_INIT_GUILE_MODULE' aclocal.m4

reply via email to

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