]> git.saurik.com Git - bison.git/blob - bootstrap
4648a608b7d981131c50810d0367016140443186
[bison.git] / bootstrap
1 #! /bin/sh
2
3 # Bootstrap this package from CVS.
4
5 # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
6
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2, or (at your option)
10 # any later version.
11
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 # 02110-1301, USA.
21
22 # Written by Paul Eggert.
23
24 package=bison
25
26 # Translation Project URL, for the registry of all projects.
27 TP_URL='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
28
29 # Ensure file names are sorted consistently across platforms.
30 # Also, ensure diagnostics are in English, e.g., "wget --help" below.
31 LC_ALL=C
32 export LC_ALL
33
34 # Parse options.
35
36 for option
37 do
38 case $option in
39 --help)
40 echo "$0: usage: $0 [--gnulib-srcdir=DIR] [--cvs-user=USERNAME] [--skip-po]"
41 exit;;
42 --gnulib-srcdir=*)
43 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
44 --cvs-user=*)
45 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
46 --skip-po)
47 SKIP_PO=t;;
48 *)
49 echo >&2 "$0: $option: unknown option"
50 exit 1;;
51 esac
52 done
53
54 echo "$0: Bootstrapping CVS $package..."
55
56 cleanup_gnulib() {
57 status=$?
58 rm -fr gnulib
59 exit $status
60 }
61
62 # Get gnulib files.
63
64 case ${GNULIB_SRCDIR--} in
65 -)
66 if [ ! -d gnulib ]; then
67 echo "$0: getting gnulib files..."
68
69 case ${CVS_AUTH-pserver} in
70 pserver)
71 CVS_PREFIX=':pserver:anonymous@';;
72 ssh)
73 CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
74 *)
75 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
76 exit 1;;
77 esac
78
79 case $CVS_RSH in
80 '') export CVS_RSH=ssh;;
81 esac
82
83 trap cleanup_gnulib 1 2 13 15
84
85 cvs -z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org:/cvsroot/gnulib co gnulib ||
86 cleanup_gnulib
87
88 trap - 1 2 13 15
89 fi
90 GNULIB_SRCDIR=gnulib
91 esac
92
93 <$GNULIB_SRCDIR/gnulib-tool || exit
94 gnulib_tool="$GNULIB_SRCDIR/gnulib-tool --assume-autoconf=latest-stable"
95
96 gnulib_modules='
97 argmatch
98 dirname
99 error
100 extensions
101 fopen-safer
102 getopt
103 gettext
104 hash
105 malloc
106 mbswidth
107 obstack
108 quote
109 quotearg
110 stdbool
111 stdint
112 stpcpy
113 strerror
114 strtoul
115 strverscmp
116 unistd-safer
117 unlocked-io
118 verify
119 xalloc
120 xalloc-die
121 xstrndup
122 '
123
124 previous_gnulib_modules=
125 while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
126 previous_gnulib_modules=$gnulib_modules
127 gnulib_modules=`
128 (echo "$gnulib_modules"
129 for gnulib_module in $gnulib_modules; do
130 $gnulib_tool --extract-dependencies $gnulib_module
131 done) | sort -u
132 `
133 done
134
135 gnulib_files=`
136 (echo m4/warning.m4
137 for gnulib_module in $gnulib_modules; do
138 $gnulib_tool --extract-filelist $gnulib_module
139 done) | sort -u
140 `
141
142 gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
143 mkdir -p $gnulib_dirs || exit
144
145 for gnulib_file in $gnulib_files; do
146 dest=$gnulib_file
147 rm -f $dest &&
148 echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
149 cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
150 done
151
152 # This suppresses a bogus diagnostic
153 # "warning: macro `AM_LANGINFO_CODESET' not found in library".
154 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
155 sed '
156 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
157 AC_DEFUN([AM_INTL_SUBDIR], [])
158 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
159 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
160 ' m4/gettext.m4 >m4/gettext_gl.m4 || exit
161
162
163 # Get translations.
164
165 get_translations() {
166 subdir=$1
167 domain=$2
168
169 echo "$0: getting translations into $subdir for $domain..."
170 (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
171
172 $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
173
174 sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
175 sort -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 |
176 awk -F. '
177 { if (lang && $1 != lang) print lang, ver }
178 { lang = $1; ver = substr($0, index($0, ".") + 1) }
179 END { if (lang) print lang, ver }
180 ' | awk -v domain="$domain" -v subdir="$subdir" '
181 {
182 lang = $1
183
184 # Work around bugs in Bison 2.3 translations uncovered by gettext 0.15.
185 # This workaround can be removed once the translations are fixed.
186 if (lang == "id" || lang == "ms" || lang == "tr") next
187
188 ver = $2
189 urlfmt = ""
190 printf "$WGET_COMMAND -O %s/%s.po 'http://www.iro.umontreal.ca/translation/teams/PO/%s/%s-%s.%s.po' &&\n", subdir, lang, lang, domain, ver, lang
191 }
192 END { print ":" }
193 ' | sh &&
194 ls "$subdir"/*.po | sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
195 rm "$subdir/$domain.html"
196 }
197
198 case $SKIP_PO in
199 '')
200 case `wget --help` in
201 *'--no-cache'*)
202 no_cache='--no-cache';;
203 *'--cache=on/off'*)
204 no_cache='--cache=off';;
205 *)
206 no_cache='';;
207 esac
208
209 WGET_COMMAND="wget -nv $no_cache"
210 export WGET_COMMAND
211
212 get_translations po $package || exit
213
214 case $package in
215 bison)
216 get_translations runtime-po $package-runtime || exit
217 esac;;
218 esac
219
220
221 # Generate autoconf and automake snippets.
222
223 (echo '# This file is generated automatically by "bootstrap".' &&
224 echo 'AC_DEFUN([GNULIB_AUTOCONF_SNIPPET],[' &&
225 $gnulib_tool --extract-autoconf-snippet $gnulib_modules &&
226 echo '])'
227 ) >m4/gnulib.m4 || exit
228
229 (echo '# This file is generated automatically by "bootstrap".' &&
230 $gnulib_tool --extract-automake-snippet $gnulib_modules |
231 sed 's/^[ ]*AM_CPPFLAGS[ ]*+=/# (commented out by bootstrap) &/'
232 ) >lib/gnulib.mk || exit
233
234
235 # Reconfigure, getting other files.
236
237 echo "$0: autopoint --force ..."
238 autopoint --force
239
240 # We don't need intl, so remove it.
241 intl_files_to_remove='
242 intl
243 m4/codeset.m4
244 m4/gettext.m4
245 m4/glibc2.m4
246 m4/glibc21.m4
247 m4/intdiv0.m4
248 m4/intmax.m4
249 m4/inttypes-h.m4
250 m4/inttypes-pri.m4
251 m4/lcmessage.m4
252 m4/lock.m4
253 m4/longdouble.m4
254 m4/printf-posix.m4
255 m4/signed.m4
256 m4/size_max.m4
257 m4/visibility.m4
258 m4/wint_t.m4
259 m4/xsize.m4
260 '
261 echo $0: rm -fr $intl_files_to_remove ...
262 rm -fr $intl_files_to_remove || exit
263
264
265 # Undo changes to gnulib files that autoreconf made.
266 for gnulib_file in $gnulib_files; do
267 test ! -f $gnulib_file || cmp -s $gnulib_file $GNULIB_SRCDIR/$gnulib_file || {
268 rm -f $gnulib_file &&
269 echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file again" &&
270 cp -p $GNULIB_SRCDIR/$gnulib_file $gnulib_file || exit
271 }
272 done
273
274 # Make sure aclocal.m4 is not older than input files.
275 sleep 1
276
277 for command in \
278 'aclocal --force -I m4' \
279 'autoconf --force' \
280 'autoheader --force' \
281 'automake --add-missing --copy --force-missing';
282 do
283 echo "$0: $command ..."
284 $command || exit
285 done
286
287
288 # Put bug-reporting address into po/Makevars.
289 echo "$0: sed '/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-bison@gnu.org/' po/Makevars.template >po/Makevars ..."
290 sed '/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-bison@gnu.org/' po/Makevars.template >po/Makevars
291
292 # Likewise for runtime-po/Makevars, except also change a few other parameters.
293 sed '
294 s/^\(DOMAIN\) *=.*/\1 = bison-runtime/
295 s/^\(subdir\) *=.*/\1 = runtime-po/
296 s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = --keyword=YY_/
297 ' <po/Makevars >runtime-po/Makevars
298
299 # Copy identical files from po to runtime-po.
300 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
301
302 # if src/parse-gram.[ch] are out of date, rebuild them.
303 parse_gram_y=`find src/parse-gram.y \
304 '(' -newer src/parse-gram.c -o -newer src/parse-gram.h ')' \
305 -print` || exit
306 case $parse_gram_y in
307 ?*)
308 echo "$0: warning: bootstrapping with old src/parse-gram.[ch] files."
309
310 echo "$0: touch -c src/parse-gram.[ch] ... "
311 touch -c src/parse-gram.[ch] || exit
312
313 echo "$0: ./configure --disable-nls ..."
314 ./configure --disable-nls || exit
315
316 echo "$0: (cd lib && make) ..."
317 (cd lib && make) || exit
318
319 echo "$0: (cd src && make) ..."
320 (cd src && make) || exit
321
322 echo "$0: rm -f src/parse-gram.c src/parse-gram.h ..."
323 rm -f src/parse-gram.c src/parse-gram.h || exit
324
325 echo "$0: (cd src && make parse-gram.c parse-gram.h) ..."
326 (cd src && make parse-gram.c parse-gram.h) || exit
327
328 echo "$0: make distclean ..."
329 make distclean || exit;;
330 esac
331
332 echo "$0: done. Now you can run './configure'."