| #! /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: |