From 064a5e854492b8df4715a2e20932b6cee3da56af Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 22 Apr 2018 13:20:29 -0700 Subject: [PROPOSED 1/2] Automate building of rearguard tarball Change 'make tarballs' to also output a rearguard-format tarball; see: https://mm.icann.org/pipermail/tz/2018-February/026204.html Improve on the earlier suggestion by marking the tarball as rearguard, and by making far fewer changes to the traditional files. * Makefile (TRADITIONAL_ASC, ALL_ASC): New macros. (tarballs_version, signatures_version): Also build rearguard tarball and sig. (traditional_signatures_version): Use new macros. (tzdata$(VERSION)-rearguard.tar.gz): (tzdata$(VERSION)-rearguard.tar.gz.asc): New rules. ($(ALL_ASC)): Simplify by using one gpg rule for all targets. * NEWS: Mention change. * ziguard.awk: Work on individual files, too. (dataform_type): Rename from dst_type. Index is now just the dataform. All uses changed. (BEGIN): Take type from DATAFORM, not outfile. All uses changed. --- Makefile | 46 ++++++++++++++++++++++++++++++++++++---------- NEWS | 11 +++++++++++ ziguard.awk | 14 +++++++------- 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 2365d7c..3ac1a67 100644 --- a/Makefile +++ b/Makefile @@ -560,8 +560,8 @@ version: $(VERSION_DEPS) # These files can be tailored by setting BACKWARD, PACKRATDATA, etc. vanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS) - $(AWK) -v outfile='$@' -f ziguard.awk $(TDATA) $(PACKRATDATA) \ - >$@.out + $(AWK) -v DATAFORM=`expr $@ : '\(.*\).zi'` -f ziguard.awk \ + $(TDATA) $(PACKRATDATA) >$@.out mv $@.out $@ tzdata.zi: $(DATAFORM).zi version version=`sed 1q version` && \ @@ -901,6 +901,13 @@ check_time_t_alternatives: done rm -fr time_t.dir +TRADITIONAL_ASC = \ + tzcode$(VERSION).tar.gz.asc \ + tzdata$(VERSION).tar.gz.asc +ALL_ASC = $(TRADITIONAL_ASC) \ + tzdata$(VERSION)-rearguard.tar.gz.asc \ + tzdb-$(VERSION).tar.lz.asc + tarballs traditional_tarballs signatures traditional_signatures: version VERSION=`cat version` && \ $(MAKE) VERSION="$$VERSION" $@_version @@ -908,12 +915,13 @@ tarballs traditional_tarballs signatures traditional_signatures: version # These *_version rules are intended for use if VERSION is set by some # other means. Ordinarily these rules are used only by the above # non-_version rules, which set VERSION on the 'make' command line. -tarballs_version: traditional_tarballs_version tzdb-$(VERSION).tar.lz +tarballs_version: traditional_tarballs_version \ + tzdata$(VERSION)-rearguard.tar.gz \ + tzdb-$(VERSION).tar.lz traditional_tarballs_version: \ tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz -signatures_version: traditional_signatures_version tzdb-$(VERSION).tar.lz.asc -traditional_signatures_version: \ - tzcode$(VERSION).tar.gz.asc tzdata$(VERSION).tar.gz.asc \ +signatures_version: $(ALL_ASC) +traditional_signatures_version: $(TRADITIONAL_ASC) tzcode$(VERSION).tar.gz: set-timestamps.out LC_ALL=C && export LC_ALL && \ @@ -928,6 +936,26 @@ tzdata$(VERSION).tar.gz: set-timestamps.out gzip $(GZIPFLAGS) >$@.out mv $@.out $@ +tzdata$(VERSION)-rearguard.tar.gz: rearguard.zi set-timestamps.out + rm -fr tzdata$(VERSION)-rearguard.dir + mkdir tzdata$(VERSION)-rearguard.dir + ln $(COMMON) $(DATA) $(MISC) tzdata$(VERSION)-rearguard.dir + cd tzdata$(VERSION)-rearguard.dir && \ + rm -f $(TDATA) $(PACKRATDATA) version + for f in $(TDATA) $(PACKRATDATA); do \ + rearf=tzdata$(VERSION)-rearguard.dir/$$f; \ + $(AWK) -v DATAFORM=rearguard -f ziguard.awk $$f >$$rearf && \ + touch -cmr `ls -t ziguard.awk $$f` $$rearf || exit; \ + done + sed '1s/$$/-rearguard/' \ + tzdata$(VERSION)-rearguard.dir/version + touch -cmr version tzdata$(VERSION)-rearguard.dir/version + LC_ALL=C && export LC_ALL && \ + (cd tzdata$(VERSION)-rearguard.dir && \ + tar $(TARFLAGS) -cf - $(COMMON) $(DATA) $(MISC) | \ + gzip $(GZIPFLAGS)) >$@.out + mv $@.out $@ + tzdb-$(VERSION).tar.lz: set-timestamps.out rm -fr tzdb-$(VERSION) mkdir tzdb-$(VERSION) @@ -938,12 +966,10 @@ tzdb-$(VERSION).tar.lz: set-timestamps.out mv $@.out $@ tzcode$(VERSION).tar.gz.asc: tzcode$(VERSION).tar.gz - gpg --armor --detach-sign $? - tzdata$(VERSION).tar.gz.asc: tzdata$(VERSION).tar.gz - gpg --armor --detach-sign $? - +tzdata$(VERSION)-rearguard.tar.gz.asc: tzdata$(VERSION)-rearguard.tar.gz tzdb-$(VERSION).tar.lz.asc: tzdb-$(VERSION).tar.lz +$(ALL_ASC): gpg --armor --detach-sign $? typecheck: diff --git a/NEWS b/NEWS index 13652fc..772a762 100644 --- a/NEWS +++ b/NEWS @@ -4,8 +4,19 @@ Unreleased, experimental changes Briefly: + 'make tarballs' now also builds a rearguard tarball. New 's' and 'd' suffixes in SAVE columns of Rule and Zone lines. + Changes to build procedure + + The command 'make tarballs' now also builds the tarball + tzdataVERSION-rearguard.tar.gz, which is like tzdataVERSION.tar.gz + except that it uses rearguard format intended for trailing-edge + data parsers. Although the two tarballs currently are the same + except for version, they will differ more when negative DST + offsets are moved from vanguard to main format, since rearguard + format will continue to avoid negative DST offsets. + Changes to data format and to code The SAVE column of Rule and Zone lines can now have an 's' or 'd' diff --git a/ziguard.awk b/ziguard.awk index dbe64d6..42e2910 100644 --- a/ziguard.awk +++ b/ziguard.awk @@ -13,18 +13,18 @@ # rearguard format. BEGIN { - dst_type["vanguard.zi"] = 1 - dst_type["main.zi"] = 1 - dst_type["rearguard.zi"] = 1 + dataform_type["vanguard"] = 1 + dataform_type["main"] = 1 + dataform_type["rearguard"] = 1 - # The command line should set OUTFILE to the name of the output file. - if (!dst_type[outfile]) exit 1 - vanguard = outfile == "vanguard.zi" + # The command line should set DATAFORM. + if (!dataform_type[DATAFORM]) exit 1 + vanguard = DATAFORM == "vanguard" } /^Zone/ { zone = $2 } -outfile != "main.zi" { +DATAFORM != "main" { in_comment = /^#/ uncomment = comment_out = 0 -- 2.7.4