#!/usr/bin/perl # # # Guillaume Cottenceau (gc@mandrakesoft.com) # # Copyright 2001 MandrakeSoft # # This software may be freely redistributed under the terms of the GNU # public license. # # 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., 675 Mass Ave, Cambridge, MA 02139, USA. # # # Executes the correct autoconf version. # # - defaults to autoconf-2.13 # - runs autoconf-2.5x if it exists and... # - envvar WANT_AUTOCONF is set to `2.5' # -or- # - configure.ac is present # -or- # - `configure.in' contains AC_PREREQ and the value's 3 first letters # are stringwise greater than '2.13' # -or- # - `configure' is already present and was generated by autoconf greater than # '2.13' # -or- # - `Makefile.in' was generated by automake-1.6 or superior, which # specifically needs autoconf-2.5x # #use MDK::Common; sub cat_ { local *F; open F, $_[0] or return; my @l = ; wantarray ? @l : join '', @l } sub ac_version { return ((@versions = cat_(shift) =~ /^\s*\[?AC_PREREQ\(\[?([^\)]{3}[0-9]?)[^\)]*\]?\)/mg) ? ((sort @versions)[-1]) : ''); } my $binary = "$0-2.13"; my $binary_new = "$0-2.5x"; # Autoconf is really getting out of hand, so rather start supporting # WANT_AUTOCONF = "2.5" the like. Unfortunately it override the old # variables, so if not set, just convert the old variables .... if ($ENV{WANT_AUTOCONF} eq "") { if ($ENV{WANT_AUTOCONF_2_1}) { $ENV{WANT_AUTOCONF} = '2.1'; } elsif ($ENV{WANT_AUTOCONF_2_5}) { $ENV{WANT_AUTOCONF} = '2.5'; } } if ($ENV{WANT_AUTOCONF} ne '2.1') { if ((! -x $binary) # handle stuff like autom4te, where only 2.5x have the binary || (-x $binary_new # user may have only 2.13 && (($ENV{WANT_AUTOCONF} eq '2.5') || -r 'configure.ac' || ac_version('configure.in') gt '2.13' || (cat_('configure') =~ /^# Generated by Autoconf (\S+)/m ? $1 : '') gt '2.13' || (cat_('Makefile.in') =~ /^# Makefile\.in generated by automake (\S+)/ ? $1 : '') ge '1.6' || ac_version('aclocal.m4') gt '2.13'))) { $ENV{WANT_AUTOCONF} = '2.5'; # to prevent further "cats" and to enhance consistency (possible cwd etc) $binary = $binary_new; } else { $ENV{WANT_AUTOCONF} = '2.1'; # for further consistency } } # Set AUTOM4TE to the proper version (bug #40983). # Do not set it for 2.13 though, as it does not ship autom4te. if(($ENV{AUTOM4TE} eq "") && ($ENV{WANT_AUTOCONF} = '2.5') && ($0 ne 'autom4te')) { $ENV{AUTOM4TE} = "autom4te-2.5x"; } $ENV{WANT_ACWRAPPER_DEBUG} and print STDERR "ac-wrapper: will execute <$binary>\n"; exec $binary, @ARGV; die "ac-wrapper: ouch, couldn't call binary ($binary).\n";