[Top][All Lists]
[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
- dirlist (Was: Re: automake/338: AM_GNU_GETTEXT([external]) support), (continued)
- dirlist (Was: Re: automake/338: AM_GNU_GETTEXT([external]) support), Alexandre Duret-Lutz, 2002/07/19
- Re: dirlist (Was: Re: automake/338: AM_GNU_GETTEXT([external]) support), Charles Wilson, 2002/07/19
- Re: dirlist, Alexandre Duret-Lutz, 2002/07/20
- Re: dirlist, Charles Wilson, 2002/07/20
- Re: dirlist, Charles Wilson, 2002/07/20
- Re: dirlist, Alexandre Duret-Lutz, 2002/07/21
- Re: dirlist, Charles Wilson, 2002/07/21
- Re: dirlist, Alexandre Duret-Lutz, 2002/07/21
- Re: dirlist, Charles Wilson, 2002/07/21
- Re: dirlist, Alexandre Duret-Lutz, 2002/07/21
- Re: dirlist,
Charles Wilson <=
- Re: dirlist, Alexandre Duret-Lutz, 2002/07/31
- Re: dirlist, Charles Wilson, 2002/07/31
Re: automake/338: AM_GNU_GETTEXT([external]) support, Alexandre Duret-Lutz, 2002/07/19