aboutsummaryrefslogtreecommitdiff
blob: 06df1886134657f95ed690153a112e84ab00ee74 (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/usr/bin/perl
#
#
# Author: Guillaume Cottenceau (gc@mandrakesoft.com)
# Modified by: Martin Schlemmer (azarah@gentoo.org)
#
# 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 automake-1.4
# - runs automake-1.8 if it exists and...
#   - envvar WANT_AUTOMAKE is set to `1.8'
#     -or-
#   - `Makefile.in' was generated by automake-1.8 or superior, which
#     specifically needs automake-1.8
#     -or_
#   - 'aclocal.m4' contain AM_AUTOMAKE_VERSION, specifying the use of 1.8
# - runs automake-1.7 if it exists and...
#   - envvar WANT_AUTOMAKE is set to `1.7'
#     -or-
#   - `Makefile.in' was generated by automake-1.7 or superior, which
#     specifically needs automake-1.7
#     -or-
#   - 'aclocal.m4' contain AM_AUTOMAKE_VERSION, specifyint the use of 1.7
#     -or-
# - runs automake-1.6 if it exists and...
#   - envvar WANT_AUTOMAKE is set to `1.6'
#     -or-
#   - `Makefile.in' was generated by automake-1.6 or superior, which
#     specifically needs automake-1.6
#     -or-
#   - 'aclocal.m4' contain AM_AUTOMAKE_VERSION, specifyint the use of 1.6
#     -or-
#   - `configure.in' contains AC_PREREQ and the value's 3 first letters
#      are stringwise greater than '2.53c'
#     -or-
#   - `configure' is already present and was generated by autoconf greater than
#     '2.53c'
# - runs automake-1.5 if it exists and...
#   - envvar WANT_AUTOMAKE is set to `1.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.5 or superior, which
#     specifically needs automake-1.5
#
#use MDK::Common;

sub cat_ { local *F; open F, $_[0] or return; my @l = <F>; wantarray ? @l : join '', @l }
sub am_version {
	my $file = cat_(shift);
	return (@versions = $file =~ /^\s*\[?AM_AUTOMAKE_VERSION\(\[?([^\)]{3}[0-9]?)[^\)]*\]?\)/mg) ? ((sort @versions)[-1]) : '';
}
sub ac_version {
	my $file = cat_(shift);
	return (@versions = $file =~ /^\s*\[?AC_PREREQ\(\[?([^\)]{3}[0-9]?)[^\)]*\]?\)/mg) ? ((sort @versions)[-1]) : '';
}



my $binary      = "$0-1.4";
my $binary_1_5  = "$0-1.5x";
my $binary_1_6  = "$0-1.6x";
my $binary_1_7  = "$0-1.7x";
my $binary_1_8  = "$0-1.8x";

# Automake is really getting out of hand, so rather start supporting
# WANT_AUTOMAKE = "1.7" the like.  Unfortunately it override the old
# variables, so if not set, just convert the old variables ....
if ($ENV{WANT_AUTOMAKE} eq "") {
	if ($ENV{WANT_AUTOMAKE_1_4}) {
		$ENV{WANT_AUTOMAKE} = '1.4';
	} elsif ($ENV{WANT_AUTOMAKE_1_6}) {
		$ENV{WANT_AUTOMAKE} = '1.6';
	} elsif ($ENV{WANT_AUTOMAKE_1_5}) {
		$ENV{WANT_AUTOMAKE} = '1.5';
	}
}

# question here is do we really want 1.5 or 1.6?  Out of a KDE outlook, it
# should rather be 1.5, and since most people would rather have migrated to
# 1.5, and then stay with it for a bit (those 1.4 die hards ..), only have
# the 'configure.ac' test for 1.5 ...
if ($ENV{WANT_AUTOMAKE} ne '1.4') {
	if (-x $binary_1_8              # user may not have _1_8 ...
	&& (($ENV{WANT_AUTOMAKE} eq '1.8')
	    || (cat_('Makefile.in') =~ /^# Makefile\.in generated by automake (\S+)/ ? $1 : '') ge '1.8'
	    || (cat_('aclocal.m4') =~ /^# aclocal.m4 generated automatically by aclocal (\S+)/ ? $1 : '') ge '1.8'
	    || am_version('aclocal.m4') ge '1.8')) {
	$ENV{WANT_AUTOMAKE} = '1.8';    # to prevent further "cats" and to enhance consistency (possible cwd etc)
	$binary         = $binary_1_8;
        } elsif (-x $binary_1_7         # user may not have 1.7 ...
	&& (($ENV{WANT_AUTOMAKE} eq '1.7')
	    || (cat_('Makefile.in') =~ /^# Makefile\.in generated by automake (\S+)/ ? $1 : '') ge '1.7'
	    || (cat_('aclocal.m4') =~ /^# aclocal.m4 generated automatically by aclocal (\S+)/ ? $1 : '') ge '1.7'
	    || am_version('aclocal.m4') ge '1.7')) {
	$ENV{WANT_AUTOMAKE} = '1.7';    # to prevent further "cats" and to enhance consistency (possible cwd etc)
	$binary         = $binary_1_7;
	} elsif (-x $binary_1_6         # user may not have 1.6 ...
	&& (($ENV{WANT_AUTOMAKE} eq '1.6')
	    || (cat_('Makefile.in') =~ /^# Makefile\.in generated by automake (\S+)/ ? $1 : '') ge '1.6'
	    || (cat_('aclocal.m4') =~ /^# aclocal.m4 generated automatically by aclocal (\S+)/ ? $1 : '') ge '1.6'
	    || am_version('aclocal.m4') ge '1.6'
		# Autoconf 2.53d and later need automake-1.6c, so enable 1.6 for 2.53
		# and up .....
	    || ac_version('configure.in') gt '2.52'
	    || (cat_('configure') =~ /^# Generated by Autoconf (\S+)/m ? $1 : '') gt '2.52'
	    || ac_version('aclocal.m4') gt '2.52')) {
	$ENV{WANT_AUTOMAKE} = '1.6';    # to prevent further "cats" and to enhance consistency (possible cwd etc)
	$binary 		= $binary_1_6;
    } elsif (-x $binary_1_5         # user may have only 1.4 ...
	&& (($ENV{WANT_AUTOMAKE} eq '1.5')
	    || -r 'configure.ac'
	    || (cat_('Makefile.in') =~ /^# Makefile\.in generated by automake (\S+)/ ? $1 : '') ge '1.5'
	    || (cat_('aclocal.m4') =~ /^# aclocal.m4 generated automatically by aclocal (\S+)/ ? $1 : '') ge '1.5'
	    || ac_version('configure.in') gt '2.13'
	    || (cat_('configure') =~ /^# Generated by Autoconf (\S+)/m ? $1 : '') gt '2.13'
	    || ac_version('aclocal.m4') gt '2.13')) {
	$ENV{WANT_AUTOMAKE} = '1.5';    # to prevent further "cats" and to enhance consistency (possible cwd etc)
	$binary 		= $binary_1_5;
    } else {
	if (-r 'configure.in' || -r 'configure.ac') {
		$ENV{WANT_AUTOMAKE} = '1.4';    # for further consistency
	} else {
		$ENV{WANT_AUTOMAKE} = '1.8';
		$binary         = $binary_1_8;
	}
    }
}

$ENV{WANT_AMWRAPPER_DEBUG} and print STDERR "am-wrapper: will execute <$binary>\n";

exec $binary, @ARGV;

die "am-wrapper: ouch, couldn't call binary ($binary).\n";