blob: d4908fc4f9d7f08d4aa116e1d0ef400f1f52ad2d [file] [log] [blame]
#! /usr/bin/env perl
# -*- perl -*-
eval 'case $# in 0) exec /usr/bin/perl -S "$0";; *) exec /usr/bin/perl -S "$0" "$@";; esac'
if 0;
# gnu-configize - install the GNU config.guess / config.sub in a directory tree
# Based on autoreconf:
# Copyright (C) 1994, 1999, 2000, 2001, 2002, 2003
# 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.
BEGIN
{
my $datadir = $ENV{'autom4te_perllibdir'} || '@autom4te_perllibdir@';
# '/home/kergoth/code/build-arm/tmp/staging/share/autoconf';
unshift @INC, $datadir;
# Override SHELL. On DJGPP SHELL may not be set to a shell
# that can handle redirection and quote arguments correctly,
# e.g.: COMMAND.COM. For DJGPP always use the shell that configure
# has detected.
$ENV{'SHELL'} = '/bin/sh' if ($^O eq 'dos');
}
use Autom4te::ChannelDefs;
use Autom4te::Channels;
use Autom4te::Configure_ac;
use Autom4te::FileUtils;
use Autom4te::General;
use Autom4te::XFile;
# Do not use Cwd::chdir, since it might hang.
use Cwd 'cwd';
use strict;
## ----------- ##
## Variables. ##
## ----------- ##
# $HELP
# -----
$help = "Usage: $0 [OPTION] ... [CONFIGURE-AC or DIRECTORY] ...
Install the GNU config.sub and config.guess scripts in the
DIRECTORIES or the directory trees driven by CONFIGURE-AC
(defaulting to `.').
Operation modes:
-h, --help print this help, then exit
-V, --version print version number, then exit
-v, --verbose verbosely report processing
-f, --force consider all files obsolete
-s, --symlink install symbolic links instead of copies
-W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax]
" . Autom4te::ChannelDefs::usage . "
The environment variable \`WARNINGS\' is honored. Some subtools might
support other warning types, using \`all' is encouraged.
";
# $VERSION
# --------
$version = "gnu-configize 1.0
Copyright (C) 2004 Chris Larson
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
";
my $configdir = '@gnu-configdir@';
#'/home/kergoth/code/build-arm/tmp/staging/i686-linux/share/gnu-config';
my $autoconf = $ENV{'AUTOCONF'} || 'autoconf';
# use symlinks instead.
my $symlink = 0;
my $configure_ac;
my $rm = "rm -f";
my $ln_s = "ln -sf";
my $cp = "cp -f";
my $mkdir = "mkdir";
my $chmod = "chmod";
## ---------- ##
## Routines. ##
## ---------- ##
# parse_args ()
# -------------
# Process any command line arguments.
sub parse_args ()
{
my $srcdir;
getopt ('s|symlink' => \$symlink);
# Even if the user specified a configure.ac, trim to get the
# directory, and look for configure.ac again. Because (i) the code
# is simpler, and (ii) we are still able to diagnose simultaneous
# presence of configure.ac and configure.in.
@ARGV = map { /configure\.(ac|in)$/ ? dirname ($_) : $_ } @ARGV;
push @ARGV, '.' unless @ARGV;
}
# &gnu_configize_current_directory
# -----------------------------
sub gnu_configize_current_directory ()
{
my $configure_ac = require_configure_ac;
# ---------------------- #
# Is it using Autoconf? #
# ---------------------- #
my $uses_autoconf;
my $uses_gettext;
my $configure_ac_file = new Autom4te::XFile $configure_ac;
while ($_ = $configure_ac_file->getline)
{
s/#.*//;
s/dnl.*//;
$uses_autoconf = 1 if /AC_INIT/;
}
if (!$uses_autoconf)
{
verb "$configure_ac: not using Autoconf";
return;
}
my $aux_dir;
my @subdir;
my $cmd;
my $dest;
verb "$configure_ac: tracing";
my $traces = new Autom4te::XFile
("$autoconf"
. join (' --trace=', '',
# If you change this list, update the
# `Autoreconf-preselections' section of autom4te.in.
'AC_CONFIG_AUX_DIR:AC_CONFIG_AUX_DIR:\$1',
'AC_CONFIG_SUBDIRS:AC_CONFIG_SUBDIRS:\$1',
'AC_INIT',
)
. ' |');
while ($_ = $traces->getline)
{
$aux_dir = $1 if /AC_CONFIG_AUX_DIR:(.*)/;
$uses_autoconf = 1 if /AC_INIT/;
push @subdir, split (' ', $1) if /AC_CONFIG_SUBDIRS:(.*)/;
}
# The subdirs are *optional*, they may not exist.
foreach (@subdir)
{
if (-d)
{
verb "$configure_ac: subdirectory $_ to gnu-configize";
gnu_configize ($_);
}
else
{
verb "$configure_ac: subdirectory $_ not present";
}
}
$dest = ".";
if (defined $aux_dir)
{
$dest = $aux_dir;
if (! -d $aux_dir)
{
verb "$configure_ac: creating directory $aux_dir";
mkdir $aux_dir
or error "cannot create $aux_dir: $!";
}
}
if (!$symlink)
{
$cmd = $cp;
}
else
{
$cmd = $ln_s;
}
xsystem ("$cmd $configdir/config.guess $dest/");
xsystem ("$chmod u+x $dest/config.guess");
xsystem ("$cmd $configdir/config.sub $dest/");
xsystem ("$chmod u+x $dest/config.sub");
}
# &gnu_configize ($DIRECTORY)
# ------------------------
# Reconf the $DIRECTORY.
sub gnu_configize ($)
{
my ($directory) = @_;
my $cwd = cwd;
# The format for this message is not free: taken from Emacs, itself
# using GNU Make's format.
verb "Entering directory `$directory'";
chdir $directory
or error "cannot chdir to $directory: $!";
gnu_configize_current_directory;
# The format is not free: taken from Emacs, itself using GNU Make's
# format.
verb "Leaving directory `$directory'";
chdir $cwd
or error "cannot chdir to $cwd: $!";
}
## ------ ##
## Main. ##
## ------ ##
parse_args;
# Autoreconf all the given configure.ac. A while loop, not a for,
# since the list can change at runtime because of AC_CONFIG_SUBDIRS.
for my $directory (@ARGV)
{
gnu_configize ($directory);
}
### Setup "GNU" style for perl-mode and cperl-mode.
## Local Variables:
## perl-indent-level: 2
## perl-continued-statement-offset: 2
## perl-continued-brace-offset: 0
## perl-brace-offset: 0
## perl-brace-imaginary-offset: 0
## perl-label-offset: -2
## cperl-indent-level: 2
## cperl-brace-offset: 0
## cperl-continued-brace-offset: 0
## cperl-label-offset: -2
## cperl-extra-newline-before-brace: t
## cperl-merge-trailing-else: nil
## cperl-continued-statement-offset: 2
## End: