]> Dogcows Code - chaz/tar/blob - bootstrap
* bootstrap: Default to pserver, and switch to cvs.sv.gnu.org,
[chaz/tar] / bootstrap
1 #! /bin/sh
2
3 # Bootstrap 'tar' 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 and Sergey Poznyakoff.
23
24 # URL of our text domain page in Translation Project
25 TP_URL="http://www.iro.umontreal.ca/translation/maint/tar/"
26
27 # Ensure file names are sorted consistently across platforms;
28 # e.g., m4/ulonglong_gl.m4 should follow m4/ulonglong.m4.
29 LC_ALL=C
30 export LC_ALL
31
32 usage() {
33 cat <<EOF
34 usage: $0 [--gnulib-srcdir=DIR][--paxutils-srcdir=DIR][--cvs-auth=AUTH-METHOD][--cvs-user=USERNAME][--no-po]
35 Options are:
36 --paxutils-srcdir=DIRNAME Specify the local directory where paxutils
37 sources reside. Use this if you already
38 have paxutils sources on your machine, and
39 do not want to waste your bandwidth dowloading
40 them again.
41 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
42 sources reside. Use this if you already
43 have gnulib sources on your machine, and
44 do not want to waste your bandwidth dowloading
45 them again.
46 --cvs-auth=METHOD Set the CVS access method used for downloading
47 gnulib files. METHOD is one of the keywords
48 accepted by cvs -d option (see info cvs
49 repository).
50 --cvs-user=USERNAME Set the CVS username to be used when accessing
51 the gnulib repository.
52 --no-po Do not download po files.
53 --update-po[=LANG] Update po file(s) and exit.
54
55 If the file \`.bootstrap' exists in the current working directory, its
56 contents is read, comments and empty lines removed, shell variables expanded
57 and the result is prepended to the command line options.
58
59 Running without arguments will suffice in most cases. It is equivalent
60 to
61
62 ./bootstrap --cvs-auth=pserver
63
64 EOF
65 }
66
67 update_po() {
68 if [ $# = 1 ]; then
69 case $1 in
70 *.po) POFILE=$1;;
71 *) POFILE=${1}.po;;
72 esac
73 echo "$0: getting translation for $1..."
74 wget -r --cache=off $TP_URL/$POFILE
75 else
76 echo "$0: getting translations into po..."
77 (cd po &&
78 rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'` &&
79 wget -nv -nd -r -l 1 -A .po --cache off $TP_URL &&
80 rm -f index.html index.html.[0-9]*
81 ls *.po | sed 's/\.po$//' >LINGUAS
82 ) || exit
83 fi
84 }
85
86 # Read configuration file
87 if [ -r .bootstrap ]; then
88 echo "$0: Reading configuration file .bootstrap"
89 eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*"
90 fi
91
92 # Parse options.
93
94 DOWNLOAD_PO=yes
95 for option
96 do
97 case $option in
98 --help)
99 usage
100 exit;;
101 --gnulib-srcdir=*)
102 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
103 --paxutils-srcdir=*)
104 PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
105 --cvs-auth=*)
106 CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
107 --cvs-user=*)
108 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
109 --no-po)
110 DOWNLOAD_PO=no;;
111 --update-po=*)
112 DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;;
113 --update-po)
114 DOWNLOAD_PO=only;;
115 *)
116 echo >&2 "$0: $option: unknown option"
117 exit 1;;
118 esac
119 done
120
121 case $DOWNLOAD_PO in
122 only) update_po
123 exit 0
124 ;;
125 no|yes) ;;
126 *) update_po $DOWNLOAD_PO
127 exit 0
128 esac
129
130 echo "$0: Bootstrapping CVS tar..."
131
132 build_cvs_prefix() {
133 CVS_PREFIX=:${1}:
134 if [ "${2}" != - ]; then
135 CVS_PREFIX=${CVS_PREFIX}${2}@
136 fi
137 if [ "$1" = "ext" ]; then
138 if [ -z "${CVS_RSH}" ]; then
139 CVS_RSH=ssh
140 export CVS_RSH
141 fi
142 fi
143 }
144
145 # checkout package
146 checkout() {
147 if [ ! -d $1 ]; then
148 echo "$0: getting $1 files..."
149
150 trap exit 1 2 13 15
151 trap 'rm -fr $1; exit 1' 0
152
153 case "${CVS_AUTH-pserver}" in
154 pserver) build_cvs_prefix pserver ${CVS_USER:-anonymous}
155 ;;
156 gserver|server)
157 build_cvs_prefix $CVS_AUTH ${CVS_USER--}
158 ;;
159 ext) build_cvs_prefix $CVS_AUTH ${CVS_USER--}
160 ;;
161 *) echo "$0: Unknown CVS access method" >&2
162 exit 1;;
163 esac
164 cvs -q -d ${CVS_PREFIX}cvs.sv.gnu.org:/cvsroot/$1 co $1 || exit
165
166 trap - 0
167 fi
168 }
169
170 gnulib_modules=
171 newline='
172 '
173
174 get_modules() {
175 new_gnulib_modules=`sed '/^[ ]*#/d; /^[ ]*$/d' $*`
176 case $gnulib_modules,$new_gnulib_modules in
177 ?*,?*) new_gnulib_modules=$newline$new_gnulib_modules;;
178 esac
179 gnulib_modules=$gnulib_modules$new_gnulib_modules
180 }
181
182 # Get paxutils files
183 case ${PAXUTILS_SRCDIR--} in
184 -) checkout paxutils
185 PAXUTILS_SRCDIR=paxutils
186 esac
187
188 if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then
189 get_modules $PAXUTILS_SRCDIR/gnulib.modules
190 fi
191
192 # copy_files srcdir dstdir
193 copy_files() {
194 for file in `cat $1/DISTFILES`
195 do
196 case $file in
197 "#*") continue;;
198 esac
199 dst=`echo $file | sed 's^.*/^^'`
200 if [ $# -eq 3 ]; then
201 case $dst in
202 ${3}*) ;;
203 *) dst=${3}$dst;;
204 esac
205 fi
206 echo "$0: Copying file $1/$file to $2/$dst"
207 cp -p $1/$file $2/$dst
208 done
209 }
210
211 copy_files ${PAXUTILS_SRCDIR}/m4 m4
212 echo "$0: Creating m4/paxutils.m4"
213 (echo "# This file is generated automatically. Please, do not edit."
214 echo "#"
215 echo "AC_DEFUN([tar_PAXUTILS],["
216 cat ${PAXUTILS_SRCDIR}/m4/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z
217 echo "])") > ./m4/paxutils.m4
218
219 if [ -d rmt ]; then
220 :
221 else
222 mkdir rmt
223 fi
224
225 for dir in doc rmt lib tests
226 do
227 copy_files ${PAXUTILS_SRCDIR}/$dir $dir
228 done
229
230 copy_files ${PAXUTILS_SRCDIR}/paxlib lib pax
231
232 # Get gnulib files.
233
234 case ${GNULIB_SRCDIR--} in
235 -) checkout gnulib
236 GNULIB_SRCDIR=gnulib
237 esac
238
239 <$GNULIB_SRCDIR/gnulib-tool || exit
240
241 get_modules gnulib.modules
242
243 gnulib_modules=`echo "$gnulib_modules" | sort -u`
244 previous_gnulib_modules=
245 while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
246 previous_gnulib_modules=$gnulib_modules
247 gnulib_modules=`
248 (echo "$gnulib_modules"
249 for gnulib_module in $gnulib_modules; do
250 $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
251 done) | sort -u
252 `
253 done
254
255 gnulib_files=`
256 (for gnulib_module in $gnulib_modules; do
257 $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
258 done) | sort -u
259 `
260
261 gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
262 mkdir -p $gnulib_dirs || exit
263
264 for gnulib_file in $gnulib_files; do
265 dest=$gnulib_file
266
267 case $gnulib_file in
268 m4/codeset.m4) continue;;
269 m4/intdiv0.m4) continue;;
270 m4/inttypes-pri.m4) continue;;
271 m4/isc-posix.m4) continue;;
272 m4/lcmessage.m4) continue;;
273 m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
274 # These will be overwritten by autopoint, which still uses
275 # old jm_.* macro names, so we have to keep both copies.
276 m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \
277 m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \
278 m4/ulonglong.m4)
279 dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;;
280 esac
281
282 rm -f $dest &&
283 echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
284 cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
285 done
286
287 echo "$0: Creating m4/gnulib.m4"
288 (echo "# This file is generated automatically. Please, do not edit."
289 echo "#"
290 echo "AC_DEFUN([tar_GNULIB],["
291 for gnulib_module in $gnulib_modules; do
292 echo "# $gnulib_module"
293 $GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module
294 done | sed '/AM_GNU_GETTEXT/d'
295 echo "])") > ./m4/gnulib.m4
296
297 echo "$0: Creating lib/Makefile.am"
298 (echo "# This file is generated automatically from lib/Makefile.am. Do not edit!"
299 cat lib/Makefile.tmpl
300
301 for gnulib_module in $gnulib_modules; do
302 echo "# $gnulib_module"
303 $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
304 done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
305
306 # Get translations.
307 if test "$DOWNLOAD_PO" = "yes"; then
308 update_po
309 fi
310
311 # Reconfigure, getting other files.
312
313 echo "$0: autoreconf --verbose --install --force ..."
314 autoreconf --verbose --install --force || exit 1
315
316
317 echo "$0: done. Now you can run './configure'."
This page took 0.048073 seconds and 5 git commands to generate.