]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
A tool for people using CVS.
authorBruno Haible <bruno@clisp.org>
Thu, 2 May 2002 13:33:46 +0000 (13:33 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:07:56 +0000 (12:07 +0200)
misc/autopoint.in [new file with mode: 0644]

diff --git a/misc/autopoint.in b/misc/autopoint.in
new file mode 100644 (file)
index 0000000..cede398
--- /dev/null
@@ -0,0 +1,350 @@
+#! /bin/sh
+#
+# Copyright (C) 2002 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
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# 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.
+#
+
+# This file is meant for authors, maintainers, co-maintainers or installers
+# of packages which are internationalized with the help of GNU gettext.  For
+# further information how to use it consult the GNU gettext manual.
+
+progname=$0
+package=@PACKAGE@
+version=@VERSION@
+
+# func_usage
+# outputs to stdout the --help usage message.
+func_usage ()
+{
+  echo "\
+Usage: autopoint [OPTION]...
+
+Copies standard gettext infrastructure files into a source package.
+
+Options:
+      --help           print this help and exit
+      --version        print version information and exit
+  -f, --force          force overwriting of files that already exist
+  -n, --dry-run        print modifications but don't perform them"
+#  echo "\
+#  -V version           copy the infrastructure of the specified gettext version
+#                         (dangerous)"
+  echo "
+Report bugs to <bug-gnu-gettext@gnu.org>."
+}
+
+# func_version
+# outputs to stdout the --version message.
+func_version ()
+{
+  echo "$progname (GNU $package) $version"
+  echo "Copyright (C) 2002 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+  echo "Written by" "Bruno Haible"
+}
+
+# func_fatal_error message
+# outputs to stderr a fatal error message, and terminates the program.
+func_fatal_error ()
+{
+  echo "autopoint: *** $1" 1>&2
+  echo "autopoint: *** Stop." 1>&2
+  exit 1
+}
+
+# Command-line option processing.
+# Removes the OPTIONS from the arguments. Sets the variables:
+# - force           yes if --force was given, empty otherwise
+# - ver             gettext version if -V was given, empty otherwise
+# - doit            false if --dry-run was given, : otherwise
+{
+  force=
+  ver=
+  doit=:
+
+  while test $# -gt 0; do
+    case "$1" in
+      -n | --dry-run | --dry-ru | --dry-r | --dry- | --dry | --dr | --d )
+        shift
+        doit=false ;;
+      -f | --force | --forc | --for | --fo | --f )
+        shift
+        force=yes ;;
+      --help | --hel | --he | --h )
+        func_usage; exit 0 ;;
+#      -V ) # Some people put a space between -V and the version number.
+#        shift
+#        if test $# = 0; then
+#          func_usage 1>&2
+#          exit 1
+#        fi
+#        ver=$1;
+#        shift ;;
+#      -V*) # Some people omit the space between -V and the version number.
+#        ver=`echo "X$1" | sed -e 's/^X-V//'`
+#        shift ;;
+      --version | --versio | --versi | --vers | --ver | --ve | --v )
+        func_version
+        exit 0 ;;
+      -- ) # Stop option prcessing
+        shift; break ;;
+      -* )
+        echo "autopoint: unknown option $1" 1>&2
+        echo "Try 'autopoint --help' for more information." 1>&2
+        exit 1 ;;
+      * )
+        break ;;
+    esac
+  done
+}
+
+# Command-line argument processing.
+# Analyzes the remaining arguments.
+{
+  if test $# -gt 0; then
+    func_usage 1>&2
+    exit 1
+  fi
+}
+
+srcdir=`pwd`
+# The current directory is now $srcdir.
+
+# Check integrity of package: A configure.in/ac must be present. Sets variable
+# - configure_in    name of configure.in/ac file.
+if test -f configure.in; then
+  configure_in=configure.in
+else
+  if test -f configure.ac; then
+    configure_in=configure.ac
+  else
+    func_fatal_error "Missing configure.in or configure.ac, please cd to your package first."
+  fi
+fi
+
+# Check whether the -V option and the version number in configure.in match.
+# At least one of the two must be given. If both are given, they must agree.
+xver=`cat "$configure_in" | grep '^GETTEXT_VERSION=' | sed -e 's/^GETTEXT_VERSION=\([-+_.0-9A-Za-z]*\).*/\1/' | sed -e 1q`
+if test -z "$xver" && test -f intl/VERSION; then
+  xver=`cat intl/VERSION | sed -n -e 's/^.*gettext-\(-+_.0-9A-Za-z]*\).*$/\1/p'`
+fi
+if test -n "$xver"; then
+  if test -n "$ver"; then
+    if test "X$ver" != "X$xver"; then
+      func_fatal_error "Version mismatch: specified -V $ver but the package uses gettext version $xver"
+    fi
+  else
+    ver="$xver"
+  fi
+else
+  if test -z "$ver"; then
+    func_fatal_error "Missing version: please specify in $configure_in through a line 'GETTEXT_VERSION=x.yy.zz' the gettext version the package is using"
+  fi
+fi
+
+# We distribute the many different versions of the files in a CVS repository.
+# This guarantees a good compression rate:
+#
+#   Including version    size in KB of
+#                       "du autopoint-files/archive"
+#      0.10.35                  240
+#      0.10.36                  428
+#      0.10.37                  436
+#      0.10.38                  488
+#      0.10.39                  500
+#      0.10.40                  528
+#      0.11                     720
+#      0.11.1                   740
+#      0.11.2                   748
+#
+# The requirement that the user must have the CVS program available is not
+# a severe restrictions, because most of the people who use autopoint are
+# users of CVS.
+#
+# Check availability of the CVS program.
+(cvs -v) >/dev/null 2>/dev/null || func_fatal_error "cvs program not found"
+
+# Check in which directory config.rpath, mkinstalldirs etc. belong.
+auxdir=`cat "$configure_in" | grep '^AC_CONFIG_AUX_DIR' | sed -n -e 's/AC_CONFIG_AUX_DIR(\([^()]*\))/\1/p' | sed -e 's/^\[\(.*\)\]$/\1/' | sed -e 1q`
+if test -n "$auxdir"; then
+  auxdir="$auxdir/"
+fi
+
+# Check in which directory the *.m4 macros belong.
+m4dir=m4
+if test -f Makefile.am; then
+  # A package using automake.
+  # Extract the macro directory name from Makefile.am.
+  aclocal_amflags=`grep '^ACLOCAL_AMFLAGS[     ]*=' Makefile.am | sed -e 's/^ACLOCAL_AMFLAGS[  ]*=\(.*\)$/\1/'`
+  m4dir_is_next=
+  for arg in $aclocal_amflags; do
+    if test -n "$m4dir_is_next"; then
+      m4dir="$arg"
+      break
+    else
+      if test "X$arg" = "X-I"; then
+        m4dir_is_next=yes
+      else
+        m4dir_is_next=
+      fi
+    fi
+  done
+fi
+
+# Check whether to omit the intl/ directory.
+omitintl=`cat "$configure_in" | grep '^AM_GNU_GETTEXT' | sed -n -e 's/^AM_GNU_GETTEXT(\([^(),]*\).*$/\1/p' | sed -e 's/^\[\(.*\)\]$/\1/' | sed -e 1q`
+omitintl=`if test 'external' = "$omitintl"; then echo yes; fi`
+
+# Set variables
+# - gettext_dir     directory where the sources are stored.
+prefix="@prefix@"
+gettext_dir="@datadir@/gettext"
+
+# Set up a temporary CVS repository and a temporary checkout directory.
+# We need the temporary CVS repository because any checkout needs write
+# access to the CVSROOT/history file, so it cannot be under $gettext_dir.
+# We need the temporary checkout directory because when --force was not
+# given, we need to compare the existing files with the checked out ones.
+# Set variables
+# - cvs_dir         directory containing the temporary repository
+# - work_dir        directory containing the temporary checkout
+cvs_dir=tmpcvs$$
+work_dir=tmpwrk$$
+mkdir "$cvs_dir"
+mkdir "$work_dir"
+CVSROOT="$srcdir/$cvs_dir"
+export CVSROOT
+
+cvs init
+gzip -d -c < "$gettext_dir/archive.tar.gz" | (cd "$cvs_dir" && tar xf -)
+
+cd "$work_dir"
+cvsver=gettext-`echo "$ver" | sed -e 's/\./_/g'`
+(cvs checkout -r"$cvsver" archive > /dev/null) 2>&1 | grep -v '^cvs checkout: Updating'
+find archive -name CVS -type d -print | xargs rm -rf
+if test `find archive -type f -print | wc -l` = 0; then
+  cd ..
+  rm -rf "$cvs_dir" "$work_dir"
+  fatal_error "infrastructure files for version $ver not found; this is autopoint from GNU $package $version"
+fi
+cd ..
+
+# func_destfile file
+# determines the destination file, relative to the package's top level
+# directory, for a given file name, relative to archive.
+# Sets variable
+# - destfile        relative destination file name, or
+#                   empty if the file shall be omitted
+func_destfile ()
+{
+  # There are five categories of files:
+  # ABOUT_NLS -> top level directory
+  # config.rpath mkinstalldirs -> $auxdir
+  # m4/* -> $m4dir/
+  # intl/* -> intl/
+  # po/* -> po/
+  case `echo "$1" | sed -e 's,[^/]*$,,'` in
+    "" )
+      case "$1" in
+        config.rpath | mkinstalldirs ) destfile="$auxdir$1" ;;
+        * ) destfile="$1" ;;
+      esac
+      ;;
+    m4/ ) destfile=`echo "$1" | sed -e "s,^m4/,$m4dir/,"` ;;
+    intl/ ) if test -n "$omitintl"; then destfile=""; else destfile="$1"; fi ;;
+    * ) destfile="$1" ;;
+  esac
+}
+
+# If some files have been locally modified and we have not been requested
+# to overwrite them, then bail out. This is better than leaving a source
+# package around where half of the files are locally modified and half are
+# original - too great risk of version mismatch.
+if test -z "$force"; then
+  mismatch=
+  for file in `find "$work_dir/archive" -type f -print | sed -e "s,^$work_dir/archive/,," | LC_ALL=C sort`; do
+    func_destfile "$file"
+    if test -n "$destfile"; then
+      if test -f "$destfile"; then
+        if cmp -s "$work_dir/archive/$file" "$destfile"; then
+          :
+        else
+          echo "autopoint: File $destfile has been locally modified."
+          mismatch=yes
+        fi
+      fi
+    fi
+  done
+  if test -n "$mismatch"; then
+    rm -rf "$cvs_dir" "$work_dir"
+    func_fatal_error "Some files have been locally modified. Not overwriting them because --force has not been specified."
+  fi
+fi
+
+# func_copy from to
+# copies a file.
+# 'from' is a relative pathname, relative to the current directory.
+# 'to' is a relative pathname, relative to the current directory.
+func_copy ()
+{
+  if $doit; then
+    rm -f "$2"
+    echo "Copying file $2"
+    cp "$1" "$2"
+  else
+    echo "Copy file $2"
+  fi
+}
+
+# func_backup to
+# makes a backup of a file that is about to be overwritten or replaced.
+# 'to' is a relative pathname, relative to the current directory.
+func_backup ()
+{
+  if $doit; then
+    if test -f "$1"; then
+      rm -f "$1~"
+      cp -p "$1" "$1~"
+    fi
+  fi
+}
+
+# Now copy the files.
+for file in `find "$work_dir/archive" -type f -print | sed -e "s,^$work_dir/archive/,," | LC_ALL=C sort`; do
+  func_destfile "$file"
+  mustcopy=
+  if test -n "$destfile"; then
+    if test -f "$destfile"; then
+      if cmp -s "$work_dir/archive/$file" "$destfile"; then
+        :
+      else
+        # Overwrite locally modified file.
+        mustcopy=yes
+      fi
+    else
+      mustcopy=yes
+    fi
+  fi
+  if test -n "$mustcopy"; then
+    func_backup "$destfile"
+    func_copy "$work_dir/archive/$file" "$destfile"
+  fi
+done
+
+# That's it.
+rm -rf "$cvs_dir" "$work_dir"
+exit 0