This largely affects just the release process, not the generated tarballs. * NEWS: Document this. * Makefile (VERSION): Now 'unknown', since it is overrridden. (SOURCES): Add 'version'. (VERSION_DEPS): New macro. (version): New rule. (version.h, tzselect): Use 'version' file, instead of $(VERSION). (maintainer-clean): Remove 'version'. (set-timestamps.out): Set the timestamp of 'version'. (tarballs, signatures): Set VERSION to it before doing the real work. (tarballs_version, signatures_version): New rules, with the old definiens of 'tarballs' and 'signatures'. (tzdb-$(VERSION).tar.lz): Simplify by using ENCHILADA. --- Makefile | 59 +++++++++++++++++++++++++++++++++++++++++++++-------------- NEWS | 25 ++++++++++++++++++------- 2 files changed, 63 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 9692a1d..79b4cdb 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ # Package name for the code distribution. PACKAGE= tzcode -# Version numbers of the code and data distributions. -VERSION= 2016f +# Version number for the distribution, overridden in the 'tarballs' rule below. +VERSION= unknown # Email address for bug reports. BUGEMAIL= tz@iana.org @@ -356,7 +356,7 @@ HEADERS= tzfile.h private.h NONLIBSRCS= zic.c zdump.c NEWUCBSRCS= date.c strftime.c SOURCES= $(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) \ - tzselect.ksh workman.sh + tzselect.ksh version workman.sh MANS= newctime.3 newstrftime.3 newtzset.3 time2posix.3 \ tzfile.5 tzselect.8 zic.8 zdump.8 MANTXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \ @@ -385,6 +385,26 @@ TZS_DEPS= $(PRIMARY_YDATA) asctime.c localtime.c \ private.h tzfile.h zdump.c zic.c ENCHILADA= $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC) $(TZS) +# Consult these files when deciding whether to rebuild the 'version' file. +# This list is not the same as the output of 'git ls-files', since +# .gitignore is not distributed. +VERSION_DEPS= \ + CONTRIBUTING LICENSE Makefile NEWS README Theory \ + africa antarctica asctime.c asia australasia \ + backward backzone \ + checklinks.awk checktab.awk \ + date.1 date.c difftime.c \ + etcetera europe factory iso3166.tab \ + leap-seconds.list leapseconds.awk localtime.c \ + newctime.3 newstrftime.3 newtzset.3 northamerica \ + pacificnew private.h \ + southamerica strftime.c systemv \ + time2posix.3 tz-art.htm tz-how-to.html tz-link.htm \ + tzfile.5 tzfile.h tzselect.8 tzselect.ksh \ + workman.sh yearistype.sh \ + zdump.8 zdump.c zic.8 zic.c \ + zone.tab zone1970.tab zoneinfo2tdf.pl + # And for the benefit of csh users on systems that assume the user # shell should be used to handle commands in Makefiles. . . @@ -413,9 +433,16 @@ INSTALL: ALL install date.1 cp date $(DESTDIR)$(BINDIR)/. cp -f date.1 $(DESTDIR)$(MANDIR)/man1/. -version.h: +version: $(VERSION_DEPS) + { V=$$(git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \ + --abbrev=7 --dirty) || \ + V=$(VERSION); } && \ + printf '%s\n' "$$V" >$@ + +version.h: version (echo 'static char const PKGVERSION[]="($(PACKAGE)) ";' && \ - echo 'static char const TZVERSION[]="$(VERSION)";' && \ + printf 'static char const TZVERSION[]="%s";\n' \ + "$$(cat version)" && \ echo 'static char const REPORT_BUGS_TO[]="$(BUGEMAIL)";') >$@ zdump: $(TZDOBJS) @@ -510,15 +537,15 @@ libtz.a: $(LIBOBJS) date: $(DATEOBJS) $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS) -tzselect: tzselect.ksh +tzselect: tzselect.ksh version sed \ -e 's|#!/bin/bash|#!$(KSHELL)|g' \ -e 's|AWK=[^}]*|AWK=$(AWK)|g' \ -e 's|\(PKGVERSION\)=.*|\1='\''($(PACKAGE)) '\''|' \ -e 's|\(REPORT_BUGS_TO\)=.*|\1=$(BUGEMAIL)|' \ -e 's|TZDIR=[^}]*|TZDIR=$(TZDIR)|' \ - -e 's|\(TZVERSION\)=.*|\1=$(VERSION)|' \ - <$? >$@ + -e 's|\(TZVERSION\)=.*|\1='"$$(cat version)"'|' \ + <$@.ksh >$@ chmod +x $@ check: check_character_set check_white_space check_links check_sorted \ @@ -573,7 +600,7 @@ clean: clean_misc maintainer-clean: clean @echo 'This command is intended for maintainers to use; it' @echo 'deletes files that may need special tools to rebuild.' - rm -f leapseconds $(MANTXTS) $(TZS) *.asc *.tar.* + rm -f leapseconds version $(MANTXTS) $(TZS) *.asc *.tar.* names: @echo $(ENCHILADA) @@ -621,6 +648,7 @@ set-timestamps.out: $(ENCHILADA) exit; \ done touch -cmr $$(ls -t $(TZS_DEPS) | sed 1q) $(TZS) + touch -cmr $$(ls -t $(VERSION_DEPS) | sed 1q) version touch $@ # The zics below ensure that each data file can stand on its own. @@ -672,7 +700,10 @@ check_time_t_alternatives: done rm -fr time_t.dir -tarballs: tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz \ +tarballs signatures: version + $(MAKE) VERSION="$$(cat version)" $@_version + +tarballs_version: tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz \ tzdb-$(VERSION).tar.lz tzcode$(VERSION).tar.gz: set-timestamps.out @@ -689,13 +720,12 @@ tzdata$(VERSION).tar.gz: set-timestamps.out tzdb-$(VERSION).tar.lz: set-timestamps.out rm -fr tzdb-$(VERSION) mkdir tzdb-$(VERSION) - ln $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC) $(TZS) \ - tzdb-$(VERSION) + ln $(ENCHILADA) tzdb-$(VERSION) touch -cmr $$(ls -t tzdb-$(VERSION)/* | sed 1q) tzdb-$(VERSION) LC_ALL=C && export LC_ALL && \ tar $(TARFLAGS) -cf - tzdb-$(VERSION) | lzip -9 > $@ -signatures: tzcode$(VERSION).tar.gz.asc tzdata$(VERSION).tar.gz.asc \ +signatures_version: tzcode$(VERSION).tar.gz.asc tzdata$(VERSION).tar.gz.asc \ tzdb-$(VERSION).tar.lz.asc tzcode$(VERSION).tar.gz.asc: tzcode$(VERSION).tar.gz @@ -736,5 +766,6 @@ zic.o: private.h tzfile.h version.h .PHONY: clean clean_misc force_tzs .PHONY: install install_data maintainer-clean names .PHONY: posix_only posix_packrat posix_right -.PHONY: public right_only right_posix signatures tarballs typecheck +.PHONY: public right_only right_posix signatures signatures_version +.PHONY: tarballs tarballs_version typecheck .PHONY: zonenames zones diff --git a/NEWS b/NEWS index 6cbdbd7..f5a0b13 100644 --- a/NEWS +++ b/NEWS @@ -63,13 +63,24 @@ Unreleased, experimental changes Changes to build procedure - An experimental distribution format is available in the tarball - tzdb-VERSION.tar.lz with signature file tzdb-VERSION.tar.lz.asc. - It unpacks to a top-level directory containing the code and data - of the traditional two-tarball format, along with extra data that - may be useful. The traditional format will continue to be - distributed. (Thanks to Antonio Diaz Diaz, Oscar van Vlijmen, and - many others for comments about the experimental format.) + An experimental distribution format is available, in addition + to the traditional format which will continue to be distributed. + The new format is a tarball tzdb-VERSION.tar.lz with signature + file tzdb-VERSION.tar.lz.asc. It unpacks to a top-level directory + tzdb-VERSION containing the code and data of the traditional + two-tarball format, along with extra data that may be useful. + (Thanks to Antonio Diaz Diaz, Oscar van Vlijmen, and many others + for comments about the experimental format.) + + The release version number is now more accurate in the usual case + where releases are built from a Git repository. For example, if + 23 commits and some working-file changes have been made since + release 2016g, the version number is now something like + '2016g-23-g50556e3-dirty' instead of the misleading '2016g'. + Official releases uses the same version number format as before, + e.g., '2016g'. To support the more-accurate version number, its + specification has moved from a line in the Makefile to a new + source file 'version'. The experimental distribution contains a file to2050.tzs that contains what should be the output of 'zdump -i -c 2050' on -- 2.7.4