bootstrap 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. #! /bin/sh
  2. # Bootstrap 'tar' from CVS.
  3. # Copyright (C) 2003, 2004, 2005 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., 51 Franklin Street, Fifth Floor, Boston, MA
  15. # 02110-1301, USA.
  16. # Written by Paul Eggert and Sergey Poznyakoff.
  17. # URL of our text domain page in Translation Project
  18. TP_URL="http://www.iro.umontreal.ca/translation/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. If the file \`.bootstrap' exists in the current working directory, its
  46. contents is read, comments and empty lines removed, shell variables expanded
  47. and the result is prepended to the command line options.
  48. Running without arguments will suffice in most cases. It is equivalent
  49. to
  50. ./bootstrap --cvs-auth=ext --cvs-user=anoncvs
  51. EOF
  52. }
  53. update_po() {
  54. if [ $# = 1 ]; then
  55. case $1 in
  56. *.po) POFILE=$1;;
  57. *) POFILE=${1}.po;;
  58. esac
  59. echo "$0: getting translation for $1..."
  60. wget -r --cache=off $TP_URL/$POFILE
  61. else
  62. echo "$0: getting translations into po..."
  63. (cd po &&
  64. rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'` &&
  65. wget -nv -nd -r -l 1 -A .po --cache off $TP_URL &&
  66. rm -f index.html index.html.[0-9]*
  67. ls *.po | sed 's/\.po$//' >LINGUAS
  68. ) || exit
  69. fi
  70. }
  71. # Read configuration file
  72. if [ -r .bootstrap ]; then
  73. echo "$0: Reading configuration file .bootstrap"
  74. eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*"
  75. fi
  76. # Parse options.
  77. DOWNLOAD_PO=yes
  78. for option
  79. do
  80. case $option in
  81. --help)
  82. usage
  83. exit;;
  84. --gnulib-srcdir=*)
  85. GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
  86. --paxutils-srcdir=*)
  87. PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
  88. --cvs-auth=*)
  89. CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
  90. --cvs-user=*)
  91. CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
  92. --no-po)
  93. DOWNLOAD_PO=no;;
  94. --update-po=*)
  95. DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;;
  96. --update-po)
  97. DOWNLOAD_PO=only;;
  98. *)
  99. echo >&2 "$0: $option: unknown option"
  100. exit 1;;
  101. esac
  102. done
  103. case $DOWNLOAD_PO in
  104. only) update_po
  105. exit 0
  106. ;;
  107. no|yes) ;;
  108. *) update_po $DOWNLOAD_PO
  109. exit 0
  110. esac
  111. echo "$0: Bootstrapping CVS tar..."
  112. build_cvs_prefix() {
  113. CVS_PREFIX=:${1}:
  114. if [ "${2}" != - ]; then
  115. CVS_PREFIX=${CVS_PREFIX}${2}@
  116. fi
  117. if [ "$1" = "ext" ]; then
  118. if [ -z "${CVS_RSH}" ]; then
  119. CVS_RSH=ssh
  120. export CVS_RSH
  121. fi
  122. fi
  123. }
  124. # checkout package
  125. checkout() {
  126. if [ ! -d $1 ]; then
  127. echo "$0: getting $1 files..."
  128. trap exit 1 2 13 15
  129. trap 'rm -fr $1; exit 1' 0
  130. case "${CVS_AUTH--}" in
  131. -) build_cvs_prefix ext anoncvs
  132. ;;
  133. pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs}
  134. ;;
  135. gserver|server)
  136. build_cvs_prefix $CVS_AUTH ${CVS_USER--}
  137. ;;
  138. ext) build_cvs_prefix $CVS_AUTH ${CVS_USER--}
  139. ;;
  140. *) echo "$0: Unknown CVS access method" >&2
  141. exit 1;;
  142. esac
  143. if [ "${CVS_AUTH--}" = "pserver" ]; then
  144. cvs -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 login || exit
  145. fi
  146. cvs -q -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 co $1 || exit
  147. trap - 0
  148. fi
  149. }
  150. gnulib_modules=
  151. newline='
  152. '
  153. get_modules() {
  154. new_gnulib_modules=`sed '/^[ ]*#/d; /^[ ]*$/d' $*`
  155. case $gnulib_modules,$new_gnulib_modules in
  156. ?*,?*) new_gnulib_modules=$newline$new_gnulib_modules;;
  157. esac
  158. gnulib_modules=$gnulib_modules$new_gnulib_modules
  159. }
  160. # Get paxutils files
  161. case ${PAXUTILS_SRCDIR--} in
  162. -) checkout paxutils
  163. PAXUTILS_SRCDIR=paxutils
  164. esac
  165. if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then
  166. get_modules $PAXUTILS_SRCDIR/gnulib.modules
  167. fi
  168. # copy_files srcdir dstdir
  169. copy_files() {
  170. for file in `cat $1/DISTFILES`
  171. do
  172. case $file in
  173. "#*") continue;;
  174. esac
  175. dst=`echo $file | sed 's^.*/^^'`
  176. if [ $# -eq 3 ]; then
  177. case $dst in
  178. ${3}*) ;;
  179. *) dst=${3}$dst;;
  180. esac
  181. fi
  182. echo "$0: Copying file $1/$file to $2/$dst"
  183. cp -p $1/$file $2/$dst
  184. done
  185. }
  186. copy_files ${PAXUTILS_SRCDIR}/m4 m4
  187. echo "$0: Creating m4/paxutils.m4"
  188. (echo "# This file is generated automatically. Please, do not edit."
  189. echo "#"
  190. echo "AC_DEFUN([tar_PAXUTILS],["
  191. cat ${PAXUTILS_SRCDIR}/m4/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z
  192. echo "])") > ./m4/paxutils.m4
  193. if [ -d rmt ]; then
  194. :
  195. else
  196. mkdir rmt
  197. fi
  198. for dir in doc rmt lib tests
  199. do
  200. copy_files ${PAXUTILS_SRCDIR}/$dir $dir
  201. done
  202. copy_files ${PAXUTILS_SRCDIR}/paxlib lib pax
  203. # Get gnulib files.
  204. case ${GNULIB_SRCDIR--} in
  205. -) checkout gnulib
  206. GNULIB_SRCDIR=gnulib
  207. esac
  208. <$GNULIB_SRCDIR/gnulib-tool || exit
  209. get_modules gnulib.modules
  210. gnulib_modules=`echo "$gnulib_modules" | sort -u`
  211. previous_gnulib_modules=
  212. while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
  213. previous_gnulib_modules=$gnulib_modules
  214. gnulib_modules=`
  215. (echo "$gnulib_modules"
  216. for gnulib_module in $gnulib_modules; do
  217. $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
  218. done) | sort -u
  219. `
  220. done
  221. gnulib_files=`
  222. (for gnulib_module in $gnulib_modules; do
  223. $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
  224. done) | sort -u
  225. `
  226. gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
  227. mkdir -p $gnulib_dirs || exit
  228. for gnulib_file in $gnulib_files; do
  229. dest=$gnulib_file
  230. case $gnulib_file in
  231. m4/codeset.m4) continue;;
  232. m4/intdiv0.m4) continue;;
  233. m4/inttypes-pri.m4) continue;;
  234. m4/isc-posix.m4) continue;;
  235. m4/lcmessage.m4) continue;;
  236. m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
  237. # These will be overwritten by autopoint, which still uses
  238. # old jm_.* macro names, so we have to keep both copies.
  239. m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \
  240. m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \
  241. m4/ulonglong.m4)
  242. dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;;
  243. esac
  244. rm -f $dest &&
  245. echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
  246. cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
  247. done
  248. echo "$0: Creating m4/gnulib.m4"
  249. (echo "# This file is generated automatically. Please, do not edit."
  250. echo "#"
  251. echo "AC_DEFUN([tar_GNULIB],["
  252. for gnulib_module in $gnulib_modules; do
  253. echo "# $gnulib_module"
  254. $GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module
  255. done | sed '/AM_GNU_GETTEXT/d'
  256. echo "])") > ./m4/gnulib.m4
  257. echo "$0: Creating lib/Makefile.am"
  258. (echo "# This file is generated automatically from lib/Makefile.am. Do not edit!"
  259. cat lib/Makefile.tmpl
  260. for gnulib_module in $gnulib_modules; do
  261. echo "# $gnulib_module"
  262. $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
  263. done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
  264. # Get translations.
  265. if test "$DOWNLOAD_PO" = "yes"; then
  266. update_po
  267. fi
  268. # Reconfigure, getting other files.
  269. echo "$0: autoreconf --verbose --install --force ..."
  270. autoreconf --verbose --install --force || exit 1
  271. echo "$0: done. Now you can run './configure'."