[PATCH] dist: add dist-zstd option

Giuseppe Scrivano <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <[email protected]>
add support for using the zstd compression algorithm.

* bin/automake.in (handle_dist): add zstd to the list of known dist-
suffixes.
(preprocess_file): transform ZSTD to option dist-zstd.

* doc/automake.texi: document the new option.

* lib/Automake/Options.pm (_is_valid_easy_option): add dist-zstd.

* lib/am/distdir.am (dist-zstd): new rule.
(?ZSTD?DIST_TARGETS): add definition.
(distcheck): test *.tar.zstd*.

* NEWS: Mention the change

Signed-off-by: Giuseppe Scrivano <[email protected]>
---
 NEWS                    | 5 +++++
 bin/automake.in         | 3 ++-
 doc/automake.texi       | 7 +++++++
 lib/Automake/Options.pm | 1 +
 lib/am/distdir.am       | 9 +++++++++
 5 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 8bb57133f..2f5102d53 100644
--- a/NEWS
+++ b/NEWS
@@ -64,6 +64,11 @@
 
 New in ?.?.?:
 
+* New features added
+
+  - the `zstd' compression scheme and associate automake option `dist-zstd'
+    are added.
+
 * Miscellaneous changes
 
   - automake no longer requires a @setfilename in each .texi file
diff --git a/bin/automake.in b/bin/automake.in
index 06f4ee9b2..67a7a9578 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -3806,7 +3806,7 @@ sub handle_dist ()
     {
       my $archive_defined = option 'no-dist-gzip' ? 0 : 1;
       $archive_defined ||=
-	grep { option "dist-$_" } qw(shar zip tarZ bzip2 lzip xz);
+	grep { option "dist-$_" } qw(shar zip tarZ bzip2 lzip xz zstd);
       error (option 'no-dist-gzip',
 	     "no-dist-gzip specified but no dist-* specified,\n"
 	     . "at least one archive format must be enabled")
@@ -6788,6 +6788,7 @@ sub preprocess_file
 		 'GZIP'        =>  ! option 'no-dist-gzip',
 		 'SHAR'        => !! option 'dist-shar',
 		 'ZIP'         => !! option 'dist-zip',
+		 'ZSTD'        => !! option 'dist-zstd',
 
 		 'INSTALL-INFO' =>  ! option 'no-installinfo',
 		 'INSTALL-MAN'  =>  ! option 'no-installman',
diff --git a/doc/automake.texi b/doc/automake.texi
index 702f76e2e..1552e0e21 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -8750,6 +8750,13 @@ It and the corresponding functionality will be removed altogether
 in Automake 2.0.
 @trindex dist-shar
 
+@vindex ZSTD_OPT
+@item @code{dist-zstd}
+Generate an @samp{zstd} tar archive of the distribution.  By default, this
+rule makes @samp{zstd} use a compression option of @option{--ultra -22}.  To
+make it use a different one, set the @env{ZSTD_OPT} environment variable.
+@trindex dist-zstd
+
 @end table
 
 The rule @code{dist} (and its historical synonym @code{dist-all})
diff --git a/lib/Automake/Options.pm b/lib/Automake/Options.pm
index 8a1adc9ff..ff4568f14 100644
--- a/lib/Automake/Options.pm
+++ b/lib/Automake/Options.pm
@@ -277,6 +277,7 @@ sub _is_valid_easy_option ($)
     dist-lzip
     dist-xz
     dist-zip
+    dist-zstd
     info-in-builddir
     no-define
     no-dependencies
diff --git a/lib/am/distdir.am b/lib/am/distdir.am
index 47974922f..603b78a74 100644
--- a/lib/am/distdir.am
+++ b/lib/am/distdir.am
@@ -350,6 +350,12 @@ dist-xz: distdir
 	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
 	$(am__post_remove_distdir)
 
+?ZSTD?DIST_ARCHIVES += $(distdir).tar.zstd
+.PHONY: dist-zstd
+dist-zstd: distdir
+	tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_OPT---ultra -22} >$(distdir).tar.zstd
+	$(am__post_remove_distdir)
+
 ?COMPRESS?DIST_ARCHIVES += $(distdir).tar.Z
 .PHONY: dist-tarZ
 dist-tarZ: distdir
@@ -381,6 +387,7 @@ dist-zip: distdir
 ?BZIP2?DIST_TARGETS += dist-bzip2
 ?GZIP?DIST_TARGETS += dist-gzip
 ?ZIP?DIST_TARGETS += dist-zip
+?ZSTD?DIST_TARGETS += dist-zstd
 ?COMPRESS?DIST_TARGETS += dist-tarZ
 
 endif %?TOPDIR_P%
@@ -438,6 +445,8 @@ distcheck: dist
 	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
+	*.tar.zstd*) \
+	  zstd -d $(distdir).tar.zstd | $(am__untar) ;;\
 	esac
 ## Make the new source tree read-only.  Distributions ought to work in
 ## this case.  However, make the top-level directory writable so we
-- 
2.21.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.