Blame bin/autoreconf.in

Packit Service 9646c7
#! @PERL@ -w
Packit Service 9646c7
# -*- perl -*-
Packit Service 9646c7
# @configure_input@
Packit Service 9646c7
Packit Service 9646c7
eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
Packit Service 9646c7
    if 0;
Packit Service 9646c7
Packit Service 9646c7
# autoreconf - install the GNU Build System in a directory tree
Packit Service 9646c7
# Copyright (C) 1994, 1999-2012 Free Software Foundation, Inc.
Packit Service 9646c7
Packit Service 9646c7
# This program is free software: you can redistribute it and/or modify
Packit Service 9646c7
# it under the terms of the GNU General Public License as published by
Packit Service 9646c7
# the Free Software Foundation, either version 3 of the License, or
Packit Service 9646c7
# (at your option) any later version.
Packit Service 9646c7
Packit Service 9646c7
# This program is distributed in the hope that it will be useful,
Packit Service 9646c7
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 9646c7
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 9646c7
# GNU General Public License for more details.
Packit Service 9646c7
Packit Service 9646c7
# You should have received a copy of the GNU General Public License
Packit Service 9646c7
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 9646c7
Packit Service 9646c7
# Written by David J. MacKenzie.
Packit Service 9646c7
# Extended and rewritten in Perl by Akim Demaille.
Packit Service 9646c7
Packit Service 9646c7
BEGIN
Packit Service 9646c7
{
Packit Service 9646c7
  my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
Packit Service 9646c7
  unshift @INC, $pkgdatadir;
Packit Service 9646c7
Packit Service 9646c7
  # Override SHELL.  On DJGPP SHELL may not be set to a shell
Packit Service 9646c7
  # that can handle redirection and quote arguments correctly,
Packit Service 9646c7
  # e.g.: COMMAND.COM.  For DJGPP always use the shell that configure
Packit Service 9646c7
  # has detected.
Packit Service 9646c7
  $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
Packit Service 9646c7
}
Packit Service 9646c7
Packit Service 9646c7
use Autom4te::ChannelDefs;
Packit Service 9646c7
use Autom4te::Channels;
Packit Service 9646c7
use Autom4te::Configure_ac;
Packit Service 9646c7
use Autom4te::FileUtils;
Packit Service 9646c7
use Autom4te::General;
Packit Service 9646c7
use Autom4te::XFile;
Packit Service 9646c7
# Do not use Cwd::chdir, since it might hang.
Packit Service 9646c7
use Cwd 'cwd';
Packit Service 9646c7
use strict;
Packit Service 9646c7
Packit Service 9646c7
## ----------- ##
Packit Service 9646c7
## Variables.  ##
Packit Service 9646c7
## ----------- ##
Packit Service 9646c7
Packit Service 9646c7
# $HELP
Packit Service 9646c7
# -----
Packit Service 9646c7
$help = "Usage: $0 [OPTION]... [DIRECTORY]...
Packit Service 9646c7
Packit Service 9646c7
Run `autoconf' (and `autoheader', `aclocal', `automake', `autopoint'
Packit Service 9646c7
(formerly `gettextize'), and `libtoolize' where appropriate)
Packit Service 9646c7
repeatedly to remake the GNU Build System files in specified
Packit Service 9646c7
DIRECTORIES and their subdirectories (defaulting to `.').
Packit Service 9646c7
Packit Service 9646c7
By default, it only remakes those files that are older than their
Packit Service 9646c7
sources.  If you install new versions of the GNU Build System,
Packit Service 9646c7
you can make `autoreconf' remake all of the files by giving it the
Packit Service 9646c7
`--force' option.
Packit Service 9646c7
Packit Service 9646c7
Operation modes:
Packit Service 9646c7
  -h, --help               print this help, then exit
Packit Service 9646c7
  -V, --version            print version number, then exit
Packit Service 9646c7
  -v, --verbose            verbosely report processing
Packit Service 9646c7
  -d, --debug              don't remove temporary files
Packit Service 9646c7
  -f, --force              consider all files obsolete
Packit Service 9646c7
  -i, --install            copy missing auxiliary files
Packit Service 9646c7
      --no-recursive       don't rebuild sub-packages
Packit Service 9646c7
  -s, --symlink            with -i, install symbolic links instead of copies
Packit Service 9646c7
  -m, --make               when applicable, re-run ./configure && make
Packit Service 9646c7
  -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [syntax]
Packit Service 9646c7
Packit Service 9646c7
" . Autom4te::ChannelDefs::usage . "
Packit Service 9646c7
Packit Service 9646c7
The environment variable \`WARNINGS\' is honored.  Some subtools might
Packit Service 9646c7
support other warning types, using \`all' is encouraged.
Packit Service 9646c7
Packit Service 9646c7
Library directories:
Packit Service 9646c7
  -B, --prepend-include=DIR  prepend directory DIR to search path
Packit Service 9646c7
  -I, --include=DIR          append directory DIR to search path
Packit Service 9646c7
Packit Service 9646c7
The environment variables AUTOM4TE, AUTOCONF, AUTOHEADER, AUTOMAKE,
Packit Service 9646c7
ACLOCAL, AUTOPOINT, LIBTOOLIZE, M4, and MAKE are honored.
Packit Service 9646c7
Packit Service 9646c7
Report bugs to <bug-autoconf\@gnu.org>.
Packit Service 9646c7
GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
Packit Service 9646c7
General help using GNU software: <http://www.gnu.org/gethelp/>.
Packit Service 9646c7
";
Packit Service 9646c7
Packit Service 9646c7
# $VERSION
Packit Service 9646c7
# --------
Packit Service 9646c7
$version = "autoreconf (@PACKAGE_NAME@) @VERSION@
Packit Service 9646c7
Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
Packit Service 9646c7
License GPLv3+/Autoconf: GNU GPL version 3 or later
Packit Service 9646c7
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
Packit Service 9646c7
This is free software: you are free to change and redistribute it.
Packit Service 9646c7
There is NO WARRANTY, to the extent permitted by law.
Packit Service 9646c7
Packit Service 9646c7
Written by David J. MacKenzie and Akim Demaille.
Packit Service 9646c7
";
Packit Service 9646c7
Packit Service 9646c7
# Lib files.
Packit Service 9646c7
my $autoconf   = $ENV{'AUTOCONF'}   || '@bindir@/@autoconf-name@';
Packit Service 9646c7
my $autoheader = $ENV{'AUTOHEADER'} || '@bindir@/@autoheader-name@';
Packit Service 9646c7
my $autom4te   = $ENV{'AUTOM4TE'}   || '@bindir@/@autom4te-name@';
Packit Service 9646c7
my $automake   = $ENV{'AUTOMAKE'}   || 'automake';
Packit Service 9646c7
my $aclocal    = $ENV{'ACLOCAL'}    || 'aclocal';
Packit Service 9646c7
my $libtoolize = $ENV{'LIBTOOLIZE'} || 'libtoolize';
Packit Service 9646c7
my $autopoint  = $ENV{'AUTOPOINT'}  || 'autopoint';
Packit Service 9646c7
my $make       = $ENV{'MAKE'}       || 'make';
Packit Service 9646c7
Packit Service 9646c7
# --install -- as --add-missing in other tools.
Packit Service 9646c7
my $install = 0;
Packit Service 9646c7
# symlink -- when --install, use symlinks instead.
Packit Service 9646c7
my $symlink = 0;
Packit Service 9646c7
# Does aclocal support --force?
Packit Service 9646c7
my $aclocal_supports_force = 0;
Packit Service 9646c7
# Does aclocal support -Wfoo?
Packit Service 9646c7
my $aclocal_supports_warnings = 0;
Packit Service 9646c7
# Does automake support --force-missing?
Packit Service 9646c7
my $automake_supports_force_missing = 0;
Packit Service 9646c7
# Does automake support -Wfoo?
Packit Service 9646c7
my $automake_supports_warnings = 0;
Packit Service 9646c7
Packit Service 9646c7
my @prepend_include;
Packit Service 9646c7
my @include;
Packit Service 9646c7
Packit Service 9646c7
# List of command line warning requests.
Packit Service 9646c7
my @warning;
Packit Service 9646c7
Packit Service 9646c7
# Rerun `./configure && make'?
Packit Service 9646c7
my $run_make = 0;
Packit Service 9646c7
Packit Service 9646c7
# Recurse into subpackages
Packit Service 9646c7
my $recursive = 1;
Packit Service 9646c7
Packit Service 9646c7
## ---------- ##
Packit Service 9646c7
## Routines.  ##
Packit Service 9646c7
## ---------- ##
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
# parse_args ()
Packit Service 9646c7
# -------------
Packit Service 9646c7
# Process any command line arguments.
Packit Service 9646c7
sub parse_args ()
Packit Service 9646c7
{
Packit Service 9646c7
  my $srcdir;
Packit Service 9646c7
Packit Service 9646c7
  getopt ("W|warnings=s"         => \@warning,
Packit Service 9646c7
	  'I|include=s'          => \@include,
Packit Service 9646c7
	  'B|prepend-include=s'	 => \@prepend_include,
Packit Service 9646c7
	  'i|install'            => \$install,
Packit Service 9646c7
	  's|symlink'            => \$symlink,
Packit Service 9646c7
	  'm|make'               => \$run_make,
Packit Service 9646c7
	  'recursive!'           => \$recursive);
Packit Service 9646c7
Packit Service 9646c7
  # Split the warnings as a list of elements instead of a list of
Packit Service 9646c7
  # lists.
Packit Service 9646c7
  @warning = map { split /,/ } @warning;
Packit Service 9646c7
  parse_WARNINGS;
Packit Service 9646c7
  parse_warnings '--warnings', @warning;
Packit Service 9646c7
Packit Service 9646c7
  # Even if the user specified a configure.ac, trim to get the
Packit Service 9646c7
  # directory, and look for configure.ac again.  Because (i) the code
Packit Service 9646c7
  # is simpler, and (ii) we are still able to diagnose simultaneous
Packit Service 9646c7
  # presence of configure.ac and configure.in.
Packit Service 9646c7
  @ARGV = map { /configure\.(ac|in)$/ ? dirname ($_) : $_ } @ARGV;
Packit Service 9646c7
  push @ARGV, '.' unless @ARGV;
Packit Service 9646c7
Packit Service 9646c7
  if ($verbose && $debug)
Packit Service 9646c7
    {
Packit Service 9646c7
      for my $prog ($autoconf, $autoheader,
Packit Service 9646c7
		    $automake, $aclocal,
Packit Service 9646c7
		    $autopoint,
Packit Service 9646c7
		    $libtoolize)
Packit Service 9646c7
	{
Packit Service 9646c7
	  xsystem ("$prog --version | sed 1q >&2");
Packit Service 9646c7
	  print STDERR "\n";
Packit Service 9646c7
	}
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
  my $aclocal_help = `$aclocal --help 2>/dev/null`;
Packit Service 9646c7
  my $automake_help = `$automake --help 2>/dev/null`;
Packit Service 9646c7
  $aclocal_supports_force = $aclocal_help =~ /--force/;
Packit Service 9646c7
  $aclocal_supports_warnings = $aclocal_help =~ /--warnings/;
Packit Service 9646c7
  $automake_supports_force_missing = $automake_help =~ /--force-missing/;
Packit Service 9646c7
  $automake_supports_warnings = $automake_help =~ /--warnings/;
Packit Service 9646c7
Packit Service 9646c7
  # Dispatch autoreconf's option to the tools.
Packit Service 9646c7
  # --include;
Packit Service 9646c7
  $aclocal    .= join (' -I ', '', map { shell_quote ($_) } @include);
Packit Service 9646c7
  $autoconf   .= join (' --include=', '', map { shell_quote ($_) } @include);
Packit Service 9646c7
  $autoconf   .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
Packit Service 9646c7
  $autoheader .= join (' --include=', '', map { shell_quote ($_) } @include);
Packit Service 9646c7
  $autoheader .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
Packit Service 9646c7
Packit Service 9646c7
  # --install and --symlink;
Packit Service 9646c7
  if ($install)
Packit Service 9646c7
    {
Packit Service 9646c7
      $automake   .= ' --add-missing';
Packit Service 9646c7
      $automake   .= ' --copy' unless $symlink;
Packit Service 9646c7
      $libtoolize .= ' --copy' unless $symlink;
Packit Service 9646c7
    }
Packit Service 9646c7
  # --force;
Packit Service 9646c7
  if ($force)
Packit Service 9646c7
    {
Packit Service 9646c7
      $aclocal    .= ' --force'
Packit Service 9646c7
	if $aclocal_supports_force;
Packit Service 9646c7
      $autoconf   .= ' --force';
Packit Service 9646c7
      $autoheader .= ' --force';
Packit Service 9646c7
      $automake   .= ' --force-missing'
Packit Service 9646c7
	if $automake_supports_force_missing;
Packit Service 9646c7
      $autopoint  .= ' --force';
Packit Service 9646c7
      $libtoolize .= ' --force';
Packit Service 9646c7
    }
Packit Service 9646c7
  else
Packit Service 9646c7
    {
Packit Service 9646c7
      # The implementation of --no-force is bogus in all implementations
Packit Service 9646c7
      # of Automake up to 1.8, so we avoid it in these cases.  (Automake
Packit Service 9646c7
      # 1.8 is the first version where aclocal supports force, hence
Packit Service 9646c7
      # the condition.)
Packit Service 9646c7
      $automake .= ' --no-force'
Packit Service 9646c7
	if $aclocal_supports_force;
Packit Service 9646c7
    }
Packit Service 9646c7
  # --verbose --verbose or --debug;
Packit Service 9646c7
  if ($verbose > 1 || $debug)
Packit Service 9646c7
    {
Packit Service 9646c7
      $autoconf   .= ' --verbose';
Packit Service 9646c7
      $autoheader .= ' --verbose';
Packit Service 9646c7
      $automake   .= ' --verbose';
Packit Service 9646c7
      $aclocal    .= ' --verbose';
Packit Service 9646c7
    }
Packit Service 9646c7
  if ($debug)
Packit Service 9646c7
    {
Packit Service 9646c7
      $autoconf   .= ' --debug';
Packit Service 9646c7
      $autoheader .= ' --debug';
Packit Service 9646c7
      $libtoolize .= ' --debug';
Packit Service 9646c7
    }
Packit Service 9646c7
  # --warnings;
Packit Service 9646c7
  if (@warning)
Packit Service 9646c7
    {
Packit Service 9646c7
      my $warn = ' --warnings=' . join (',', @warning);
Packit Service 9646c7
      $autoconf   .= $warn;
Packit Service 9646c7
      $autoheader .= $warn;
Packit Service 9646c7
      $automake   .= $warn
Packit Service 9646c7
	if $automake_supports_warnings;
Packit Service 9646c7
      $aclocal    .= $warn
Packit Service 9646c7
        if $aclocal_supports_warnings;
Packit Service 9646c7
    }
Packit Service 9646c7
}
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
# &run_aclocal ($ACLOCAL, $FLAGS)
Packit Service 9646c7
# -------------------------------
Packit Service 9646c7
# Update aclocal.m4 as lazily as possible, as aclocal pre-1.8 always
Packit Service 9646c7
# overwrites aclocal.m4, hence triggers autoconf, autoheader, automake
Packit Service 9646c7
# etc. uselessly.  aclocal 1.8+ does not need this.
Packit Service 9646c7
sub run_aclocal ($$)
Packit Service 9646c7
{
Packit Service 9646c7
  my ($aclocal, $flags) = @_;
Packit Service 9646c7
Packit Service 9646c7
  # aclocal 1.8+ does all this for free.  It can be recognized by its
Packit Service 9646c7
  # --force support.
Packit Service 9646c7
  if ($aclocal_supports_force)
Packit Service 9646c7
    {
Packit Service 9646c7
      xsystem ("$aclocal $flags");
Packit Service 9646c7
    }
Packit Service 9646c7
  else
Packit Service 9646c7
    {
Packit Service 9646c7
      xsystem ("$aclocal $flags --output=aclocal.m4t");
Packit Service 9646c7
      # aclocal may produce no output.
Packit Service 9646c7
      if (-f 'aclocal.m4t')
Packit Service 9646c7
	{
Packit Service 9646c7
	  update_file ('aclocal.m4t', 'aclocal.m4');
Packit Service 9646c7
	  # Make sure that the local m4 files are older than
Packit Service 9646c7
	  # aclocal.m4.
Packit Service 9646c7
	  #
Packit Service 9646c7
	  # Why is not always the case?  Because we already run
Packit Service 9646c7
	  # aclocal at first (before tracing), which, for instance,
Packit Service 9646c7
	  # can find Gettext's macros in .../share/aclocal, so we may
Packit Service 9646c7
	  # have had the right aclocal.m4 already.  Then autopoint is
Packit Service 9646c7
	  # run, and installs locally these M4 files.  Then
Packit Service 9646c7
	  # autoreconf, via update_file, sees it is the _same_
Packit Service 9646c7
	  # aclocal.m4, and doesn't change its timestamp.  But later,
Packit Service 9646c7
	  # Automake's Makefile expresses that aclocal.m4 depends on
Packit Service 9646c7
	  # these local files, which are newer, so it triggers aclocal
Packit Service 9646c7
	  # again.
Packit Service 9646c7
	  #
Packit Service 9646c7
	  # To make sure aclocal.m4 is no older, we change the
Packit Service 9646c7
	  # modification times of the local M4 files to be not newer
Packit Service 9646c7
	  # than it.
Packit Service 9646c7
	  #
Packit Service 9646c7
	  # First, where are the local files?
Packit Service 9646c7
	  my $aclocal_local_dir = '.';
Packit Service 9646c7
	  if ($flags =~ /-I\s+(\S+)/)
Packit Service 9646c7
	    {
Packit Service 9646c7
	      $aclocal_local_dir = $1;
Packit Service 9646c7
	    }
Packit Service 9646c7
	  # All the local files newer than aclocal.m4 are to be
Packit Service 9646c7
	  # made not newer than it.
Packit Service 9646c7
	  my $aclocal_m4_mtime = mtime ('aclocal.m4');
Packit Service 9646c7
	  for my $file (glob ("$aclocal_local_dir/*.m4"), 'acinclude.m4')
Packit Service 9646c7
	    {
Packit Service 9646c7
	      if ($aclocal_m4_mtime < mtime ($file))
Packit Service 9646c7
		{
Packit Service 9646c7
		  debug "aging $file to be not newer than aclocal.m4";
Packit Service 9646c7
		  utime $aclocal_m4_mtime, $aclocal_m4_mtime, $file;
Packit Service 9646c7
		}
Packit Service 9646c7
	    }
Packit Service 9646c7
	}
Packit Service 9646c7
    }
Packit Service 9646c7
}
Packit Service 9646c7
Packit Service 9646c7
# &autoreconf_current_directory
Packit Service 9646c7
# -----------------------------
Packit Service 9646c7
sub autoreconf_current_directory ()
Packit Service 9646c7
{
Packit Service 9646c7
  my $configure_ac = find_configure_ac;
Packit Service 9646c7
Packit Service 9646c7
  # ---------------------- #
Packit Service 9646c7
  # Is it using Autoconf?  #
Packit Service 9646c7
  # ---------------------- #
Packit Service 9646c7
Packit Service 9646c7
  my $uses_autoconf;
Packit Service 9646c7
  my $uses_gettext;
Packit Service 9646c7
  if (-f $configure_ac)
Packit Service 9646c7
    {
Packit Service 9646c7
      my $configure_ac_file = new Autom4te::XFile "< $configure_ac";
Packit Service 9646c7
      while ($_ = $configure_ac_file->getline)
Packit Service 9646c7
	{
Packit Service 9646c7
	  s/#.*//;
Packit Service 9646c7
	  s/dnl.*//;
Packit Service 9646c7
	  $uses_autoconf = 1 if /AC_INIT/;
Packit Service 9646c7
	  # See below for why we look for gettext here.
Packit Service 9646c7
	  $uses_gettext = 1  if /^AM_GNU_GETTEXT_VERSION/;
Packit Service 9646c7
	}
Packit Service 9646c7
    }
Packit Service 9646c7
  if (!$uses_autoconf)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not using Autoconf";
Packit Service 9646c7
      return;
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # ------------------- #
Packit Service 9646c7
  # Running autopoint.  #
Packit Service 9646c7
  # ------------------- #
Packit Service 9646c7
Packit Service 9646c7
  # Gettext is a bit of a problem: its macros are not necessarily
Packit Service 9646c7
  # visible to aclocal, so if we start with a completely striped down
Packit Service 9646c7
  # package (think of a fresh CVS checkout), running `aclocal' first
Packit Service 9646c7
  # will fail: the Gettext macros are missing.
Packit Service 9646c7
  #
Packit Service 9646c7
  # Therefore, we can't use the traces to decide if we use Gettext or
Packit Service 9646c7
  # not.  I guess that once Gettext move to 2.5x we will be able to,
Packit Service 9646c7
  # but in the meanwhile forget it.
Packit Service 9646c7
  #
Packit Service 9646c7
  # We can only grep for AM_GNU_GETTEXT_VERSION in configure.ac.  You
Packit Service 9646c7
  # might think this approach is naive, and indeed it is, as it
Packit Service 9646c7
  # prevents one to embed AM_GNU_GETTEXT_VERSION in another *.m4, but
Packit Service 9646c7
  # anyway we don't limit the generality, since... that's what
Packit Service 9646c7
  # autopoint does.  Actually, it is even more restrictive, as it
Packit Service 9646c7
  # greps for `^AM_GNU_GETTEXT_VERSION('.  We did this above, while
Packit Service 9646c7
  # scanning configure.ac.
Packit Service 9646c7
  if (!$uses_gettext)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not using Gettext";
Packit Service 9646c7
    }
Packit Service 9646c7
  elsif (!$install)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not running autopoint: --install not given";
Packit Service 9646c7
    }
Packit Service 9646c7
  else
Packit Service 9646c7
    {
Packit Service 9646c7
      xsystem_hint ("autopoint is needed because this package uses Gettext", "$autopoint");
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # ----------------- #
Packit Service 9646c7
  # Running aclocal.  #
Packit Service 9646c7
  # ----------------- #
Packit Service 9646c7
Packit Service 9646c7
  # Run it first: it might discover new macros to add, e.g.,
Packit Service 9646c7
  # AC_PROG_LIBTOOL, which we will trace later to see if Libtool is
Packit Service 9646c7
  # used.
Packit Service 9646c7
  #
Packit Service 9646c7
  # Always run it.  Tracking its sources for up-to-dateness is too
Packit Service 9646c7
  # complex and too error prone.  The best we can do is avoiding
Packit Service 9646c7
  # nuking the time stamp.
Packit Service 9646c7
  my $uses_aclocal = 1;
Packit Service 9646c7
Packit Service 9646c7
  # Nevertheless, if aclocal.m4 exists and is not made by aclocal,
Packit Service 9646c7
  # don't run aclocal.
Packit Service 9646c7
Packit Service 9646c7
  if (-f 'aclocal.m4')
Packit Service 9646c7
    {
Packit Service 9646c7
      my $aclocal_m4 = new Autom4te::XFile 'aclocal.m4';
Packit Service 9646c7
      $_ = $aclocal_m4->getline;
Packit Service 9646c7
      $uses_aclocal = 0
Packit Service 9646c7
	unless defined ($_) && /generated.*by aclocal/;
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
  # If there are flags for aclocal in Makefile.am, use them.
Packit Service 9646c7
  my $aclocal_flags = '';
Packit Service 9646c7
  if ($uses_aclocal && -f 'Makefile.am')
Packit Service 9646c7
    {
Packit Service 9646c7
      my $makefile = new Autom4te::XFile 'Makefile.am';
Packit Service 9646c7
      while ($_ = $makefile->getline)
Packit Service 9646c7
	{
Packit Service 9646c7
	  if (/^ACLOCAL_[A-Z_]*FLAGS\s*=\s*(.*)/)
Packit Service 9646c7
	    {
Packit Service 9646c7
	      $aclocal_flags = $1;
Packit Service 9646c7
	      last;
Packit Service 9646c7
	    }
Packit Service 9646c7
	}
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
  if (!$uses_aclocal)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not using aclocal";
Packit Service 9646c7
    }
Packit Service 9646c7
  else
Packit Service 9646c7
    {
Packit Service 9646c7
      # Some file systems have sub-second time stamps, and if so we may
Packit Service 9646c7
      # run into trouble later, after we rerun autoconf and set the
Packit Service 9646c7
      # time stamps of input files to be no greater than aclocal.m4,
Packit Service 9646c7
      # because the time-stamp-setting operation (utime) has a
Packit Service 9646c7
      # resolution of only 1 second.  Work around the problem by
Packit Service 9646c7
      # ensuring that there is at least a one-second window before the
Packit Service 9646c7
      # time stamp of aclocal.m4t in which no file time stamps can
Packit Service 9646c7
      # fall.
Packit Service 9646c7
      sleep 1;
Packit Service 9646c7
Packit Service 9646c7
      run_aclocal ($aclocal, $aclocal_flags);
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
  # We might have to rerun aclocal if Libtool (or others) imports new
Packit Service 9646c7
  # macros.
Packit Service 9646c7
  my $rerun_aclocal = 0;
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # ------------------------------- #
Packit Service 9646c7
  # See what tools will be needed.  #
Packit Service 9646c7
  # ------------------------------- #
Packit Service 9646c7
Packit Service 9646c7
  # Perform a single trace reading to avoid --force forcing a rerun
Packit Service 9646c7
  # between two --trace, that's useless.  If there is no AC_INIT, then
Packit Service 9646c7
  # we are not interested: it looks like a Cygnus thingy.
Packit Service 9646c7
  my $aux_dir;
Packit Service 9646c7
  my $uses_gettext_via_traces;
Packit Service 9646c7
  my $uses_libtool;
Packit Service 9646c7
  my $uses_libltdl;
Packit Service 9646c7
  my $uses_autoheader;
Packit Service 9646c7
  my $uses_automake;
Packit Service 9646c7
  my @subdir;
Packit Service 9646c7
  verb "$configure_ac: tracing";
Packit Service 9646c7
  my $traces = new Autom4te::XFile
Packit Service 9646c7
    ("$autoconf"
Packit Service 9646c7
     . join (' ',
Packit Service 9646c7
	     map { ' --trace=' . $_ . ':\$n::\${::}%' }
Packit Service 9646c7
	     # If you change this list, update the
Packit Service 9646c7
	     # `Autoreconf-preselections' section of autom4te.in.
Packit Service 9646c7
	     'AC_CONFIG_AUX_DIR',
Packit Service 9646c7
	     'AC_CONFIG_HEADERS',
Packit Service 9646c7
	     'AC_CONFIG_SUBDIRS',
Packit Service 9646c7
	     'AC_INIT',
Packit Service 9646c7
	     'AC_PROG_LIBTOOL',
Packit Service 9646c7
	     'LT_INIT',
Packit Service 9646c7
	     'LT_CONFIG_LTDL_DIR',
Packit Service 9646c7
	     'AM_GNU_GETTEXT',
Packit Service 9646c7
	     'AM_INIT_AUTOMAKE',
Packit Service 9646c7
	    )
Packit Service 9646c7
     . ' |');
Packit Service 9646c7
  while ($_ = $traces->getline)
Packit Service 9646c7
    {
Packit Service 9646c7
      chomp;
Packit Service 9646c7
      my ($macro, @args) = split (/::/);
Packit Service 9646c7
      $aux_dir = $args[0]           if $macro eq "AC_CONFIG_AUX_DIR";
Packit Service 9646c7
      $uses_autoconf = 1            if $macro eq "AC_INIT";
Packit Service 9646c7
      $uses_gettext_via_traces = 1  if $macro eq "AM_GNU_GETTEXT";
Packit Service 9646c7
      $uses_libtool = 1             if $macro eq "AC_PROG_LIBTOOL"
Packit Service 9646c7
                                       || $macro eq "LT_INIT";
Packit Service 9646c7
      $uses_libltdl = 1             if $macro eq "LT_CONFIG_LTDL_DIR";
Packit Service 9646c7
      $uses_autoheader = 1          if $macro eq "AC_CONFIG_HEADERS";
Packit Service 9646c7
      $uses_automake = 1            if $macro eq "AM_INIT_AUTOMAKE";
Packit Service 9646c7
      push @subdir, split (' ', $args[0])
Packit Service 9646c7
                                    if $macro eq "AC_CONFIG_SUBDIRS" && $recursive;
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
  # The subdirs are *optional*, they may not exist.
Packit Service 9646c7
  foreach (@subdir)
Packit Service 9646c7
    {
Packit Service 9646c7
      if (-d)
Packit Service 9646c7
	{
Packit Service 9646c7
	  verb "$configure_ac: adding subdirectory $_ to autoreconf";
Packit Service 9646c7
	  autoreconf ($_);
Packit Service 9646c7
	}
Packit Service 9646c7
      else
Packit Service 9646c7
	{
Packit Service 9646c7
	  verb "$configure_ac: subdirectory $_ not present";
Packit Service 9646c7
	}
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
  # Gettext consistency checks...
Packit Service 9646c7
  error "$configure_ac: AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION"
Packit Service 9646c7
    if $uses_gettext_via_traces && ! $uses_gettext;
Packit Service 9646c7
  error "$configure_ac: AM_GNU_GETTEXT_VERSION is used, but not AM_GNU_GETTEXT"
Packit Service 9646c7
    if $uses_gettext && ! $uses_gettext_via_traces;
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # ---------------------------- #
Packit Service 9646c7
  # Setting up the source tree.  #
Packit Service 9646c7
  # ---------------------------- #
Packit Service 9646c7
Packit Service 9646c7
  # libtoolize, automake --add-missing etc. will drop files in the
Packit Service 9646c7
  # $AUX_DIR.  But these tools fail to install these files if the
Packit Service 9646c7
  # directory itself does not exist, which valid: just imagine a CVS
Packit Service 9646c7
  # repository with hand written code only (there is not even a need
Packit Service 9646c7
  # for a Makefile.am!).
Packit Service 9646c7
Packit Service 9646c7
  if (defined $aux_dir && ! -d $aux_dir)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: creating directory $aux_dir";
Packit Service 9646c7
      mkdir $aux_dir, 0755
Packit Service 9646c7
	or error "cannot create $aux_dir: $!";
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # -------------------- #
Packit Service 9646c7
  # Running libtoolize.  #
Packit Service 9646c7
  # -------------------- #
Packit Service 9646c7
Packit Service 9646c7
  if (!$uses_libtool)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not using Libtool";
Packit Service 9646c7
    }
Packit Service 9646c7
  elsif ($install)
Packit Service 9646c7
    {
Packit Service 9646c7
      if ($uses_libltdl)
Packit Service 9646c7
	{
Packit Service 9646c7
	  $libtoolize .= " --ltdl";
Packit Service 9646c7
	}
Packit Service 9646c7
      xsystem_hint ("libtoolize is needed because this package uses Libtool", $libtoolize);
Packit Service 9646c7
      $rerun_aclocal = 1;
Packit Service 9646c7
    }
Packit Service 9646c7
  else
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not running libtoolize: --install not given";
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # ------------------- #
Packit Service 9646c7
  # Rerunning aclocal.  #
Packit Service 9646c7
  # ------------------- #
Packit Service 9646c7
Packit Service 9646c7
  # If we re-installed Libtool or Gettext, the macros might have changed.
Packit Service 9646c7
  # Automake also needs an up-to-date aclocal.m4.
Packit Service 9646c7
  if ($rerun_aclocal)
Packit Service 9646c7
    {
Packit Service 9646c7
      if (!$uses_aclocal)
Packit Service 9646c7
	{
Packit Service 9646c7
	  verb "$configure_ac: not using aclocal";
Packit Service 9646c7
	}
Packit Service 9646c7
      else
Packit Service 9646c7
	{
Packit Service 9646c7
	  run_aclocal ($aclocal, $aclocal_flags);
Packit Service 9646c7
	}
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # ------------------ #
Packit Service 9646c7
  # Running autoconf.  #
Packit Service 9646c7
  # ------------------ #
Packit Service 9646c7
Packit Service 9646c7
  # Don't try to be smarter than `autoconf', which does its own up to
Packit Service 9646c7
  # date checks.
Packit Service 9646c7
  #
Packit Service 9646c7
  # We prefer running autoconf before autoheader, because (i) the
Packit Service 9646c7
  # latter runs the former, and (ii) autoconf is stricter than
Packit Service 9646c7
  # autoheader.  So all in all, autoconf should give better error
Packit Service 9646c7
  # messages.
Packit Service 9646c7
  xsystem ($autoconf);
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # -------------------- #
Packit Service 9646c7
  # Running autoheader.  #
Packit Service 9646c7
  # -------------------- #
Packit Service 9646c7
Packit Service 9646c7
  # We now consider that if AC_CONFIG_HEADERS is used, then autoheader
Packit Service 9646c7
  # is used too.
Packit Service 9646c7
  #
Packit Service 9646c7
  # Just as for autoconf, up to date ness is performed by the tool
Packit Service 9646c7
  # itself.
Packit Service 9646c7
  #
Packit Service 9646c7
  # Run it before automake, since the latter checks the presence of
Packit Service 9646c7
  # config.h.in when it sees an AC_CONFIG_HEADERS.
Packit Service 9646c7
  if (!$uses_autoheader)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not using Autoheader";
Packit Service 9646c7
    }
Packit Service 9646c7
  else
Packit Service 9646c7
    {
Packit Service 9646c7
      xsystem ($autoheader);
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # ------------------ #
Packit Service 9646c7
  # Running automake.  #
Packit Service 9646c7
  # ------------------ #
Packit Service 9646c7
Packit Service 9646c7
  if (!$uses_automake)
Packit Service 9646c7
    {
Packit Service 9646c7
      verb "$configure_ac: not using Automake";
Packit Service 9646c7
    }
Packit Service 9646c7
  else
Packit Service 9646c7
    {
Packit Service 9646c7
      # We should always run automake, and let it decide whether it shall
Packit Service 9646c7
      # update the file or not.  In fact, the effect of `$force' is already
Packit Service 9646c7
      # included in `$automake' via `--no-force'.
Packit Service 9646c7
      xsystem ($automake);
Packit Service 9646c7
    }
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
  # -------------- #
Packit Service 9646c7
  # Running make.  #
Packit Service 9646c7
  # -------------- #
Packit Service 9646c7
Packit Service 9646c7
  if ($run_make)
Packit Service 9646c7
    {
Packit Service 9646c7
      if (!-f "config.status")
Packit Service 9646c7
	{
Packit Service 9646c7
	  verb "no config.status: cannot re-make";
Packit Service 9646c7
	}
Packit Service 9646c7
      else
Packit Service 9646c7
	{
Packit Service 9646c7
	  xsystem ("./config.status --recheck");
Packit Service 9646c7
	  xsystem ("./config.status");
Packit Service 9646c7
	  if (!-f "Makefile")
Packit Service 9646c7
	    {
Packit Service 9646c7
	      verb "no Makefile: cannot re-make";
Packit Service 9646c7
	    }
Packit Service 9646c7
	  else
Packit Service 9646c7
	    {
Packit Service 9646c7
	      xsystem ("$make");
Packit Service 9646c7
	    }
Packit Service 9646c7
	}
Packit Service 9646c7
    }
Packit Service 9646c7
}
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
# &autoreconf ($DIRECTORY)
Packit Service 9646c7
# ------------------------
Packit Service 9646c7
# Reconf the $DIRECTORY.
Packit Service 9646c7
sub autoreconf ($)
Packit Service 9646c7
{
Packit Service 9646c7
  my ($directory) = @_;
Packit Service 9646c7
  my $cwd = cwd;
Packit Service 9646c7
Packit Service 9646c7
  # The format for this message is not free: taken from Emacs, itself
Packit Service 9646c7
  # using GNU Make's format.
Packit Service 9646c7
  verb "Entering directory `$directory'";
Packit Service 9646c7
  chdir $directory
Packit Service 9646c7
    or error "cannot chdir to $directory: $!";
Packit Service 9646c7
Packit Service 9646c7
  autoreconf_current_directory;
Packit Service 9646c7
Packit Service 9646c7
  # The format is not free: taken from Emacs, itself using GNU Make's
Packit Service 9646c7
  # format.
Packit Service 9646c7
  verb "Leaving directory `$directory'";
Packit Service 9646c7
  chdir $cwd
Packit Service 9646c7
    or error "cannot chdir to $cwd: $!";
Packit Service 9646c7
}
Packit Service 9646c7
Packit Service 9646c7
Packit Service 9646c7
## ------ ##
Packit Service 9646c7
## Main.  ##
Packit Service 9646c7
## ------ ##
Packit Service 9646c7
Packit Service 9646c7
# When debugging, it is convenient that all the related temporary
Packit Service 9646c7
# files be at the same place.
Packit Service 9646c7
mktmpdir ('ar');
Packit Service 9646c7
$ENV{'TMPDIR'} = $tmp;
Packit Service 9646c7
parse_args;
Packit Service 9646c7
Packit Service 9646c7
# Autoreconf all the given configure.ac.  Unless `--no-recursive' is passed,
Packit Service 9646c7
# AC_CONFIG_SUBDIRS will be traversed in &autoreconf_current_directory.
Packit Service 9646c7
$ENV{'AUTOM4TE'} = $autom4te;
Packit Service 9646c7
for my $directory (@ARGV)
Packit Service 9646c7
  {
Packit Service 9646c7
    require_configure_ac ($directory);
Packit Service 9646c7
    autoreconf ($directory);
Packit Service 9646c7
  }
Packit Service 9646c7
Packit Service 9646c7
### Setup "GNU" style for perl-mode and cperl-mode.
Packit Service 9646c7
## Local Variables:
Packit Service 9646c7
## perl-indent-level: 2
Packit Service 9646c7
## perl-continued-statement-offset: 2
Packit Service 9646c7
## perl-continued-brace-offset: 0
Packit Service 9646c7
## perl-brace-offset: 0
Packit Service 9646c7
## perl-brace-imaginary-offset: 0
Packit Service 9646c7
## perl-label-offset: -2
Packit Service 9646c7
## cperl-indent-level: 2
Packit Service 9646c7
## cperl-brace-offset: 0
Packit Service 9646c7
## cperl-continued-brace-offset: 0
Packit Service 9646c7
## cperl-label-offset: -2
Packit Service 9646c7
## cperl-extra-newline-before-brace: t
Packit Service 9646c7
## cperl-merge-trailing-else: nil
Packit Service 9646c7
## cperl-continued-statement-offset: 2
Packit Service 9646c7
## End: