summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorStuart Bishop <stuart.bishop@canonical.com>2020-12-25 07:42:52 +1100
committerStuart Bishop <stuart.bishop@canonical.com>2020-12-25 07:42:52 +1100
commitaaef58a8e40d7e6bd70f2d4ce347caa772510e59 (patch)
treef30c29def341fdcb502e575c5a9441e4567a55c2 /Makefile
parenta4a62d8d41eea2df3759cbcdbd9100a72e8c28c7 (diff)
downloadpytz-git-aaef58a8e40d7e6bd70f2d4ce347caa772510e59.tar.gz
Squashed 'tz/' changes from 9c175ec6c..a816a5c4d
efc5c0619 Release 2020e b804a741d Improve doc of zic coalescing zone+DST transitions c8891f390 Cite publication of Volgograd change 316c1598e Correct LMT and pre-1919 transitions for Nigeria 3dcdea78d Fix NEWS typo c983a0fb7 Document zic coalescing zone+DST transitions ce7b1bbc7 Seychelles switched from LMT to +04 on 1907-01-01 b980f1cac Model Turks & Caicos time 2015-2018 as AST ff90fc93a Fix Vanuatu DST in 1973-1974 and 1984 transition 7c7419c6a Volgograd change likely December 27, not 20 0b5ae1fb7 Fix some errors in recent Bahamas changes cd1769fe6 Fix Ghana again, for 1942 through 1946 3831c591e Fix Volgograd label in {zone,zone1970}.tab adf4d8d35 Fix several pre-1946 transitions for Bahamas 0415d0e5f Re-fix Ghana typo for 1919/1920 6e7558f19 Fix Ghana typo for 1919/1920 271d9438b Volgograd switches from +04 to +03 on 12-20 02:00 a499dd6e0 * northamerica: Add URL for Yukon OIC 1980/02 7cc6d7c00 Fix several pre-1957 transitions for Ghana 17acee8cb Fix several pre-1957 transitions for Bermuda 1aca4cad3 Fix several pre-1972 transitions for Australia a47ef9c71 * tz-link.html: Use <abbr> more systematically. 48e68fbfd Document "right" seconds better beba17f43 Fix mistaken Belize interpretation d7e93bdba Fix several Belize transitions 1942/1968 b231fbdb5 Port 'make rearguard_tarballs' to Solaris 10 8b21cc5d2 Fix Israel and Palestine transitions 1940/1985 52ba05422 Fix zone*.tab Yukon comment columns b106a6e84 leapseconds now says why NIST, not IERS eff0719a7 Fix Kenya transitions 1908/1960 78422f077 Use better fallback for unknown $(VERSION) ac029805c * etcetera: Update comment in the light of Neil Fuller’s comments. e4645c40a Port to downstream HP-UX-style ‘make’ git-subtree-dir: tz git-subtree-split: a816a5c4de427cae12477455dea2bc4eb990b2c9
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile57
1 files changed, 43 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 40b81d1..5064a19 100644
--- a/Makefile
+++ b/Makefile
@@ -583,11 +583,19 @@ INSTALL: ALL install date.1
cp date '$(DESTDIR)$(BINDIR)/.'
cp -f date.1 '$(DESTDIR)$(MANDIR)/man1/.'
+# Calculate version number from git, if available.
+# Otherwise, use $(VERSION) unless it is "unknown" and there is already
+# a 'version' file, in which case reuse the existing 'version' contents
+# and append "-dirty" if the contents do not already end in "-dirty".
version: $(VERSION_DEPS)
{ (type git) >/dev/null 2>&1 && \
V=`git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
--abbrev=7 --dirty` || \
- V='$(VERSION)'; } && \
+ if test '$(VERSION)' = unknown && V=`cat $@`; then \
+ case $$V in *-dirty);; *) V=$$V-dirty;; esac; \
+ else \
+ V='$(VERSION)'; \
+ fi; } && \
printf '%s\n' "$$V" >$@.out
mv $@.out $@
@@ -872,11 +880,34 @@ $(MANTXTS): workman.sh
LC_ALL=C sh workman.sh `expr $@ : '\(.*\)\.txt$$'` >$@.out
mv $@.out $@
+# Set file timestamps deterministically if possible,
+# so that tarballs containing the timestamps are reproducible.
+#
+# '$(SET_TIMESTAMP_N) N DEST A B C ...' sets the timestamp of the
+# file DEST to the maximum of the timestamps of the files A B C ...,
+# plus N if GNU ls and touch are available.
+SET_TIMESTAMP_N = sh -c '\
+ n=$$0 dest=$$1; shift; \
+ touch -cmr `ls -t "$$@" | sed 1q` "$$dest" && \
+ if test $$n != 0 && \
+ lsout=`ls -n --time-style="+%s" "$$dest" 2>/dev/null`; then \
+ set x $$lsout && \
+ touch -cmd @`expr $$7 + $$n` "$$dest"; \
+ else :; fi'
+# If DEST depends on A B C ... in this Makefile, callers should use
+# $(SET_TIMESTAMP_DEP) DEST A B C ..., for the benefit of any
+# downstream 'make' that considers equal timestamps to be out of date.
+# POSIX allows this 'make' behavior, and HP-UX 'make' does it.
+# If all that matters is that the timestamp be reproducible
+# and plausible, use $(SET_TIMESTAMP).
+SET_TIMESTAMP = $(SET_TIMESTAMP_N) 0
+SET_TIMESTAMP_DEP = $(SET_TIMESTAMP_N) 1
+
# Set the timestamps to those of the git repository, if available,
# and if the files have not changed since then.
-# This uses GNU 'touch' syntax 'touch -d@N FILE',
-# where N is the number of seconds since 1970.
-# If git or GNU 'touch' is absent, don't bother to sync with git timestamps.
+# This uses GNU 'ls --time-style=+%s', which outputs the seconds count,
+# and GNU 'touch -d@N FILE', where N is the number of seconds since 1970.
+# If git or GNU is absent, don't bother to sync with git timestamps.
# Also, set the timestamp of each prebuilt file like 'leapseconds'
# to be the maximum of the files it depends on.
set-timestamps.out: $(EIGHT_YARDS)
@@ -894,16 +925,16 @@ set-timestamps.out: $(EIGHT_YARDS)
fi || exit; \
done; \
fi
- touch -cmr `ls -t $(LEAP_DEPS) | sed 1q` leapseconds
+ $(SET_TIMESTAMP_DEP) leapseconds $(LEAP_DEPS)
for file in `ls $(MANTXTS) | sed 's/\.txt$$//'`; do \
- touch -cmr `ls -t $$file workman.sh | sed 1q` $$file.txt || \
+ $(SET_TIMESTAMP_DEP) $$file.txt $$file workman.sh || \
exit; \
done
- touch -cmr `ls -t $(TZDATA_ZI_DEPS) | sed 1q` tzdata.zi
- touch -cmr `ls -t $(VERSION_DEPS) | sed 1q` version
+ $(SET_TIMESTAMP_DEP) version $(VERSION_DEPS)
+ $(SET_TIMESTAMP_DEP) tzdata.zi $(TZDATA_ZI_DEPS)
touch $@
set-tzs-timestamp.out: $(TZS)
- touch -cmr `ls -t $(TZS_DEPS) | sed 1q` $(TZS)
+ $(SET_TIMESTAMP_DEP) $(TZS) $(TZS_DEPS)
touch $@
# The zics below ensure that each data file can stand on its own.
@@ -981,7 +1012,7 @@ tarballs rearguard_tarballs traditional_tarballs \
signatures rearguard_signatures traditional_signatures: \
version set-timestamps.out rearguard.zi
VERSION=`cat version` && \
- $(MAKE) VERSION="$$VERSION" $@_version
+ $(MAKE) AWK='$(AWK)' VERSION="$$VERSION" $@_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
@@ -1018,7 +1049,7 @@ tzdata$(VERSION)-rearguard.tar.gz: rearguard.zi set-timestamps.out
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; \
+ $(SET_TIMESTAMP_DEP) $$rearf ziguard.awk $$f || exit; \
done
sed '1s/$$/-rearguard/' \
<version >tzdata$(VERSION)-rearguard.dir/version
@@ -1037,7 +1068,7 @@ tzdb-$(VERSION).tar.lz: set-timestamps.out set-tzs-timestamp.out
rm -fr tzdb-$(VERSION)
mkdir tzdb-$(VERSION)
ln $(ENCHILADA) tzdb-$(VERSION)
- touch -cmr `ls -t tzdb-$(VERSION)/* | sed 1q` tzdb-$(VERSION)
+ $(SET_TIMESTAMP) tzdb-$(VERSION) tzdb-$(VERSION)/*
LC_ALL=C && export LC_ALL && \
tar $(TARFLAGS) -cf - tzdb-$(VERSION) | lzip -9 >$@.out
mv $@.out $@
@@ -1079,8 +1110,6 @@ strftime.o: private.h tzfile.h
zdump.o: version.h
zic.o: private.h tzfile.h version.h
-.KEEP_STATE:
-
.PHONY: ALL INSTALL all
.PHONY: check check_time_t_alternatives
.PHONY: check_web check_zishrink