(update_po): Give -r to wget. Always remove index.html
[debian/tar] / bootstrap
1 #! /bin/sh
2
3 # Bootstrap 'tar' from CVS.
4
5 # Copyright (C) 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA
20 # 02111-1307, 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://www2.iro.umontreal.ca/~gnutra/po/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 Running without arguments will suffice in most cases. It is equivalent
56 to
57
58     ./bootstrap --cvs-auth=ext --cvs-user=anoncvs
59
60 EOF
61 }
62
63 update_po() {
64   if [ $# = 1 ]; then
65     case $1 in
66     *.po)  POFILE=$1;;
67     *)     POFILE=${1}.po;;
68     esac        
69     echo "$0: getting translation for $1..."
70     wget -r -C off $TP_URL/$POFILE
71   else
72     echo "$0: getting translations into po..."
73     (cd po &&
74      rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'` &&
75       wget -nv -nd -r -l 1 -A .po -C off $TP_URL &&
76       rm -f index.html index.html.[0-9]*
77       ls *.po | sed 's/\.po$//' >LINGUAS
78     ) || exit
79   fi
80 }
81
82 # Parse options.
83
84 DOWNLOAD_PO=yes
85 for option
86 do
87   case $option in
88   --help)
89     usage
90     exit;;
91   --gnulib-srcdir=*)
92     GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
93   --paxutils-srcdir=*)
94     PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
95   --cvs-auth=*)
96     CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
97   --cvs-user=*)
98     CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
99   --no-po)
100     DOWNLOAD_PO=no;;
101   --update-po=*)
102     DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;;
103   --update-po)
104     DOWNLOAD_PO=only;;
105   *)
106     echo >&2 "$0: $option: unknown option"
107     exit 1;;
108   esac
109 done
110
111 case $DOWNLOAD_PO in
112 only)   update_po
113         exit 0
114         ;;
115 no|yes) ;;
116 *)      update_po $DOWNLOAD_PO 
117         exit 0
118 esac
119
120 echo "$0: Bootstrapping CVS tar..."
121
122 build_cvs_prefix() {
123   CVS_PREFIX=:${1}:
124   if [ "${2}" != - ]; then
125     CVS_PREFIX=${CVS_PREFIX}${2}@
126   fi
127   if [ "$1" = "ext" ]; then
128     if [ -z "${CVS_RSH}" ]; then
129        CVS_RSH=ssh
130        export CVS_RSH
131     fi
132   fi
133 }
134
135 # checkout package
136 checkout() {
137   if [ ! -d $1 ]; then
138     echo "$0: getting $1 files..."
139
140     trap exit 1 2 13 15
141     trap 'rm -fr $1; exit 1' 0
142
143     case "${CVS_AUTH--}" in
144     -)       build_cvs_prefix ext anoncvs
145              ;;
146     pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs}
147              ;;
148     gserver|server)
149              build_cvs_prefix $CVS_AUTH ${CVS_USER--}
150              ;;
151     ext)     build_cvs_prefix $CVS_AUTH ${CVS_USER--}
152              ;;
153     *)       echo "$0: Unknown CVS access method" >&2
154              exit 1;;
155     esac
156     if [ "${CVS_AUTH--}" = "pserver" ]; then
157       cvs -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 login || exit
158     fi
159     cvs -q -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 co $1 || exit
160
161     trap 0
162   fi
163 }
164
165 # Get gnulib files.
166
167 case ${GNULIB_SRCDIR--} in
168 -) checkout gnulib
169    GNULIB_SRCDIR=gnulib
170 esac
171
172 <$GNULIB_SRCDIR/gnulib-tool || exit
173
174 gnulib_modules='
175 alloca
176 argmatch
177 argp
178 backupfile
179 dirname
180 error
181 exclude
182 fileblocks
183 fnmatch-gnu
184 ftruncate
185 full-write
186 getdate
187 getline
188 getopt
189 getpagesize
190 gettext
191 gettime
192 hash
193 human
194 lchown
195 localcharset
196 memset
197 modechange
198 obstack
199 quote
200 quotearg
201 rmdir
202 safe-read
203 save-cwd
204 savedir
205 stdbool
206 stpcpy
207 strtol
208 strtoul
209 timespec
210 unlocked-io
211 utime
212 xalloc
213 xalloc-die
214 xgetcwd
215 xstrtoumax
216 '
217
218 previous_gnulib_modules=
219 while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
220   previous_gnulib_modules=$gnulib_modules
221   # In gnulib `alloca-opt' duplicates `alloca', so make sure not
222   # to use it.
223   gnulib_modules=`
224     (echo "$gnulib_modules"
225      for gnulib_module in $gnulib_modules; do
226        $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
227      done) | sed 's/alloca-opt/alloca/' | sort -u
228   `
229 done
230
231 gnulib_files=`
232   (for gnulib_module in $gnulib_modules; do
233      $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
234    done) | sort -u
235 `
236
237 gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
238 mkdir -p $gnulib_dirs || exit
239
240 for gnulib_file in $gnulib_files; do
241   dest=$gnulib_file
242
243   case $gnulib_file in
244   m4/codeset.m4) continue;;
245   m4/intdiv0.m4) continue;;
246   m4/inttypes-pri.m4) continue;;
247   m4/isc-posix.m4) continue;;
248   m4/lcmessage.m4) continue;;
249   m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
250   # These will be overwritten by autopoint, which still uses
251   # old jm_.* macro names, so we have to keep both copies.
252   m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \
253   m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \
254   m4/ulonglong.m4)
255     dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;;
256   esac
257
258   rm -f $dest &&
259   echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
260   cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
261 done
262
263 echo "$0: Creating m4/gnulib.m4"
264 (echo "# This file is generated automatically. Please, do not edit."
265  echo "#"
266  echo "AC_DEFUN([tar_GNULIB],["
267  for gnulib_module in $gnulib_modules; do
268     echo "# $gnulib_module"
269     $GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module
270  done | sed '/AM_GNU_GETTEXT/d'
271  echo "])") > ./m4/gnulib.m4
272
273 echo "$0: Creating lib/Makefile.am"
274 (cat lib/Makefile.tmpl
275  
276  for gnulib_module in $gnulib_modules; do
277     echo "# $gnulib_module"
278     $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
279  done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
280
281 # Get paxutils files 
282 case ${PAXUTILS_SRCDIR--} in
283 -) checkout paxutils
284    PAXUTILS_SRCDIR=paxutils
285 esac
286
287 # copy_files srcdir dstdir
288 copy_files() {
289   for file in `cat $1/DISTFILES`
290   do
291     case $file in
292     "#*")  continue;;
293     esac
294     echo "$0: Copying file $1/$file" 
295     cp -p $1/$file $2/`expr $file : '.*/\(.*\)'`
296   done
297 }
298
299 copy_files ${PAXUTILS_SRCDIR}/m4 m4 
300
301 if [ -d rmt ]; then
302    :
303 else
304    mkdir rmt
305 fi
306
307 copy_files ${PAXUTILS_SRCDIR}/rmt rmt 
308
309 copy_files ${PAXUTILS_SRCDIR}/lib lib
310
311 copy_files ${PAXUTILS_SRCDIR}/tests tests
312
313 # Get translations.
314 if test "$DOWNLOAD_PO" = "yes"; then
315   update_po
316 fi
317
318 # Reconfigure, getting other files.
319
320 echo "$0: autoreconf --verbose --install --force ..."
321 autoreconf --verbose --install --force
322
323
324 echo "$0: done.  Now you can run './configure'."