]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
New options --with-xz and --with-bzip2 for compressing the archive.
authorBruno Haible <bruno@clisp.org>
Mon, 7 Jun 2010 00:44:45 +0000 (02:44 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 30 Aug 2010 20:58:23 +0000 (22:58 +0200)
ChangeLog
DEPENDENCIES
NEWS
gettext-tools/ChangeLog
gettext-tools/configure.ac
gettext-tools/misc/ChangeLog
gettext-tools/misc/Makefile.am
gettext-tools/misc/add-to-archive
gettext-tools/misc/autopoint.in
gettext-tools/misc/convert-archive.in

index 08775a5ebf10ddb0f48ca61557af707e2b773f27..cb91a597bed0b7403e8d2f440436575749c7dae4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-06-06  Bruno Haible  <bruno@clisp.org>
+
+       New options --with-xz and --with-bzip2 for compressing the archive.
+       * DEPENDENCIES: Correct placement of entries for 'tar' and 'gzip'. Add
+       entries for 'bzip2' and 'xz'.
+
 2010-06-04  Bruno Haible  <bruno@clisp.org>
 
        * m4/libtool.m4: Update from libtool-2.2.8, with modifications.
index 30e29b2f162cbc3a35691b6a63f7dc1a4ac2a5c1..e11eb943b3ba53bc045f504db19449f96bd8f28c 100644 (file)
@@ -70,6 +70,41 @@ The following packages should be installed before GNU gettext is installed
   + Download:
     http://www.kernel.org/pub/software/scm/git/
 
+* The archiving utility 'tar'.
+  + Recommended.
+    Needed for the 'autopoint' program.
+    Either the platform's native tar, or GNU tar.
+  + Homepage:
+    http://www.gnu.org/software/tar/
+  + Download:
+    http://ftp.gnu.org/gnu/tar/
+    ftp://ftp.gnu.org/gnu/tar/
+
+* The GNU compression utility 'gzip'.
+  + Recommended.
+    Needed for the 'autopoint' program.
+  + Homepage:
+    http://www.gnu.org/software/gzip/
+  + Download:
+    http://ftp.gnu.org/gnu/gzip/
+    ftp://ftp.gnu.org/gnu/gzip/
+
+* The compression utility 'bzip2'.
+  + Recommended.
+    Needed for the 'autopoint' program, if not configured with --without-bzip2.
+  + Homepage:
+    http://www.bzip.org/
+  + Download:
+    http://www.bzip.org/downloads.html
+
+* The compression utility 'xz'.
+  + Recommended.
+    Needed for the 'autopoint' program, if not configured with --without-xz.
+  + Homepage:
+    http://tukaani.org/xz/
+  + Download:
+    http://tukaani.org/xz/
+
 * libxml2
   + Optional.
     Needed for the --color option of the various programs.
@@ -191,24 +226,3 @@ dependencies):
   + Download:
     http://ftp.gnu.org/gnu/grep/
     ftp://ftp.gnu.org/gnu/grep/
-
-* The archiving utility 'tar'.
-  + Optional.
-    Needed for the 'autopoint' program, if not configured with --without-git
-    and --without-cvs.
-    Either the platform's native tar, or GNU tar.
-  + Homepage:
-    http://www.gnu.org/software/tar/
-  + Download:
-    http://ftp.gnu.org/gnu/tar/
-    ftp://ftp.gnu.org/gnu/tar/
-
-* The GNU compression utility 'gzip'.
-  + Optional.
-    Needed for the 'autopoint' program, if not configured with --without-git
-    and --without-cvs.
-  + Homepage:
-    http://www.gnu.org/software/gzip/
-  + Download:
-    http://ftp.gnu.org/gnu/gzip/
-    ftp://ftp.gnu.org/gnu/gzip/
diff --git a/NEWS b/NEWS
index 549f554e0eeb74c7ab81b2817b4cf0b143357f48..9c85882f8bf3eff5409f4bcc8c72d737f46299dd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,13 @@ Version 0.18.2 - July 2010
   - The initial msgstr of a new message is now "", not NULL.
   - Bug fixes in the functions po_message_is_range, po_file_check_all,
     po_message_check_all.
+
+* Installation options:
+  The configure options --with-xz and --with-bzip2 can be used to specify
+  alternate compression methods for the archive used by the 'autopoint'
+  program. These options, together with --with-git, allow to trade
+  dependencies against installed package size. --with-xz has the highest
+  compression rate, followed by --with-git, followed by --with-bzip2.
 \f
 Version 0.18.1 - June 2010
 
index 4c6e4d2ed3e403c0abefa8665e64569196231a31..f31bab1ae0edd056a71e6d6db96a0cb328674e3f 100644 (file)
@@ -1,3 +1,10 @@
+2010-06-06  Bruno Haible  <bruno@clisp.org>
+
+       New options --with-xz and --with-bzip2 for compressing the archive.
+       * configure.ac: New options --without-bzip2, --without-xz.
+       (ARCHIVE_FORMAT): Rename value 'dir' to 'dirgz'. Recognize also values
+       'dirxz' or 'dirbz2', depending on options.
+
 2010-06-06  Bruno Haible  <bruno@clisp.org>
 
        * configure.ac (ARCHIVE_FORMAT): If neither --with-git nor --with-cvs
index 71cc38bcc5855b78af2eeb532221634a74d090f0..4a76c1d8332c8bd71e34c4db225c224104da30d6 100644 (file)
@@ -323,36 +323,114 @@ AC_ARG_WITH([cvs],
                           (deprecated)],
   [gt_use_cvs=$withval],
   [gt_use_cvs=no])
+AC_ARG_WITH([bzip2],
+  [  --without-bzip2         don't use bzip2 to compress the infrastructure archive],
+  [gt_use_bzip2=$withval],
+  [gt_use_bzip2=maybe])
+AC_ARG_WITH([xz],
+  [  --without-xz            don't use xz to compress the infrastructure archive],
+  [gt_use_xz=$withval],
+  [gt_use_xz=maybe])
 # The CVS format is deprecated, because "cvs init" does not work in all
 # circumstances
 # (see <http://lists.gnu.org/archive/html/bug-cvs/2010-05/msg00003.html>)
 # and we are not allowed to distribute the cvs infrastructure files ourselves
 # (see <http://lists.gnu.org/archive/html/bug-cvs/2010-06/msg00011.html>).
-if test "$gt_use_git" != no && test "$gt_use_git" != maybe; then
-  # --with-git is specified. Even if --with-cvs is also specified, we use the
-  # git format.
-  ARCHIVE_FORMAT=git
+#
+# With the archive from version 0.18.1, we can observe the following
+# compression rates:
+#    Size           File
+#  16916480   archive.dir.tar
+#   3528757   archive.dir.tar.gz
+#   2621440   archive.cvs.tar
+#   2082492   archive.dir.tar.bz2
+#    696320   archive.git.tar
+#    599046   archive.git.tar.bz2
+#    592989   archive.git.tar.gz
+#    588124   archive.git.tar.xz
+#    457190   archive.cvs.tar.gz
+#    335808   archive.cvs.tar.bz2
+#    308880   archive.dir.tar.xz
+#    299124   archive.cvs.tar.xz
+# Among these:
+#   - We don't offer the uncompressed ones, because at least gzip can be
+#     assumed to be present everywhere.
+#   - Among archive.git.tar.*, all have approximately the same size, because
+#     git already compresses most of its repository data. Offer only .gz here.
+#   - Among archive.cvs.tar.*, offer only .gz, for simplicity, since --with-cvs
+#     is deprecated.
+# The remaining ones are:
+#    Size           File            ARCHIVE_FORMAT
+#   3528757   archive.dir.tar.gz      dirgz
+#   2082492   archive.dir.tar.bz2     dirbz2
+#    592989   archive.git.tar.gz      git
+#    457190   archive.cvs.tar.gz      cvs
+#    308880   archive.dir.tar.xz      dirxz
+if test "$gt_use_xz" != no && test "$gt_use_xz" != maybe; then
+  # --with-xz is specified. Even if --with-git or --with-cvs or --with-bzip2 is
+  # also specified, we use the dirxz format.
+  ARCHIVE_FORMAT=dirxz
 else
-  if test "$gt_use_cvs" != no; then
-    # --with-cvs is specified.
-    ARCHIVE_FORMAT=cvs
+  if test "$gt_use_git" != no && test "$gt_use_git" != maybe; then
+    # --with-git is specified. Even if --with-cvs or --with-bzip2 is also
+    # specified, we use the git format.
+    ARCHIVE_FORMAT=git
   else
-    # Neither --with-git nor --with-cvs is specified.
+    if test "$gt_use_cvs" != no; then
+      # --with-cvs is specified. Even if --with-bzip2 is also specified, we use
+      # the cvs format.
+      ARCHIVE_FORMAT=cvs
+    else
+      if test "$gt_use_bzip2" != no && test "$gt_use_bzip2" != maybe; then
+        # --with-bzip2 is specified. We use the dirbz2 format.
+        ARCHIVE_FORMAT=dirbz2
+      else
+        # Neither --with-git nor --with-cvs nor --with-bzip2 nor --with-xz is
+        # specified. Determine which programs are present.
+        if test "$gt_use_xz" != no \
+           && (xz --version) >/dev/null 2>&1 \
+           && xz --version | grep lzma >/dev/null; then
+          # --without-xz is not specified, and the xz program exists.
+          ARCHIVE_FORMAT=dirxz
+        else
+          # --without-xz is specified, or the xz program is missing.
 changequote(,)dnl
-    if test "$gt_use_git" != no \
-       && (git --version) >/dev/null 2>&1 \
-       && { case `git --version | sed -e 's/^[^0-9]*//'` in
-              0.* | 1.[0-5].*) false ;;
-              *) true ;;
-            esac
-          }; then
+          if test "$gt_use_git" != no \
+             && (git --version) >/dev/null 2>&1 \
+             && { case `git --version | sed -e 's/^[^0-9]*//'` in
+                    0.* | 1.[0-5].*) false ;;
+                    *) true ;;
+                  esac
+                }; then
 changequote([,])dnl
-      # --without-git is not specified, and the git program exists
-      # in version 1.6 or newer. Use git format.
-      ARCHIVE_FORMAT=git
-    else
-      # --without-git is specified, or the git program is missing.
-      ARCHIVE_FORMAT=dir
+            # --without-git is not specified, and the git program exists
+            # in version 1.6 or newer. Use git format.
+            ARCHIVE_FORMAT=git
+          else
+            # --without-git is specified, or the git program is missing.
+changequote(,)dnl
+            if test "$gt_use_bzip2" != no \
+               && (: | bzip2 --version) >/dev/null 2>&1 \
+               && { sed_bzip2_version1='s/ \([0-9][0-9.]*\).*/ \1/'
+                    sed_bzip2_version2='s/^.* //'
+                    case `(: | bzip2 --version) 2>&1 \
+                          | sed -e 1q \
+                          | sed -e "$sed_bzip2_version1" -e "$sed_bzip2_version2"` in
+                      0.*) false ;;
+                      *) true ;;
+                    esac
+                  }; then
+changequote([,])dnl
+              # --without-bzip2 is not specified, and the bzip2 program exists
+              # in version 1.0 or newer. Use dirbz2 format.
+              ARCHIVE_FORMAT=dirbz2
+            else
+              # --without-bzip2 is specified, or the bzip2 program is missing.
+              ARCHIVE_FORMAT=dirgz
+            fi
+          fi
+        fi
+      fi
     fi
   fi
 fi
index a805edca81ddda43b19913cdf748d27850ad3cff..1aeaeb3b92fb0dcbca43f888d9e2dece635ba70f 100644 (file)
@@ -1,3 +1,24 @@
+2010-06-06  Bruno Haible  <bruno@clisp.org>
+
+       New options --with-xz and --with-bzip2 for compressing the archive.
+       * autopoint.in: Handle the archive formats dirgz, dirbz2, dirxz instead
+       of dir.
+       * convert-archive.in: Handle the archive formats dirgz, dirbz2, dirxz
+       like dir. Format 'dir' is now without compression.
+       * Makefile.am (MOSTLYCLEANFILES): New variable.
+       (CLEANFILES): Add archive.dir.tar.gz, archive.dir.tar.bz2,
+       archive.dir.tar.xz.
+       (EXTRA_DIST): Add archive.dir.tar. Remove archive.dir.tar.gz.
+       (ARCHIVE_dirgz, ARCHIVE_dirbz2, ARCHIVE_dirxz, ARCHIVE_git,
+       ARCHIVE_cvs): New variables.
+       (gettextsrc_DATA): Use them.
+       (archive.dir.tar): Renamed from archive.dir.tar.gz. Look for an
+       installed .tar.bzip2 or .tar.xz as well.
+       (archive.dir.tar.gz, archive.dir.tar.bz2, archive.dir.tar.xz): New
+       rules.
+       (archive.git.tar.gz, archive.cvs.tar.gz): Update.
+       * add-to-archive: Read and write an uncompressed archive.dir.tar.
+
 2010-06-06  Bruno Haible  <bruno@clisp.org>
 
        Make 'convert-archive' less verbose.
index 4147e18c14c06c6c62d339deba30adf68110ba41..1c30157ffb852fd284e6079f83cf4e5f714c397c 100644 (file)
@@ -18,6 +18,7 @@
 
 AUTOMAKE_OPTIONS = 1.2 gnits
 EXTRA_DIST =
+MOSTLYCLEANFILES =
 CLEANFILES =
 DISTCLEANFILES =
 
@@ -28,38 +29,87 @@ bin_SCRIPTS = gettextize autopoint
 
 DISTCLEANFILES += gettextize autopoint convert-archive
 
-CLEANFILES += archive.cvs.tar.gz archive.git.tar.gz
+CLEANFILES += \
+  archive.dir.tar.gz \
+  archive.dir.tar.bz2 \
+  archive.dir.tar.xz \
+  archive.cvs.tar.gz \
+  archive.git.tar.gz
 
-EXTRA_DIST += add-to-archive cvsuser.c archive.dir.tar.gz
+EXTRA_DIST += add-to-archive cvsuser.c archive.dir.tar
 
 gettextsrcdir = $(datadir)/gettext
-gettextsrc_DATA = archive.@ARCHIVE_FORMAT@.tar.gz
+gettextsrc_DATA = $(ARCHIVE_@ARCHIVE_FORMAT@)
+ARCHIVE_dirgz = archive.dir.tar.gz
+ARCHIVE_dirbz2 = archive.dir.tar.bz2
+ARCHIVE_dirxz = archive.dir.tar.xz
+ARCHIVE_git = archive.git.tar.gz
+ARCHIVE_cvs = archive.cvs.tar.gz
 
-# The archive.dir.tar.gz is not in the CVS. Alpha-testers must use the one from
+# The archive.dir.tar is not in the CVS. Alpha-testers must use the one from
 # an already installed release.
-archive.dir.tar.gz:
+archive.dir.tar:
        if test -f $(gettextsrcdir)/archive.dir.tar.gz; then \
-         cp -p $(gettextsrcdir)/archive.dir.tar.gz $@; \
+         gzip -d -c < $(gettextsrcdir)/archive.dir.tar.gz > $@-t && mv $@-t $@; \
        else \
-         echo "archive.dir.tar.gz is not under version control. Please copy the archive.dir.tar.gz from an already installed release to gettext-tools/misc/." 1>&2; \
-         exit 1; \
+         if test -f $(gettextsrcdir)/archive.dir.tar.bz2; then \
+           bzip2 -d -c < $(gettextsrcdir)/archive.dir.tar.bz2 > $@-t && mv $@-t $@; \
+         else \
+           if test -f $(gettextsrcdir)/archive.dir.tar.xz; then \
+             xz -d -c < $(gettextsrcdir)/archive.dir.tar.xz > $@-t && mv $@-t $@; \
+           else \
+             echo "archive.dir.tar is not under version control. Please copy the archive.dir.tar.{gz,bz2,xz} from an already installed release to gettext-tools/misc/ and decompress it there." 1>&2; \
+             exit 1; \
+           fi; \
+         fi; \
        fi
+MOSTLYCLEANFILES += archive.dir.tar-t
 
-# The archive.git.tar.gz is generated from archive.dir.tar.gz.
-archive.git.tar.gz: archive.dir.tar.gz
-       if test -f archive.dir.tar.gz; then \
-         inputfile=archive.dir.tar.gz; \
+# The archive.dir.tar.gz is generated from archive.dir.tar.
+archive.dir.tar.gz: archive.dir.tar
+       if test -f archive.dir.tar; then \
+         inputfile=archive.dir.tar; \
        else \
-         inputfile='$(srcdir)'/archive.dir.tar.gz; \
+         inputfile='$(srcdir)'/archive.dir.tar; \
+       fi; \
+       gzip -c -9 < "$$inputfile" > $@-t && mv $@-t $@
+MOSTLYCLEANFILES += archive.dir.tar.gz-t
+
+# The archive.dir.tar.bz2 is generated from archive.dir.tar.
+archive.dir.tar.bz2: archive.dir.tar
+       if test -f archive.dir.tar; then \
+         inputfile=archive.dir.tar; \
+       else \
+         inputfile='$(srcdir)'/archive.dir.tar; \
+       fi; \
+       bzip2 -c -9 < "$$inputfile" > $@-t && mv $@-t $@
+MOSTLYCLEANFILES += archive.dir.tar.bz2-t
+
+# The archive.dir.tar.xz is generated from archive.dir.tar.
+archive.dir.tar.xz: archive.dir.tar
+       if test -f archive.dir.tar; then \
+         inputfile=archive.dir.tar; \
+       else \
+         inputfile='$(srcdir)'/archive.dir.tar; \
+       fi; \
+       xz -c -5 < "$$inputfile" > $@-t && mv $@-t $@
+MOSTLYCLEANFILES += archive.dir.tar.xz-t
+
+# The archive.git.tar.gz is generated from archive.dir.tar.
+archive.git.tar.gz: archive.dir.tar
+       if test -f archive.dir.tar; then \
+         inputfile=archive.dir.tar; \
+       else \
+         inputfile='$(srcdir)'/archive.dir.tar; \
        fi; \
        ./convert-archive dir git "$$inputfile" $@
 
-# The archive.cvs.tar.gz is generated from archive.dir.tar.gz.
-archive.cvs.tar.gz: archive.dir.tar.gz
-       if test -f archive.dir.tar.gz; then \
-         inputfile=archive.dir.tar.gz; \
+# The archive.cvs.tar.gz is generated from archive.dir.tar.
+archive.cvs.tar.gz: archive.dir.tar
+       if test -f archive.dir.tar; then \
+         inputfile=archive.dir.tar; \
        else \
-         inputfile='$(srcdir)'/archive.dir.tar.gz; \
+         inputfile='$(srcdir)'/archive.dir.tar; \
        fi; \
        ./convert-archive dir cvs "$$inputfile" $@
 
index 61b8da502e711212e3611680b677e7141d409fa4..ccc7f4676376cd1373959189e7a15b76135c37ac 100755 (executable)
@@ -18,7 +18,7 @@
 
 # Usage: add-to-archive /somewhere/gettext-0.xx.yy.tar.gz
 # Adds the infrastructure files for gettext version 0.xx.yy to the reposutory
-# in the archive.dir.tar.gz file.
+# in the archive.dir.tar file.
 
 if test $# != 1; then
   echo "Usage: add-to-archive /somewhere/gettext-0.xx.yy.tar.gz"
@@ -87,10 +87,10 @@ work_archive=`pwd`/"$work_dir/archive"
 
 # Add the contents of this directory to the repository.
 mkdir autopoint-files
-(cd autopoint-files && tar xfz ../archive.dir.tar.gz)
+(cd autopoint-files && tar xf ../archive.dir.tar)
 mkdir autopoint-files/$pack_ver
 (cd "$work_archive" && tar cf - .) | (cd autopoint-files/$pack_ver && tar xf -)
-(cd autopoint-files && tar cfz ../archive.dir.tar.gz --owner=root --group=root *)
+(cd autopoint-files && tar cf ../archive.dir.tar --owner=root --group=root *)
 
 # Clean up.
 rm -rf autopoint-files
index 4de582a81dd531e2bc32e4edaec14bd58cc644e5..48f661df069183829f08da33d549d71b82fe107c 100644 (file)
@@ -387,10 +387,15 @@ mkdir "$work_dir" || {
 # -------+-----------------------------+--------------------+
 
 case "@ARCHIVE_FORMAT@" in
-  dir)
-    # The archive of different versions is very large, but using it does not
-    # require special tools.
-    gzip -d -c < "$gettext_dir/archive.dir.tar.gz" | (cd "$work_dir" && tar xf - "gettext-$ver")
+  dir*)
+    # The archive of different versions is very large (unless xz compression is
+    # used), but using it does not require special tools.
+    case "@ARCHIVE_FORMAT@" in
+      dirgz) gzip -d -c < "$gettext_dir/archive.dir.tar.gz" ;;
+      dirbz2) bzip2 -d -c < "$gettext_dir/archive.dir.tar.bz2" ;;
+      dirxz) xz -d -c < "$gettext_dir/archive.dir.tar.xz" ;;
+    esac \
+      | (cd "$work_dir" && tar xf - "gettext-$ver")
     if test `find "$work_dir" -type f -print | wc -l` = 0; then
       rm -rf "$work_dir"
       func_fatal_error "infrastructure files for version $ver not found; this is autopoint from GNU $package $version"
index f874781c68334b3b5fae686fef2bae0a8bccff30..0088576bf7918601d731c730838bc83bf1faa62e 100644 (file)
@@ -17,8 +17,8 @@
 #
 
 # Usage: convert-archive FROM TO [FROMFILE [TOFILE]]
-# where FROM is dir or cvs or git
-# and   TO   is dir or cvs or git
+# where FROM is dir or dirgz or dirbz2 or dirxz or cvs or git
+# and   TO   is dir or dirgz or dirbz2 or dirxz or cvs or git
 # This will read FROMFILE (default: archive.$FROM.tar.gz)
 # and produce TOFILE (default: archive.$TO.tar.gz).
 
@@ -89,8 +89,15 @@ mkdir "$unpacked" || {
 
 # Unpack the original archive.
 case "$from" in
-  dir)
-    gzip -d -c < "$fromfile" | (cd "$unpacked" && tar xf -) \
+  dir*)
+    { case "$from" in
+        dir) cat < "$fromfile" ;;
+        dirgz) gzip -d -c < "$fromfile" ;;
+        dirbz2) bzip2 -d -c < "$fromfile" ;;
+        dirxz) xz -d -c < "$fromfile" ;;
+      esac
+    } \
+      | (cd "$unpacked" && tar xf -) \
       || func_fatal_error "file copy failed"
     ;;
 
@@ -234,9 +241,15 @@ done
 
 # Create the target archive.
 case "$to" in
-  dir)
+  dir*)
     (cd "$unpacked" && $TAR cf - $TAR_OPTIONS *) \
-      | gzip -c -9 > "$tofile" \
+      | { case "$to" in
+            dir) cat > "$tofile" ;;
+            dirgz) gzip -c -9 > "$tofile" ;;
+            dirbz2) bzip2 -c -9 > "$tofile" ;;
+            dirxz) xz -c -5 > "$tofile" ;;
+          esac
+        } \
       || func_fatal_error "archive creation failed"
     ;;