summaryrefslogtreecommitdiff
blob: 984ce670f378a2aeb90c85010132db5cdaa5b15f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/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 = <F>; 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";