(gnulib_modules): Don't create a file modlist.tmp, as
[debian/tar] / bootstrap
1 #! /bin/sh
2
3 # Bootstrap 'tar' from CVS.
4
5 # Copyright (C) 2003, 2004, 2005 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://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 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 gnulib_modules=
166 newline='
167 '
168
169 get_modules() {
170   new_gnulib_modules=`sed '/^[   ]*#/d; /^[      ]*$/d' $*`
171   case $gnulib_modules,$new_gnulib_modules in
172   ?*,?*) new_gnulib_modules=$newline$new_gnulib_modules;;
173   esac
174   gnulib_modules=$gnulib_modules$new_gnulib_modules
175 }
176
177 # Get paxutils files
178 case ${PAXUTILS_SRCDIR--} in
179 -) checkout paxutils
180    PAXUTILS_SRCDIR=paxutils
181 esac
182
183 if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then
184   get_modules $PAXUTILS_SRCDIR/gnulib.modules
185 fi
186
187 # copy_files srcdir dstdir
188 copy_files() {
189   for file in `cat $1/DISTFILES`
190   do
191     case $file in
192     "#*")  continue;;
193     esac
194     echo "$0: Copying file $1/$file"
195     cp -p $1/$file $2/`expr $file : '.*/\(.*\)'`
196   done
197 }
198
199 copy_files ${PAXUTILS_SRCDIR}/m4 m4
200 echo "$0: Creating m4/paxutils.m4"
201 (echo "# This file is generated automatically. Please, do not edit."
202  echo "#"
203  echo "AC_DEFUN([tar_PAXUTILS],["
204  cat ${PAXUTILS_SRCDIR}/m4/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z
205  echo "])") > ./m4/paxutils.m4
206
207 if [ -d rmt ]; then
208    :
209 else
210    mkdir rmt
211 fi
212
213 copy_files ${PAXUTILS_SRCDIR}/rmt rmt
214
215 copy_files ${PAXUTILS_SRCDIR}/lib lib
216
217 copy_files ${PAXUTILS_SRCDIR}/tests tests
218
219 # Get gnulib files.
220
221 case ${GNULIB_SRCDIR--} in
222 -) checkout gnulib
223    GNULIB_SRCDIR=gnulib
224 esac
225
226 <$GNULIB_SRCDIR/gnulib-tool || exit
227
228 get_modules gnulib.modules
229
230 gnulib_modules=`echo "$gnulib_modules" | sort -u`
231 previous_gnulib_modules=
232 while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
233   previous_gnulib_modules=$gnulib_modules
234   gnulib_modules=`
235     (echo "$gnulib_modules"
236      for gnulib_module in $gnulib_modules; do
237        $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
238      done) | sort -u
239   `
240 done
241
242 gnulib_files=`
243   (for gnulib_module in $gnulib_modules; do
244      $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
245    done) | sort -u
246 `
247
248 gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
249 mkdir -p $gnulib_dirs || exit
250
251 for gnulib_file in $gnulib_files; do
252   dest=$gnulib_file
253
254   case $gnulib_file in
255   m4/codeset.m4) continue;;
256   m4/intdiv0.m4) continue;;
257   m4/inttypes-pri.m4) continue;;
258   m4/isc-posix.m4) continue;;
259   m4/lcmessage.m4) continue;;
260   m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
261   # These will be overwritten by autopoint, which still uses
262   # old jm_.* macro names, so we have to keep both copies.
263   m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \
264   m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \
265   m4/ulonglong.m4)
266     dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;;
267   esac
268
269   rm -f $dest &&
270   echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
271   cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
272 done
273
274 echo "$0: Creating m4/gnulib.m4"
275 (echo "# This file is generated automatically. Please, do not edit."
276  echo "#"
277  echo "AC_DEFUN([tar_GNULIB],["
278  for gnulib_module in $gnulib_modules; do
279     echo "# $gnulib_module"
280     $GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module
281  done | sed '/AM_GNU_GETTEXT/d'
282  echo "])") > ./m4/gnulib.m4
283
284 echo "$0: Creating lib/Makefile.am"
285 (echo "# This file is generated automatically from lib/Makefile.am. Do not edit!"
286  cat lib/Makefile.tmpl
287
288  for gnulib_module in $gnulib_modules; do
289     echo "# $gnulib_module"
290     $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
291  done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
292
293 # Get translations.
294 if test "$DOWNLOAD_PO" = "yes"; then
295   update_po
296 fi
297
298 # Reconfigure, getting other files.
299
300 echo "$0: autoreconf --verbose --install --force ..."
301 autoreconf --verbose --install --force || exit 1
302
303
304 echo "$0: done.  Now you can run './configure'."