emacs-bug-tracker
[Top][All Lists]
Advanced

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

bug#71633: closed ([PATCH v2] aclocal: add --aclocal-path option to over


From: GNU bug Tracking System
Subject: bug#71633: closed ([PATCH v2] aclocal: add --aclocal-path option to override $ACLOCAL_PATH)
Date: Tue, 18 Jun 2024 22:01:02 +0000

Your message dated Tue, 18 Jun 2024 16:00:08 -0600
with message-id <202406182200.45IM08VT869154@freefriends.org>
and subject line 
has caused the debbugs.gnu.org bug report #71633,
regarding [PATCH v2] aclocal: add --aclocal-path option to override 
$ACLOCAL_PATH
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
71633: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71633
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: Re: [PATCH v2] aclocal: add --aclocal-path option to override $ACLOCAL_PATH Date: Tue, 18 Jun 2024 11:32:33 -0600
    Date: Mon, 24 Jan 2022 03:33:51 -0500
    From: Mike Frysinger <vapier@gentoo.org>
    To: automake-patches@gnu.org
    Subject: [PATCH v2] aclocal: add --aclocal-path option to override
     $ACLOCAL_PATH

    The $ACLOCAL_PATH env var is useful, but setting environment vars
    is a bit clunky.  Add an --aclocal-path option to override it like
    we already have with --automake-acdir.

I finally installed this patch, plus assorted wording changes. Thanks.

The m4 search list in the output of aclocal --help was not really
correct before. I relabeled items to be less of a lie, although the
report can't be made completely accurate without redoing some of the
code, and computing all the paths before outputting the help message.
That didn't seem desirable.

I was testing with invocations like:
  ak=/my/automake/checkout
  incls="-I /incl --aclocal-path=/acpopt --automake-acdir=/acdopt"
  envs="ACLOCAL_AUTOMAKE_DIR=/acadenv ACLOCAL_PATH=/acpenv"
  env PERL5LIB=$ak/lib $envs $ak/bin/aclocal $incls --help

karl

-----------------------------------------------------------------------------
aclocal: add --aclocal-path option to override ACLOCAL_PATH envvar.

>From https://lists.gnu.org/archive/html/automake-patches/2022-01/msg00029.html
(plus wording tweaks from Karl; and thanks to Bogdan for research).

* bin/aclocal.in (usage): relabel output of m4 search path
components to be somewhat more correct (Karl), although it's still
a mess.
(parse_arguments): add new option --aclocal-path=s.
(parse_ACLOCAL_PATH): use $aclocal_path instead of hardwiring envvar.
* doc/automake.texi (aclocal Options): document it.
(dirlist): new anchor so we can reference it.
(Modifying the Macro Search Path: @file{ACLOCAL_PATH}): mention
the option.
(Possible future incompatibility): tone down; it might never happen.
* t/aclocal-path-precedence.sh: test the option.
* NEWS: mention the new option.
diff --git a/NEWS b/NEWS
index b0268d268..bf8c72d32 100644
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,9 @@ New in 1.17:
     it should be the basename of the Texinfo file, extended with .info.
     (bug#54063)

+  - aclocal has a new option --aclocal-path to override $ACLOCAL_PATH.
+    (https://lists.gnu.org/archive/html/automake-patches/2022-01/msg00029.html)
+
   - The missing script also supports autoreconf, autogen, and perl.
     (https://lists.gnu.org/archive/html/automake-patches/2015-08/msg00000.html)

diff --git a/bin/aclocal.in b/bin/aclocal.in
index 140c5ad29..4d01f3a4d 100644
--- a/bin/aclocal.in
+++ b/bin/aclocal.in
@@ -62,11 +62,12 @@ $perl_threads = 0;
 # @user_includes can be augmented with -I or AC_CONFIG_MACRO_DIRS.
 # @automake_includes can be reset with the '--automake-acdir' option.
 # @system_includes can be augmented with the 'dirlist' file or the
-# ACLOCAL_PATH environment variable, and reset with the '--system-acdir'
-# option.
+# --aclocal-path option/ACLOCAL_PATH environment variable, and reset
+# with the '--system-acdir' option.
 my @user_includes = ();
 my @automake_includes = ('@datadir@/aclocal-' . $APIVERSION);
 my @system_includes = ('@datadir@/aclocal');
+my $aclocal_path = '';

 # Whether we should copy M4 file in $user_includes[0].
 my $install = 0;
@@ -1031,6 +1032,8 @@ Generate 'aclocal.m4' by scanning 'configure.ac' or 
'configure.in'

 Options:
       --automake-acdir=DIR  directory holding automake-provided m4 files
+      --aclocal-path=PATH   colon-separated list of directories to
+                              search for third-party local files
       --system-acdir=DIR    directory holding third-party system-wide files
       --diff[=COMMAND]      run COMMAND [diff -u] on M4 files that would be
                             changed (implies --install and --dry-run)
@@ -1055,18 +1058,27 @@ EOF
   # pages during Automake compilation, the environment is set to local values.
   # So don't include it in the installed man page.
   if (!$ENV{AUTOMAKE_HELP2MAN}) {
-    my $aclocal_automake_dir = $ENV{"ACLOCAL_AUTOMAKE_DIR"} || "";
-    my $aclocal_path = $ENV{"ACLOCAL_PATH"} || "";
+    my $aclocal_automake_dir_env = $ENV{"ACLOCAL_AUTOMAKE_DIR"} || "";
+    my $aclocal_path_env = $ENV{"ACLOCAL_PATH"} || "";
     print <<"EOF";

-Current m4 search paths (in order):
-  -I dirs:                  @user_includes
-  --automake-acdir:         @automake_includes
-  \$ACLOCAL_AUTOMAKE_DIR:    $aclocal_automake_dir
-  \$ACLOCAL_PATH:            $aclocal_path
-  --system-acdir:           @system_includes
+m4 search paths (in order):
+      user includes: @user_includes
+  automake includes: @automake_includes
+    system includes: @system_includes
+       aclocal path: $aclocal_path
+
+Environment variable settings, for reference:
+  \$ACLOCAL_AUTOMAKE_DIR:    $aclocal_automake_dir_env
+  \$ACLOCAL_PATH:            $aclocal_path_env
 EOF
   }
+  # The above listing of paths is rather a mess.  Because we don't
+  # compute all paths before outputting the help, the aclocal paths and
+  # ac_config_macro_dirs are not added to the system includes.  And
+  # because we don't keep track separately of command line values given
+  # to -I and the other options, we can't report them separately from
+  # the environment variables.

   print <<'EOF';

@@ -1106,6 +1118,7 @@ sub parse_arguments ()
      'version'         => \&version,
      'system-acdir=s'  => sub { shift; @system_includes = @_; },
      'automake-acdir=s'        => sub { shift; @automake_includes = @_; },
+     'aclocal-path=s'   => sub { shift; $aclocal_path = $_[0]; },
      'diff:s'          => \$diff_command,
      'dry-run'         => \$dry_run,
      'force'           => \$force_output,
@@ -1160,11 +1173,11 @@ sub parse_arguments ()
     }
 }

-# Add any directory listed in the 'ACLOCAL_PATH' environment variable
-# to the list of system include directories.
+# Add any directory listed in $aclocal_path to the list of system
+# include directories.
 sub parse_ACLOCAL_PATH ()
 {
-  return if not defined $ENV{"ACLOCAL_PATH"};
+  return if not $aclocal_path;
   
   # Directories in ACLOCAL_PATH should take precedence over system
   # directories, so we use unshift.  However, directories that
@@ -1176,7 +1189,7 @@ sub parse_ACLOCAL_PATH ()
   # but this seems simpler.
   my $path_sep = $^O =~ /^(os2|mswin)/i ? ';' : ':';
   
-  foreach my $dir (reverse split $path_sep, $ENV{"ACLOCAL_PATH"})
+  foreach my $dir (reverse split $path_sep, $aclocal_path)
     {
       unshift (@system_includes, $dir) if $dir ne '' && -d $dir;
     }
@@ -1193,6 +1206,8 @@ if (exists $ENV{"AUTOMAKE_UNINSTALLED"})

 @automake_includes = ($ENV{"ACLOCAL_AUTOMAKE_DIR"})
   if (exists $ENV{"ACLOCAL_AUTOMAKE_DIR"});
+$aclocal_path = ($ENV{"ACLOCAL_PATH"})
+  if (exists $ENV{"ACLOCAL_PATH"});

 parse_WARNINGS;                    # Parse the WARNINGS environment variable.
 parse_arguments;
diff --git a/doc/automake.texi b/doc/automake.texi
index 0ae2d4f33..4bfff91c3 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -3372,6 +3372,19 @@ The environment variable @env{ACLOCAL_AUTOMAKE_DIR} 
provides another
 way to set the directory containing automake-provided macro files.
 However @option{--automake-acdir} takes precedence over it.

+@item --aclocal-path=@var{path}
+@opindex --aclocal-path
+Look for local third-party macro files (and the special @file{dirlist}
+file, @pxref{dirlist}) along @var{path} (a colon-separated list of
+directories) instead of in the installation directory.  (This can be
+used for building against alternative system roots (``sysroots'') for
+finding headers and libraries.)
+
+@vindex ACLOCAL_PATH
+The environment variable @env{ACLOCAL_PATH} provides another way to
+set the search path containing local third-party macro files. This
+variable is ignored if the @option{--aclocal-path} option is specified.
+
 @item --system-acdir=@var{dir}
 @opindex --system-acdir
 Look for the system-wide third-party macro files (and the special
@@ -3529,6 +3542,7 @@ Any extra directories specified using @option{-I} options
 @item @var{acdir}
 @end enumerate

+@anchor{dirlist}
 @subsubheading Modifying the Macro Search Path: @file{dirlist}
 @cindex @file{dirlist}

@@ -3614,40 +3628,46 @@ copy of Automake in your account and want 
@command{aclocal} to look for
 macros installed at other places on the system.

 @anchor{ACLOCAL_PATH}
-@subsubheading Modifying the Macro Search Path: @file{ACLOCAL_PATH}
+@subsubheading Modifying the Macro Search Path: 
@option{--aclocal-path}/@file{ACLOCAL_PATH}
+@opindex @option{--aclocal-path}
 @cindex @env{ACLOCAL_PATH}

 The fourth and last mechanism to customize the macro search path is
-also the simplest.  Any directory included in the colon-separated
-environment variable @env{ACLOCAL_PATH} is added to the search path
+also the simplest.  Any directory included in the colon-separated path
+given to the @option{--aclocal-path} command-line option or in the
+@env{ACLOCAL_PATH} environment variable is added to the search path.
 @c Keep in sync with aclocal-path-precedence.sh
-and takes precedence over system directories (including those found via
-@file{dirlist}), with the exception of the versioned directory
-@var{acdir-APIVERSION} (@pxref{Macro Search Path}).  However, directories
-passed via @option{-I} will take precedence over directories in
-@env{ACLOCAL_PATH}.
-
-@c Keep in sync with aclocal-path-installed.sh
-Also note that, if the @option{--install} option is used, any @file{.m4}
-file containing a required macro that is found in a directory listed in
-@env{ACLOCAL_PATH} will be installed locally.
-@c Keep in sync with aclocal-path-installed-serial.sh
-In this case, serial numbers in @file{.m4} are honored too,
-@pxref{Serials}.
-
-Conversely to @file{dirlist}, @env{ACLOCAL_PATH} is useful if you are
-using a global copy of Automake and want @command{aclocal} to look for
+These directories take precedence over system directories (including
+those found via @file{dirlist}), with the exception of the versioned
+directory @var{acdir-APIVERSION} (@pxref{Macro Search Path}).
+However, directories passed via @option{-I} will take precedence over
+directories in @option{--aclocal-path}/@env{ACLOCAL_PATH}.
+
+@c Keep in sync with aclocal-path-install.sh
+If the @option{--install} option is used, any @file{.m4} file
+containing a required macro that is found in a directory listed in
+@option{--aclocal-path}/@env{ACLOCAL_PATH} will be installed locally.
+@c Keep in sync with aclocal-path-install-serial.sh
+In this case, serial numbers in @file{.m4} are honored too
+(@pxref{Serials}).
+
+Conversely to @file{dirlist},
+@option{--aclocal-path}/@env{ACLOCAL_PATH} is useful if you are using
+a global copy of Automake and want @command{aclocal} to look for
 macros somewhere under your home directory.

-@subsubheading Planned future incompatibility
+@subsubheading Possible future incompatibility

-The order in which the directories in the macro search path are currently
-looked up is confusing and/or suboptimal in various aspects, and is
-probably going to be changed in the future Automake release.  In
-particular, directories in @env{ACLOCAL_PATH} and @file{@var{acdir}}
+The order in which the directories in the macro search path are
+currently looked up is confusing and/or suboptimal in various aspects.
+In particular, directories in
+@option{--aclocal-path}/@env{ACLOCAL_PATH} and @file{@var{acdir}}
 might end up taking precedence over @file{@var{acdir-APIVERSION}}, and
-directories in @file{@var{acdir}/dirlist} might end up taking precedence
-over @file{@var{acdir}}.  @emph{This is a possible future incompatibility!}
+directories in @file{@var{acdir}/dirlist} might end up taking
+precedence over @file{@var{acdir}}.  Although there are no plans to
+change the current behavior, if it causes problems, the default might
+need to be changed, and the current behavior retained as an
+option.

 @node Extending aclocal
 @subsection Writing your own aclocal macros
diff --git a/t/aclocal-path-precedence.sh b/t/aclocal-path-precedence.sh
index 57b1adadf..5dbf20f04 100644
--- a/t/aclocal-path-precedence.sh
+++ b/t/aclocal-path-precedence.sh
@@ -26,6 +26,7 @@ FOO_MACRO
 BAR_MACRO
 AC_PROG_LIBTOOL
 AM_GNU_GETTEXT
+AC_OUTPUT
 END

 mkdir mdir1 mdir2 mdir3 sysdir extradir
@@ -88,4 +89,32 @@ $FGREP 'am__api_version' configure
 # A final sanity check.
 $FGREP '::fail' configure && exit 1

+# Same checks, but now with the command line option.
+ACLOCAL_PATH=mdir2:mdir1 $ACLOCAL -I mdir3 --system-acdir sysdir 
--aclocal-path "mdir1:mdir2"
+$ACLOCAL -I mdir3 --system-acdir sysdir --aclocal-path "mdir1:mdir2"
+$AUTOCONF
+
+$FGREP '::' configure # For debugging.
+
+# Directories coming first in ACLOCAL_PATH should take precedence
+# over those coming later.
+$FGREP '::pass-foo::' configure
+
+# Directories from '-I' options should take precedence over directories
+# in ACLOCAL_PATH.
+$FGREP '::pass-bar::' configure
+
+# Directories in ACLOCAL_PATH should take precedence over system acdir
+# (typically '${prefix}/share/aclocal'), and any directory added through
+# the 'dirlist' special file.
+$FGREP '::pass-gettext::' configure
+$FGREP '::pass-libtool::' configure
+
+# Directories in ACLOCAL_PATH shouldn't take precedence over the internal
+# automake acdir (typically '${prefix}/share/aclocal-${APIVERSION}').
+$FGREP 'am__api_version' configure
+
+# A final sanity check.
+$FGREP '::fail' configure && exit 1
+
 :

compile finished at Tue Jun 18 10:31:03 2024



--- End Message ---
--- Begin Message --- Subject: Date: Tue, 18 Jun 2024 16:00:08 -0600
Oops, this debbugs report was created when I replied to the original
message, before automake-patches was connected to debbugs.
https://lists.gnu.org/archive/html/automake-patches/2022-01/msg00029.html

Closing ...


--- End Message ---

reply via email to

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