[tz] [PROPOSED 2/4] Simplify and fix new TZDIR setup
Paul Eggert
eggert at cs.ucla.edu
Sat Nov 25 23:36:37 UTC 2023
Put TZDIR’s definition in a new file tzdir.h instead of using
macros that do not always work with recursive ‘make’ invocations.
This follows up on the recent changes to make the Makefile more
POSIX-compatible.
* .gitignore: Ignore tzdir.h.
* Makefile (DTZDIR): Remove. All uses removed.
(tzdir.h): New target rule.
(clean_misc): Remove tzdir.h.
(check_public): Pass TZDIR, not TZDIR.
(localtime.o, zic.o): Depend on tzdir.h.
* NEWS: Mention this.
* localtime.c, zic.c: Include tzdir.h.
* tzfile.h (TZDIR): Remove; now defined by tzdir.h.
---
.gitignore | 1 +
Makefile | 27 ++++++++++++++-------------
NEWS | 2 ++
localtime.c | 1 +
tzfile.h | 4 ----
zic.c | 1 +
6 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/.gitignore b/.gitignore
index cf3b8250..d50d176d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,7 @@ ChangeLog
check_*
date
leapseconds
+tzdir.h
tzselect
version
version.h
diff --git a/Makefile b/Makefile
index edbc4d16..6e8e8fd9 100644
--- a/Makefile
+++ b/Makefile
@@ -549,10 +549,6 @@ RANLIB= :
###############################################################################
-# $(CC) option to specify TZDIR, appropriately quoted.
-# It is separate from CFLAGS so that CFLAGS and TZDIR can be set independently.
-DTZDIR = -DTZDIR='"$(TZDIR)"'
-
TZCOBJS= zic.o
TZDOBJS= zdump.o localtime.o asctime.o strftime.o
DATEOBJS= date.o localtime.o strftime.o asctime.o
@@ -690,6 +686,13 @@ tzdata.zi: $(DATAFORM).zi version zishrink.awk
$(DATAFORM).zi >$@.out
mv $@.out $@
+tzdir.h:
+ printf '%s\n' >$@.out \
+ '#ifndef TZDIR' \
+ '# define TZDIR "$(TZDIR)" /* TZif directory */' \
+ '#endif'
+ mv $@.out $@
+
version.h: version
VERSION=`cat version` && printf '%s\n' \
'static char const PKGVERSION[]="($(PACKAGE)) ";' \
@@ -699,10 +702,10 @@ version.h: version
mv $@.out $@
zdump: $(TZDOBJS)
- $(CC) -o $@ $(DTZDIR) $(CFLAGS) $(LDFLAGS) $(TZDOBJS) $(LDLIBS)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(TZDOBJS) $(LDLIBS)
zic: $(TZCOBJS)
- $(CC) -o $@ $(DTZDIR) $(CFLAGS) $(LDFLAGS) $(TZCOBJS) $(LDLIBS)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(TZCOBJS) $(LDLIBS)
leapseconds: $(LEAP_DEPS)
$(AWK) -v EXPIRES_LINE=$(EXPIRES_LINE) \
@@ -800,7 +803,7 @@ libtz.a: $(LIBOBJS)
$(RANLIB) $@
date: $(DATEOBJS)
- $(CC) -o $@ $(DTZDIR) $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
tzselect: tzselect.ksh version
VERSION=`cat version` && sed \
@@ -947,7 +950,7 @@ clean_misc:
rm -fr check_*.dir typecheck_*.dir
rm -f *.o *.out $(TIME_T_ALTERNATIVES) \
check_* core typecheck_* \
- date tzselect version.h zdump zic libtz.a
+ date tzdir.h tzselect version.h zdump zic libtz.a
clean: clean_misc
rm -fr *.dir tzdb-*/
rm -f *.zi $(TZS_NEW)
@@ -1052,7 +1055,7 @@ check_public: $(VERSION_DEPS)
mkdir public.dir
ln $(VERSION_DEPS) public.dir
cd public.dir \
- && $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' DTZDIR=$(DTZDIR) ALL
+ && $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' TZDIR='$(TZDIR)' ALL
for i in $(TDATA_TO_CHECK) public.dir/tzdata.zi \
public.dir/vanguard.zi public.dir/main.zi \
public.dir/rearguard.zi; \
@@ -1096,7 +1099,6 @@ $(TIME_T_ALTERNATIVES): $(VERSION_DEPS)
(cd $@.dir && \
$(MAKE) TOPDIR="$$wd/$@.dir" \
CFLAGS='$(CFLAGS) -Dtime_tz='"'$@'" \
- DTZDIR=$(DTZDIR) \
REDO='$(REDO)' \
D=$$wd/$@.dir \
TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
@@ -1260,7 +1262,6 @@ typecheck_long_long typecheck_unsigned: $(VERSION_DEPS)
typecheck_cflags='' && \
$(MAKE) \
CFLAGS="$(TYPECHECK_CFLAGS) \"-Dtime_t=$$i\"" \
- DTZDIR=$(DTZDIR) \
TOPDIR="`pwd`" \
install
$@.dir/zdump -i -c 1970,1971 Europe/Rome
@@ -1272,10 +1273,10 @@ zonenames: tzdata.zi
asctime.o: private.h tzfile.h
date.o: private.h
difftime.o: private.h
-localtime.o: private.h tzfile.h
+localtime.o: private.h tzfile.h tzdir.h
strftime.o: private.h tzfile.h
zdump.o: version.h
-zic.o: private.h tzfile.h version.h
+zic.o: private.h tzfile.h tzdir.h version.h
.PHONY: ALL INSTALL all
.PHONY: check check_mild check_time_t_alternatives
diff --git a/NEWS b/NEWS
index b7884c2d..0f033eca 100644
--- a/NEWS
+++ b/NEWS
@@ -46,6 +46,8 @@ Unreleased, experimental changes
* It no longer uses its own 'cc' in place of CC.
* It now uses ARFLAGS, with default specified by POSIX.
* It does not use LFLAGS incompatibly with POSIX.
+ Due to the CC changes, TZDIR is now #defined in a file tzfile.h
+ built by 'make', not in a $(CC) -D option.
Changes to commentary
diff --git a/localtime.c b/localtime.c
index f65a4295..319fd4ee 100644
--- a/localtime.c
+++ b/localtime.c
@@ -15,6 +15,7 @@
#define LOCALTIME_IMPLEMENTATION
#include "private.h"
+#include "tzdir.h"
#include "tzfile.h"
#include <fcntl.h>
diff --git a/tzfile.h b/tzfile.h
index 9cbdcff5..fcb7ab1d 100644
--- a/tzfile.h
+++ b/tzfile.h
@@ -21,10 +21,6 @@
** Information about time zone files.
*/
-#ifndef TZDIR
-# define TZDIR "/usr/share/zoneinfo" /* Time zone object file directory */
-#endif /* !defined TZDIR */
-
#ifndef TZDEFAULT
# define TZDEFAULT "/etc/localtime"
#endif /* !defined TZDEFAULT */
diff --git a/zic.c b/zic.c
index cb473bdc..e10cb21b 100644
--- a/zic.c
+++ b/zic.c
@@ -14,6 +14,7 @@
#include "version.h"
#include "private.h"
+#include "tzdir.h"
#include "tzfile.h"
#include <fcntl.h>
--
2.40.1
More information about the tz
mailing list