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 3 of the License, or 
  10 # (at your option) any later version. 
  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, see <http://www.gnu.org/licenses/>. 
  20 # Written by Paul Eggert. 
  25 # Ensure file names are sorted consistently across platforms. 
  26 # 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 # Name of the Makefile.am 
  67 # List of gnulib modules needed. 
  70 # Any gnulib files needed that are not in modules. 
  73 # The command to download all .po files for a specified domain into 
  74 # a specified directory.  Fill in the first %s is the domain name, and 
  75 # the second with the destination directory.  Use rsync's -L and -r 
  76 # options because the latest/%s directory and the .po files within are 
  78 po_download_command_format
=\
 
  79 "rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'" 
  81 extract_package_name
=' 
  92      y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ 
  97 package
=`sed -n "$extract_package_name" configure.ac` || exit 
  98 gnulib_name
=lib
$package 
 101 # Extra files from gnulib, which override files from other sources. 
 103         $build_aux/install-sh 
 106         $build_aux/texinfo.tex 
 108         $build_aux/config.guess 
 109         $build_aux/config.sub 
 113 # Additional gnulib-tool options to use.  Use "\newline" to break lines. 
 114 gnulib_tool_option_extras
= 
 116 # Other locale categories that need message catalogs. 
 117 EXTRA_LOCALE_CATEGORIES
= 
 119 # Additional xgettext options to use.  Use "\\\newline" to break lines. 
 120 XGETTEXT_OPTIONS
='\\\ 
 121  --flag=_:1:pass-c-format\\\ 
 122  --flag=N_:1:pass-c-format\\\ 
 123  --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ 
 126 # Files we don't want to import. 
 129 # File that should exist in the top directory of a checked out hierarchy, 
 130 # but not in a distribution tarball. 
 131 checkout_only_file
=README
-hacking 
 133 # Whether to use copies instead of symlinks. 
 136 # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want 
 137 # those files to be generated in directories like lib/, m4/, and po/. 
 138 # Or set it to 'auto' to make this script select which to use based 
 139 # on which version control system (if any) is used in the source directory. 
 142 # find_tool ENVVAR NAMES... 
 143 # ------------------------- 
 146   # Find sha1sum, named gsha1sum on MacPorts. 
 149   if eval test x
"\$$find_tool_envvar" = x
; then 
 152       if ($i --version </dev
/null
) >/dev
/null 
2>&1; then 
 158   if test x
"$find_tool_res" = x
; then 
 159     echo >&2 "$0: $find_tool_name is required" 
 162   ($find_tool_res --version </dev
/null
) >/dev
/null 
2>&1 || { 
 163     echo >&2 "$0: cannot run $find_tool_res --version" 
 166   eval "$find_tool_envvar=\"$find_tool_res\"" 
 167   eval "export $find_tool_envvar" 
 170 # Find sha1sum, named gsha1sum on MacPorts. 
 171 find_tool SHA1SUM 
sha1sum gsha1sum
 
 173 # Override the default configuration, if necessary. 
 174 test -r bootstrap.conf 
&& . .
/bootstrap.conf
 
 176 if test "$vc_ignore" = auto
; then 
 178   test -d .git 
&& vc_ignore
=.gitignore
 
 179   test -d CVS 
&& vc_ignore
="$vc_ignore .cvsignore" 
 182 # Translate configuration into internal form. 
 193     GNULIB_SRCDIR
=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;; 
 195     CVS_USER
=`expr "$option" : '--cvs-user=\(.*\)'`;; 
 199     checkout_only_file
=;; 
 203     echo >&2 "$0: $option: unknown option" 
 208 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then 
 209   echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2 
 213 # If $STR is not already on a line by itself in $FILE, insert it, 
 214 # sorting the new contents of the file and replacing $FILE with the result. 
 215 insert_sorted_if_absent
() { 
 218   test -f $file || touch $file 
 219   echo "$str" | sort -u - $file | cmp -s - $file \
 
 220     || echo "$str" | sort -u - $file -o $file \
 
 224 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. 
 226 grep '^[         ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
 
 227     >/dev
/null 
&& found_aux_dir
=yes 
 228 grep '^[         ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
 
 229     >/dev
/null 
&& found_aux_dir
=yes 
 230 if test $found_aux_dir = no
; then 
 231   echo "$0: expected line not found in configure.ac. Add the following:" >&2 
 232   echo "  AC_CONFIG_AUX_DIR([$build_aux])" >&2 
 236 # If $build_aux doesn't exist, create it now, otherwise some bits 
 237 # below will malfunction.  If creating it, also mark it as ignored. 
 238 if test ! -d $build_aux; then 
 240   for dot_ig 
in x 
$vc_ignore; do 
 241     test $dot_ig = x 
&& continue 
 242     insert_sorted_if_absent 
$dot_ig $build_aux 
 246 echo "$0: Bootstrapping from checked-out $package sources..." 
 256 case ${GNULIB_SRCDIR--} in 
 258   if [ ! -d gnulib 
]; then 
 259     echo "$0: getting gnulib files..." 
 261     case ${CVS_AUTH-pserver} in 
 263       CVS_PREFIX
=':pserver:anonymous@';; 
 265       CVS_PREFIX
="$CVS_USER${CVS_USER+@}";; 
 267       echo "$0: $CVS_AUTH: Unknown CVS access method" >&2 
 272     '') CVS_RSH
=ssh; export CVS_RSH
;; 
 275     trap cleanup_gnulib 
1 2 13 15 
 277     cvs 
-z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org
:/cvsroot
/gnulib co gnulib 
|| 
 285 gnulib_tool
=$GNULIB_SRCDIR/gnulib
-tool 
 286 <$gnulib_tool || exit 
 290 download_po_files
() { 
 293   echo "$0: getting translations into $subdir for $domain..." 
 294   cmd
=`printf "$po_download_command_format" "$domain" "$subdir"` 
 298 # Download .po files to $po_dir/.reference and copy only the new 
 299 # or modified ones into $po_dir.  Also update $po_dir/LINGUAS. 
 301   # Directory containing primary .po files. 
 302   # Overwrite them only when we're sure a .po file is new. 
 306   # Download *.po files into this dir. 
 307   # Usually contains *.s1 checksum files. 
 308   ref_po_dir
="$po_dir/.reference" 
 310   test -d $ref_po_dir || mkdir $ref_po_dir || return 
 311   download_po_files 
$ref_po_dir $domain \
 
 312     && ls "$ref_po_dir"/*.po 
2>/dev
/null 
| 
 313       sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" 
 315   for po 
in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do 
 316      new_po
="$ref_po_dir/$po.po" 
 317      cksum_file
="$ref_po_dir/$po.s1" 
 318      if ! "$SHA1SUM" -c --status "$cksum_file" < "$new_po" > /dev
/null
; then 
 319        echo "updated $po_dir/$po.po..." 
 320        cp "$new_po" "$po_dir/$po.po" && "$SHA1SUM" < "$new_po" > "$cksum_file" 
 328     update_po_files po 
$package || exit 
 331   if test -d runtime
-po; then 
 332     update_po_files runtime
-po $package-runtime || exit 
 343     # If the destination directory doesn't exist, create it. 
 344     # This is required at least for "lib/uniwidth/cjk.h". 
 345     dst_dir
=`dirname "$dst"` 
 346     if ! test -d "$dst_dir"; then 
 349       # If we've just created a directory like lib/uniwidth, 
 350       # tell version control system(s) it's ignorable. 
 351       # FIXME: for now, this does only one level 
 352       parent
=`dirname "$dst_dir"` 
 353       for dot_ig 
in x 
$vc_ignore; do 
 354         test $dot_ig = x 
&& continue 
 356         insert_sorted_if_absent 
$ig `echo "$dst_dir"|sed 's,.*/,,'` 
 362         test ! -h "$dst" || { 
 363           echo "$0: rm -f $dst" && 
 368       cmp -s "$src" "$dst" || { 
 369         echo "$0: cp -fp $src $dst" && 
 374       src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 && 
 375       dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 && 
 376       test "$src_i" = "$dst_i" || { 
 382           *//* | */..
/* | */.
/* | /*/*/*/*/*/) 
 383              echo >&2 "$0: invalid symlink calculation: $src -> $dst" 
 385           /*/*/*/*/)    dot_dots
=..
/..
/..
/;; 
 386           /*/*/*/)      dot_dots
=..
/..
/;; 
 387           /*/*/)        dot_dots
=..
/;; 
 391         echo "$0: ln -fs $dot_dots$src $dst" && 
 392         ln -fs "$dot_dots$src" "$dst" 
 398 cp_mark_as_generated
() 
 403   if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then 
 404     symlink_to_dir 
"$GNULIB_SRCDIR" "$cp_dst" 
 405   elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then 
 406     symlink_to_dir 
$local_gl_dir "$cp_dst" 
 409       *.
[ch
])             c1
='/* '; c2
=' */';; 
 410       *.texi
)             c1
='@c '; c2
=     ;; 
 411       *.
m4|*/Make
*|Make
*) c1
='# ' ; c2
=     ;; 
 415     if test -z "$c1"; then 
 416       cmp -s "$cp_src" "$cp_dst" || { 
 417         echo "$0: cp -f $cp_src $cp_dst" && 
 419         sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst" 
 422       # Copy the file first to get proper permissions if it 
 423       # doesn't already exist.  Then overwrite the copy. 
 424       cp "$cp_src" "$cp_dst-t" && 
 426         echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" && 
 427         echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" && 
 428         sed "s!$bt_regex/!!g" "$cp_src" 
 430       if cmp -s "$cp_dst-t" "$cp_dst"; then 
 433         echo "$0: cp $cp_src $cp_dst # with edits" && 
 434         mv -f "$cp_dst-t" "$cp_dst" 
 440 version_controlled_file
() { 
 445     grep -F "/$file/" $dir/CVS
/Entries 
2>/dev
/null 
| 
 446              grep '^/[^/]*/[0-9]' > /dev
/null 
&& found
=yes 
 447   elif test -d .git
; then 
 448     git
-rm -n "$dir/$file" > /dev
/null 
2>&1 && found
=yes 
 450     echo "$0: no version control for $dir/$file?" >&2 
 456   for dir 
in . 
`(cd $1 && find * -type d -print)`; do 
 459     for file in `ls -a $1/$dir`; do 
 462       .
*) continue;; # FIXME: should all file names starting with "." be ignored? 
 464       test -d $1/$dir/$file && continue 
 465       for excluded_file 
in $excluded_files; do 
 466         test "$dir/$file" = "$excluded_file" && continue 2 
 468       if test $file = Makefile.am
; then 
 469         copied
=$copied${sep}$gnulib_mk; sep
=$nl 
 470         remove_intl
='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" 
 471         sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || { 
 472           echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && 
 473           rm -f $dir/$gnulib_mk && 
 474           sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk 
 476       elif { test "${2+set}" = set && test -r $2/$dir/$file; } || 
 477            version_controlled_file 
$dir $file; then 
 478         echo "$0: $dir/$file overrides $1/$dir/$file" 
 480         copied
=$copied$sep$file; sep
=$nl 
 481         if test $file = gettext.
m4; then 
 482           echo "$0: patching m4/gettext.m4 to remove need for intl/* ..." 
 485             /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ 
 486               AC_DEFUN([AM_INTL_SUBDIR], [ 
 487             /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\ 
 488               AC_DEFUN([gt_INTL_SUBDIR_CORE], []) 
 490               AC_DEFUN([gl_LOCK_EARLY], []) 
 491           ' $1/$dir/$file >$dir/$file 
 493           cp_mark_as_generated 
$1/$dir/$file $dir/$file 
 498     for dot_ig 
in x 
$vc_ignore; do 
 499       test $dot_ig = x 
&& continue 
 501       if test -n "$copied"; then 
 502         insert_sorted_if_absent 
$ig "$copied" 
 503         # If an ignored file name ends with _.h, then also add 
 504         # the name with just ".h".  Many gnulib headers are generated, 
 505         # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc. 
 506         # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed 
 507         f
=`echo "$copied"|sed 's/_\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'` 
 508         insert_sorted_if_absent 
$ig "$f" 
 510         # For files like sys_stat_.h and sys_time_.h, record as 
 511         # ignorable the directory we might eventually create: sys/. 
 512         f
=`echo "$copied"|sed 's/sys_.*_\.h$/sys/'` 
 513         insert_sorted_if_absent 
$ig "$f" 
 520 # Create boot temporary directories to import from gnulib and gettext. 
 522 mkdir $bt $bt2 || exit 
 524 # Import from gnulib. 
 526 gnulib_tool_options
="\ 
 529  --aux-dir $bt/$build_aux\ 
 533  --source-base $bt/lib/\ 
 534  --tests-base $bt/tests\ 
 535  --local-dir $local_gl_dir\ 
 536 $gnulib_tool_option_extras\ 
 538 echo "$0: $gnulib_tool $gnulib_tool_options --import ..." 
 539 $gnulib_tool $gnulib_tool_options --import $gnulib_modules && 
 542 for file in $gnulib_files; do 
 543   symlink_to_dir 
"$GNULIB_SRCDIR" $file || exit 
 547 # Import from gettext. 
 549 grep '^[         ]*AM_GNU_GETTEXT_VERSION(' configure.ac 
>/dev
/null 
|| \
 
 552 if test $with_gettext = yes; then 
 553   echo "$0: (cd $bt2; autopoint) ..." 
 554   cp configure.ac 
$bt2 && 
 555   (cd $bt2 && autopoint 
&& rm configure.ac
) && 
 556   slurp 
$bt2 $bt || exit 
 558   rm -fr $bt $bt2 || exit 
 561 # Coreutils is unusual in that it generates some of its test-related 
 562 # Makefile.am files.  That must be done before invoking automake. 
 563 mam_template
=tests
/Makefile.am.
in 
 564 if test -f $mam_template; then 
 566   for tool 
in cut 
head join pr sort tac tail test tr uniq wc; do 
 567     m
=tests
/$tool/Makefile.am
 
 570     sed -n '1,/^##test-files-begin/p' $mam_template > $t 
 571     echo "x = $tool" >> $t 
 573     $PERL -I$srcdir -w -- tests
/mk
-script $srcdir --list >> $t 
 574     sed -n '/^##test-files-end/,$p' $mam_template >> $t 
 580 # Reconfigure, getting other files. 
 584   'aclocal --force -I m4' \
 
 586   'autoheader --force' \
 
 587   'automake --add-missing --copy --force-missing'; 
 589   if test "$command" = libtool
; then 
 590     grep '^[     ]*AM_PROG_LIBTOOL\>' configure.ac 
>/dev
/null 
|| 
 592     command='libtoolize -c -f' 
 594   echo "$0: $command ..." 
 599 # Get some extra files from gnulib, overriding existing files. 
 600 for file in $gnulib_extra_files; do 
 602   */INSTALL
) dst
=INSTALL
;; 
 603   build
-aux/*) dst
=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;; 
 606   symlink_to_dir 
"$GNULIB_SRCDIR" $file $dst || exit 
 609 if test $with_gettext = yes; then 
 610   # Create gettext configuration. 
 611   echo "$0: Creating po/Makevars from po/Makevars.template ..." 
 614     /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ 
 615     /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ 
 616     /^XGETTEXT_OPTIONS *=/{ 
 619           '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} 
 621   ' po
/Makevars.template 
>po
/Makevars
 
 623   if test -d runtime
-po; then 
 624     # Similarly for runtime-po/Makevars, but not quite the same. 
 625     rm -f runtime
-po/Makevars
 
 627       /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ 
 628       /^subdir *=.*/s/=.*/= runtime-po/ 
 629       /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ 
 630       /^XGETTEXT_OPTIONS *=/{ 
 633             '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} 
 635     ' <po
/Makevars.template 
>runtime
-po/Makevars
 
 637     # Copy identical files from po to runtime-po. 
 638     (cd po 
&& cp -p Makefile.
in.
in *-quot *.header 
*.
sed *.sin ..
/runtime
-po) 
 642 echo "$0: done.  Now you can run './configure'."