bootstrap 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. #! /bin/sh
  2. # Bootstrap 'tar' from CVS.
  3. # Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  4. # This program is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation; either version 2, or (at your option)
  7. # any later version.
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. # You should have received a copy of the GNU General Public License
  13. # along with this program; if not, write to the Free Software
  14. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15. # 02111-1307, USA.
  16. # Written by Paul Eggert and Sergey Poznyakoff.
  17. # URL of our text domain page in Translation Project
  18. TP_URL="http://www2.iro.umontreal.ca/~gnutra/po/maint/tar/"
  19. # Ensure file names are sorted consistently across platforms;
  20. # e.g., m4/ulonglong_gl.m4 should follow m4/ulonglong.m4.
  21. LC_ALL=C
  22. export LC_ALL
  23. usage() {
  24. cat <<EOF
  25. usage: $0 [--gnulib-srcdir=DIR][--paxutils-srcdir=DIR][--cvs-auth=AUTH-METHOD][--cvs-user=USERNAME][--no-po]
  26. Options are:
  27. --paxutils-srcdir=DIRNAME Specify the local directory where paxutils
  28. sources reside. Use this if you already
  29. have paxutils sources on your machine, and
  30. do not want to waste your bandwidth dowloading
  31. them again.
  32. --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
  33. sources reside. Use this if you already
  34. have gnulib sources on your machine, and
  35. do not want to waste your bandwidth dowloading
  36. them again.
  37. --cvs-auth=METHOD Set the CVS access method used for downloading
  38. gnulib files. METHOD is one of the keywords
  39. accepted by cvs -d option (see info cvs
  40. repository).
  41. --cvs-user=USERNAME Set the CVS username to be used when accessing
  42. the gnulib repository.
  43. --no-po Do not download po files.
  44. --update-po[=LANG] Update po file(s) and exit.
  45. Running without arguments will suffice in most cases. It is equivalent
  46. to
  47. ./bootstrap --cvs-auth=ext --cvs-user=anoncvs
  48. EOF
  49. }
  50. update_po() {
  51. if [ $# = 1 ]; then
  52. case $1 in
  53. *.po) POFILE=$1;;
  54. *) POFILE=${1}.po;;
  55. esac
  56. echo "$0: getting translation for $1..."
  57. wget -r -C off $TP_URL/$POFILE
  58. else
  59. echo "$0: getting translations into po..."
  60. (cd po &&
  61. rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'` &&
  62. wget -nv -nd -r -l 1 -A .po -C off $TP_URL &&
  63. rm -f index.html index.html.[0-9]*
  64. ls *.po | sed 's/\.po$//' >LINGUAS
  65. ) || exit
  66. fi
  67. }
  68. # Parse options.
  69. DOWNLOAD_PO=yes
  70. for option
  71. do
  72. case $option in
  73. --help)
  74. usage
  75. exit;;
  76. --gnulib-srcdir=*)
  77. GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
  78. --paxutils-srcdir=*)
  79. PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
  80. --cvs-auth=*)
  81. CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
  82. --cvs-user=*)
  83. CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
  84. --no-po)
  85. DOWNLOAD_PO=no;;
  86. --update-po=*)
  87. DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;;
  88. --update-po)
  89. DOWNLOAD_PO=only;;
  90. *)
  91. echo >&2 "$0: $option: unknown option"
  92. exit 1;;
  93. esac
  94. done
  95. case $DOWNLOAD_PO in
  96. only) update_po
  97. exit 0
  98. ;;
  99. no|yes) ;;
  100. *) update_po $DOWNLOAD_PO
  101. exit 0
  102. esac
  103. echo "$0: Bootstrapping CVS tar..."
  104. build_cvs_prefix() {
  105. CVS_PREFIX=:${1}:
  106. if [ "${2}" != - ]; then
  107. CVS_PREFIX=${CVS_PREFIX}${2}@
  108. fi
  109. if [ "$1" = "ext" ]; then
  110. if [ -z "${CVS_RSH}" ]; then
  111. CVS_RSH=ssh
  112. export CVS_RSH
  113. fi
  114. fi
  115. }
  116. # checkout package
  117. checkout() {
  118. if [ ! -d $1 ]; then
  119. echo "$0: getting $1 files..."
  120. trap exit 1 2 13 15
  121. trap 'rm -fr $1; exit 1' 0
  122. case "${CVS_AUTH--}" in
  123. -) build_cvs_prefix ext anoncvs
  124. ;;
  125. pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs}
  126. ;;
  127. gserver|server)
  128. build_cvs_prefix $CVS_AUTH ${CVS_USER--}
  129. ;;
  130. ext) build_cvs_prefix $CVS_AUTH ${CVS_USER--}
  131. ;;
  132. *) echo "$0: Unknown CVS access method" >&2
  133. exit 1;;
  134. esac
  135. if [ "${CVS_AUTH--}" = "pserver" ]; then
  136. cvs -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 login || exit
  137. fi
  138. cvs -q -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 co $1 || exit
  139. trap 0
  140. fi
  141. }
  142. # Get gnulib files.
  143. case ${GNULIB_SRCDIR--} in
  144. -) checkout gnulib
  145. GNULIB_SRCDIR=gnulib
  146. esac
  147. <$GNULIB_SRCDIR/gnulib-tool || exit
  148. gnulib_modules='
  149. alloca
  150. argmatch
  151. argp
  152. backupfile
  153. dirname
  154. error
  155. exclude
  156. fileblocks
  157. fnmatch-gnu
  158. ftruncate
  159. full-write
  160. getdate
  161. getline
  162. getopt
  163. getpagesize
  164. gettext
  165. gettime
  166. hash
  167. human
  168. lchown
  169. localcharset
  170. memset
  171. modechange
  172. obstack
  173. quote
  174. quotearg
  175. rmdir
  176. safe-read
  177. save-cwd
  178. savedir
  179. stdbool
  180. stpcpy
  181. strtol
  182. strtoul
  183. timespec
  184. unlocked-io
  185. utime
  186. xalloc
  187. xalloc-die
  188. xgetcwd
  189. xstrtoumax
  190. '
  191. previous_gnulib_modules=
  192. while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
  193. previous_gnulib_modules=$gnulib_modules
  194. # In gnulib `alloca-opt' duplicates `alloca', so make sure not
  195. # to use it.
  196. gnulib_modules=`
  197. (echo "$gnulib_modules"
  198. for gnulib_module in $gnulib_modules; do
  199. $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
  200. done) | sort -u
  201. `
  202. done
  203. gnulib_files=`
  204. (for gnulib_module in $gnulib_modules; do
  205. $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
  206. done) | sort -u
  207. `
  208. gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
  209. mkdir -p $gnulib_dirs || exit
  210. for gnulib_file in $gnulib_files; do
  211. dest=$gnulib_file
  212. case $gnulib_file in
  213. m4/codeset.m4) continue;;
  214. m4/intdiv0.m4) continue;;
  215. m4/inttypes-pri.m4) continue;;
  216. m4/isc-posix.m4) continue;;
  217. m4/lcmessage.m4) continue;;
  218. m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
  219. # These will be overwritten by autopoint, which still uses
  220. # old jm_.* macro names, so we have to keep both copies.
  221. m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \
  222. m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \
  223. m4/ulonglong.m4)
  224. dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;;
  225. esac
  226. rm -f $dest &&
  227. echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
  228. cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
  229. done
  230. echo "$0: Creating m4/gnulib.m4"
  231. (echo "# This file is generated automatically. Please, do not edit."
  232. echo "#"
  233. echo "AC_DEFUN([tar_GNULIB],["
  234. for gnulib_module in $gnulib_modules; do
  235. echo "# $gnulib_module"
  236. $GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module
  237. done | sed '/AM_GNU_GETTEXT/d'
  238. echo "])") > ./m4/gnulib.m4
  239. echo "$0: Creating lib/Makefile.am"
  240. (cat lib/Makefile.tmpl
  241. for gnulib_module in $gnulib_modules; do
  242. echo "# $gnulib_module"
  243. $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
  244. done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
  245. # Get paxutils files
  246. case ${PAXUTILS_SRCDIR--} in
  247. -) checkout paxutils
  248. PAXUTILS_SRCDIR=paxutils
  249. esac
  250. # copy_files srcdir dstdir
  251. copy_files() {
  252. for file in `cat $1/DISTFILES`
  253. do
  254. case $file in
  255. "#*") continue;;
  256. esac
  257. echo "$0: Copying file $1/$file"
  258. cp -p $1/$file $2/`expr $file : '.*/\(.*\)'`
  259. done
  260. }
  261. copy_files ${PAXUTILS_SRCDIR}/m4 m4
  262. if [ -d rmt ]; then
  263. :
  264. else
  265. mkdir rmt
  266. fi
  267. copy_files ${PAXUTILS_SRCDIR}/rmt rmt
  268. copy_files ${PAXUTILS_SRCDIR}/lib lib
  269. copy_files ${PAXUTILS_SRCDIR}/tests tests
  270. # Get translations.
  271. if test "$DOWNLOAD_PO" = "yes"; then
  272. update_po
  273. fi
  274. # Reconfigure, getting other files.
  275. echo "$0: autoreconf --verbose --install --force ..."
  276. autoreconf --verbose --install --force
  277. echo "$0: done. Now you can run './configure'."