]>
git.saurik.com Git - bison.git/blob - bootstrap
   3 # Bootstrap this package from checked-out sources. 
   5 # Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 
   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) 
  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. 
  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., 51 Franklin Street, Fifth Floor, Boston, MA 
  22 # Written by Paul Eggert. 
  27 # Ensure file names are sorted consistently across platforms. 
  28 # Also, ensure diagnostics are in English, e.g., "wget --help" below. 
  32 # Temporary directory names. 
  34 bt_regex
=`echo "$bt"| sed 's/\./[.]/g'` 
  40 Bootstrap this package from the checked-out sources. 
  43  --gnulib-srcdir=DIRNAME  Specify the local directory where gnulib 
  44                           sources reside.  Use this if you already 
  45                           have gnulib sources on your machine, and 
  46                           do not want to waste your bandwidth downloading 
  48  --copy                   Copy files instead of creating symbolic links. 
  49  --force                  Attempt to bootstrap even if the sources seem 
  50                           not to have been checked out. 
  51  --skip-po                Do not download po files. 
  52  --cvs-user=USERNAME      Set the username to use when checking out 
  53                           sources from the gnulib repository. 
  55 If the file .bootstrap.conf exists in the current working directory, its 
  56 contents are read as shell variables to configure the bootstrap. 
  58 Running without arguments will suffice in most cases. 
  64 # List of gnulib modules needed. 
  67 # Any gnulib files needed that are not in modules. 
  70 # Translation Project URL, for the registry of all projects 
  71 # and for the translation-team master directory. 
  72 TP_URL
='http://www.iro.umontreal.ca/translation/registry.cgi?domain=' 
  73 TP_PO_URL
='http://www.iro.umontreal.ca/translation/teams/PO/' 
  75 extract_package_name
=' 
  86      y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ 
  91 package
=`sed -n "$extract_package_name" configure.ac` || exit 
  92 gnulib_name
=lib
$package 
  95 # Extra files from gnulib, which override files from other sources. 
 100         $build_aux/texinfo.tex 
 102         $build_aux/config.guess 
 103         $build_aux/config.sub 
 107 # Other locale categories that need message catalogs. 
 108 EXTRA_LOCALE_CATEGORIES
= 
 110 # Additional xgettext options to use.  Use "\\\newline" to break lines. 
 111 XGETTEXT_OPTIONS
='\\\ 
 112  --flag=_:1:pass-c-format\\\ 
 113  --flag=N_:1:pass-c-format\\\ 
 114  --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ 
 117 # Files we don't want to import. 
 120 # File that should exist in the top directory of a checked out hierarchy, 
 121 # but not in a distribution tarball. 
 122 checkout_only_file
=README
-hacking 
 124 # Whether to use copies instead of symlinks. 
 127 # Override the default configuration, if necessary. 
 128 test -r bootstrap.conf 
&& . .
/bootstrap.conf
 
 130 # Translate configuration into internal form. 
 141     GNULIB_SRCDIR
=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;; 
 143     CVS_USER
=`expr "$option" : '--cvs-user=\(.*\)'`;; 
 147     checkout_only_file
=;; 
 151     echo >&2 "$0: $option: unknown option" 
 156 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then 
 157   echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2 
 161 # If $STR is not already on a line by itself in $FILE, insert it, 
 162 # sorting the new contents of the file and replacing $FILE with the result. 
 163 insert_sorted_if_absent
() { 
 166   echo "$str" | sort -u - $file | cmp -s - $file \
 
 167     || echo "$str" | sort -u - $file -o $file \
 
 171 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. 
 173 grep '^[         ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
 
 174     >/dev
/null 
&& found_aux_dir
=yes 
 175 grep '^[         ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
 
 176     >/dev
/null 
&& found_aux_dir
=yes 
 177 if test $found_aux_dir = no
; then 
 178   echo "$0: expected line not found in configure.ac. Add the following:" >&2 
 179   echo "  AC_CONFIG_AUX_DIR([$build_aux])" >&2.
 
 182 # If $build_aux doesn't exist, create it now, otherwise some bits 
 183 # below will malfunction.  If creating it, also mark it as ignored. 
 184 if test ! -d $build_aux; then 
 186   for ig 
in .cvsignore .gitignore
; do 
 187     test -f $ig && insert_sorted_if_absent 
$ig $build_aux 
 191 echo "$0: Bootstrapping from checked-out $package sources..." 
 201 case ${GNULIB_SRCDIR--} in 
 203   if [ ! -d gnulib 
]; then 
 204     echo "$0: getting gnulib files..." 
 206     case ${CVS_AUTH-pserver} in 
 208       CVS_PREFIX
=':pserver:anonymous@';; 
 210       CVS_PREFIX
="$CVS_USER${CVS_USER+@}";; 
 212       echo "$0: $CVS_AUTH: Unknown CVS access method" >&2 
 217     '') CVS_RSH
=ssh; export CVS_RSH
;; 
 220     trap cleanup_gnulib 
1 2 13 15 
 222     cvs 
-z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org
:/cvsroot
/gnulib co gnulib 
|| 
 230 gnulib_tool
=$GNULIB_SRCDIR/gnulib
-tool 
 231 <$gnulib_tool || exit 
 239   case $WGET_COMMAND in 
 241     echo "$0: wget not available; skipping translations";; 
 243     echo "$0: getting translations into $subdir for $domain..." && 
 245     (cd $subdir && rm -f dummy 
`ls | sed -n '/\.gmo$/p; /\.po/p'`) && 
 246     $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" && 
 248     sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" | 
 249     sort -k 1,1 -k 2,2n 
-k2,2 -k3,3n 
-k3,3 -k4,4n 
-k4,4 -k5,5n 
-k5.5 
| 
 251       { if (lang && $1 != lang) print lang, ver } 
 252       { lang = $1; ver = substr($0, index($0, ".") + 1) } 
 253       END { if (lang) print lang, ver } 
 254     ' | awk -v domain
="$domain" -v subdir
="$subdir" ' 
 259         printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang 
 260         printf "  msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang 
 261         printf "    echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang 
 262         printf "    rm -f %s/%s.po; }; } &&\n", subdir, lang 
 265     ' | WGET_COMMAND
="$WGET_COMMAND" sh
;; 
 267   ls "$subdir"/*.po 
2>/dev
/null 
| 
 268     sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" && 
 269   rm -f "$subdir/$domain.html" 
 274   case `wget --help` in 
 276     WGET_COMMAND
='wget -nv --no-cache';; 
 278     WGET_COMMAND
='wget -nv --cache=off';; 
 280     WGET_COMMAND
='wget -nv';; 
 286     get_translations po 
$package || exit 
 289   if test -d runtime
-po; then 
 290     get_translations runtime
-po $package-runtime || exit 
 296   src
=$GNULIB_SRCDIR/$1 
 302         test ! -h "$dst" || { 
 303           echo "$0: rm -f $dst" && 
 308       cmp -s "$src" "$dst" || { 
 309         echo "$0: cp -fp $src $dst" && 
 314       src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 && 
 315       dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 && 
 316       test "$src_i" = "$dst_i" || { 
 322           *//* | */..
/* | */.
/* | /*/*/*/*/*/) 
 323              echo >&2 "$0: invalid symlink calculation: $src -> $dst" 
 325           /*/*/*/*/)    dot_dots
=..
/..
/..
/;; 
 326           /*/*/*/)      dot_dots
=..
/..
/;; 
 327           /*/*/)        dot_dots
=..
/;; 
 331         echo "$0: ln -fs $dot_dots$src $dst" && 
 332         ln -fs "$dot_dots$src" "$dst" 
 338 cp_mark_as_generated
() 
 343   if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then 
 344     symlink_to_gnulib 
"$cp_dst" 
 347       *.
[ch
])             c1
='/* '; c2
=' */';; 
 348       *.texi
)             c1
='@c '; c2
=     ;; 
 349       *.
m4|*/Make
*|Make
*) c1
='# ' ; c2
=     ;; 
 353     if test -z "$c1"; then 
 354       cmp -s "$cp_src" "$cp_dst" || { 
 355         echo "$0: cp -f $cp_src $cp_dst" && 
 357         sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst" 
 360       # Copy the file first to get proper permissions if it 
 361       # doesn't already exist.  Then overwrite the copy. 
 362       cp "$cp_src" "$cp_dst-t" && 
 364         echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" && 
 365         echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" && 
 366         sed "s!$bt_regex/!!g" "$cp_src" 
 368       if cmp -s "$cp_dst-t" "$cp_dst"; then 
 371         echo "$0: cp $cp_src $cp_dst # with edits" && 
 372         mv -f "$cp_dst-t" "$cp_dst" 
 378 version_controlled_file
() { 
 383     grep -F "/$file/" $dir/CVS
/Entries 
2>/dev
/null 
| 
 384              grep '^/[^/]*/[0-9]' > /dev
/null 
&& found
=yes 
 385   elif test -d .git
; then 
 386     git
-rm -n "$dir/$file" > /dev
/null 
2>&1 && found
=yes 
 388     echo "$0: no version control for $dir/$file?" >&2 
 394   for dir 
in . 
`(cd $1 && find * -type d -print)`; do 
 397     for file in `ls $1/$dir`; do 
 398       if test -d $1/$dir/$file; then 
 399         if test ! -d $dir/$file; then 
 400           echo "$0: mkdir $dir/$file" && mkdir $dir/$file || exit 
 404       for excluded_file 
in $excluded_files; do 
 405         test "$dir/$file" = "$excluded_file" && continue 2 
 407       if test $file = Makefile.am
; then 
 408         copied
=$copied${sep}gnulib.mk
; sep
=$nl 
 409         remove_intl
='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" 
 410         sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/gnulib.mk 
|| { 
 411           echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." && 
 412           rm -f $dir/gnulib.mk 
&& 
 413           sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
 
 415       elif { test "${2+set}" = set && test -r $2/$dir/$file; } || 
 416            version_controlled_file 
$dir $file; then 
 417         echo "$0: $dir/$file overrides $1/$dir/$file" 
 419         copied
=$copied$sep$file; sep
=$nl 
 420         if test $file = gettext.
m4; then 
 421           echo "$0: patching m4/gettext.m4 to remove need for intl/* ..." 
 424             /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ 
 425               AC_DEFUN([AM_INTL_SUBDIR], [ 
 426             /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\ 
 427               AC_DEFUN([gt_INTL_SUBDIR_CORE], []) 
 429               AC_DEFUN([gl_LOCK_EARLY], []) 
 430           ' $1/$dir/$file >$dir/$file 
 432           cp_mark_as_generated 
$1/$dir/$file $dir/$file 
 437     for dot_ig 
in .cvsignore .gitignore
; do 
 439       if test -n "$copied" && test -f $ig; then 
 440         insert_sorted_if_absent 
$ig "$copied" 
 441         # If an ignored file name ends with _.h, then also add 
 442         # the name with just ".h".  Many gnulib headers are generated, 
 443         # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc. 
 444         f
=`echo "$copied"|sed 's/_\.h$/.h/'` 
 445         insert_sorted_if_absent 
$ig "$f" 
 452 # Create boot temporary directories to import from gnulib and gettext. 
 454 mkdir $bt $bt2 || exit 
 456 # Import from gnulib. 
 458 gnulib_tool_options
="\ 
 461  --aux-dir $bt/$build_aux\ 
 465  --source-base $bt/lib/\ 
 466  --tests-base $bt/tests\ 
 469 echo "$0: $gnulib_tool $gnulib_tool_options --import ..." 
 470 $gnulib_tool $gnulib_tool_options --import $gnulib_modules && 
 473 for file in $gnulib_files; do 
 474   symlink_to_gnulib 
$file || exit 
 478 # Import from gettext. 
 480 grep '^[         ]*AM_GNU_GETTEXT_VERSION(' configure.ac 
>/dev
/null 
|| \
 
 483 if test $with_gettext = yes; then 
 484   echo "$0: (cd $bt2; autopoint) ..." 
 485   cp configure.ac 
$bt2 && 
 486   (cd $bt2 && autopoint 
&& rm configure.ac
) && 
 487   slurp 
$bt2 $bt || exit 
 489   rm -fr $bt $bt2 || exit 
 493 # Reconfigure, getting other files. 
 497   'aclocal --force -I m4' \
 
 499   'autoheader --force' \
 
 500   'automake --add-missing --copy --force-missing'; 
 502   if test "$command" = libtool
; then 
 503     grep '^[     ]*AM_PROG_LIBTOOL\>' configure.ac 
>/dev
/null 
|| 
 505     command='libtoolize -c -f' 
 507   echo "$0: $command ..." 
 512 # Get some extra files from gnulib, overriding existing files. 
 514 for file in $gnulib_extra_files; do 
 516   */INSTALL
) dst
=INSTALL
;; 
 519   symlink_to_gnulib 
$file $dst || exit 
 522 if test $with_gettext = yes; then 
 523   # Create gettext configuration. 
 524   echo "$0: Creating po/Makevars from po/Makevars.template ..." 
 527     /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ 
 528     /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ 
 529     /^XGETTEXT_OPTIONS *=/{ 
 532           '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} 
 534   ' po
/Makevars.template 
>po
/Makevars
 
 536   if test -d runtime
-po; then 
 537     # Similarly for runtime-po/Makevars, but not quite the same. 
 538     rm -f runtime
-po/Makevars
 
 540       /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ 
 541       /^subdir *=.*/s/=.*/= runtime-po/ 
 542       /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ 
 543       /^XGETTEXT_OPTIONS *=/{ 
 546             '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} 
 548     ' <po
/Makevars.template 
>runtime
-po/Makevars
 
 550     # Copy identical files from po to runtime-po. 
 551     (cd po 
&& cp -p Makefile.
in.
in *-quot *.header 
*.
sed *.sin ..
/runtime
-po) 
 555 echo "$0: done.  Now you can run './configure'."