aboutsummaryrefslogtreecommitdiff
blob: 06f53ec92c7db8622db4acc20850feafcedb1a8d (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
#!/usr/bin/perl
#
#
# Guillaume Cottenceau (gc@mandrakesoft.com)
# Abel Cheung (deaddog@deaddog.org)
#
# Copyright 2001-2002, 2004 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.59
# - runs autoconf-2.13 only if:
#   - envvar WANT_AUTOCONF_2_1 is set to `1'
#     -or-
#   - `configure' is already present and was generated by autoconf 2.13
#
#######################################################################
#
# ChangeLog:
# 
# * Fri May 14 2004
# - Use autoconf 2.59 by default, unless `configure' is generated by
#   autoconf 2.13, or WANT_AUTOCONF_2_1 is set.
# - WANT_AUTOCONF_2_5 has no effect now
#
# * Thu May 27 2004
# - Almost rewrite
# - Introduce FORCE_AUTOCONF_2_5 (avoid misuse with WANT_*), which can be used
#   when you want to play with fire :-)
# - More verbose and user oriented messages (gc et. al.)
#
# * Sat Jul 03 2004
# - require autoconf2.1 and remove special error message
# - allow use of tools without configure.in or configure.ac (2.5 only)
#   required for autodetection by apps

use File::Basename qw(basename);
use strict;

sub cat_ { local *F; open F, $_[0] or return; my @l = <F>; wantarray ? @l : join '', @l }

sub errmsg {
	my $dummy = 0;
	my @msg = @_;
	foreach (@msg) {
		print STDERR (($dummy++ == 0)? "ac-wrapper: " : "            ") . $_ . "\n";
	}
	exit 1;
}

errmsg ("Don't call this script directly.") if (basename("$0") eq "ac-wrapper.pl");

#
# go away naughty guys/gals
#
if (($ENV{WANT_AUTOCONF_2_1}) && ($ENV{FORCE_AUTOCONF_2_5})) {
	errmsg ("You can only set either WANT_AUTOCONF_2_1 or FORCE_AUTOCONF_2_5,",
		"but not both.");
}

if (($ENV{WANT_AUTOCONF_2_1}) && (basename("$0") eq "autom4te")) {
	errmsg ("Autoconf 2.13 doesn't contain autom4te.",
		"Either unset WANT_AUTOCONF_2_1 or don't execute anything",
		"that would use autom4te.");
}

my $binary_new = "$0-2.59";
my $binary_old = "$0-2.13";
my $binary = $binary_new;
my $confversion = 'Undetected';

if ((-f "configure.ac") || (-f "configure.in")) {
#
# autodetect routine
#
	if ($ENV{WANT_AUTOCONF_2_1}) {
		if ((-f "configure.in") && (! -f "configure.ac")) {
			$binary = $binary_old;
		} else {
			errmsg ("Since configure.ac is present, aclocal always use",
				"autoconf 2.59, which conflicts with your choice and",
				"causes error. You have two options:",
				"1. Try execute command again after removing configure.ac",
				"2. Don't set WANT_AUTOCONF_2_1 variable");
		}
	} elsif (!($ENV{FORCE_AUTOCONF_2_5})) {
		# U > [0-9] in lexicon comparison
		$confversion = (cat_('configure') =~ /^# Generated (by (?:GNU )?Autoconf|automatically using autoconf version) (\S+)/m ? $2 : 'Unknown');
	
		if (("$confversion" lt '2.5') && (! -f "configure.ac")) {
			$binary = $binary_old;
		}
	}
}

if ($ENV{WANT_ACWRAPPER_DEBUG}) {
	print STDERR "ac-wrapper: DEBUG: Detected version is '$confversion'\n";
	print STDERR "ac-wrapper: DEBUG: WANT_AUTOCONF_2_1 is set\n" if ($ENV{WANT_AUTOCONF_2_1});
	print STDERR "ac-wrapper: DEBUG: FORCE_AUTOCONF_2_5 is set\n" if ($ENV{FORCE_AUTOCONF_2_5});
	print STDERR "ac-wrapper: DEBUG: will execute <$binary>\n";
}

#
# for further consistency
#
$ENV{WANT_AUTOCONF_2_1} = 1 if ("$binary" eq "$binary_old");
$ENV{FORCE_AUTOCONF_2_5} = 1 if ("$binary" eq "$binary_new");

if (! -x "$binary") {
	# this shouldn't happen
	errmsg ("$binary is missing or not executable.",
		"Please try emerging the correct version of autoconf.");
}

exec $binary, @ARGV;

errmsg ("was unable to exec $binary !?");