]> Dogcows Code - chaz/tar/blobdiff - bootstrap
* bootstrap: Don't exclude ja.po; it is working again.
[chaz/tar] / bootstrap
index 6c825c728b5c237709272a05c20bf0e506ab7dba..a08742e39245a56fd6afe4e60138a6ee83cbee77 100755 (executable)
--- a/bootstrap
+++ b/bootstrap
@@ -1,8 +1,8 @@
 #! /bin/sh
 
 #! /bin/sh
 
-# Bootstrap 'tar' from CVS.
+# Bootstrap this package from CVS.
 
 
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
 
 
-# Written by Paul Eggert.
+# Written by Paul Eggert and Sergey Poznyakoff.
 
 
-# URL of our text domain page in Translation Project
-TP_URL="http://www2.iro.umontreal.ca/~gnutra/po/maint/tar/"
+package=tar
+
+# Translation Project URL, for the registry of all projects.
+TP_URL='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
+
+# Ensure file names are sorted consistently across platforms.
+# Also, ensure diagnostics are in English, e.g., "wget --help" below.
+LC_ALL=C
+export LC_ALL
 
 usage() {
  cat <<EOF
 
 usage() {
  cat <<EOF
- usage: $0 [--gnulib-srcdir=DIR][--cvs-auth=AUTH-METHOD][--cvs-user=USERNAME][--no-po]
+ usage: $0 [--gnulib-srcdir=DIR][--paxutils-srcdir=DIR][--cvs-auth=AUTH-METHOD][--cvs-user=USERNAME][--no-po]
  Options are:
  Options are:
+ --paxutils-srcdir=DIRNAME    Specify the local directory where paxutils
+                              sources reside. Use this if you already
+                              have paxutils sources on your machine, and
+                              do not want to waste your bandwidth dowloading
+                              them again.
  --gnulib-srcdir=DIRNAME      Specify the local directory where gnulib
                               sources reside. Use this if you already
                               have gnulib sources on your machine, and
  --gnulib-srcdir=DIRNAME      Specify the local directory where gnulib
                               sources reside. Use this if you already
                               have gnulib sources on your machine, and
@@ -40,15 +52,26 @@ usage() {
  --cvs-user=USERNAME          Set the CVS username to be used when accessing
                               the gnulib repository.
  --no-po                      Do not download po files.
  --cvs-user=USERNAME          Set the CVS username to be used when accessing
                               the gnulib repository.
  --no-po                      Do not download po files.
+ --update-po[=LANG]           Update po file(s) and exit.
+
+If the file \`.bootstrap' exists in the current working directory, its
+contents is read, comments and empty lines removed, shell variables expanded
+and the result is prepended to the command line options.
 
 Running without arguments will suffice in most cases. It is equivalent
 
 Running without arguments will suffice in most cases. It is equivalent
-to 
+to
+
+    ./bootstrap --cvs-auth=pserver
 
 
-    ./bootstrap --cvs-auth=ext --cvs-user=anoncvs
-    
 EOF
 }
 
 EOF
 }
 
+# Read configuration file
+if [ -r .bootstrap ]; then
+  echo "$0: Reading configuration file .bootstrap"
+  eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*"
+fi
+
 # Parse options.
 
 DOWNLOAD_PO=yes
 # Parse options.
 
 DOWNLOAD_PO=yes
@@ -60,19 +83,105 @@ do
     exit;;
   --gnulib-srcdir=*)
     GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
     exit;;
   --gnulib-srcdir=*)
     GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
+  --paxutils-srcdir=*)
+    PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
   --cvs-auth=*)
     CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
   --cvs-user=*)
     CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
   --no-po)
     DOWNLOAD_PO=no;;
   --cvs-auth=*)
     CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
   --cvs-user=*)
     CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
   --no-po)
     DOWNLOAD_PO=no;;
+  --update-po=*)
+    DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;;
+  --update-po)
+    DOWNLOAD_PO=only;;
   *)
     echo >&2 "$0: $option: unknown option"
     exit 1;;
   esac
 done
 
   *)
     echo >&2 "$0: $option: unknown option"
     exit 1;;
   esac
 done
 
-echo "$0: Bootstrapping CVS tar..."
+# Get translations.
+
+get_translations() {
+  subdir=$1
+  domain=$2
+  po_file=$3
+
+  echo "$0: getting translations into $subdir for $domain..."
+
+  case $po_file in
+  '') (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`);;
+  esac &&
+
+  $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
+
+  sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
+  sort -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 |
+  awk -F. '
+    { if (lang && $1 != lang) print lang, ver }
+    { lang = $1; ver = substr($0, index($0, ".") + 1) }
+    END { if (lang) print lang, ver }
+  ' |
+  awk -v domain="$domain" -v po_file="$po_file" -v subdir="$subdir" '
+    {
+      lang = $1
+      if (po_file && po_file != (lang ".po")) next
+
+      # Work around bugs in translations uncovered by gettext 0.15.
+      # This workaround can be removed once the translations are fixed.
+      if (lang == "hu" || lang == "ky" || lang == "zh_TW") next
+
+      ver = $2
+      urlfmt = ""
+      printf "$WGET_COMMAND -O %s/%s.po 'http://www.iro.umontreal.ca/translation/teams/PO/%s/%s-%s.%s.po' &&\n", subdir, lang, lang, domain, ver, lang
+    }
+    END { print ":" }
+  ' |
+  sh &&
+  ls "$subdir"/*.po | sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
+  rm "$subdir/$domain.html"
+}
+
+update_po() {
+  if [ $# = 1 ]; then
+    case $1 in
+    *.po)  POFILE=$1;;
+    *)     POFILE=${1}.po;;
+    esac
+    get_translations po $package "$POFILE"
+  else
+    get_translations po $package
+  fi
+}
+
+case $DOWNLOAD_PO in
+no) ;;
+*)
+  case `wget --help` in
+  *'--no-cache'*)
+    no_cache='--no-cache';;
+  *'--cache=on/off'*)
+    no_cache='--cache=off';;
+  *)
+    no_cache='';;
+  esac
+
+  WGET_COMMAND="wget -nv $no_cache"
+  export WGET_COMMAND
+esac
+
+case $DOWNLOAD_PO in
+only)  update_po
+       exit
+       ;;
+no|yes) ;;
+*)     update_po $DOWNLOAD_PO
+       exit
+esac
+
+
+echo "$0: Bootstrapping CVS $package..."
 
 build_cvs_prefix() {
   CVS_PREFIX=:${1}:
 
 build_cvs_prefix() {
   CVS_PREFIX=:${1}:
@@ -84,92 +193,123 @@ build_cvs_prefix() {
        CVS_RSH=ssh
        export CVS_RSH
     fi
        CVS_RSH=ssh
        export CVS_RSH
     fi
-  fi 
+  fi
 }
 
 }
 
-# Get gnulib files.
-
-case ${GNULIB_SRCDIR--} in
--)
-  if [ ! -d gnulib ]; then
-    echo "$0: getting gnulib files..."
+# checkout package
+checkout() {
+  if [ ! -d $1 ]; then
+    echo "$0: getting $1 files..."
 
     trap exit 1 2 13 15
 
     trap exit 1 2 13 15
-    trap 'rm -fr gnulib; exit 1' 0
-    
-    case "${CVS_AUTH--}" in
-    -)       build_cvs_prefix ext anoncvs;;
-    pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs};;
+    trap 'rm -fr $1; exit 1' 0
+
+    case "${CVS_AUTH-pserver}" in
+    pserver) build_cvs_prefix pserver ${CVS_USER:-anonymous}
+             ;;
     gserver|server)
     gserver|server)
-             build_cvs_prefix $CVS_AUTH ${CVS_USER--};;
-    ext)     build_cvs_prefix $CVS_AUTH ${CVS_USER--};;
+            build_cvs_prefix $CVS_AUTH ${CVS_USER--}
+            ;;
+    ext)     build_cvs_prefix $CVS_AUTH ${CVS_USER--}
+             ;;
     *)       echo "$0: Unknown CVS access method" >&2
     *)       echo "$0: Unknown CVS access method" >&2
-             exit 1;;
+            exit 1;;
     esac
     esac
-    if [ "${CVS_AUTH--}" = "pserver" ]; then
-      cvs -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/gnulib login || exit
-    fi
-    cvs -q -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/gnulib co gnulib || exit
+    cvs -q -d ${CVS_PREFIX}cvs.sv.gnu.org:/cvsroot/$1 co $1 || exit
 
 
-    trap 0
+    trap 0
   fi
   fi
-  GNULIB_SRCDIR=gnulib
-esac
+}
 
 
-<$GNULIB_SRCDIR/gnulib-tool || exit
-
-gnulib_modules='
-alloca
-argmatch
-backupfile
-dirname
-error
-exclude
-fileblocks
-fnmatch-gnu
-ftruncate
-full-write
-getdate
-getline
-getopt
-gettext
-hash
-human
-lchown
-memset
-modechange
-obstack
-quote
-quotearg
-rmdir
-safe-read
-save-cwd
-savedir
-stdbool
-stpcpy
-strtol
-strtoul
-unlocked-io
-utime
-xalloc
-xgetcwd
-xstrtoumax
+gnulib_modules=
+newline='
 '
 
 '
 
+get_modules() {
+  new_gnulib_modules=`sed '/^[  ]*#/d; /^[      ]*$/d' $*`
+  case $gnulib_modules,$new_gnulib_modules in
+  ?*,?*) new_gnulib_modules=$newline$new_gnulib_modules;;
+  esac
+  gnulib_modules=$gnulib_modules$new_gnulib_modules
+}
+
+# Get paxutils files
+case ${PAXUTILS_SRCDIR--} in
+-) checkout paxutils
+   PAXUTILS_SRCDIR=paxutils
+esac
+
+if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then
+  get_modules $PAXUTILS_SRCDIR/gnulib.modules
+fi
+
+# copy_files srcdir dstdir
+copy_files() {
+  for file in `cat $1/DISTFILES`
+  do
+    case $file in
+    "#*")  continue;;
+    esac
+    dst=`echo $file | sed 's^.*/^^'`
+    if [ $# -eq 3 ]; then
+      case $dst in
+      ${3}*) ;;
+      *) dst=${3}$dst;;
+      esac
+    fi
+    echo "$0: Copying file $1/$file to $2/$dst"
+    cp -p $1/$file $2/$dst
+  done
+}
+
+copy_files ${PAXUTILS_SRCDIR}/m4 m4
+echo "$0: Creating m4/paxutils.m4"
+(echo "# This file is generated automatically. Please, do not edit."
+ echo "#"
+ echo "AC_DEFUN([tar_PAXUTILS],["
+ cat ${PAXUTILS_SRCDIR}/m4/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z
+ echo "])") > ./m4/paxutils.m4
+
+if [ -d rmt ]; then
+   :
+else
+   mkdir rmt
+fi
+
+for dir in doc rmt lib tests
+do
+       copy_files ${PAXUTILS_SRCDIR}/$dir $dir
+done
+
+copy_files ${PAXUTILS_SRCDIR}/paxlib lib pax
+
+# Get gnulib files.
+
+case ${GNULIB_SRCDIR--} in
+-) checkout gnulib
+   GNULIB_SRCDIR=gnulib
+esac
+
+gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
+<$gnulib_tool || exit
+
+get_modules gnulib.modules
+
+gnulib_modules=`echo "$gnulib_modules" | sort -u`
 previous_gnulib_modules=
 while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
   previous_gnulib_modules=$gnulib_modules
   gnulib_modules=`
     (echo "$gnulib_modules"
      for gnulib_module in $gnulib_modules; do
 previous_gnulib_modules=
 while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
   previous_gnulib_modules=$gnulib_modules
   gnulib_modules=`
     (echo "$gnulib_modules"
      for gnulib_module in $gnulib_modules; do
-       $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
+       $gnulib_tool --extract-dependencies $gnulib_module
      done) | sort -u
   `
 done
 
 gnulib_files=`
   (for gnulib_module in $gnulib_modules; do
      done) | sort -u
   `
 done
 
 gnulib_files=`
   (for gnulib_module in $gnulib_modules; do
-     $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
+     $gnulib_tool --extract-filelist $gnulib_module
    done) | sort -u
 `
 
    done) | sort -u
 `
 
@@ -178,40 +318,95 @@ mkdir -p $gnulib_dirs || exit
 
 for gnulib_file in $gnulib_files; do
   dest=$gnulib_file
 
 for gnulib_file in $gnulib_files; do
   dest=$gnulib_file
-
-  case $gnulib_file in
-  m4/codeset.m4) continue;;
-  m4/glibc21.m4) continue;;
-  m4/intdiv0.m4) continue;;
-  m4/inttypes_h.m4) continue;;
-  m4/inttypes.m4) continue;;
-  m4/inttypes-pri.m4) continue;;
-  m4/isc-posix.m4) continue;;
-  m4/lcmessage.m4) continue;;
-  m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
-  esac
-
   rm -f $dest &&
   echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
   cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
 done
 
   rm -f $dest &&
   echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
   cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
 done
 
+# This suppresses a bogus diagnostic
+# "warning: macro `AM_LANGINFO_CODESET' not found in library".
+echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
+sed '
+  /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
+    AC_DEFUN([AM_INTL_SUBDIR], [])
+  /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
+    AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
+' m4/gettext.m4 >m4/gettext_gl.m4 || exit
+
+echo "$0: Creating m4/gnulib.m4"
+(echo "# This file is generated automatically. Please, do not edit."
+ echo "#"
+ echo "AC_DEFUN([tar_GNULIB],["
+ for gnulib_module in $gnulib_modules; do
+    echo "# $gnulib_module"
+    $gnulib_tool --extract-autoconf-snippet $gnulib_module
+ done | sed '/AM_GNU_GETTEXT/d'
+ echo "])") > ./m4/gnulib.m4
+
+echo "$0: Creating lib/Makefile.am"
+(echo "# This file is generated automatically. Do not edit!"
+ cat lib/Makefile.tmpl
+
+ for gnulib_module in $gnulib_modules; do
+    echo "# $gnulib_module"
+    $gnulib_tool --extract-automake-snippet $gnulib_module
+ done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
 
 # Get translations.
 
 # Get translations.
-
 if test "$DOWNLOAD_PO" = "yes"; then
 if test "$DOWNLOAD_PO" = "yes"; then
-  echo "$0: getting translations into po..."
-  (cd po &&
-   rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'` &&
-    wget -nv -nd -r -l 1 -A .po -C off $TP_URL &&
-    ls *.po | sed 's/\.po$//' >LINGUAS
-  ) || exit
+  update_po
 fi
 
 # Reconfigure, getting other files.
 
 fi
 
 # Reconfigure, getting other files.
 
-echo "$0: autoreconf --verbose --install --force ..."
-autoreconf --verbose --install --force
+echo "$0: autopoint --force ..."
+autopoint --force || exit
+
+# We don't need intl, so remove it.
+intl_files_to_remove='
+  intl
+  m4/gettext.m4
+  m4/glibc2.m4
+  m4/intdiv0.m4
+  m4/intmax.m4
+  m4/inttypes-h.m4
+  m4/inttypes-pri.m4
+  m4/lcmessage.m4
+  m4/lock.m4
+  m4/printf-posix.m4
+  m4/visibility.m4
+'
+echo $0: rm -fr $intl_files_to_remove ...
+rm -fr $intl_files_to_remove || exit
+
+
+# Undo changes to gnulib files that autoreconf made.
+for gnulib_file in $gnulib_files; do
+  test ! -f $gnulib_file || cmp -s $gnulib_file $GNULIB_SRCDIR/$gnulib_file || {
+    rm -f $gnulib_file &&
+    echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file again" &&
+    cp -p $GNULIB_SRCDIR/$gnulib_file $gnulib_file || exit
+  }
+done
+
+# Make sure aclocal.m4 is not older than input files.
+sleep 1
+
+for command in \
+  'aclocal --force -I m4' \
+  'autoconf --force' \
+  'autoheader --force' \
+  'automake --add-missing --copy --force-missing';
+do
+  echo "$0: $command ..."
+  $command || exit
+done
+
+
+# Put bug-reporting address into po/Makevars.
+echo "$0: sed '/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-$package@gnu.org/' po/Makevars.template >po/Makevars ..."
+sed '/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/' po/Makevars.template >po/Makevars
+
 
 
 echo "$0: done.  Now you can run './configure'."
 
 
 echo "$0: done.  Now you can run './configure'."
This page took 0.030125 seconds and 4 git commands to generate.