-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbootstrap
executable file
·259 lines (217 loc) · 6.93 KB
/
bootstrap
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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
#! /bin/sh
# bootstrap (GNU M4) version 2006-07-15
# Written by Gary V. Vaughan <[email protected]>
# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, a copy can be downloaded from
# http://www.gnu.org/copyleft/gpl.html, or by writing to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
# Usage: $progname [options]
# -v --version print version information
# -h,-? --help print short or long help message
# You can also set the following variables to help $progname
# locate the right tools:
# AUTORECONF, GNULIB_TOOL, RM, SED
# This script bootstraps a CVS checkout of GNU M4 by correctly
# calling out to parts of the GNU Build Platform. Currently this
# requires GNU Autoconf 2.60, GNU Automake 1.9.6, and bleeding edge
# CVS snapshots of GNU Gnulib.
# Report bugs to <[email protected]>
: ${AUTORECONF=autoreconf}
: ${GNULIB_TOOL=gnulib-tool}
: ${RM=rm -f}
: ${SED=sed}
dirname="s,/[^/]*$,,"
basename="s,^.*/,,g"
# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
# is ksh but when the shell is invoked as "sh" and the current value of
# the _XPG environment variable is not equal to 1 (one), the special
# positional parameter $0, within a function call, is the name of the
# function.
progpath="$0"
# The name of this program:
progname=`echo "$progpath" | $SED "$basename"`
PROGRAM=bootstrap
# func_echo arg...
# Echo program name prefixed message.
func_echo ()
{
echo $progname: ${1+"$@"}
}
# func_error arg...
# Echo program name prefixed message to standard error.
func_error ()
{
echo $progname: ${1+"$@"} >&2
}
# func_fatal_error arg...
# Echo program name prefixed message to standard error, and exit.
func_fatal_error ()
{
func_error ${1+"$@"}
exit $EXIT_FAILURE
}
# func_verbose arg...
# Echo program name prefixed message in verbose mode only.
func_verbose ()
{
$opt_verbose && func_error ${1+"$@"}
}
# func_missing_arg argname
# Echo program name prefixed message to standard error and set global
# exit_cmd.
func_missing_arg ()
{
func_error "missing argument for $1"
exit_cmd=exit
}
# func_fatal_help arg...
# Echo program name prefixed message to standard error, followed by
# a help hint, and exit.
func_fatal_help ()
{
func_error ${1+"$@"}
func_fatal_error "Try \`$progname --help' for more information."
}
# func_missing_arg argname
# Echo program name prefixed message to standard error and set global
# exit_cmd.
func_missing_arg ()
{
func_error "missing argument for $1"
exit_cmd=exit
}
# func_usage
# Echo short help message to standard output and exit.
func_usage ()
{
$SED '/^# Usage:/,/# -h/ {
s/^# //; s/^# *$//;
s/\$progname/'$progname'/;
p;
}; d' < "$progpath"
echo
echo "run \`$progname --help | more' for full usage"
exit $EXIT_SUCCESS
}
# func_help
# Echo long help message to standard output and exit.
func_help ()
{
$SED '/^# Usage:/,/# Report bugs to/ {
s/^# //; s/^# *$//;
s/\$progname/'$progname'/;
p;
}; d' < "$progpath"
exit $EXIT_SUCCESS
}
# func_version
# Echo version message to standard output and exit.
func_version ()
{
$SED '/^# '$PROGRAM' (GNU /,/# warranty; / {
s/^# //; s/^# *$//;
s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/;
p;
}; d' < "$progpath"
exit $EXIT_SUCCESS
}
# func_update
# Copy $1 to $2 if it is newer.
func_update ()
{
if test -f "$2" && cmp -s "$1" "$2" ; then
func_verbose "$2 is up-to-date"
else
func_echo "copying $1 -> $2"
cp "$1" "$2"
fi
}
# Parse options once, thoroughly. This comes as soon as possible in
# the script to make things like `bootstrap --version' happen quickly.
{
# sed scripts:
my_sed_single_opt='1s/^\(..\).*$/\1/;q'
my_sed_single_rest='1s/^..\(.*\)$/\1/;q'
my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
my_sed_long_arg='1s/^--[^=]*=//'
# this just eases exit handling
while test $# -gt 0; do
opt="$1"
shift
case $opt in
# Separate optargs to short options:
-\?|-h) func_usage ;;
--help) func_help ;;
--version) func_version ;;
--) break ;;
-*) func_fatal_help "unrecognized option \`$opt'" ;;
*) set -- "$opt" ${1+"$@"}; break ;;
esac
done
# Bail if the options were screwed
$exit_cmd $EXIT_FAILURE
}
## ---------------------------- ##
## Find the gnulib module tree. ##
## ---------------------------- ##
case $GNULIB_TOOL in
/* ) gnulibdir=$GNULIB_TOOL ;; # absolute
*/* ) gnulibdir=`pwd`/$GNULIB_TOOL ;; # relative
* ) gnulibdir=`which "$GNULIB_TOOL"` ;; # PATH search
esac
# Follow symlinks
while test -h "$gnulibdir"; do
# Resolve symbolic link.
sedexpr1='s, -> ,#%%#,'
sedexpr2='s,^.*#%%#\(.*\)$,\1,p'
linkval=`LC_ALL=C ls -l "$gnulibdir" | $SED "$sedexpr1" | $SED -n "$sedexpr2"`
test -n "$linkval" || break
case "$linkval" in
/* ) gnulibdir="$linkval" ;;
* ) gnulibdir=`echo "$gnulibdir" | sed -e 's,/[^/]*$,,'`/"$linkval" ;;
esac
done
gnulibdir=`echo "$gnulibdir" | $SED "$dirname"`
## ---------------------- ##
## Import Gnulib modules. ##
## ---------------------- ##
func_echo "running: $GNULIB_TOOL --update"
$GNULIB_TOOL --update || func_fatal_error "gnulib-tool failed"
## ----------- ##
## Autoreconf. ##
## ----------- ##
func_echo "running: $AUTORECONF --force --verbose --install"
$AUTORECONF --force --verbose --install || func_fatal_error "autoreconf failed"
## ---------------------------------------- ##
## Gnulib is more up-to-date than automake. ##
## ---------------------------------------- ##
func_update "$gnulibdir"/build-aux/config.guess config.guess
func_update "$gnulibdir"/build-aux/config.sub config.sub
func_update "$gnulibdir"/build-aux/depcomp depcomp
func_update "$gnulibdir"/build-aux/install-sh install-sh
func_update "$gnulibdir"/build-aux/mdate-sh doc/mdate-sh
func_update "$gnulibdir"/build-aux/missing missing
func_update "$gnulibdir"/build-aux/texinfo.tex doc/texinfo.tex
func_update "$gnulibdir"/doc/COPYING COPYING
func_update "$gnulibdir"/doc/INSTALL INSTALL
exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "# bootstrap (GNU M4) version "
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "$"
# End: