FM

//bin UP

#!/usr/bin/perl -w
# -*- perl -*-
# Generated from bin/aclocal.in; do not edit by hand.

eval 'case $# in 0) exec /usr/bin/perl -S "$0";; *) exec /usr/bin/perl -S "$0" "$@";; esac'
    if 0;

# aclocal - create aclocal.m4 by scanning configure.ac

# Copyright (C) 1996-2018 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

# Written by Tom Tromey <tromey@redhat.com>, and
# Alexandre Duret-Lutz <adl@gnu.org>.

BEGIN
{
  unshift (@INC, '/usr/share/automake-1.16')
    unless $ENV{AUTOMAKE_UNINSTALLED};
}

use strict;

use Automake::Config;
use Automake::General;
use Automake::Configure_ac;
use Automake::Channels;
use Automake::ChannelDefs;
use Automake::XFile;
use Automake::FileUtils;
use File::Basename;
use File::Path ();

# Some globals.

# Support AC_CONFIG_MACRO_DIRS also with older autoconf.
# FIXME: To be removed in Automake 2.0, once we can assume autoconf
#        2.70 or later.
# FIXME: keep in sync with 'internal/ac-config-macro-dirs.m4'.
my $ac_config_macro_dirs_fallback =
  'm4_ifndef([AC_CONFIG_MACRO_DIRS], [' .
    'm4_defun([_AM_CONFIG_MACRO_DIRS], [])' .
    'm4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])' .
  '])';

# We do not operate in threaded mode.
$perl_threads = 0;

# Include paths for searching macros.  We search macros in this order:
# user-supplied directories first, then the directory containing the
# automake macros, and finally the system-wide directories for
# third-party macros.
# @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.
my @user_includes = ();
my @automake_includes = ('/usr/share/aclocal-' . $APIVERSION);
my @system_includes = ('/usr/share/aclocal');

# Whether we should copy M4 file in $user_includes[0].
my $install = 0;

# --diff
my @diff_command;

# --dry-run
my $dry_run = 0;

# configure.ac or configure.in.
my $configure_ac;

# Output file name.
my $output_file = 'aclocal.m4';

# Option --force.
my $force_output = 0;

# Modification time of the youngest dependency.
my $greatest_mtime = 0;

# Which macros have been seen.
my %macro_seen = ();

# Remember the order into which we scanned the files.
# It's important to output the contents of aclocal.m4 in the opposite order.
# (Definitions in first files we have scanned should override those from
# later files.  So they must appear last in the output.)
my @file_order = ();

# Map macro names to file names.
my %map = ();

# Ditto, but records the last definition of each macro as returned by --trace.
my %map_traced_defs = ();

# Map basenames to macro names.
my %invmap = ();

# Map file names to file contents.
my %file_contents = ();

# Map file names to file types.
my %file_type = ();
use constant FT_USER => 1;
use constant FT_AUTOMAKE => 2;
use constant FT_SYSTEM => 3;

# Map file names to included files (transitively closed).
my %file_includes = ();

# Files which have already been added.
my %file_added = ();

# Files that have already been scanned.
my %scanned_configure_dep = ();

# Serial numbers, for files that have one.
# The key is the basename of the file,
# the value is the serial number represented as a list.
my %serial = ();

# Matches a macro definition.
#   AC_DEFUN([macroname], ...)
# or
#   AC_DEFUN(macroname, ...)
# When macroname is '['-quoted , we accept any character in the name,
# except ']'.  Otherwise macroname stops on the first ']', ',', ')',
# or '\n' encountered.
my $ac_defun_rx =
  "(?:AU_ALIAS|A[CU]_DEFUN|AC_DEFUN_ONCE)\\((?:\\[([^]]+)\\]|([^],)\n]+))";

# Matches an AC_REQUIRE line.
my $ac_require_rx = "AC_REQUIRE\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)";

# Matches an m4_include line.
my $m4_include_rx = "(m4_|m4_s|s)include\\((?:\\[([^]]+)\\]|([^],)\n]+))\\)";

# Match a serial number.
my $serial_line_rx = '^#\s*serial\s+(\S*)';
my $serial_number_rx = '^\d+(?:\.\d+)*$';

# Autoconf version.  This variable is set by 'trace_used_macros'.
my $ac_version;

# User directory containing extra m4 files for macros definition,
# as extracted from calls to the macro AC_CONFIG_MACRO_DIRS.
# This variable is updated by 'trace_used_macros'.
my @ac_config_macro_dirs;

# If set, names a temporary file that must be erased on abnormal exit.
my $erase_me;

# Constants for the $ERR_LEVEL parameter of the 'scan_m4_dirs' function.
use constant SCAN_M4_DIRS_SILENT => 0;
use constant SCAN_M4_DIRS_WARN => 1;
use constant SCAN_M4_DIRS_ERROR => 2;

################################################################

# Prototypes for all subroutines.

sub add_file ($);
sub add_macro ($);
sub check_acinclude ();
sub install_file ($$);
sub list_compare (\@\@);
sub parse_ACLOCAL_PATH ();
sub parse_arguments ();
sub reset_maps ();
sub scan_configure ();
sub scan_configure_dep ($);
sub scan_file ($$$);
sub scan_m4_dirs ($$@);
sub scan_m4_files ();
sub strip_redundant_includes (%);
sub trace_used_macros ();
sub unlink_tmp (;$);
sub usage ($);
sub version ();
sub write_aclocal ($@);
sub xmkdir_p ($);

################################################################

# Erase temporary file ERASE_ME.  Handle signals.
sub unlink_tmp (;$)
{
  my ($sig) = @_;

  if ($sig)
    {
      verb "caught SIG$sig, bailing out";
    }
  if (defined $erase_me && -e $erase_me && !unlink ($erase_me))
    {
      fatal "could not remove '$erase_me': $!";
    }
  undef $erase_me;

  # reraise default handler.
  if ($sig)
    {
      $SIG{$sig} = 'DEFAULT';
      kill $sig => $$;
    }
}

$SIG{'INT'} = $SIG{'TERM'} = $SIG{'QUIT'} = $SIG{'HUP'} = 'unlink_tmp';
END { unlink_tmp }

sub xmkdir_p ($)
{
  my $dir = shift;
  local $@ = undef;
  return
    if -d $dir or eval { File::Path::mkpath $dir };
  chomp $@;
  $@ =~ s/\s+at\s.*\bline\s\d+.*$//;
  fatal "could not create directory '$dir': $@";
}

# Check macros in acinclude.m4.  If one is not used, warn.
sub check_acinclude ()
{
  foreach my $key (keys %map)
    {
      # FIXME: should print line number of acinclude.m4.
      msg ('syntax', "macro '$key' defined in acinclude.m4 but never used")
	if $map{$key} eq 'acinclude.m4' && ! exists $macro_seen{$key};
    }
}

sub reset_maps ()
{
  $greatest_mtime = 0;
  %macro_seen = ();
  @file_order = ();
  %map = ();
  %map_traced_defs = ();
  %file_contents = ();
  %file_type = ();
  %file_includes = ();
  %file_added = ();
  %scanned_configure_dep = ();
  %invmap = ();
  %serial = ();
  undef &search;
}

# install_file ($SRC, $DESTDIR)
sub install_file ($$)
{
  my ($src, $destdir) = @_;
  my $dest = $destdir . "/" . basename ($src);
  my $diff_dest;

  verb "installing $src to $dest";

  if ($force_output
      || !exists $file_contents{$dest}
      || $file_contents{$src} ne $file_contents{$dest})
    {
      if (-e $dest)
	{
	  msg 'note', "overwriting '$dest' with '$src'";
	  $diff_dest = $dest;
	}
      else
	{
	  msg 'note', "installing '$dest' from '$src'";
	}

      if (@diff_command)
	{
	  if (! defined $diff_dest)
	    {
	      # $dest does not exist.  We create an empty one just to
	      # run diff, and we erase it afterward.  Using the real
	      # the destination file (rather than a temporary file) is
	      # good when diff is run with options that display the
	      # file name.
	      #
	      # If creating $dest fails, fall back to /dev/null.  At
	      # least one diff implementation (Tru64's) cannot deal
	      # with /dev/null.  However working around this is not
	      # worth the trouble since nobody run aclocal on a
	      # read-only tree anyway.
	      $erase_me = $dest;
	      my $f = new IO::File "> $dest";
	      if (! defined $f)
		{
		  undef $erase_me;
		  $diff_dest = '/dev/null';
		}
	      else
		{
		  $diff_dest = $dest;
		  $f->close;
		}
	    }
	  my @cmd = (@diff_command, $diff_dest, $src);
	  $! = 0;
	  verb "running: @cmd";
	  my $res = system (@cmd);
	  Automake::FileUtils::handle_exec_errors "@cmd", 1
	    if $res;
	  unlink_tmp;
	}
      elsif (!$dry_run)
	{
          xmkdir_p ($destdir);
	  xsystem ('cp', $src, $dest);
	}
    }
}

# Compare two lists of numbers.
sub list_compare (\@\@)
{
  my @l = @{$_[0]};
  my @r = @{$_[1]};
  while (1)
    {
      if (0 == @l)
	{
	  return (0 == @r) ? 0 : -1;
	}
      elsif (0 == @r)
	{
	  return 1;
	}
      elsif ($l[0] < $r[0])
	{
	  return -1;
	}
      elsif ($l[0] > $r[0])
	{
	  return 1;
	}
      shift @l;
      shift @r;
    }
}

################################################################

# scan_m4_dirs($TYPE, $ERR_LEVEL, @DIRS)
# -----------------------------------------------
# Scan all M4 files installed in @DIRS for new macro definitions.
# Register each file as of type $TYPE (one of the FT_* constants).
# If a directory in @DIRS cannot be read:
#  - fail hard                if $ERR_LEVEL == SCAN_M4_DIRS_ERROR
#  - just print a warning     if $ERR_LEVEL == SCAN_M4_DIRS_WA
#  - continue silently        if $ERR_LEVEL == SCAN_M4_DIRS_SILENT
sub scan_m4_dirs ($$@)
{
  my ($type, $err_level, @dirlist) = @_;

  foreach my $m4dir (@dirlist)
    {
      if (! opendir (DIR, $m4dir))
	{
	  # TODO: maybe avoid complaining only if errno == ENONENT?
          my $message = "couldn't open directory '$m4dir': $!";

          if ($err_level == SCAN_M4_DIRS_ERROR)
            {
              fatal $message;
            }
          elsif ($err_level == SCAN_M4_DIRS_WARN)
            {
              msg ('unsupported', $message);
              next;
            }
          elsif ($err_level == SCAN_M4_DIRS_SILENT)
            {
              next; # Silently ignore.
            }
          else
            {
               prog_error "invalid \$err_level value '$err_level'";
            }
	}

      # We reverse the directory contents so that foo2.m4 gets
      # used in preference to foo1.m4.
      foreach my $file (reverse sort grep (! /^\./, readdir (DIR)))
	{
	  # Only examine .m4 files.
	  next unless $file =~ /\.m4$/;

	  # Skip some files when running out of srcdir.
	  next if $file eq 'aclocal.m4';

	  my $fullfile = File::Spec->canonpath ("$m4dir/$file");
	  scan_file ($type, $fullfile, 'aclocal');
	}
      closedir (DIR);
    }
}

# Scan all the installed m4 files and construct a map.
sub scan_m4_files ()
{
  # First, scan configure.ac.  It may contain macro definitions,
  # or may include other files that define macros.
  scan_file (FT_USER, $configure_ac, 'aclocal');

  # Then, scan acinclude.m4 if it exists.
  if (-f 'acinclude.m4')
    {
      scan_file (FT_USER, 'acinclude.m4', 'aclocal');
    }

  # Finally, scan all files in our search paths.

  if (@user_includes)
    {
      # Don't explore the same directory multiple times.  This is here not
      # only for speedup purposes.  We need this when the user has e.g.
      # specified 'ACLOCAL_AMFLAGS = -I m4' and has also set
      # AC_CONFIG_MACRO_DIR[S]([m4]) in configure.ac.  This makes the 'm4'
      # directory to occur twice here and fail on the second call to
      # scan_m4_dirs([m4]) when the 'm4' directory doesn't exist.
      # TODO: Shouldn't there be rather a check in scan_m4_dirs for
      #       @user_includes[0]?
      @user_includes = uniq @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 ? SCAN_M4_DIRS_SILENT : SCAN_M4_DIRS_WARN,
                    $user_includes[0]);
      scan_m4_dirs (FT_USER,
                    SCAN_M4_DIRS_ERROR,
		    @user_includes[1..$#user_includes]);
    }
  scan_m4_dirs (FT_AUTOMAKE, SCAN_M4_DIRS_ERROR, @automake_includes);
  scan_m4_dirs (FT_SYSTEM, SCAN_M4_DIRS_ERROR, @system_includes);

  # Construct a new function that does the searching.  We use a
  # function (instead of just evaluating $search in the loop) so that
  # "die" is correctly and easily propagated if run.
  my $search = "sub search {\nmy \$found = 0;\n";
  foreach my $key (reverse sort keys %map)
    {
      $search .= ('if (/\b\Q' . $key . '\E(?!\w)/) { add_macro ("' . $key
		  . '"); $found = 1; }' . "\n");
    }
  $search .= "return \$found;\n};\n";
  eval $search;
  prog_error "$@\n search is $search" if $@;
}

################################################################

# Add a macro to the output.
sub add_macro ($)
{
  my ($macro) = @_;

  # Ignore unknown required macros.  Either they are not really
  # needed (e.g., a conditional AC_REQUIRE), in which case aclocal
  # should be quiet, or they are needed and Autoconf itself will
  # complain when we trace for macro usage later.
  return unless defined $map{$macro};

  verb "saw macro $macro";
  $macro_seen{$macro} = 1;
  add_file ($map{$macro});
}

# scan_configure_dep ($file)
# --------------------------
# Scan a configure dependency (configure.ac, or separate m4 files)
# for uses of known macros and AC_REQUIREs of possibly unknown macros.
# Recursively scan m4_included files.
sub scan_configure_dep ($)
{
  my ($file) = @_;
  # Do not scan a file twice.
  return ()
    if exists $scanned_configure_dep{$file};
  $scanned_configure_dep{$file} = 1;

  my $mtime = mtime $file;
  $greatest_mtime = $mtime if $greatest_mtime < $mtime;

  my $contents = exists $file_contents{$file} ?
    $file_contents{$file} : contents $file;

  my $line = 0;
  my @rlist = ();
  my @ilist = ();
  foreach (split ("\n", $contents))
    {
      ++$line;
      # Remove comments from current line.
      s/\bdnl\b.*$//;
      s/\#.*$//;
      # Avoid running all the following regexes on white lines.
      next if /^\s*$/;

      while (/$m4_include_rx/go)
	{
	  my $ifile = $2 || $3;
	  # Skip missing 'sinclude'd files.
	  next if $1 ne 'm4_' && ! -f $ifile;
	  push @ilist, $ifile;
	}

      while (/$ac_require_rx/go)
	{
	  push (@rlist, $1 || $2);
	}

      # The search function is constructed dynamically by
      # scan_m4_files.  The last parenthetical match makes sure we
      # don't match things that look like macro assignments or
      # AC_SUBSTs.
      if (! &search && /(^|\s+)(AM_[A-Z0-9_]+)($|[^\]\)=A-Z0-9_])/)
	{
	  # Macro not found, but AM_ prefix found.
	  # Make this just a warning, because we do not know whether
	  # the macro is actually used (it could be called conditionally).
	  msg ('unsupported', "$file:$line",
	       "macro '$2' not found in library");
	}
    }

  add_macro ($_) foreach (@rlist);
  scan_configure_dep ($_) foreach @ilist;
}

# add_file ($FILE)
# ----------------
# Add $FILE to output.
sub add_file ($)
{
  my ($file) = @_;

  # Only add a file once.
  return if ($file_added{$file});
  $file_added{$file} = 1;

  scan_configure_dep $file;
}

# Point to the documentation for underquoted AC_DEFUN only once.
my $underquoted_manual_once = 0;

# scan_file ($TYPE, $FILE, $WHERE)
# --------------------------------
# Scan a single M4 file ($FILE), and all files it includes.
# Return the list of included files.
# $TYPE is one of FT_USER, FT_AUTOMAKE, or FT_SYSTEM, depending
# on where the file comes from.
# $WHERE is the location to use in the diagnostic if the file
# does not exist.
sub scan_file ($$$)
{
  my ($type, $file, $where) = @_;
  my $basename = basename $file;

  # Do not scan the same file twice.
  return @{$file_includes{$file}} if exists $file_includes{$file};
  # Prevent potential infinite recursion (if two files include each other).
  return () if exists $file_contents{$file};

  unshift @file_order, $file;

  $file_type{$file} = $type;

  fatal "$where: file '$file' does not exist" if ! -e $file;

  my $fh = new Automake::XFile $file;
  my $contents = '';
  my @inc_files = ();
  my %inc_lines = ();

  my $defun_seen = 0;
  my $serial_seen = 0;
  my $serial_older = 0;

  while ($_ = $fh->getline)
    {
      # Ignore '##' lines.
      next if /^##/;

      $contents .= $_;
      my $line = $_;

      if ($line =~ /$serial_line_rx/go)
	{
	  my $number = $1;
	  if ($number !~ /$serial_number_rx/go)
	    {
	      msg ('syntax', "$file:$.",
		   "ill-formed serial number '$number', "
		   . "expecting a version string with only digits and dots");
	    }
	  elsif ($defun_seen)
	    {
	      # aclocal removes all definitions from M4 file with the
	      # same basename if a greater serial number is found.
	      # Encountering a serial after some macros will undefine
	      # these macros...
	      msg ('syntax', "$file:$.",
		   'the serial number must appear before any macro definition');
	    }
	  # We really care about serials only for non-automake macros
	  # and when --install is used.  But the above diagnostics are
	  # made regardless of this, because not using --install is
	  # not a reason not the fix macro files.
	  elsif ($install && $type != FT_AUTOMAKE)
	    {
	      $serial_seen = 1;
	      my @new = split (/\./, $number);

	      verb "$file:$.: serial $number";

	      if (!exists $serial{$basename}
		  || list_compare (@new, @{$serial{$basename}}) > 0)
		{
		  # Delete any definition we knew from the old macro.
		  foreach my $def (@{$invmap{$basename}})
		    {
		      verb "$file:$.: ignoring previous definition of $def";
		      delete $map{$def};
		    }
		  $invmap{$basename} = [];
		  $serial{$basename} = \@new;
		}
	      else
		{
		  $serial_older = 1;
		}
	    }
	}

      # Remove comments from current line.
      # Do not do it earlier, because the serial line is a comment.
      $line =~ s/\bdnl\b.*$//;
      $line =~ s/\#.*$//;

      while ($line =~ /$ac_defun_rx/go)
	{
	  $defun_seen = 1;
	  if (! defined $1)
	    {
	      msg ('syntax', "$file:$.", "underquoted definition of $2"
		   . "\n  run info Automake 'Extending aclocal'\n"
		   . "  or see https://www.gnu.org/software/automake/manual/"
		   . "automake.html#Extending-aclocal")
		unless $underquoted_manual_once;
	      $underquoted_manual_once = 1;
	    }

	  # If this macro does not have a serial and we have already
	  # seen a macro with the same basename earlier, we should
	  # ignore the macro (don't exit immediately so we can still
	  # diagnose later #serial numbers and underquoted macros).
	  $serial_older ||= ($type != FT_AUTOMAKE
			     && !$serial_seen && exists $serial{$basename});

	  my $macro = $1 || $2;
	  if (!$serial_older && !defined $map{$macro})
	    {
	      verb "found macro $macro in $file: $.";
	      $map{$macro} = $file;
	      push @{$invmap{$basename}}, $macro;
	    }
	  else
	    {
	      # Note: we used to give an error here if we saw a
	      # duplicated macro.  However, this turns out to be
	      # extremely unpopular.  It causes actual problems which
	      # are hard to work around, especially when you must
	      # mix-and-match tool versions.
	      verb "ignoring macro $macro in $file: $.";
	    }
	}

      while ($line =~ /$m4_include_rx/go)
	{
	  my $ifile = $2 || $3;
	  # Skip missing 'sinclude'd files.
	  next if $1 ne 'm4_' && ! -f $ifile;
	  push (@inc_files, $ifile);
	  $inc_lines{$ifile} = $.;
	}
    }

  # Ignore any file that has an old serial (or no serial if we know
  # another one with a serial).
  return ()
    if ($serial_older ||
	($type != FT_AUTOMAKE && !$serial_seen && exists $serial{$basename}));

  $file_contents{$file} = $contents;

  # For some reason I don't understand, it does not work
  # to do "map { scan_file ($_, ...) } @inc_files" below.
  # With Perl 5.8.2 it undefines @inc_files.
  my @copy = @inc_files;
  my @all_inc_files = (@inc_files,
		       map { scan_file ($type, $_,
					"$file:$inc_lines{$_}") } @copy);
  $file_includes{$file} = \@all_inc_files;
  return @all_inc_files;
}

# strip_redundant_includes (%FILES)
# ---------------------------------
# Each key in %FILES is a file that must be present in the output.
# However some of these files might already include other files in %FILES,
# so there is no point in including them another time.
# This removes items of %FILES which are already included by another file.
sub strip_redundant_includes (%)
{
  my %files = @_;

  # Always include acinclude.m4, even if it does not appear to be used.
  $files{'acinclude.m4'} = 1 if -f 'acinclude.m4';
  # File included by $configure_ac are redundant.
  $files{$configure_ac} = 1;

  # Files at the end of @file_order should override those at the beginning,
  # so it is important to preserve these trailing files.  We can remove
  # a file A if it is going to be output before a file B that includes
  # file A, not the converse.
  foreach my $file (reverse @file_order)
    {
      next unless exists $files{$file};
      foreach my $ifile (@{$file_includes{$file}})
	{
	  next unless exists $files{$ifile};
	  delete $files{$ifile};
	  verb "$ifile is already included by $file";
	}
    }

  # configure.ac is implicitly included.
  delete $files{$configure_ac};

  return %files;
}

sub trace_used_macros ()
{
  my %files = map { $map{$_} => 1 } keys %macro_seen;
  %files = strip_redundant_includes %files;

  # When AC_CONFIG_MACRO_DIRS is used, avoid possible spurious warnings
  # from autom4te about macros being "m4_require'd but not m4_defun'd";
  # for more background, see:
  # https://lists.gnu.org/archive/html/autoconf-patches/2012-11/msg00004.html
  # as well as autoconf commit 'v2.69-44-g1ed0548', "warn: allow aclocal
  # to silence m4_require warnings".
  my $early_m4_code .= "m4_define([m4_require_silent_probe], [-])";

  my $traces = ($ENV{AUTOM4TE} || 'autom4te');
  $traces .= " --language Autoconf-without-aclocal-m4 ";
  $traces = "echo '$early_m4_code' | $traces - ";

  # Support AC_CONFIG_MACRO_DIRS also with older autoconf.
  # Note that we can't use '$ac_config_macro_dirs_fallback' here, because
  # a bug in option parsing code of autom4te 2.68 and earlier will cause
  # it to read standard input last, even if the "-" argument is specified
  # early.
  # FIXME: To be removed in Automake 2.0, once we can assume autoconf
  #        2.70 or later.
  $traces .= "$automake_includes[0]/internal/ac-config-macro-dirs.m4 ";

  # All candidate files.
  $traces .= join (' ',
		   (map { "'$_'" }
		    (grep { exists $files{$_} } @file_order))) . " ";

  # All candidate macros.
  $traces .= join (' ',
		   (map { "--trace='$_:\$f::\$n::\${::}%'" }
		    ('AC_DEFUN',
		     'AC_DEFUN_ONCE',
		     'AU_DEFUN',
		     '_AM_AUTOCONF_VERSION',
		     'AC_CONFIG_MACRO_DIR_TRACE',
                     # FIXME: Tracing the next two macros is a hack for
                     # compatibility with older autoconf.  Remove this in
                     # Automake 2.0, when we can assume Autoconf 2.70 or
                     # later.
		     'AC_CONFIG_MACRO_DIR',
		     '_AM_CONFIG_MACRO_DIRS')),
		   # Do not trace $1 for all other macros as we do
		   # not need it and it might contains harmful
		   # characters (like newlines).
		   (map { "--trace='$_:\$f::\$n'" } (keys %macro_seen)));

  verb "running $traces $configure_ac";

  my $tracefh = new Automake::XFile ("$traces $configure_ac |");

  @ac_config_macro_dirs = ();

  my %traced = ();

  while ($_ = $tracefh->getline)
    {
      chomp;
      my ($file, $macro, $arg1) = split (/::/);

      $traced{$macro} = 1 if exists $macro_seen{$macro};

      if ($macro eq 'AC_DEFUN' || $macro eq 'AC_DEFUN_ONCE'
            || $macro eq 'AU_DEFUN')
        {
          $map_traced_defs{$arg1} = $file;
        }
      elsif ($macro eq '_AM_AUTOCONF_VERSION')
        {
          $ac_version = $arg1;
        }
      elsif ($macro eq 'AC_CONFIG_MACRO_DIR_TRACE')
        {
          push @ac_config_macro_dirs, $arg1;
        }
      # FIXME: We still need to trace AC_CONFIG_MACRO_DIR
      # for compatibility with older autoconf.  Remove this
      # once we can assume Autoconf 2.70 or later.
      elsif ($macro eq 'AC_CONFIG_MACRO_DIR')
        {
          @ac_config_macro_dirs = ($arg1);
        }
      # FIXME:This is an hack for compatibility with older autoconf.
      # Remove this once we can assume Autoconf 2.70 or later.
      elsif ($macro eq '_AM_CONFIG_MACRO_DIRS')
        {
           # Empty leading/trailing fields might be produced by split,
           # hence the grep is really needed.
           push @ac_config_macro_dirs, grep (/./, (split /\s+/, $arg1));
        }
    }

  # FIXME: in Autoconf >= 2.70, AC_CONFIG_MACRO_DIR calls
  # AC_CONFIG_MACRO_DIR_TRACE behind the scenes, which could
  # leave unwanted duplicates in @ac_config_macro_dirs.
  # Remove this in Automake 2.0, when we'll stop tracing
  # AC_CONFIG_MACRO_DIR explicitly.
  @ac_config_macro_dirs = uniq @ac_config_macro_dirs;

  $tracefh->close;

  return %traced;
}

sub scan_configure ()
{
  # Make sure we include acinclude.m4 if it exists.
  if (-f 'acinclude.m4')
    {
      add_file ('acinclude.m4');
    }
  scan_configure_dep ($configure_ac);
}

################################################################

# Write output.
# Return 0 iff some files were installed locally.
sub write_aclocal ($@)
{
  my ($output_file, @macros) = @_;
  my $output = '';

  my %files = ();
  # Get the list of files containing definitions for the macros used.
  # (Filter out unused macro definitions with $map_traced_defs.  This
  # can happen when an Autoconf macro is conditionally defined:
  # aclocal sees the potential definition, but this definition is
  # actually never processed and the Autoconf implementation is used
  # instead.)
  for my $m (@macros)
    {
      $files{$map{$m}} = 1
	if (exists $map_traced_defs{$m}
	    && $map{$m} eq $map_traced_defs{$m});
    }
  # Do not explicitly include a file that is already indirectly included.
  %files = strip_redundant_includes %files;

  my $installed = 0;

  for my $file (grep { exists $files{$_} } @file_order)
    {
      # Check the time stamp of this file, and of all files it includes.
      for my $ifile ($file, @{$file_includes{$file}})
	{
	  my $mtime = mtime $ifile;
	  $greatest_mtime = $mtime if $greatest_mtime < $mtime;
	}

      # If the file to add looks like outside the project, copy it
      # to the output.  The regex catches filenames starting with
      # things like '/', '\', or 'c:\'.
      if ($file_type{$file} != FT_USER
	  || $file =~ m,^(?:\w:)?[\\/],)
	{
	  if (!$install || $file_type{$file} != FT_SYSTEM)
	    {
	      # Copy the file into aclocal.m4.
	      $output .= $file_contents{$file} . "\n";
	    }
	  else
	    {
	      # Install the file (and any file it includes).
	      my $dest;
	      for my $ifile (@{$file_includes{$file}}, $file)
		{
		  install_file ($ifile, $user_includes[0]);
		}
	      $installed = 1;
	    }
	}
      else
	{
	  # Otherwise, simply include the file.
	  $output .= "m4_include([$file])\n";
	}
    }

  if ($installed)
    {
      verb "running aclocal anew, because some files were installed locally";
      return 0;
    }

  # Nothing to output?!
  # FIXME: Shouldn't we diagnose this?
  return 1 if ! length ($output);

  if ($ac_version)
    {
      # Do not use "$output_file" here for the same reason we do not
      # use it in the header below.  autom4te will output the name of
      # the file in the diagnostic anyway.
      $output = "m4_ifndef([AC_AUTOCONF_VERSION],
  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [$ac_version],,
[m4_warning([this file was generated for autoconf $ac_version.
You have another version of autoconf.  It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])

$output";
    }

  # We used to print "# $output_file generated automatically etc."  But
  # this creates spurious differences when using autoreconf.  Autoreconf
  # creates aclocal.m4t and then rename it to aclocal.m4, but the
  # rebuild rules generated by Automake create aclocal.m4 directly --
  # this would gives two ways to get the same file, with a different
  # name in the header.
  $output = "# generated automatically by aclocal $VERSION -*- Autoconf -*-

# Copyright (C) 1996-$RELEASE_YEAR Free Software Foundation, Inc.

# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

$ac_config_macro_dirs_fallback
$output";

  # We try not to update $output_file unless necessary, because
  # doing so invalidate Autom4te's cache and therefore slows down
  # tools called after aclocal.
  #
  # We need to overwrite $output_file in the following situations.
  #   * The --force option is in use.
  #   * One of the dependencies is younger.
  #     (Not updating $output_file in this situation would cause
  #     make to call aclocal in loop.)
  #   * The contents of the current file are different from what
  #     we have computed.
  if (!$force_output
      && $greatest_mtime < mtime ($output_file)
      && $output eq contents ($output_file))
    {
      verb "$output_file unchanged";
      return 1;
    }

  verb "writing $output_file";

  if (!$dry_run)
    {
      if (-e $output_file && !unlink $output_file)
        {
	  fatal "could not remove '$output_file': $!";
	}
      my $out = new Automake::XFile "> $output_file";
      print $out $output;
    }
  return 1;
}

################################################################

# Print usage and exit.
sub usage ($)
{
  my ($status) = @_;

  print <<'EOF';
Usage: aclocal [OPTION]...

Generate 'aclocal.m4' by scanning 'configure.ac' or 'configure.in'

Options:
      --automake-acdir=DIR  directory holding automake-provided m4 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)
      --dry-run             pretend to, but do not actually update any file
      --force               always update output file
      --help                print this help, then exit
  -I DIR                    add directory to search list for .m4 files
      --install             copy third-party files to the first -I directory
      --output=FILE         put output in FILE (default aclocal.m4)
      --print-ac-dir        print name of directory holding system-wide
                              third-party m4 files, then exit
      --verbose             don't be silent
      --version             print version number, then exit
  -W, --warnings=CATEGORY   report the warnings falling in CATEGORY

Warning categories include:
  syntax        dubious syntactic constructs (default)
  unsupported   unknown macros (default)
  all           all the warnings (default)
  no-CATEGORY   turn off warnings in CATEGORY
  none          turn off all the warnings
  error         treat warnings as errors

Report bugs to <bug-automake@gnu.org>.
GNU Automake home page: <http://www.gnu.org/software/automake/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.
EOF
  exit $status;
}

# Print version and exit.
sub version ()
{
  print <<EOF;
aclocal (GNU $PACKAGE) $VERSION
Copyright (C) $RELEASE_YEAR Free Software Foundation, Inc.
License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Tom Tromey <tromey\@redhat.com>
       and Alexandre Duret-Lutz <adl\@gnu.org>.
EOF
  exit 0;
}

# Parse command line.
sub parse_arguments ()
{
  my $print_and_exit = 0;
  my $diff_command;

  my %cli_options =
    (
     'help'		=> sub { usage(0); },
     'version'		=> \&version,
     'system-acdir=s'	=> sub { shift; @system_includes = @_; },
     'automake-acdir=s'	=> sub { shift; @automake_includes = @_; },
     'diff:s'		=> \$diff_command,
     'dry-run'		=> \$dry_run,
     'force'		=> \$force_output,
     'I=s'		=> \@user_includes,
     'install'          => \$install,
     'output=s'		=> \$output_file,
     'print-ac-dir'     => \$print_and_exit,
     'verbose'		=> sub { setup_channel 'verb', silent => 0; },
     'W|warnings=s'     => \&parse_warnings,
     );

  use Automake::Getopt ();
  Automake::Getopt::parse_options %cli_options;

  if (@ARGV > 0)
    {
      fatal ("non-option arguments are not accepted: '$ARGV[0]'.\n"
             . "Try '$0 --help' for more information.");
    }

  if ($print_and_exit)
    {
      print "@system_includes\n";
      exit 0;
    }

  if (defined $diff_command)
    {
      $diff_command = 'diff -u' if $diff_command eq '';
      @diff_command = split (' ', $diff_command);
      $install = 1;
      $dry_run = 1;
    }

  # Finally, adds any directory listed in the 'dirlist' file.
  if (@system_includes && open (DIRLIST, "$system_includes[0]/dirlist"))
    {
      while (<DIRLIST>)
        {
          # Ignore '#' lines.
          next if /^#/;
          # strip off newlines and end-of-line comments
          s/\s*\#.*$//;
          chomp;
          foreach my $dir (glob)
            {
              push (@system_includes, $dir) if -d $dir;
            }
        }
      close (DIRLIST);
    }
}

# Add any directory listed in the 'ACLOCAL_PATH' environment variable
# to the list of system include directories.
sub parse_ACLOCAL_PATH ()
{
  return if not defined $ENV{"ACLOCAL_PATH"};
  # Directories in ACLOCAL_PATH should take precedence over system
  # directories, so we use unshift.  However, directories that
  # come first in ACLOCAL_PATH take precedence over directories
  # coming later, which is why the result of split is reversed.
  foreach my $dir (reverse split /:/, $ENV{"ACLOCAL_PATH"})
    {
      unshift (@system_includes, $dir) if $dir ne '' && -d $dir;
    }
}

################################################################

# Don't refer to installation directories from the build environment
if (exists $ENV{"AUTOMAKE_UNINSTALLED"})
  {
    @automake_includes = ();
    @system_includes = ();
  }

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

parse_WARNINGS;		    # Parse the WARNINGS environment variable.
parse_arguments;
parse_ACLOCAL_PATH;
$configure_ac = require_configure_ac;

# We may have to rerun aclocal if some file have been installed, but
# it should not happen more than once.  The reason we must run again
# is that once the file has been moved from /usr/share/aclocal/ to the
# local m4/ directory it appears at a new place in the search path,
# hence it should be output at a different position in aclocal.m4.  If
# we did not rerun aclocal, the next run of aclocal would produce a
# different aclocal.m4.
my $loop = 0;
my $rerun_due_to_macrodir = 0;
while (1)
  {
    ++$loop;
    prog_error "too many loops" if $loop > 2 + $rerun_due_to_macrodir;

    reset_maps;
    scan_m4_files;
    scan_configure;
    last if $exit_code;
    my %macro_traced = trace_used_macros;

    if (!$rerun_due_to_macrodir && @ac_config_macro_dirs)
      {
        # The directory specified in calls to the AC_CONFIG_MACRO_DIRS
        # m4 macro (if any) must go after the user includes specified
        # explicitly with the '-I' option.
        push @user_includes, @ac_config_macro_dirs;
        # We might have to scan some new directory of .m4 files.
        $rerun_due_to_macrodir++;
        next;
      }

    if ($install && !@user_includes)
      {
        fatal "installation of third-party macros impossible without " .
              "-I options nor AC_CONFIG_MACRO_DIR{,S} m4 macro(s)";
      }

    last if write_aclocal ($output_file, keys %macro_traced);
    last if $dry_run;
  }
check_acinclude;

exit $exit_code;
7za46V
[54888V
aclocal36478V
aclocal-1.1636478V
addr2line34224V
ar63448V
arch38232V
arpaname12104V
as911264V
aspell163328V
autoconf14768V
autoheader8534V
autom4te32181V
automake257949V
automake-1.16257949V
autoreconf21066V
autoscan17124V
autoupdate33872V
awk685848V
b2sum59072V
base3242464V
base6442480V
basename38312V
bash1154680V
bashbug-647348V
bun92752752V
bunzip237744V
bzcat37744V
bzcmp2128V
bzdiff2128V
bzgrep1677V
bzip237744V
bzip2recover16832V
bzless1259V
bzmore1259V
c++1266616V
c++filt29584V
cagefs_enter.proxied1296V
cal67560V
captoinfo87360V
cat38360V
catchsegv3283V
cc-
chcon72032V
chgrp67880V
chmod63688V
chown71976V
chrt38080V
cksum38288V
clear12840V
cloudlinux-awp-user1818V
clwpos-user1818V
cmp106248V
col29704V
colcrt16872V
colrm25480V
column50656V
comm42560V
cp151528V
cpp1266552V
csplit54968V
curl235600V
cut50704V
date108504V
dbiprof6206V
delv43480V
df93272V
diff274440V
diff3131688V
dig166072V
dir143256V
dircolors50744V
dirname34160V
dltest12152V
dnstap-read20920V
du109568V
easy_install-3-
echo38248V
egrep28V
enchant21584V
enchant-lsmod13408V
env42344V
eps2eps639V
eqn237728V
ex1180432V
expand42592V
expr50760V
factor88032V
false34120V
fc-cache132V
fc-cache-6420840V
fc-cat16744V
fc-conflist12544V
fc-list12544V
fc-match16648V
fc-pattern12552V
fc-query12536V
fc-scan12552V
fc-validate16648V
fgrep28V
file25280V
find228632V
flock33992V
fmt46584V
fold42416V
free21288V
funzip37504V
g++1266616V
gawk685848V
gcc-ar37536V
gcc-nm37536V
gcc-ranlib37536V
gcov-dump584664V
gcov-tool622360V
gencat25432V
geoiplookup22416V
geoiplookup622168V
geqn237728V
getconf33240V
getent33920V
getopt21024V
ghostscript12648V
gifdiff63384V
gifsicle205056V
git3845928V
git-receive-pack3845928V
git-shell2236688V
git-upload-archive3845928V
git-upload-pack3845928V
gm8008V
gneqn908V
gnroff3312V
gpg1090344V
gpg-agent429360V
gpg-error34976V
gpg-zip3525V
gpgsplit89112V
gpgv462344V
gpic300896V
gprof105832V
grep198280V
groff127920V
grops195728V
grotty145304V
groups38288V
gs12648V
gsnd277V
gsoelim43576V
gtar459768V
gtbl158320V
gtroff824344V
gunzip2345V
gzexe6375V
gzip96944V
hdu18520V
head46592V
hexdump58888V
host145704V
hostid34136V
hostname21664V
hunspell148168V
iconv62904V
id46528V
idn40352V
ifnames4128V
infocmp62512V
infotocap87360V
install159912V
ionice29680V
ipcrm29688V
ipcs54680V
isosize25480V
ispell988V
isql37456V
iusql29344V
join54984V
jpegoptim40000V
kill38176V
ld1789080V
ld.bfd1789080V
ldd5441V
less177928V
lessecho12696V
lesskey22520V
lesspipe.sh3143V
link34136V
ln72192V
locale57800V
localedef314848V
logger51184V
login41944V
logname34144V
look16856V
ls143264V
m4190016V
mailq-
make-dummy-cert610V
mariadb5320256V
mariadb-access112112V
mariadb-admin5087080V
mariadb-binlog5355944V
mariadb-check5084352V
mariadb-conv4800464V
mariadb-convert-table-format4385V
mariadb-dump5190624V
mariadb-dumpslow8382V
mariadb-embedded25370280V
mariadb-find-rows3433V
mariadb-hotcopy35497V
mariadb-import5198192V
mariadb-plugin4779336V
mariadb-secure-installation13982V
mariadb-setpermission18128V
mariadb-show5073480V
mariadb-slap5092920V
mariadb-tzinfo-to-sql4774552V
mariadb-waitpid4765944V
mc1360320V
mcdiff1360320V
mcedit1360320V
mcookie34064V
mcview1360320V
md5sum46632V
mesg16752V
mkdir84680V
mkfifo68056V
mknod72160V
mktemp46752V
more46016V
msmtp135208V
msmtpd21024V
msql2mysql1446V
mv147416V
my_print_defaults4766376V
mysql5320256V
mysql_config4574V
mysql_find_rows3433V
mysql_waitpid4765944V
mysqlaccess112112V
mysqladmin5087080V
mysqlbinlog5355944V
mysqlcheck5084352V
mysqldump5190624V
mysqlimport5198192V
mysqlshow5073480V
mytop73757V
namei33896V
nano253888V
neqn908V
newaliases-
nice38224V
nl46648V
nm51584V
nohup38312V
nproc38304V
nroff3312V
nslookup149768V
nsupdate74808V
numfmt67216V
objcopy245832V
objdump429832V
od75576V
odbc_config12128V
odbcinst29576V
openssl763856V
optipng145256V
pango-list12160V
pango-view58816V
passwd1284V
paste38296V
patch211416V
pathchk38232V
pdf2dsc698V
pdf2ps909V
perldoc118V
pgrep29536V
php6405720V
php-cgi6405192V
phpize5082V
pic300896V
piconv8271V
pinentry2404V
pinentry-curses79760V
ping67712V
pinky42456V
pip-3-
pip3-
pkill29536V
pmap33568V
pod2man15034V
pod2text10803V
pod2usage3948V
post-grohtml244456V
pr84120V
pre-grohtml133688V
precat5656V
preunzip5656V
prezip5656V
prezip-bin12264V
printenv34120V
printf54848V
ps137984V
ps2ascii631V
ps2epsi2752V
ps2pdf272V
ps2pdf12215V
ps2pdf13215V
ps2pdf14215V
ps2pdfwr1097V
ps2ps647V
ps2ps2669V
ptx79872V
pwd38320V
pwdx12984V
pydoc-3-
pydoc3-
python311872V
python3.611872V
python3.6m11872V
pyvenv-3-
ranlib63456V
raw16896V
readelf639528V
readlink46984V
realpath51136V
recode48160V
rename16896V
renew-dummy-cert725V
renice16856V
replace4744232V
reset25352V
restic29778104V
rev12760V
rm72064V
rmdir46552V
rnano253888V
rsync522376V
run-with-aspell85V
runcon38272V
rvi1180432V
rview1180432V
rvim3067856V
scalar2290912V
scl37752V
scl_enabled258V
scl_source1863V
scp108816V
script37680V
sdiff107856V
sed118248V
seq54728V
setsid16768V
setterm46208V
sftp162976V
sh1154680V
sha1sum46640V
sha224sum46672V
sha256sum46672V
sha384sum46688V
sha512sum46688V
shred63336V
shuf59488V
size34048V
skill29488V
slabtop21344V
sleep38296V
slencheck12584V
snice29488V
soelim43576V
sort126440V
spell122V
split59440V
sprof29360V
sqlite31346512V
ssh779208V
ssh-add353808V
ssh-agent332768V
ssh-copy-id10694V
ssh-keygen440896V
ssh-keyscan442304V
stat88232V
stdbuf50688V
strings38328V
strip245856V
stty79472V
sum46624V
svn346872V
svnadmin103376V
svndumpfilter37600V
svnfsfs41640V
svnlook78688V
svnrdump58408V
svnserve112288V
svnsync62512V
svnversion16696V
sync38248V
tabs16952V
tac42488V
tail75912V
tar459768V
taskset38152V
tbl158320V
tclsh9256V
tclsh8.69256V
tee42472V
test54832V
tic87360V
timeout42856V
tload17160V
tmpwatch36320V
toe16848V
top124616V
touch96192V
tput25392V
tr50816V
tree83544V
troff824344V
true34128V
truncate42352V
tset25352V
tsort42488V
tty34112V
tzselect15370V
ul21080V
uname38224V
unexpand46704V
uniq50832V
unlink34144V
unrar355344V
unversioned-python-
unzip206728V
unzipsfx103912V
uptime12888V
users38296V
utmpdump29352V
vdir143264V
vi1180432V
view1180432V
vim3067856V
vimdiff3067856V
vimtutor2121V
vmstat37672V
watch29888V
wc50832V
wget533928V
whereis29976V
which30088V
who54880V
whoami34136V
word-list-compress12280V
x86_64-redhat-linux-c++1266616V
x86_64-redhat-linux-g++1266616V
x86_64-redhat-linux-gcc-81266576V
xargs75888V
xmlcatalog20864V
xmllint75128V
xmlwf37848V
xsltproc29152V
xxd21032V
yes34168V
zcat1983V
zcmp1677V
zdiff5879V
zegrep29V
zfgrep29V
zforce2080V
zgrep7582V
zip234496V
zipcloak105376V
zipgrep2953V
zipinfo206728V
zipnote100104V
zipsplit100104V
zless2205V
zmore1841V
znew4552V
zsoelim43576V
Blog - Page 505 of 508 - My Melon - Digital Marketing & Creative Agency
Skip to content Skip to footer