#! @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. # 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 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # 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 . "; # $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, '.');