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