tzdata/backport-Port-to-downstream-HP-UX-style-make.patch
2020-10-27 11:27:13 +08:00

113 lines
4.8 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From e4645c40a0a967149a5161ca2959f8c7e9027a79 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Thu, 22 Oct 2020 12:35:30 -0700
Subject: [PATCH 1/6] =?UTF-8?q?Port=20to=20downstream=20HP-UX-style=20?=
=?UTF-8?q?=E2=80=98make=E2=80=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
HP-UX make considers a target to be out-of-date if its timestamp
equals that of a dependency, and POSIX allows this make behavior.
So, when putting timestamps on files in tarballs, add 1 to a
files timestamp if it depends on some other file with the same
timestamp. That way, when someone unpackages a tarball on an
HP-UX host, its make will avoid rebuilding files like version
that are up-to-date in the tarball.
* Makefile (SET_TIMESTAMP_N, SET_TIMESTAMP, SET_TIMESTAMP_DEP):
New macros.
(set-timestamps.out, set-tzs-timestamp.out)
(tzdata$(VERSION)-rearguard.tar.gz, tzdb-$(VERSION).tar.lz):
Use them instead of invoking touch by hand.
(set-timestamps.out): Set the timestamp of tzdata.zi after that
of version, since the former depends on the latter.
---
Makefile | 43 +++++++++++++++++++++++++++++++++----------
1 file changed, 33 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index 40b81d1..3b9d59e 100644
--- a/Makefile
+++ b/Makefile
@@ -872,11 +872,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 +917,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.
@@ -1018,7 +1041,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 +1060,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 $@
--
1.8.3.1