-
Notifications
You must be signed in to change notification settings - Fork 516
/
bootstrap.sh
executable file
·183 lines (157 loc) · 5 KB
/
bootstrap.sh
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/bin/sh
#
## Copyright (C) 1996-2023 The Squid Software Foundation and contributors
##
## Squid software is distributed under GPLv2+ license and includes
## contributions from numerous individuals and organizations.
## Please see the COPYING and CONTRIBUTORS files for details.
##
#
# Used to setup the configure.ac, autoheader and Makefile.in's if configure
# has not been generated. This script is only needed for developers when
# configure has not been run, or if a Makefile.am in a non-configured directory
# has been updated
# Autotool versions preferred. To override either edit the script
# to match the versions you want to use, or set the variables on
# the command line like "env acver=.. amver=... ./bootstrap.sh"
acversions="${acver:-.}" # 2.68 2.67 2.66 2.65 2.64 2.63 2.62 2.61}"
amversions="${amver:-.}" # 1.11 1.10 1.9}"
ltversions="${ltver:-.}" # 2.2}"
check_version()
{
eval $2 --version 2>/dev/null | grep -i "$1.* $3" >/dev/null
}
show_version()
{
tool=$1
variant=$2
${tool}${variant} --version 2>/dev/null | head -1 | sed -e 's/.*) //'
}
find_variant()
{
tool=$1
found="NOT_FOUND"
shift
versions="$*"
for version in $versions; do
for variant in "" "${version}" "-${version}" "`echo $version | sed -e 's/\.//g'`"; do
if check_version $tool ${tool}${variant} $version; then
found="${variant}"
break
fi
done
if [ "x$found" != "xNOT_FOUND" ]; then
break
fi
done
if [ "x$found" = "xNOT_FOUND" ]; then
echo "WARNING: Cannot find $tool version $versions" >&2
echo "Trying `$tool --version 2>&1 | head -1`" >&2
found=""
fi
echo $found
}
find_path()
{
tool=$1
path=`which $tool`
if test $? -gt 0 ; then
# path for $tool not found. Not defining, and hoping for the best
echo
return
fi
echo $(dirname $path)
}
bootstrap() {
if "$@"; then
true # Everything OK
else
echo "$1 failed" >&2
echo "Autotool bootstrapping failed. You will need to investigate and correct" ;
echo "before you can develop on this source tree"
exit 1
fi
}
bootstrap_libtoolize() {
tool=$1
ltdl="--ltdl"
bootstrap $tool $ltdl --force --copy --automake
}
# On MAC OS X, GNU libtool is named 'glibtool':
if [ `uname -s 2>/dev/null` = 'Darwin' ]
then
LIBTOOL_BIN="glibtool"
else
LIBTOOL_BIN="libtool"
fi
# Adjust paths of required autool packages
amver=`find_variant automake ${amversions}`
acver=`find_variant autoconf ${acversions}`
ltver=`find_variant ${LIBTOOL_BIN} ${ltversions}`
# Produce debug output about what version actually found.
amversion=`show_version automake "${amver}"`
acversion=`show_version autoconf "${acver}"`
ltversion=`show_version ${LIBTOOL_BIN} "${ltver}"`
# Find the libtool path to get the right aclocal includes
ltpath=`find_path ${LIBTOOL_BIN}${ltver}`
# Set environment variable to tell automake which autoconf to use.
AUTOCONF="autoconf${acver}" ; export AUTOCONF
echo "automake ($amversion) : automake$amver"
echo "autoconf ($acversion) : autoconf$acver"
echo "libtool ($ltversion) : ${LIBTOOL_BIN}${ltver}"
echo "libtool path : $ltpath"
if test -n "$ltpath"; then
acincludeflag="-I $ltpath/../share/aclocal"
else
acincludeflag=""
fi
# bootstrap primary or subproject sources
bootstrap_dir() {
dir="$1"
cd $dir || exit $?
bootstrap aclocal$amver $acincludeflag
bootstrap autoheader$acver
# Do not libtoolize ltdl
if grep -q '^LTDL_INIT' configure.ac
then
bootstrap_libtoolize ${LIBTOOL_BIN}ize${ltver}
fi
bootstrap automake$amver --foreign --add-missing --copy --force
bootstrap autoconf$acver --force
cd - > /dev/null
}
echo "Bootstrapping primary Squid sources"
mkdir -p cfgaux || exit $?
bootstrap_dir .
# The above bootstrap_libtoolize step creates or updates libltdl. It copies
# (with minor adjustments) configure.ac and configure, Makefile.am and
# Makefile.in from libtool installation, but does not regenerate copied
# configure from copied configure.ac and copied Makefile.in from Makefile.am.
# We get libltdl/configure and libltdl/Makefile.in as they were bootstrapped
# by libtool authors or package maintainers. Low-level idiosyncrasies in those
# libtool files result in mismatches between copied code expectations and
# Squid sub-project environment, leading to occasional build failures that
# this bootstrapping addresses.
echo "Bootstrapping libltdl sub-project"
bootstrap_dir libltdl
# Make a copy of SPONSORS we can package
if test -f SPONSORS.list; then
sed -e 's/@Squid-[0-9\.]*://' <SPONSORS.list > SPONSORS || (rm -f SPONSORS && exit 1)
fi
# Fixup autoconf recursion using --silent/--quiet option
# autoconf should inherit this option whe recursing into subdirectories
# but it currently doesn't for some reason.
if ! grep "configure_args --quiet" configure >/dev/null; then
echo "Fixing configure recursion"
ed -s configure <<'EOS' >/dev/null || true
/ac_sub_configure_args=/
+1
i
# Add --quiet option if used
test "$silent" = yes &&
ac_sub_configure_args="$ac_sub_configure_args --quiet"
.
w
EOS
fi
echo "Autotool bootstrapping complete."