bootstrap 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. #! /bin/sh
  2. # Bootstrap 'tar' from CVS.
  3. # Copyright (C) 2003, 2004, 2005, 2006 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=pserver
  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-pserver}" in
  131. pserver) build_cvs_prefix pserver ${CVS_USER:-anonymous}
  132. ;;
  133. gserver|server)
  134. build_cvs_prefix $CVS_AUTH ${CVS_USER--}
  135. ;;
  136. ext) build_cvs_prefix $CVS_AUTH ${CVS_USER--}
  137. ;;
  138. *) echo "$0: Unknown CVS access method" >&2
  139. exit 1;;
  140. esac
  141. cvs -q -d ${CVS_PREFIX}cvs.sv.gnu.org:/cvsroot/$1 co $1 || exit
  142. trap - 0
  143. fi
  144. }
  145. gnulib_modules=
  146. newline='
  147. '
  148. get_modules() {
  149. new_gnulib_modules=`sed '/^[ ]*#/d; /^[ ]*$/d' $*`
  150. case $gnulib_modules,$new_gnulib_modules in
  151. ?*,?*) new_gnulib_modules=$newline$new_gnulib_modules;;
  152. esac
  153. gnulib_modules=$gnulib_modules$new_gnulib_modules
  154. }
  155. # Get paxutils files
  156. case ${PAXUTILS_SRCDIR--} in
  157. -) checkout paxutils
  158. PAXUTILS_SRCDIR=paxutils
  159. esac
  160. if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then
  161. get_modules $PAXUTILS_SRCDIR/gnulib.modules
  162. fi
  163. # copy_files srcdir dstdir
  164. copy_files() {
  165. for file in `cat $1/DISTFILES`
  166. do
  167. case $file in
  168. "#*") continue;;
  169. esac
  170. dst=`echo $file | sed 's^.*/^^'`
  171. if [ $# -eq 3 ]; then
  172. case $dst in
  173. ${3}*) ;;
  174. *) dst=${3}$dst;;
  175. esac
  176. fi
  177. echo "$0: Copying file $1/$file to $2/$dst"
  178. cp -p $1/$file $2/$dst
  179. done
  180. }
  181. copy_files ${PAXUTILS_SRCDIR}/m4 m4
  182. echo "$0: Creating m4/paxutils.m4"
  183. (echo "# This file is generated automatically. Please, do not edit."
  184. echo "#"
  185. echo "AC_DEFUN([tar_PAXUTILS],["
  186. cat ${PAXUTILS_SRCDIR}/m4/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z
  187. echo "])") > ./m4/paxutils.m4
  188. if [ -d rmt ]; then
  189. :
  190. else
  191. mkdir rmt
  192. fi
  193. for dir in doc rmt lib tests
  194. do
  195. copy_files ${PAXUTILS_SRCDIR}/$dir $dir
  196. done
  197. copy_files ${PAXUTILS_SRCDIR}/paxlib lib pax
  198. # Get gnulib files.
  199. case ${GNULIB_SRCDIR--} in
  200. -) checkout gnulib
  201. GNULIB_SRCDIR=gnulib
  202. esac
  203. <$GNULIB_SRCDIR/gnulib-tool || exit
  204. get_modules gnulib.modules
  205. gnulib_modules=`echo "$gnulib_modules" | sort -u`
  206. previous_gnulib_modules=
  207. while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
  208. previous_gnulib_modules=$gnulib_modules
  209. gnulib_modules=`
  210. (echo "$gnulib_modules"
  211. for gnulib_module in $gnulib_modules; do
  212. $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
  213. done) | sort -u
  214. `
  215. done
  216. gnulib_files=`
  217. (for gnulib_module in $gnulib_modules; do
  218. $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
  219. done) | sort -u
  220. `
  221. gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
  222. mkdir -p $gnulib_dirs || exit
  223. for gnulib_file in $gnulib_files; do
  224. dest=$gnulib_file
  225. case $gnulib_file in
  226. m4/codeset.m4) continue;;
  227. m4/intdiv0.m4) continue;;
  228. m4/inttypes-pri.m4) continue;;
  229. m4/isc-posix.m4) continue;;
  230. m4/lcmessage.m4) continue;;
  231. m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
  232. # These will be overwritten by autopoint, which still uses
  233. # old jm_.* macro names, so we have to keep both copies.
  234. m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \
  235. m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \
  236. m4/ulonglong.m4)
  237. dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;;
  238. esac
  239. rm -f $dest &&
  240. echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
  241. cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
  242. done
  243. echo "$0: Creating m4/gnulib.m4"
  244. (echo "# This file is generated automatically. Please, do not edit."
  245. echo "#"
  246. echo "AC_DEFUN([tar_GNULIB],["
  247. for gnulib_module in $gnulib_modules; do
  248. echo "# $gnulib_module"
  249. $GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module
  250. done | sed '/AM_GNU_GETTEXT/d'
  251. echo "])") > ./m4/gnulib.m4
  252. echo "$0: Creating lib/Makefile.am"
  253. (echo "# This file is generated automatically. Do not edit!"
  254. cat lib/Makefile.tmpl
  255. for gnulib_module in $gnulib_modules; do
  256. echo "# $gnulib_module"
  257. $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
  258. done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
  259. # Get translations.
  260. if test "$DOWNLOAD_PO" = "yes"; then
  261. update_po
  262. fi
  263. # Reconfigure, getting other files.
  264. echo "$0: autoreconf --verbose --install --force ..."
  265. autoreconf --verbose --install --force || exit 1
  266. echo "$0: done. Now you can run './configure'."