autoconf/bin/autoreconf.in

354 lines
9.0 KiB
Plaintext
Raw Normal View History

#! @PERL@ -w
# -*- perl -*-
# @configure_input@
eval 'exec @PERL@ -S $0 ${1+"$@"}'
if 0;
# autoreconf - install the GNU Build System in a directory tree
# Copyright 1994, 1999, 2000, 2001 Free Software Foundation, Inc.
1994-04-30 09:42:39 +08:00
# 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, write to the Free Software
1996-06-13 01:55:25 +08:00
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
1994-04-30 09:42:39 +08:00
# Written by David J. MacKenzie.
# Extended and rewritten in Perl by Akim Demaille.
BEGIN
{
my $perllibdir = $ENV{'autom4te_perllibdir'} || '@datadir@';
unshift @INC, "$perllibdir";
}
use Autom4te::General;
use Autom4te::XFile;
use File::Find;
use strict;
## ----------- ##
## Variables. ##
## ----------- ##
# $HELP
# -----
$help = "Usage: $0 [OPTION] ... [TEMPLATE-FILE]
Run `autoconf' (and `autoheader', `aclocal', `automake', `gettextize',
and `libtoolize' where appropriate) repeatedly to remake the GNU Build
System files in the directory tree rooted at the current directory.
By default, it only remakes those files that are older than their
predecessors. If you install new versions of the GNU Build System,
running `autoreconf' remakes all of the files by giving it the
`--force' option.
Operation modes:
-h, --help print this help, then exit
-V, --version print version number, then exit
-v, --verbose verbosely report processing
-d, --debug don't remove temporary files
-f, --force consider all files obsolete
-i, --install copy missing auxiliary files
-s, --symlink instead of copying, install symbolic links
The option `--install' is similar to the option `--add-missing' in
other tools.
Library directories:
-I, --include=DIR look for FILES in DIR (cumulative)
-M, --m4dir=M4DIR this package's Autoconf extensions
Unless specified, heuristics try to compute `M4DIR' from the `Makefile.am',
or defaults to `m4' if it exists.
The environment variables AUTOCONF, AUTOHEADER, AUTOMAKE, ACLOCAL,
GETTEXTIZE, LIBTOOLIZE are honored.
Report bugs to <bug-autoconf\@gnu.org>.
";
# $VERSION
# --------
$version = "autoreconf (@PACKAGE_NAME@) @VERSION@
Written by David J. MacKenzie and Akim Demaille.
Copyright 1994, 1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
";
# Lib files.
my $autoconf = $ENV{'AUTOCONF'} || '@autoconf-name@';
my $autoheader = $ENV{'AUTOHEADER'} || '@autoheader-name@';
my $automake = $ENV{'AUTOMAKE'} || 'automake';
my $aclocal = $ENV{'ACLOCAL'} || 'aclocal';
my $libtoolize = $ENV{'LIBTOOLIZE'} || 'libtoolize';
my $gettextize = $ENV{'GETTEXTIZE'} || 'gettextize';
# --install -- as --add-missing in other tools.
my $install = 0;
my @include;
# m4dir -- local Autoconf extensions. Typically `m4'.
my $m4dir;
my $status = 0;
# symlink -- when --install, use symlinks instead.
my $symlink = 0;
## ---------- ##
## Routines. ##
## ---------- ##
# parse_args ()
# -------------
# Process any command line arguments.
sub parse_args ()
{
my $srcdir;
getopt ('I|include|A|autoconf-dir|m|macrodir|l|localdir=s' => \@include,
'M|m4dir=s' => \$m4dir,
'i|install' => \$install,
's|symlink' => \$symlink);
die "$me: too many arguments\n"
if @ARGV;
if ($verbose && $debug)
{
xsystem ("$autoconf --version | sed 1q >&2");
print STDERR "\n";
xsystem ("$autoheader --version | sed 1q >&2");
print STDERR "\n";
xsystem ("$automake --version | sed 1q >&2");
print STDERR "\n";
xsystem ("$aclocal --version | sed 1q >&2");
print STDERR "\n";
xsystem ("$gettextize --version | sed 1q >&2");
print STDERR "\n";
xsystem ("$libtoolize --version | sed 1q >&2");
print STDERR "\n";
}
# Dispatch autoreconf's option to the tools.
# --include;
$autoconf .= join (' ', map { "--include=$_" } @include);
$autoheader .= join (' ', map { "--include=$_" } @include);
# --install and --symlink;
if ($install)
{
$automake .= ' --add-missing';
$automake .= ' --copy' unless $symlink;
$gettextize .= ' --copy' unless $symlink;
$libtoolize .= ' --copy' unless $symlink;
}
# --force;
if ($force)
{
$autoconf .= ' --force';
$autoheader .= ' --force';
$automake .= ' --force-missing';
$gettextize .= ' --force';
$libtoolize .= ' --force';
}
else
{
$automake .= ' --no-force';
}
# --debug;
if ($debug)
{
$autoconf .= ' --verbose --debug';
$autoheader .= ' --verbose --debug';
$automake .= ' --verbose';
$aclocal .= ' --verbose';
$libtoolize .= ' --debug';
}
}
# &autoreconf ()
# --------------
# Reconf the current directory.
sub autoreconf ()
{
# If there it's not `configure.ac' or `configure.in', we are not
# interested in the directory.
return
if !/^configure\.(ac|in)$/;
my $configure_ac = $_;
verbose "working on $File::Find::dir/$configure_ac";
# If there is no AC_INIT, then we are not interested: it looks like
# a Cygnus thingy.
my $configure_ac_file = new Autom4te::XFile $configure_ac;
my $uses_autoconf;
while ($_ = $configure_ac_file->getline)
{
$uses_autoconf = 1
if /AC_INIT/;
}
if (!$uses_autoconf)
{
verbose "$configure_ac: not using Autoconf";
return;
}
# -------------------- #
# Running gettexitze. #
# -------------------- #
my $uses_gettext = 0;
my $traces = new Autom4te::XFile "$autoconf --trace=AM_GNU_GETTEXT |";
while ($_ = $traces->getline)
{
$uses_gettext = 1
if /AM_GNU_GETTEXT/;
}
if (!$uses_gettext)
{
verbose "$configure_ac: not using Gettext";
}
elsif (-d 'intl')
{
verbose "$configure_ac: not running gettextize: `intl' is already present";
}
else
{
xsystem ($gettextize);
}
# -------------------- #
# Running libtoolize. #
# -------------------- #
my $uses_libtool = 0;
$traces = new Autom4te::XFile "$autoconf --trace=AM_PROG_LIBTOOL |";
while ($_ = $traces->getline)
{
$uses_libtool = 1
if /AM_PROG_LIBTOOL/;
}
if (!$uses_libtool)
{
verbose "$configure_ac: not using Libtool";
}
else
{
xsystem ($libtoolize);
}
# ----------------- #
# Running aclocal. #
# ----------------- #
if (-f 'aclocal.m4' &&
!up_to_date_p ('aclocal.m4', 'acinclude.m4'))
{
# If there are flags for aclocal in Makefile.am, use them.
my $aclocal_flags;
if (-f 'Makefile.am')
{
my $aclocal_m4 = new Autom4te::XFile 'Makefile.am';
while ($_ = $aclocal_m4->getline)
{
if (/^ACLOCAL_[A-Z_]*FLAGS\s*=\s*(.*)/)
{
$aclocal_flags = $1;
last;
}
}
}
# If m4dir is not specified and these flags do not specify the
# location of the local Autoconf extensions, default to `m4'.
if (!$aclocal_flags)
{
$aclocal_flags = '-I ' . ($m4dir || 'm4');
}
xsystem ("$aclocal $aclocal_flags")
}
# ------------------ #
# Running automake. #
# ------------------ #
# Assumes that there is a Makefile.am in the topmost directory.
if (!-f 'Makefile.am')
{
verbose "$configure_ac: not using Automake";
}
else
{
# We should always run automake, and let it decide whether it shall
# update the file or not. In fact, the effect of `$force' is already
# included in `$automake' via `--no-force'.
xsystem ($automake);
}
# ------------------ #
# Running autoconf. #
# ------------------ #
# Don't try to be smarter than `autoconf', which does its own
# up to date checkings.
xsystem ($autoconf);
# -------------------- #
# Running autoheader. #
# -------------------- #
# We now consider that if AC_CONFIG_HEADERS is used, then autoheader
# is used too.
# Just as for autoconf, up to date ness is performed by the tool itself.
my $uses_autoheader = 0;
$traces = new Autom4te::XFile "$autoconf --trace=AC_CONFIG_HEADERS |";
while ($_ = $traces->getline)
{
$uses_autoheader = 1
if /AC_CONFIG_HEADERS/;
}
if (!$uses_autoheader)
{
verbose "$configure_ac: not using Autoheader";
}
else
{
xsystem ($autoheader);
}
}
## ------ ##
## Main. ##
## ------ ##
# When debugging, it is convenient that all the related temporary
# files be at the same place.
mktmpdir ('ah');
$ENV{'TMPDIR'} = $tmp;
parse_args;
find (\&maybe_autoreconf, '.');