autoconf/bin/autoreconf.in

305 lines
7.8 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' and `automake', where
appropriate) repeatedly to remake the Autoconf `configure' scripts
and configuration header templates 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 a new version of
Autoconf, 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:
-A, --autoconf-dir=ACDIR location of Autoconf's macro files (rarely needed)
-l, --localdir=DIR location of `aclocal.m4' and `acconfig.h'
-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, and ACLOCAL
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';
# --install -- as --add-missing in other tools.
my $install = 0;
my $localdir = '.';
my $autoconf_dir = '.';
# m4dir -- local Autoconf extensions. Typically `m4'.
my $m4dir;
my $status = 0;
# symlink -- when --install, use symlinks instead.
my $symlink = 0;
# $force -- update up to date files.
my $force = 0;
## ---------- ##
## Routines. ##
## ---------- ##
# parse_args ()
# -------------
# Process any command line arguments.
sub parse_args ()
{
my $srcdir;
getopt ('l|localdir=s' => \$localdir,
'A|autoconf-dir|m|macrodir=s' => \$autoconf_dir,
'M|m4dir=s' => \$m4dir,
'f|force' => \$force,
'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";
}
# Dispatch autoreconf's option to the tools.
# --localdir
$autoconf .= " --include=$autoconf_dir --include=$localdir";
$autoheader .= " --include=$autoconf_dir --include=$localdir";
# --force;
if ($force)
{
$autoconf .= ' --force';
$autoheader .= ' --force';
}
else
{
$automake .= ' --no-force';
}
# --verbose
if ($verbose)
{
$autoconf .= ' --verbose';
$autoheader .= ' --verbose';
$automake .= ' --verbose';
$aclocal .= ' --verbose';
}
# --debug;
if ($debug)
{
$autoconf .= ' --debug';
$autoheader .= ' --debug';
}
# --install and --symlink;
if ($install)
{
$automake .= ' --add-missing';
$automake .= ' --copy'
unless $symlink;
}
}
# &autoreconf ()
# --------------
# Reconf the current directory.
sub autoreconf ()
{
# If there it's not `configure.ac' or `configure.in', we are not
# interested in the directory.
verbose "{$_}\n";
return
if !/^configure\.(ac|in)$/;
my $configure_ac = $_;
verbose "working on $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 $autoconf_driven;
while ($_ = $configure_ac_file->getline)
{
$autoconf_driven = 1
if /AC_INIT/;
}
if (!$autoconf_driven)
{
verbose "$configure_ac: not Autoconf";
return;
}
# ----------------- #
# Running aclocal. #
# ----------------- #
if (-f "$localdir/aclocal.m4" &&
($force ||
!up_to_date_p ("$localdir/aclocal.m4", "$localdir/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')
{
# 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 $autoheader_driven = 0;
my $traces = new Autom4te::XFile "$autoconf --trace=AC_CONFIG_HEADERS |";
while ($_ = $traces->getline)
{
$autoheader_driven = 1
if /AC_CONFIG_HEADERS/;
}
if (!$autoheader_driven)
{
verbose "$configure_ac: not 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 (\&autoreconf, '.');