[tz] [PROPOSED PATCH 3/3] Use more-accurate release numbers
Paul Eggert
eggert at cs.ucla.edu
Tue Sep 6 04:24:40 UTC 2016
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 at 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
More information about the tz
mailing list