Makefile revision 1.60
11.41Schristos# Make and install tzdb code and data.
21.1Smlelstv# This file is in the public domain, so clarified as of
31.1Smlelstv# 2009-05-17 by Arthur David Olson.
41.56Schristos# Request POSIX conformance; this must be the first non-comment line.
51.56Schristos.POSIX:
61.60Schristos# By default, builds of code and data assume POSIX.1-2001 or later;
71.60Schristos# this assumption can be relaxed by tailoring the build as described below.
81.58Schristos# On older platforms you may need to scrounge for POSIX conformance.
91.58Schristos# For example, on Solaris 10 (2005) with Sun Studio 12 aka Sun C 5.9 (2007),
101.58Schristos# use 'PATH=/usr/xpg4/bin:$PATH make CC=c99'.
111.60Schristos# Reproducible builds of distribution tarballs also need a copy of the
121.60Schristos# Git repository, and assume the behavior of the following programs
131.60Schristos# (or later versions):
141.60Schristos#	Git 2.7.0 (2016)
151.60Schristos#	GNU Coreutils 6.3 (2006)
161.60Schristos#	GNU Tar 1.14 (2004)
171.60Schristos#	GnuPG 1.4 (2004)
181.60Schristos# Although tzdb does not come with a software bill of materials,
191.60Schristos# you should be able to construct one based on the above information,
201.60Schristos# your platform, and the way you use this Makefile.
211.56Schristos
221.56Schristos# To affect how this Makefile works, you can run a shell script like this:
231.56Schristos#
241.56Schristos#	#!/bin/sh
251.60Schristos#	make CFLAGS='-O2 -DHAVE_GETTEXT=0' "$@"
261.56Schristos#
271.60Schristos# This example script is appropriate for a GNU/Linux system
281.60Schristos# which needs more optimization than default, and which does not want
291.60Schristos# gettext's internationalization of diagnostics.
301.56Schristos#
311.56Schristos# Alternatively, you can simply edit this Makefile to tailor the following
321.56Schristos# macro definitions.
331.56Schristos
341.56Schristos###############################################################################
351.56Schristos# Start of macros that one plausibly might want to tailor.
361.1Smlelstv
371.10Schristos# Package name for the code distribution.
381.10SchristosPACKAGE=	tzcode
391.10Schristos
401.34Schristos# Version number for the distribution, overridden in the 'tarballs' rule below.
411.35SchristosVERSION=	unknown
421.9Schristos
431.9Schristos# Email address for bug reports.
441.9SchristosBUGEMAIL=	tz@iana.org
451.6Schristos
461.43Schristos# DATAFORM selects the data format.
471.43Schristos# Available formats represent essentially the same data, albeit
481.43Schristos# possibly with minor discrepancies that users are not likely to notice.
491.43Schristos# To get new features and the best data right away, use:
501.40Schristos#	DATAFORM=	vanguard
511.40Schristos# To wait a while before using new features, to give downstream users
521.40Schristos# time to upgrade zic (the default), use:
531.40Schristos#	DATAFORM=	main
541.40Schristos# To wait even longer for new features, use:
551.40Schristos#	DATAFORM=	rearguard
561.46Schristos# Rearguard users might also want "ZFLAGS = -b fat"; see below.
571.40SchristosDATAFORM=		main
581.40Schristos
591.41Schristos# Change the line below for your timezone (after finding the one you want in
601.41Schristos# one of the $(TDATA) source files, or adding it to a source file).
611.41Schristos# Alternatively, if you discover you've got the wrong timezone, you can just
621.46Schristos# 'zic -l -' to remove it, or 'zic -l rightzone' to change it.
631.1Smlelstv# Use the command
641.1Smlelstv#	make zonenames
651.1Smlelstv# to get a list of the values you can use for LOCALTIME.
661.1Smlelstv
671.51SchristosLOCALTIME=	Factory
681.1Smlelstv
691.58Schristos# The POSIXRULES macro controls interpretation of POSIX-like TZ
701.55Schristos# settings like TZ='EET-2EEST' that lack DST transition rules.
711.46Schristos# If POSIXRULES is '-', no template is installed; this is the default.
721.46Schristos# Any other value for POSIXRULES is obsolete and should not be relied on, as:
731.44Schristos# * It does not work correctly in popular implementations such as GNU/Linux.
741.49Schristos# * It does not work even in tzcode, except for historical timestamps
751.49Schristos#   that precede the last explicit transition in the POSIXRULES file.
761.49Schristos#   Hence it typically does not work for current and future timestamps.
771.46Schristos# If, despite the above, you want a template for handling these settings,
781.46Schristos# you can change the line below (after finding the timezone you want in the
791.46Schristos# one of the $(TDATA) source files, or adding it to a source file).
801.46Schristos# Alternatively, if you discover you've got the wrong timezone, you can just
811.46Schristos# 'zic -p -' to remove it, or 'zic -p rightzone' to change it.
821.46Schristos# Use the command
831.46Schristos#	make zonenames
841.46Schristos# to get a list of the values you can use for POSIXRULES.
851.1Smlelstv
861.46SchristosPOSIXRULES=	-
871.1Smlelstv
881.1Smlelstv# Also see TZDEFRULESTRING below, which takes effect only
891.55Schristos# if POSIXRULES is '-' or if the template file cannot be accessed.
901.1Smlelstv
911.1Smlelstv
921.39Schristos# Installation locations.
931.39Schristos#
941.39Schristos# The defaults are suitable for Debian, except that if REDO is
951.39Schristos# posix_right or right_posix then files that Debian puts under
961.39Schristos# /usr/share/zoneinfo/posix and /usr/share/zoneinfo/right are instead
971.39Schristos# put under /usr/share/zoneinfo-posix and /usr/share/zoneinfo-leaps,
981.39Schristos# respectively.  Problems with the Debian approach are discussed in
991.39Schristos# the commentary for the right_posix rule (below).
1001.39Schristos
1011.39Schristos# Destination directory, which can be used for staging.
1021.39Schristos# 'make DESTDIR=/stage install' installs under /stage (e.g., to
1031.39Schristos# /stage/etc/localtime instead of to /etc/localtime).  Files under
1041.39Schristos# /stage are not intended to work as-is, but can be copied by hand to
1051.39Schristos# the root directory later.  If DESTDIR is empty, 'make install' does
1061.39Schristos# not stage, but installs directly into production locations.
1071.39SchristosDESTDIR =
1081.39Schristos
1091.39Schristos# Everything is installed into subdirectories of TOPDIR, and used there.
1101.39Schristos# TOPDIR should be empty (meaning the root directory),
1111.39Schristos# or a directory name that does not end in "/".
1121.39Schristos# TOPDIR should be empty or an absolute name unless you're just testing.
1131.39SchristosTOPDIR =
1141.39Schristos
1151.41Schristos# The default local timezone is taken from the file TZDEFAULT.
1161.39SchristosTZDEFAULT = $(TOPDIR)/etc/localtime
1171.39Schristos
1181.39Schristos# The subdirectory containing installed program and data files, and
1191.39Schristos# likewise for installed files that can be shared among architectures.
1201.39Schristos# These should be relative file names.
1211.39SchristosUSRDIR = usr
1221.39SchristosUSRSHAREDIR = $(USRDIR)/share
1231.1Smlelstv
1241.41Schristos# "Compiled" timezone information is placed in the "TZDIR" directory
1251.1Smlelstv# (and subdirectories).
1261.38Schristos# TZDIR_BASENAME should not contain "/" and should not be ".", ".." or empty.
1271.15SchristosTZDIR_BASENAME=	zoneinfo
1281.39SchristosTZDIR = $(TOPDIR)/$(USRSHAREDIR)/$(TZDIR_BASENAME)
1291.1Smlelstv
1301.39Schristos# The "tzselect" and (if you do "make INSTALL") "date" commands go in:
1311.39SchristosBINDIR = $(TOPDIR)/$(USRDIR)/bin
1321.1Smlelstv
1331.39Schristos# The "zdump" command goes in:
1341.39SchristosZDUMPDIR = $(BINDIR)
1351.1Smlelstv
1361.39Schristos# The "zic" command goes in:
1371.39SchristosZICDIR = $(TOPDIR)/$(USRDIR)/sbin
1381.1Smlelstv
1391.1Smlelstv# Manual pages go in subdirectories of. . .
1401.39SchristosMANDIR = $(TOPDIR)/$(USRSHAREDIR)/man
1411.1Smlelstv
1421.39Schristos# Library functions are put in an archive in LIBDIR.
1431.39SchristosLIBDIR = $(TOPDIR)/$(USRDIR)/lib
1441.1Smlelstv
1451.1Smlelstv
1461.41Schristos# Types to try, as an alternative to time_t.
1471.41SchristosTIME_T_ALTERNATIVES = $(TIME_T_ALTERNATIVES_HEAD) $(TIME_T_ALTERNATIVES_TAIL)
1481.58SchristosTIME_T_ALTERNATIVES_HEAD = int_least64_t.ck
1491.58SchristosTIME_T_ALTERNATIVES_TAIL = int_least32_t.ck uint_least32_t.ck \
1501.58Schristos  uint_least64_t.ck
1511.1Smlelstv
1521.43Schristos# What kind of TZif data files to generate.  (TZif is the binary time
1531.59Schristos# zone data format that zic generates; see Internet RFC 9636.)
1541.37Schristos# If you want only POSIX time, with time values interpreted as
1551.37Schristos# seconds since the epoch (not counting leap seconds), use
1561.1Smlelstv#	REDO=		posix_only
1571.38Schristos# below.  If you want only "right" time, with values interpreted
1581.37Schristos# as seconds since the epoch (counting leap seconds), use
1591.1Smlelstv#	REDO=		right_only
1601.1Smlelstv# below.  If you want both sets of data available, with leap seconds not
1611.1Smlelstv# counted normally, use
1621.1Smlelstv#	REDO=		posix_right
1631.1Smlelstv# below.  If you want both sets of data available, with leap seconds counted
1641.1Smlelstv# normally, use
1651.1Smlelstv#	REDO=		right_posix
1661.60Schristos# below.  POSIX mandates that leap seconds not be counted, and a
1671.60Schristos# nonnegative TZ_CHANGE_INTERVAL also assumes this, so to be compatible with
1681.60Schristos# these, use "posix_only" or "posix_right".  Use POSIX time on systems with
1691.37Schristos# leap smearing; this can work better than unsmeared "right" time with
1701.37Schristos# applications that are not leap second aware, and is closer to unsmeared
1711.37Schristos# "right" time than unsmeared POSIX time is (e.g., 0.5 vs 1.0 s max error).
1721.1Smlelstv
1731.1SmlelstvREDO=		posix_right
1741.1Smlelstv
1751.45Schristos# Whether to put an "Expires" line in the leapseconds file.
1761.45Schristos# Use EXPIRES_LINE=1 to put the line in, 0 to omit it.
1771.45Schristos# The EXPIRES_LINE value matters only if REDO's value contains "right".
1781.45Schristos# If you change EXPIRES_LINE, remove the leapseconds file before running "make".
1791.45Schristos# zic's support for the Expires line was introduced in tzdb 2020a,
1801.49Schristos# and was modified in tzdb 2021b to generate version 4 TZif files.
1811.49Schristos# EXPIRES_LINE defaults to 0 for now so that the leapseconds file
1821.49Schristos# can be given to pre-2020a zic implementations and so that TZif files
1831.49Schristos# built by newer zic implementations can be read by pre-2021b libraries.
1841.45SchristosEXPIRES_LINE=	0
1851.45Schristos
1861.41Schristos# To install data in text form that has all the information of the TZif data,
1871.38Schristos# (optionally incorporating leap second information), use
1881.38Schristos#	TZDATA_TEXT=	tzdata.zi leapseconds
1891.38Schristos# To install text data without leap second information (e.g., because
1901.38Schristos# REDO='posix_only'), use
1911.38Schristos#	TZDATA_TEXT=	tzdata.zi
1921.38Schristos# To avoid installing text data, use
1931.38Schristos#	TZDATA_TEXT=
1941.38Schristos
1951.38SchristosTZDATA_TEXT=	leapseconds tzdata.zi
1961.38Schristos
1971.38Schristos# For backward-compatibility links for old zone names, use
1981.39Schristos#	BACKWARD=	backward
1991.38Schristos# To omit these links, use
2001.38Schristos#	BACKWARD=
2011.38Schristos
2021.39SchristosBACKWARD=	backward
2031.38Schristos
2041.51Schristos# If you want out-of-scope and often-wrong data from the file 'backzone',
2051.51Schristos# but only for entries listed in the backward-compatibility file zone.tab, use
2061.32Schristos#	PACKRATDATA=	backzone
2071.51Schristos#	PACKRATLIST=	zone.tab
2081.51Schristos# If you want all the 'backzone' data, use
2091.51Schristos#	PACKRATDATA=	backzone
2101.51Schristos#	PACKRATLIST=
2111.32Schristos# To omit this data, use
2121.32Schristos#	PACKRATDATA=
2131.51Schristos#	PACKRATLIST=
2141.32Schristos
2151.32SchristosPACKRATDATA=
2161.51SchristosPACKRATLIST=
2171.32Schristos
2181.38Schristos# The name of a locale using the UTF-8 encoding, used during self-tests.
2191.38Schristos# The tests are skipped if the name does not appear to work on this system.
2201.38Schristos
2211.38SchristosUTF8_LOCALE=	en_US.utf8
2221.38Schristos
2231.60Schristos# Extra flags for producing man page files like tzfile.5.txt.
2241.60Schristos# These flags are used only if groff (or mandoc) is present.
2251.60Schristos# Each option should begin with "-" and should lack shell metacharacters.
2261.60Schristos# Plausible options include -Tascii and -Tutf8.
2271.60SchristosMANFLAGS=	-Tutf8
2281.60Schristos
2291.1Smlelstv# Non-default libraries needed to link.
2301.54Schristos# On some hosts, this should have -lintl unless CFLAGS has -DHAVE_GETTEXT=0.
2311.1SmlelstvLDLIBS=
2321.1Smlelstv
2331.56Schristos# Add the following to an uncommented "CFLAGS=" line as needed
2341.56Schristos# to override defaults specified in the source code or by the system.
2351.56Schristos# "-DFOO" is equivalent to "-DFOO=1".
2361.38Schristos#  -DDEPRECATE_TWO_DIGIT_YEARS for optional runtime warnings about strftime
2371.38Schristos#	formats that generate only the last two digits of year numbers
2381.38Schristos#  -DEPOCH_LOCAL if the 'time' function returns local time not UT
2391.38Schristos#  -DEPOCH_OFFSET=N if the 'time' function returns a value N greater
2401.38Schristos#	than what POSIX specifies, assuming local time is UT.
2411.38Schristos#	For example, N is 252460800 on AmigaOS.
2421.60Schristos#  -DFREE_PRESERVES_ERRNO=[01] if the 'free' function munges or preserves errno
2431.60Schristos#	(default is guessed)
2441.32Schristos#  -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
2451.58Schristos#	on POSIX platforms predating POSIX.1-2024
2461.38Schristos#  -DHAVE_DECL_ENVIRON if <unistd.h> declares 'environ'
2471.54Schristos#  -DHAVE_DECL_TIMEGM=0 if <time.h> does not declare timegm
2481.32Schristos#  -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
2491.60Schristos#  -DHAVE_FCHMOD=0 if your system lacks the fchmod function
2501.55Schristos#  -DHAVE__GENERIC=0 if _Generic does not work*
2511.60Schristos#  -DHAVE_GETEUID=0 if gete?[ug]id do not work
2521.54Schristos#  -DHAVE_GETRANDOM if getrandom works (e.g., GNU/Linux),
2531.54Schristos#	-DHAVE_GETRANDOM=0 to avoid using getrandom
2541.60Schristos#  -DHAVE_GETRESUID=0 if getres[ug]id do not work
2551.54Schristos#  -DHAVE_GETTEXT if gettext works (e.g., GNU/Linux, FreeBSD, Solaris),
2561.54Schristos#	where LDLIBS also needs to contain -lintl on some hosts;
2571.54Schristos#	-DHAVE_GETTEXT=0 to avoid using gettext
2581.38Schristos#  -DHAVE_INCOMPATIBLE_CTIME_R if your system's time.h declares
2591.58Schristos#	ctime_r and asctime_r incompatibly with POSIX.1-2017 and earlier
2601.35Schristos#	(Solaris when _POSIX_PTHREAD_SEMANTICS is not defined).
2611.55Schristos#  -DHAVE_INTTYPES_H=0 if <inttypes.h> does not work*+
2621.60Schristos#  -DHAVE_ISSETUGID=1 if issetugid works, 0 otherwise (default is guessed)
2631.60Schristos#	If 0, you may also use -DHAVE_SYS_AUXV_H=1 if <sys/auxv.h> works,
2641.60Schristos#	0 otherwise (default is guessed).
2651.16Schristos#  -DHAVE_LINK=0 if your system lacks a link function
2661.23Schristos#  -DHAVE_LOCALTIME_R=0 if your system lacks a localtime_r function
2671.23Schristos#  -DHAVE_LOCALTIME_RZ=0 if you do not want zdump to use localtime_rz
2681.23Schristos#	localtime_rz can make zdump significantly faster, but is nonstandard.
2691.49Schristos#  -DHAVE_MALLOC_ERRNO=0 if malloc etc. do not set errno on failure.
2701.60Schristos#  -DHAVE_MEMPCPY=1 if your system has mempcpy, 0 if not (default is guessed)
2711.32Schristos#  -DHAVE_POSIX_DECLS=0 if your system's include files do not declare
2721.60Schristos#	variables like 'tzname' required by POSIX
2731.60Schristos#  -DHAVE_PWD_H=0 if your system lacks pwd.h, grp.h and corresponding functions
2741.60Schristos#	If 0, you may also need -Dgid_t=G -Duid_t=U
2751.60Schristos#	to define gid_t and uid_t to be types G and U.
2761.53Schristos#  -DHAVE_SETENV=0 if your system lacks the setenv function
2771.60Schristos#  -DHAVE_SETMODE=[01] if your system lacks or has the setmode and getmode
2781.60Schristos#	functions (default is guessed)
2791.55Schristos#  -DHAVE_SNPRINTF=0 if your system lacks the snprintf function+
2801.54Schristos#  -DHAVE_STDCKDINT_H=0 if neither <stdckdint.h> nor substitutes like
2811.54Schristos#	__builtin_add_overflow work*
2821.55Schristos#  -DHAVE_STDINT_H=0 if <stdint.h> does not work*+
2831.38Schristos#  -DHAVE_STRFTIME_L if <time.h> declares locale_t and strftime_l
2841.28Schristos#  -DHAVE_STRDUP=0 if your system lacks the strdup function
2851.60Schristos#  -DHAVE_STRNLEN=0 if your system lacks the strnlen function+
2861.55Schristos#  -DHAVE_STRTOLL=0 if your system lacks the strtoll function+
2871.60Schristos#  -DHAVE_STRUCT_STAT_ST_CTIM=0 if struct stat lacks a member st_ctim+
2881.60Schristos#  -DHAVE_STRUCT_TIMESPEC=0 if your system lacks struct timespec+
2891.1Smlelstv#  -DHAVE_SYMLINK=0 if your system lacks the symlink function
2901.54Schristos#  -DHAVE_SYS_STAT_H=0 if <sys/stat.h> does not work*
2911.60Schristos#	If 0, you may also need -Dmode_t=M to define mode_t to be type M.
2921.23Schristos#  -DHAVE_TZSET=0 if your system lacks a tzset function
2931.54Schristos#  -DHAVE_UNISTD_H=0 if <unistd.h> does not work*
2941.54Schristos#  -DHAVE_UTMPX_H=0 if <utmpx.h> does not work*
2951.38Schristos#  -Dlocale_t=XXX if your system uses XXX instead of locale_t
2961.59Schristos#  -DMKTIME_MIGHT_OVERFLOW if mktime might fail due to time_t overflow
2971.60Schristos#  -DOPENAT_TZDIR if tzset should use openat on TZDIR then a relative open.
2981.60Schristos#	See localtime.c for details.
2991.56Schristos#  -DPORT_TO_C89 if tzcode should also run on mostly-C89 platforms+
3001.56Schristos#	Typically it is better to use a later standard.  For example,
3011.56Schristos#	with GCC 4.9.4 (2016), prefer '-std=gnu11' to '-DPORT_TO_C89'.
3021.56Schristos#	Even with -DPORT_TO_C89, the code needs at least one C99
3031.56Schristos#	feature (integers at least 64 bits wide) and maybe more.
3041.40Schristos#  -DRESERVE_STD_EXT_IDS if your platform reserves standard identifiers
3051.40Schristos#	with external linkage, e.g., applications cannot define 'localtime'.
3061.59Schristos#  -Dssize_t=int on hosts like MS-Windows that lack ssize_t
3071.58Schristos#  -DSUPPORT_C89=0 if the tzcode library should not support C89 callers
3081.58Schristos#	Although -DSUPPORT_C89=0 might work around latent bugs in callers,
3091.58Schristos#	it does not conform to POSIX.
3101.58Schristos#  -DSUPPORT_POSIX2008 if the library should support older POSIX callers+
3111.58Schristos#	However, this might cause problems in POSIX.1-2024-or-later callers.
3121.40Schristos#  -DSUPPRESS_TZDIR to not prepend TZDIR to file names; this has
3131.40Schristos#	security implications and is not recommended for general use
3141.38Schristos#  -DTHREAD_SAFE to make localtime.c thread-safe, as POSIX requires;
3151.23Schristos#	not needed by the main-program tz code, which is single-threaded.
3161.23Schristos#	Append other compiler flags as needed, e.g., -pthread on GNU/Linux.
3171.60Schristos#	The following options can also be used:
3181.60Schristos#	  -DTHREAD_PREFER_SINGLE to prefer speed in single-threaded apps,
3191.60Schristos#	    at some cost in CPU time and energy in multi-threaded apps.
3201.60Schristos#	    The following options can also be used:
3211.60Schristos#	      -DHAVE___ISTHREADED=1 if there is an extern int __isthreaded
3221.60Schristos#		variable, 0 otherwise (default is guessed)
3231.60Schristos#	      -DHAVE_SYS_SINGLE_THREADED_H=0 if <sys/single_threaded.h> works,
3241.60Schristos#		0 otherwise (default is guessed)
3251.60Schristos#	  -DTHREAD_RWLOCK to use read-write locks intead of mutexes.
3261.60Schristos#	    This can improve paralellism and thus save real time
3271.60Schristos#	    if many threads call tzcode functions simultaneously.
3281.60Schristos#	    It also costs CPU time and thus energy.
3291.60Schristos#	  -DTHREAD_TM_MULTI to have gmtime, localtime, and offtime
3301.60Schristos#	    return different struct tm * addresses in different threads.
3311.60Schristos#	    This supports unportable programs that call
3321.60Schristos#	    gmtime/localtime/offtime when they should call
3331.60Schristos#	    gmtime_r/localtime_r/offtime_r to avoid races.
3341.60Schristos#	    Because the corresponding storage is freed on thread exit,
3351.60Schristos#	    this option is incompatible with POSIX.1-2024 and earlier.
3361.60Schristos#	    It also costs CPU time and memory.
3371.14Schristos#  -Dtime_tz=\"T\" to use T as the time_t type, rather than the system time_t
3381.38Schristos#	This is intended for internal use only; it mangles external names.
3391.60Schristos#  -DTZ_CHANGE_INTERVAL=N if functions depending on TZ should check
3401.60Schristos#	no more often than every N seconds for TZif file changes.
3411.60Schristos#	If N is negative (the default), no such checking is done.
3421.60Schristos#	This option is intended for platforms that want localtime etc.
3431.60Schristos#	to respond to changes to a file selected by TZ, including to
3441.60Schristos#	TZDEFAULT (normally /etc/localtime) if TZ is unset.
3451.60Schristos#	On these platforms, REDO should be "posix_only" or "posix_right".
3461.60Schristos#	This option does not affect tzalloc-allocated objects.
3471.1Smlelstv#  -DTZ_DOMAIN=\"foo\" to use "foo" for gettext domain name; default is "tz"
3481.22Schristos#  -DTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
3491.1Smlelstv#	the default is system-supplied, typically "/usr/lib/locale"
3501.14Schristos#  -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
3511.58Schristos#	DST transitions for proleptic format TZ strings lacking them,
3521.55Schristos#	in the usual case where POSIXRULES is '-'.  If not specified,
3531.55Schristos#	TZDEFRULESTRING defaults to US rules for future DST transitions.
3541.55Schristos#	This mishandles some past timestamps, as US DST rules have changed.
3551.55Schristos#	It also mishandles settings like TZ='EET-2EEST' for eastern Europe,
3561.55Schristos#	as Europe and US DST rules differ.
3571.59Schristos#  -DTZNAME_MAXIMUM=N to limit time zone abbreviations to N bytes (default 254)
3581.38Schristos#  -DUNINIT_TRAP if reading uninitialized storage can cause problems
3591.23Schristos#	other than simply getting garbage data
3601.23Schristos#  -DUSE_LTZ=0 to build zdump with the system time zone library
3611.23Schristos#	Also set TZDOBJS=zdump.o and CHECK_TIME_T_ALTERNATIVES= below.
3621.46Schristos#  -DZIC_BLOAT_DEFAULT=\"fat\" to default zic's -b option to "fat", and
3631.46Schristos#	similarly for "slim".  Fat TZif files work around incompatibilities
3641.53Schristos#	and bugs in some TZif readers, notably older ones that
3651.53Schristos#	ignore or otherwise mishandle 64-bit data in TZif files;
3661.53Schristos#	however, fat TZif files may trigger bugs in newer TZif readers.
3671.53Schristos#	Slim TZif files are more efficient, and are the default.
3681.1Smlelstv#  -DZIC_MAX_ABBR_LEN_WO_WARN=3
3691.1Smlelstv#	(or some other number) to set the maximum time zone abbreviation length
3701.1Smlelstv#	that zic will accept without a warning (the default is 6)
3711.56Schristos#  -g to generate symbolic debugging info
3721.56Schristos#  -Idir to include from directory 'dir'
3731.56Schristos#  -O0 to disable optimization; other -O options to enable more optimization
3741.56Schristos#  -Uname to remove any definition of the macro 'name'
3751.30Schristos#  $(GCC_DEBUG_FLAGS) if you are using recent GCC and want lots of checking
3761.53Schristos#
3771.53Schristos# * Options marked "*" can be omitted if your compiler is C23 compatible.
3781.55Schristos# * Options marked "+" are obsolescent and are planned to be removed
3791.58Schristos#   once the code assumes C99 or later (say in the year 2029)
3801.58Schristos#   and POSIX.1-2024 or later (say in the year 2034).
3811.53Schristos#
3821.38Schristos# Select instrumentation via "make GCC_INSTRUMENT='whatever'".
3831.38SchristosGCC_INSTRUMENT = \
3841.38Schristos  -fsanitize=undefined -fsanitize-address-use-after-scope \
3851.60Schristos  -fsanitize-trap=all -fstack-protector
3861.49Schristos# Omit -fanalyzer from GCC_DEBUG_FLAGS, as it makes GCC too slow.
3871.58SchristosGCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 \
3881.38Schristos  $(GCC_INSTRUMENT) \
3891.38Schristos  -Wall -Wextra \
3901.38Schristos  -Walloc-size-larger-than=100000 -Warray-bounds=2 \
3911.59Schristos  -Wbad-function-cast -Wbidi-chars=any,ucn -Wcast-align=strict -Wcast-qual \
3921.59Schristos  -Wdate-time \
3931.38Schristos  -Wdeclaration-after-statement -Wdouble-promotion \
3941.58Schristos  -Wduplicated-branches -Wduplicated-cond -Wflex-array-member-not-at-end \
3951.38Schristos  -Wformat=2 -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation \
3961.54Schristos  -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op \
3971.58Schristos  -Wmissing-declarations -Wmissing-prototypes \
3981.58Schristos  -Wmissing-variable-declarations -Wnested-externs \
3991.49Schristos  -Wnull-dereference \
4001.38Schristos  -Wold-style-definition -Woverlength-strings -Wpointer-arith \
4011.49Schristos  -Wshadow -Wshift-overflow=2 -Wstrict-overflow \
4021.49Schristos  -Wstrict-prototypes -Wstringop-overflow=4 \
4031.40Schristos  -Wstringop-truncation -Wsuggest-attribute=cold \
4041.38Schristos  -Wsuggest-attribute=const -Wsuggest-attribute=format \
4051.40Schristos  -Wsuggest-attribute=malloc \
4061.38Schristos  -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \
4071.58Schristos  -Wtrampolines -Wundef -Wunused-macros -Wuse-after-free=3 \
4081.38Schristos  -Wvariadic-macros -Wvla -Wwrite-strings \
4091.59Schristos  -Wno-format-nonliteral -Wno-sign-compare -Wno-type-limits
4101.1Smlelstv#
4111.1Smlelstv# If your system has a "GMT offset" field in its "struct tm"s
4121.1Smlelstv# (or if you decide to add such a field in your system's "time.h" file),
4131.1Smlelstv# add the name to a define such as
4141.1Smlelstv#	-DTM_GMTOFF=tm_gmtoff
4151.23Schristos# to the end of the "CFLAGS=" line.  If not defined, the code attempts to
4161.23Schristos# guess TM_GMTOFF from other macros; define NO_TM_GMTOFF to suppress this.
4171.23Schristos# Similarly, if your system has a "zone abbreviation" field, define
4181.1Smlelstv#	-DTM_ZONE=tm_zone
4191.57Schristos# and define NO_TM_ZONE to suppress any guessing.
4201.58Schristos# Although POSIX.1-2024 requires these fields and they are widely available
4211.58Schristos# on GNU/Linux and BSD systems, some older systems lack them.
4221.1Smlelstv#
4231.38Schristos# The next batch of options control support for external variables
4241.38Schristos# exported by tzcode.  In practice these variables are less useful
4251.38Schristos# than TM_GMTOFF and TM_ZONE.  However, most of them are standardized.
4261.38Schristos# #
4271.38Schristos# # To omit or support the external variable "tzname", add one of:
4281.45Schristos# #	-DHAVE_TZNAME=0 # do not support "tzname"
4291.45Schristos# #	-DHAVE_TZNAME=1 # support "tzname", which is defined by system library
4301.45Schristos# #	-DHAVE_TZNAME=2 # support and define "tzname"
4311.58Schristos# # to the "CFLAGS=" line.  Although "tzname" is required by POSIX.1-1988
4321.58Schristos# # and later, its contents are unspecified if you use a geographical TZ
4331.58Schristos# # and the variable is planned to be removed in a future POSIX edition.
4341.38Schristos# # If not defined, the code attempts to guess HAVE_TZNAME from other macros.
4351.38Schristos# # Warning: unless time_tz is also defined, HAVE_TZNAME=1 can cause
4361.38Schristos# # crashes when combined with some platforms' standard libraries,
4371.38Schristos# # presumably due to memory allocation issues.
4381.38Schristos# #
4391.38Schristos# # To omit or support the external variables "timezone" and "daylight", add
4401.45Schristos# #	-DUSG_COMPAT=0 # do not support
4411.45Schristos# #	-DUSG_COMPAT=1 # support, and variables are defined by system library
4421.45Schristos# #	-DUSG_COMPAT=2 # support and define variables
4431.57Schristos# # to the "CFLAGS=" line; "timezone" and "daylight" are inspired by Unix
4441.58Schristos# # Systems Group code and are required by POSIX.1-2008 and later (with XSI),
4451.58Schristos# # although their contents are unspecified if you use a geographical TZ
4461.58Schristos# # and the variables are planned to be removed in a future edition of POSIX.
4471.38Schristos# # If not defined, the code attempts to guess USG_COMPAT from other macros.
4481.38Schristos# #
4491.38Schristos# # To support the external variable "altzone", add
4501.45Schristos# #	-DALTZONE=0 # do not support
4511.45Schristos# #	-DALTZONE=1 # support "altzone", which is defined by system library
4521.45Schristos# #	-DALTZONE=2 # support and define "altzone"
4531.38Schristos# # to the end of the "CFLAGS=" line; although "altzone" appeared in
4541.38Schristos# # System V Release 3.1 it has not been standardized.
4551.45Schristos# # If not defined, the code attempts to guess ALTZONE from other macros.
4561.38Schristos#
4571.1Smlelstv# If you want functions that were inspired by early versions of X3J11's work,
4581.1Smlelstv# add
4591.1Smlelstv#	-DSTD_INSPIRED
4601.54Schristos# to the end of the "CFLAGS=" line.  This arranges for the following
4611.54Schristos# functions to be added to the time conversion library.
4621.1Smlelstv# "offtime" is like "gmtime" except that it accepts a second (long) argument
4631.1Smlelstv# that gives an offset to add to the time_t when converting it.
4641.60Schristos# "offtime_r" is to "offtime" what "gmtime_r" is to "gmtime".
4651.60Schristos# I.e., "offtime" and "offtime_r" are like calling "localtime_rz"
4661.60Schristos# with a fixed-offset zone.
4671.56Schristos# "timelocal" is nearly equivalent to "mktime".
4681.1Smlelstv# "timeoff" is like "timegm" except that it accepts a second (long) argument
4691.1Smlelstv# that gives an offset to use when converting to a time_t.
4701.56Schristos# I.e., "timeoff" is like calling "mktime_z" with a fixed-offset zone.
4711.1Smlelstv# "posix2time" and "time2posix" are described in an included manual page.
4721.1Smlelstv# X3J11's work does not describe any of these functions.
4731.1Smlelstv# These functions may well disappear in future releases of the time
4741.1Smlelstv# conversion package.
4751.1Smlelstv#
4761.23Schristos# If you don't want functions that were inspired by NetBSD, add
4771.23Schristos#	-DNETBSD_INSPIRED=0
4781.23Schristos# to the end of the "CFLAGS=" line.  Otherwise, the functions
4791.23Schristos# "localtime_rz", "mktime_z", "tzalloc", and "tzfree" are added to the
4801.55Schristos# time library, and if STD_INSPIRED is also defined to nonzero the functions
4811.23Schristos# "posix2time_z" and "time2posix_z" are added as well.
4821.23Schristos# The functions ending in "_z" (or "_rz") are like their unsuffixed
4831.23Schristos# (or suffixed-by-"_r") counterparts, except with an extra first
4841.41Schristos# argument of opaque type timezone_t that specifies the timezone.
4851.23Schristos# "tzalloc" allocates a timezone_t value, and "tzfree" frees it.
4861.23Schristos#
4871.1Smlelstv# If you want to allocate state structures in localtime, add
4881.1Smlelstv#	-DALL_STATE
4891.1Smlelstv# to the end of the "CFLAGS=" line.  Storage is obtained by calling malloc.
4901.1Smlelstv#
4911.1Smlelstv# NIST-PCTS:151-2, Version 1.4, (1993-12-03) is a test suite put
4921.1Smlelstv# out by the National Institute of Standards and Technology
4931.56Schristos# which claims to test C and POSIX conformance.  If you want to pass PCTS, add
4941.1Smlelstv#	-DPCTS
4951.1Smlelstv# to the end of the "CFLAGS=" line.
4961.1Smlelstv#
4971.1Smlelstv# If you want strict compliance with XPG4 as of 1994-04-09, add
4981.1Smlelstv#	-DXPG4_1994_04_09
4991.1Smlelstv# to the end of the "CFLAGS=" line.  This causes "strftime" to always return
5001.38Schristos# 53 as a week number (rather than 52 or 53) for January days before
5011.38Schristos# January's first Monday when a "%V" format is used and January 1
5021.1Smlelstv# falls on a Friday, Saturday, or Sunday.
5031.56Schristos#
5041.56Schristos# POSIX says CFLAGS defaults to "-O 1".
5051.56Schristos# Uncomment the following line and edit its contents as needed.
5061.1Smlelstv
5071.56Schristos#CFLAGS= -O 1
5081.1Smlelstv
5091.9Schristos
5101.56Schristos# The name of a POSIX-like library archiver, its flags, C compiler,
5111.56Schristos# linker flags, and 'make' utility.  Ordinarily the defaults suffice.
5121.58Schristos# The commented-out values are the defaults specified by POSIX.1-2024.
5131.56Schristos#AR = ar
5141.56Schristos#ARFLAGS = -rv
5151.56Schristos#CC = c17
5161.56Schristos#LDFLAGS =
5171.56Schristos#MAKE = make
5181.1Smlelstv
5191.57Schristos# Where to fetch leap-seconds.list from.
5201.57Schristosleaplist_URI = \
5211.57Schristos  https://hpiers.obspm.fr/iers/bul/bulc/ntp/leap-seconds.list
5221.57Schristos# The file is generated by the IERS Earth Orientation Centre, in Paris.
5231.57Schristosleaplist_TZ = Europe/Paris
5241.60Schristos#
5251.60Schristos# To fetch leap-seconds.list from NIST via a less-secure protocol
5261.60Schristos# and with less-volatile metadata, use these settings:
5271.60Schristos#leaplist_URI = ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list
5281.60Schristos#leaplist_TZ = America/Denver
5291.57Schristos
5301.32Schristos# The zic command and its arguments.
5311.32Schristos
5321.1Smlelstvzic=		./zic
5331.1SmlelstvZIC=		$(zic) $(ZFLAGS)
5341.1Smlelstv
5351.43Schristos# To shrink the size of installed TZif files,
5361.43Schristos# append "-r @N" to omit data before N-seconds-after-the-Epoch.
5371.53Schristos# To grow the files and work around bugs in older applications,
5381.53Schristos# possibly at the expense of introducing bugs in newer ones,
5391.53Schristos# append "-b fat"; see ZIC_BLOAT_DEFAULT above.
5401.44Schristos# See the zic man page for more about -b and -r.
5411.15SchristosZFLAGS=
5421.15Schristos
5431.41Schristos# How to use zic to install TZif files.
5441.32Schristos
5451.58SchristosZIC_INSTALL=	$(ZIC) -d '$(DESTDIR)$(TZDIR)'
5461.32Schristos
5471.56Schristos# The name of a POSIX-compliant 'awk' on your system.
5481.50Schristos# mawk 1.3.3 and Solaris 10 /usr/bin/awk do not work.
5491.50Schristos# Also, it is better (though not essential) if 'awk' supports UTF-8,
5501.50Schristos# and unfortunately mawk and busybox awk do not support UTF-8.
5511.50Schristos# Try AWK=gawk or AWK=nawk if your awk has the abovementioned problems.
5521.9SchristosAWK=		awk
5531.9Schristos
5541.56Schristos# The full path name of a POSIX-compliant shell, preferably one that supports
5551.16Schristos# the Korn shell's 'select' statement as an extension.
5561.16Schristos# These days, Bash is the most popular.
5571.16Schristos# It should be OK to set this to /bin/sh, on platforms where /bin/sh
5581.56Schristos# lacks 'select' or doesn't completely conform to POSIX, but /bin/bash
5591.16Schristos# is typically nicer if it works.
5601.9SchristosKSHELL=		/bin/bash
5611.1Smlelstv
5621.57Schristos# Name of curl <https://curl.haxx.se/>, used for HTML validation
5631.57Schristos# and to fetch leap-seconds.list from upstream.
5641.58Schristos# Set CURL=: to disable use of the Internet.
5651.42SchristosCURL=		curl
5661.42Schristos
5671.44Schristos# Name of GNU Privacy Guard <https://gnupg.org/>, used to sign distributions.
5681.44SchristosGPG=		gpg
5691.44Schristos
5701.23Schristos# This expensive test requires USE_LTZ.
5711.23Schristos# To suppress it, define this macro to be empty.
5721.23SchristosCHECK_TIME_T_ALTERNATIVES = check_time_t_alternatives
5731.23Schristos
5741.22Schristos# SAFE_CHAR is a regular expression that matches a safe character.
5751.22Schristos# Some parts of this distribution are limited to safe characters;
5761.22Schristos# others can use any UTF-8 character.
5771.22Schristos# For now, the safe characters are a safe subset of ASCII.
5781.9Schristos# The caller must set the shell variable 'sharp' to the character '#',
5791.9Schristos# since Makefile macros cannot contain '#'.
5801.9Schristos# TAB_CHAR is a single tab character, in single quotes.
5811.9SchristosTAB_CHAR=	'	'
5821.22SchristosSAFE_CHARSET1=	$(TAB_CHAR)' !\"'$$sharp'$$%&'\''()*+,./0123456789:;<=>?@'
5831.22SchristosSAFE_CHARSET2=	'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`'
5841.22SchristosSAFE_CHARSET3=	'abcdefghijklmnopqrstuvwxyz{|}~'
5851.29SchristosSAFE_CHARSET=	$(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3)
5861.29SchristosSAFE_CHAR=	'[]'$(SAFE_CHARSET)'-]'
5871.29Schristos
5881.60Schristos# These non-alphabetic, non-ASCII printable characters are
5891.60Schristos# used in commentary or in generated *.txt files
5901.60Schristos# and are not likely to cause confusion.
5911.60SchristosUNUSUAL_OK_CHARSET= §«°±»½¾×–‘’“”•→−≤★⟨⟩⯪
5921.40Schristos
5931.51Schristos# Put this in a bracket expression to match spaces.
5941.51Schristoss = [:space:]
5951.51Schristos
5961.29Schristos# OK_CHAR matches any character allowed in the distributed files.
5971.40Schristos# This is the same as SAFE_CHAR, except that UNUSUAL_OK_CHARSET and
5981.40Schristos# multibyte letters are also allowed so that commentary can contain a
5991.40Schristos# few safe symbols and people's names and can quote non-English sources.
6001.40SchristosOK_CHAR=	'[][:alpha:]$(UNUSUAL_OK_CHARSET)'$(SAFE_CHARSET)'-]'
6011.22Schristos
6021.22Schristos# SAFE_LINE matches a line of safe characters.
6031.29Schristos# SAFE_SHARP_LINE is similar, except any OK character can follow '#';
6041.22Schristos# this is so that comments can contain non-ASCII characters.
6051.29Schristos# OK_LINE matches a line of OK characters.
6061.22SchristosSAFE_LINE=	'^'$(SAFE_CHAR)'*$$'
6071.29SchristosSAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(OK_CHAR)'*)?$$'
6081.29SchristosOK_LINE=	'^'$(OK_CHAR)'*$$'
6091.9Schristos
6101.6Schristos# Flags to give 'tar' when making a distribution.
6111.6Schristos# Try to use flags appropriate for GNU tar.
6121.58SchristosGNUTARFLAGS= --format=pax --pax-option=delete=atime,delete=ctime \
6131.50Schristos  --numeric-owner --owner=0 --group=0 \
6141.50Schristos  --mode=go+u,go-w --sort=name
6151.58SchristosSETUP_TAR= \
6161.58Schristos  export LC_ALL=C && \
6171.58Schristos  if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; then \
6181.58Schristos    TAR='tar $(GNUTARFLAGS)'; \
6191.58Schristos  else \
6201.58Schristos    TAR=tar; \
6211.58Schristos  fi
6221.6Schristos
6231.6Schristos# Flags to give 'gzip' when making a distribution.
6241.38SchristosGZIPFLAGS=	-9n
6251.6Schristos
6261.54Schristos# When comparing .tzs files, use GNU diff's -F'^TZ=' option if supported.
6271.54Schristos# This makes it easier to see which Zone has been affected.
6281.58SchristosSETUP_DIFF_TZS = \
6291.58Schristos  if diff -u -F'^TZ=' - - <>/dev/null >&0 2>&1; then \
6301.58Schristos    DIFF_TZS='diff -u -F^TZ='; \
6311.58Schristos  else \
6321.58Schristos    DIFF_TZS='diff -u'; \
6331.58Schristos  fi
6341.54Schristos
6351.56Schristos# ':' on typical hosts; 'ranlib' on the ancient hosts that still need ranlib.
6361.56SchristosRANLIB=		:
6371.1Smlelstv
6381.56Schristos# POSIX prohibits defining or using SHELL.  However, csh users on systems
6391.56Schristos# that use the user shell for Makefile commands may need to define SHELL.
6401.56Schristos#SHELL=		/bin/sh
6411.29Schristos
6421.56Schristos# End of macros that one plausibly might want to tailor.
6431.56Schristos###############################################################################
6441.1Smlelstv
6451.16Schristos
6461.28SchristosTZCOBJS=	zic.o
6471.58SchristosTZDOBJS=	zdump.o localtime.o strftime.o
6481.58SchristosDATEOBJS=	date.o localtime.o strftime.o
6491.45SchristosLIBSRCS=	localtime.c asctime.c difftime.c strftime.c
6501.45SchristosLIBOBJS=	localtime.o asctime.o difftime.o strftime.o
6511.1SmlelstvHEADERS=	tzfile.h private.h
6521.28SchristosNONLIBSRCS=	zic.c zdump.c
6531.45SchristosNEWUCBSRCS=	date.c
6541.23SchristosSOURCES=	$(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) \
6551.35Schristos			tzselect.ksh workman.sh
6561.1SmlelstvMANS=		newctime.3 newstrftime.3 newtzset.3 time2posix.3 \
6571.1Smlelstv			tzfile.5 tzselect.8 zic.8 zdump.8
6581.16SchristosMANTXTS=	newctime.3.txt newstrftime.3.txt newtzset.3.txt \
6591.16Schristos			time2posix.3.txt \
6601.16Schristos			tzfile.5.txt tzselect.8.txt zic.8.txt zdump.8.txt \
6611.16Schristos			date.1.txt
6621.38SchristosCOMMON=		calendars CONTRIBUTING LICENSE Makefile \
6631.49Schristos			NEWS README SECURITY theory.html version
6641.39SchristosWEB_PAGES=	tz-art.html tz-how-to.html tz-link.html
6651.58SchristosCHECK_WEB_PAGES=theory.ck tz-art.ck tz-how-to.ck tz-link.ck
6661.23SchristosDOCS=		$(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
6671.1SmlelstvPRIMARY_YDATA=	africa antarctica asia australasia \
6681.1Smlelstv		europe northamerica southamerica
6691.39SchristosYDATA=		$(PRIMARY_YDATA) etcetera
6701.46SchristosNDATA=		factory
6711.46SchristosTDATA_TO_CHECK=	$(YDATA) $(NDATA) backward
6721.39SchristosTDATA=		$(YDATA) $(NDATA) $(BACKWARD)
6731.56SchristosZONETABLES=	zone.tab zone1970.tab zonenow.tab
6741.38SchristosTABDATA=	iso3166.tab $(TZDATA_TEXT) $(ZONETABLES)
6751.16SchristosLEAP_DEPS=	leapseconds.awk leap-seconds.list
6761.51SchristosTZDATA_ZI_DEPS=	ziguard.awk zishrink.awk version $(TDATA) \
6771.51Schristos		  $(PACKRATDATA) $(PACKRATLIST)
6781.51SchristosDSTDATA_ZI_DEPS= ziguard.awk $(TDATA) $(PACKRATDATA) $(PACKRATLIST)
6791.39SchristosDATA=		$(TDATA_TO_CHECK) backzone iso3166.tab leap-seconds.list \
6801.46Schristos			leapseconds $(ZONETABLES)
6811.56SchristosAWK_SCRIPTS=	checklinks.awk checknow.awk checktab.awk leapseconds.awk \
6821.40Schristos			ziguard.awk zishrink.awk
6831.52SchristosMISC=		$(AWK_SCRIPTS)
6841.34SchristosTZS_YEAR=	2050
6851.41SchristosTZS_CUTOFF_FLAG=	-c $(TZS_YEAR)
6861.34SchristosTZS=		to$(TZS_YEAR).tzs
6871.34SchristosTZS_NEW=	to$(TZS_YEAR)new.tzs
6881.59SchristosTZS_DEPS=	$(YDATA) localtime.c private.h \
6891.59Schristos			strftime.c tzfile.h zdump.c zic.c
6901.51SchristosTZDATA_DIST = $(COMMON) $(DATA) $(MISC)
6911.41Schristos# EIGHT_YARDS is just a yard short of the whole ENCHILADA.
6921.51SchristosEIGHT_YARDS = $(TZDATA_DIST) $(DOCS) $(SOURCES) tzdata.zi
6931.41SchristosENCHILADA = $(EIGHT_YARDS) $(TZS)
6941.34Schristos
6951.34Schristos# Consult these files when deciding whether to rebuild the 'version' file.
6961.34Schristos# This list is not the same as the output of 'git ls-files', since
6971.34Schristos# .gitignore is not distributed.
6981.34SchristosVERSION_DEPS= \
6991.49Schristos		calendars CONTRIBUTING LICENSE Makefile NEWS README SECURITY \
7001.34Schristos		africa antarctica asctime.c asia australasia \
7011.34Schristos		backward backzone \
7021.56Schristos		checklinks.awk checknow.awk checktab.awk \
7031.34Schristos		date.1 date.c difftime.c \
7041.34Schristos		etcetera europe factory iso3166.tab \
7051.34Schristos		leap-seconds.list leapseconds.awk localtime.c \
7061.34Schristos		newctime.3 newstrftime.3 newtzset.3 northamerica \
7071.46Schristos		private.h southamerica strftime.c theory.html \
7081.39Schristos		time2posix.3 tz-art.html tz-how-to.html tz-link.html \
7091.34Schristos		tzfile.5 tzfile.h tzselect.8 tzselect.ksh \
7101.46Schristos		workman.sh zdump.8 zdump.c zic.8 zic.c \
7111.40Schristos		ziguard.awk zishrink.awk \
7121.56Schristos		zone.tab zone1970.tab zonenow.tab
7131.1Smlelstv
7141.46Schristosall:		tzselect zic zdump libtz.a $(TABDATA) \
7151.40Schristos		  vanguard.zi main.zi rearguard.zi
7161.1Smlelstv
7171.29SchristosALL:		all date $(ENCHILADA)
7181.1Smlelstv
7191.16Schristosinstall:	all $(DATA) $(REDO) $(MANS)
7201.39Schristos		mkdir -p '$(DESTDIR)$(BINDIR)' \
7211.39Schristos			'$(DESTDIR)$(ZDUMPDIR)' '$(DESTDIR)$(ZICDIR)' \
7221.39Schristos			'$(DESTDIR)$(LIBDIR)' \
7231.39Schristos			'$(DESTDIR)$(MANDIR)/man3' '$(DESTDIR)$(MANDIR)/man5' \
7241.39Schristos			'$(DESTDIR)$(MANDIR)/man8'
7251.44Schristos		$(ZIC_INSTALL) -l $(LOCALTIME) \
7261.58Schristos			-p $(POSIXRULES) \
7271.39Schristos			-t '$(DESTDIR)$(TZDEFAULT)'
7281.39Schristos		cp -f $(TABDATA) '$(DESTDIR)$(TZDIR)/.'
7291.39Schristos		cp tzselect '$(DESTDIR)$(BINDIR)/.'
7301.39Schristos		cp zdump '$(DESTDIR)$(ZDUMPDIR)/.'
7311.39Schristos		cp zic '$(DESTDIR)$(ZICDIR)/.'
7321.39Schristos		cp libtz.a '$(DESTDIR)$(LIBDIR)/.'
7331.39Schristos		$(RANLIB) '$(DESTDIR)$(LIBDIR)/libtz.a'
7341.39Schristos		cp -f newctime.3 newtzset.3 '$(DESTDIR)$(MANDIR)/man3/.'
7351.39Schristos		cp -f tzfile.5 '$(DESTDIR)$(MANDIR)/man5/.'
7361.39Schristos		cp -f tzselect.8 zdump.8 zic.8 '$(DESTDIR)$(MANDIR)/man8/.'
7371.1Smlelstv
7381.1SmlelstvINSTALL:	ALL install date.1
7391.39Schristos		mkdir -p '$(DESTDIR)$(BINDIR)' '$(DESTDIR)$(MANDIR)/man1'
7401.39Schristos		cp date '$(DESTDIR)$(BINDIR)/.'
7411.39Schristos		cp -f date.1 '$(DESTDIR)$(MANDIR)/man1/.'
7421.1Smlelstv
7431.48Schristos# Calculate version number from git, if available.
7441.48Schristos# Otherwise, use $(VERSION) unless it is "unknown" and there is already
7451.48Schristos# a 'version' file, in which case reuse the existing 'version' contents
7461.48Schristos# and append "-dirty" if the contents do not already end in "-dirty".
7471.34Schristosversion:	$(VERSION_DEPS)
7481.35Schristos		{ (type git) >/dev/null 2>&1 && \
7491.58Schristos		  V=$$(git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
7501.58Schristos				--abbrev=7 --dirty) || \
7511.58Schristos		  if test '$(VERSION)' = unknown && read -r V <$@; then \
7521.58Schristos		    V=$${V%-dirty}-dirty; \
7531.48Schristos		  else \
7541.48Schristos		    V='$(VERSION)'; \
7551.48Schristos		  fi; } && \
7561.35Schristos		printf '%s\n' "$$V" >$@.out
7571.35Schristos		mv $@.out $@
7581.34Schristos
7591.51Schristos# These files can be tailored by setting BACKWARD, PACKRATDATA, PACKRATLIST.
7601.40Schristosvanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS)
7611.51Schristos		$(AWK) \
7621.58Schristos		  -v DATAFORM=$(@:.zi=) \
7631.51Schristos		  -v PACKRATDATA='$(PACKRATDATA)' \
7641.51Schristos		  -v PACKRATLIST='$(PACKRATLIST)' \
7651.51Schristos		  -f ziguard.awk \
7661.40Schristos		  $(TDATA) $(PACKRATDATA) >$@.out
7671.40Schristos		mv $@.out $@
7681.41Schristos# This file has a version comment that attempts to capture any tailoring
7691.51Schristos# via BACKWARD, DATAFORM, PACKRATDATA, PACKRATLIST, and REDO.
7701.41Schristostzdata.zi:	$(DATAFORM).zi version zishrink.awk
7711.58Schristos		read -r version <version && \
7721.41Schristos		  LC_ALL=C $(AWK) \
7731.41Schristos		    -v dataform='$(DATAFORM)' \
7741.41Schristos		    -v deps='$(DSTDATA_ZI_DEPS) zishrink.awk' \
7751.41Schristos		    -v redo='$(REDO)' \
7761.41Schristos		    -v version="$$version" \
7771.41Schristos		    -f zishrink.awk \
7781.40Schristos		    $(DATAFORM).zi >$@.out
7791.38Schristos		mv $@.out $@
7801.38Schristos
7811.56Schristostzdir.h:
7821.56Schristos		printf '%s\n' >$@.out \
7831.56Schristos		  '#ifndef TZDEFAULT' \
7841.56Schristos		  '# define TZDEFAULT "$(TZDEFAULT)" /* default zone */' \
7851.56Schristos		  '#endif' \
7861.56Schristos		  '#ifndef TZDIR' \
7871.56Schristos		  '# define TZDIR "$(TZDIR)" /* TZif directory */' \
7881.56Schristos		  '#endif'
7891.56Schristos		mv $@.out $@
7901.56Schristos
7911.34Schristosversion.h:	version
7921.58Schristos		read -r VERSION <version && printf '%s\n' \
7931.35Schristos		  'static char const PKGVERSION[]="($(PACKAGE)) ";' \
7941.35Schristos		  "static char const TZVERSION[]=\"$$VERSION\";" \
7951.35Schristos		  'static char const REPORT_BUGS_TO[]="$(BUGEMAIL)";' \
7961.35Schristos		  >$@.out
7971.35Schristos		mv $@.out $@
7981.6Schristos
7991.1Smlelstvzdump:		$(TZDOBJS)
8001.9Schristos		$(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(TZDOBJS) $(LDLIBS)
8011.1Smlelstv
8021.32Schristoszic:		$(TZCOBJS)
8031.9Schristos		$(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(TZCOBJS) $(LDLIBS)
8041.1Smlelstv
8051.16Schristosleapseconds:	$(LEAP_DEPS)
8061.45Schristos		$(AWK) -v EXPIRES_LINE=$(EXPIRES_LINE) \
8071.45Schristos		  -f leapseconds.awk leap-seconds.list >$@.out
8081.35Schristos		mv $@.out $@
8091.15Schristos
8101.57Schristos# Awk script to extract a Git-style author from leap-seconds.list comments.
8111.57SchristosEXTRACT_AUTHOR = \
8121.57Schristos  author_line { sub(/^.[[:space:]]*/, ""); \
8131.57Schristos      sub(/:[[:space:]]*/, " <"); \
8141.57Schristos      printf "%s>\n", $$0; \
8151.57Schristos      success = 1; \
8161.57Schristos      exit \
8171.57Schristos  } \
8181.57Schristos  /Questions or comments to:/ { author_line = 1 } \
8191.57Schristos  END { exit !success }
8201.57Schristos
8211.57Schristos# Fetch leap-seconds.list from upstream.
8221.57Schristosfetch-leap-seconds.list:
8231.57Schristos		$(CURL) -OR $(leaplist_URI)
8241.57Schristos
8251.57Schristos# Fetch leap-seconds.list from upstream and commit it to the local repository.
8261.57Schristoscommit-leap-seconds.list: fetch-leap-seconds.list
8271.57Schristos		author=$$($(AWK) '$(EXTRACT_AUTHOR)' leap-seconds.list) && \
8281.57Schristos		date=$$(TZ=$(leaplist_TZ) stat -c%y leap-seconds.list) && \
8291.57Schristos		git commit --author="$$author" --date="$$date" -m'make $@' \
8301.57Schristos		  leap-seconds.list
8311.57Schristos
8321.58Schristos# Arguments to pass to submakes.
8331.32Schristos# They can be overridden by later submake arguments.
8341.32SchristosINSTALLARGS = \
8351.39Schristos BACKWARD='$(BACKWARD)' \
8361.39Schristos DESTDIR='$(DESTDIR)' \
8371.32Schristos PACKRATDATA='$(PACKRATDATA)' \
8381.51Schristos PACKRATLIST='$(PACKRATLIST)' \
8391.39Schristos TZDEFAULT='$(TZDEFAULT)' \
8401.39Schristos TZDIR='$(TZDIR)' \
8411.32Schristos ZIC='$(ZIC)'
8421.32Schristos
8431.46SchristosINSTALL_DATA_DEPS = zic leapseconds tzdata.zi
8441.41Schristos
8451.58Schristosposix_only: $(INSTALL_DATA_DEPS)
8461.38Schristos		$(ZIC_INSTALL) tzdata.zi
8471.32Schristos
8481.41Schristosright_only: $(INSTALL_DATA_DEPS)
8491.58Schristos		$(ZIC_INSTALL) -L leapseconds tzdata.zi
8501.1Smlelstv
8511.1Smlelstv# In earlier versions of this makefile, the other two directories were
8521.1Smlelstv# subdirectories of $(TZDIR).  However, this led to configuration errors.
8531.1Smlelstv# For example, with posix_right under the earlier scheme,
8541.1Smlelstv# TZ='right/Australia/Adelaide' got you localtime with leap seconds,
8551.1Smlelstv# but gmtime without leap seconds, which led to problems with applications
8561.1Smlelstv# like sendmail that subtract gmtime from localtime.
8571.1Smlelstv# Therefore, the other two directories are now siblings of $(TZDIR).
8581.1Smlelstv# You must replace all of $(TZDIR) to switch from not using leap seconds
8591.1Smlelstv# to using them, or vice versa.
8601.32Schristosright_posix:	right_only
8611.39Schristos		rm -fr '$(DESTDIR)$(TZDIR)-leaps'
8621.39Schristos		ln -s '$(TZDIR_BASENAME)' '$(DESTDIR)$(TZDIR)-leaps' || \
8631.39Schristos		  $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-leaps' right_only
8641.39Schristos		$(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-posix' posix_only
8651.15Schristos
8661.32Schristosposix_right:	posix_only
8671.39Schristos		rm -fr '$(DESTDIR)$(TZDIR)-posix'
8681.39Schristos		ln -s '$(TZDIR_BASENAME)' '$(DESTDIR)$(TZDIR)-posix' || \
8691.39Schristos		  $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-posix' posix_only
8701.39Schristos		$(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-leaps' right_only
8711.32Schristos
8721.1Smlelstvzones:		$(REDO)
8731.1Smlelstv
8741.40Schristos# dummy.zd is not a real file; it is mentioned here only so that the
8751.40Schristos# top-level 'make' does not have a syntax error.
8761.40SchristosZDS = dummy.zd
8771.40Schristos# Rule used only by submakes invoked by the $(TZS_NEW) rule.
8781.40Schristos# It is separate so that GNU 'make -j' can run instances in parallel.
8791.40Schristos$(ZDS): zdump
8801.58Schristos		./zdump -i $(TZS_CUTOFF_FLAG) "$$PWD/$(@:.zd=)" >$@
8811.40Schristos
8821.41SchristosTZS_NEW_DEPS = tzdata.zi zdump zic
8831.41Schristos$(TZS_NEW): $(TZS_NEW_DEPS)
8841.41Schristos		rm -fr tzs$(TZS_YEAR).dir
8851.41Schristos		mkdir tzs$(TZS_YEAR).dir
8861.41Schristos		$(zic) -d tzs$(TZS_YEAR).dir tzdata.zi
8871.38Schristos		$(AWK) '/^L/{print "Link\t" $$2 "\t" $$3}' \
8881.38Schristos		   tzdata.zi | LC_ALL=C sort >$@.out
8891.58Schristos		x=$$($(AWK) '/^Z/{print "tzs$(TZS_YEAR).dir/" $$2 ".zd"}' \
8901.41Schristos				tzdata.zi \
8911.58Schristos		     | LC_ALL=C sort -t . -k 2,2) && \
8921.41Schristos		set x $$x && \
8931.40Schristos		shift && \
8941.40Schristos		ZDS=$$* && \
8951.58Schristos		$(MAKE) TZS_CUTOFF_FLAG="$(TZS_CUTOFF_FLAG)" \
8961.41Schristos		  ZDS="$$ZDS" $$ZDS && \
8971.41Schristos		sed 's,^TZ=".*\.dir/,TZ=",' $$ZDS >>$@.out
8981.41Schristos		rm -fr tzs$(TZS_YEAR).dir
8991.40Schristos		mv $@.out $@
9001.34Schristos
9011.58Schristos# If $(TZS) exists but 'make tzs.ck' fails, a maintainer should inspect the
9021.34Schristos# failed output and fix the inconsistency, perhaps by running 'make force_tzs'.
9031.34Schristos$(TZS):
9041.41Schristos		touch $@
9051.34Schristos
9061.34Schristosforce_tzs:	$(TZS_NEW)
9071.34Schristos		cp $(TZS_NEW) $(TZS)
9081.34Schristos
9091.16Schristoslibtz.a:	$(LIBOBJS)
9101.37Schristos		rm -f $@
9111.56Schristos		$(AR) $(ARFLAGS) $@ $(LIBOBJS)
9121.16Schristos		$(RANLIB) $@
9131.1Smlelstv
9141.1Smlelstvdate:		$(DATEOBJS)
9151.9Schristos		$(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
9161.1Smlelstv
9171.34Schristostzselect:	tzselect.ksh version
9181.58Schristos		read -r VERSION <version && sed \
9191.56Schristos		  -e "s'#!/bin/bash'#!"'$(KSHELL)'\' \
9201.56Schristos		  -e s\''\(AWK\)=[^}]*'\''\1=\'\''$(AWK)\'\'\' \
9211.56Schristos		  -e s\''\(PKGVERSION\)=.*'\''\1=\'\''($(PACKAGE)) \'\'\' \
9221.56Schristos		  -e s\''\(REPORT_BUGS_TO\)=.*'\''\1=\'\''$(BUGEMAIL)\'\'\' \
9231.56Schristos		  -e s\''\(TZDIR\)=[^}]*'\''\1=\'\''$(TZDIR)\'\'\' \
9241.56Schristos		  -e s\''\(TZVERSION\)=.*'\''\1=\'"'$$VERSION\\''" \
9251.56Schristos		  <$@.ksh >$@.out
9261.35Schristos		chmod +x $@.out
9271.35Schristos		mv $@.out $@
9281.1Smlelstv
9291.59Schristoscheck: check_mild back.ck now.ck
9301.58Schristoscheck_mild: check_web check_zishrink \
9311.58Schristos  character-set.ck white-space.ck links.ck mainguard.ck \
9321.59Schristos  name-lengths.ck slashed-abbrs.ck sorted.ck \
9331.58Schristos  tables.ck ziguard.ck tzs.ck
9341.9Schristos
9351.56Schristos# True if UTF8_LOCALE does not work;
9361.56Schristos# otherwise, false but with LC_ALL set to $(UTF8_LOCALE).
9371.56SchristosUTF8_LOCALE_MISSING = \
9381.56Schristos  { test ! '$(UTF8_LOCALE)' \
9391.56Schristos    || ! printf 'A\304\200B\n' \
9401.56Schristos         | LC_ALL='$(UTF8_LOCALE)' grep -q '^A.B$$' >/dev/null 2>&1 \
9411.58Schristos    || { export LC_ALL='$(UTF8_LOCALE)'; false; }; }
9421.56Schristos
9431.58Schristoscharacter-set.ck: $(ENCHILADA)
9441.56Schristos	$(UTF8_LOCALE_MISSING) || { \
9451.22Schristos		sharp='#' && \
9461.60Schristos		! grep -Env $(SAFE_LINE) $(MANS) date.1 \
9471.60Schristos			$(MISC) $(SOURCES) \
9481.60Schristos			LICENSE \
9491.38Schristos			version tzdata.zi && \
9501.41Schristos		! grep -Env $(SAFE_LINE)'|^UNUSUAL_OK_'$(OK_CHAR)'*$$' \
9511.40Schristos			Makefile && \
9521.39Schristos		! grep -Env $(SAFE_SHARP_LINE) $(TDATA_TO_CHECK) backzone \
9531.46Schristos			leapseconds zone.tab && \
9541.38Schristos		! grep -Env $(OK_LINE) $(ENCHILADA); \
9551.38Schristos	}
9561.41Schristos	touch $@
9571.22Schristos
9581.58Schristoswhite-space.ck: $(ENCHILADA)
9591.56Schristos	$(UTF8_LOCALE_MISSING) || { \
9601.58Schristos		patfmt=' \t|[\f\r\v]' && pat=$$(printf "$$patfmt\\n") && \
9611.56Schristos		! grep -En "$$pat|[$s]\$$" \
9621.60Schristos		    $(ENCHILADA:leap-seconds.list=); \
9631.56Schristos	}
9641.56Schristos	touch $@
9651.23Schristos
9661.51SchristosPRECEDES_FILE_NAME = ^(Zone|Link[$s]+[^$s]+)[$s]+
9671.51SchristosFILE_NAME_COMPONENT_TOO_LONG = $(PRECEDES_FILE_NAME)[^$s]*[^/$s]{15}
9681.38Schristos
9691.58Schristosname-lengths.ck: $(TDATA_TO_CHECK) backzone
9701.58Schristos		:;! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
9711.39Schristos			$(TDATA_TO_CHECK) backzone
9721.41Schristos		touch $@
9731.38Schristos
9741.58Schristosmainguard.ck: main.zi
9751.58Schristos		test '$(PACKRATLIST)' || \
9761.58Schristos		  cat $(TDATA) $(PACKRATDATA) | diff -u - main.zi
9771.58Schristos		touch $@
9781.58Schristos
9791.51SchristosPRECEDES_STDOFF = ^(Zone[$s]+[^$s]+)?[$s]+
9801.51SchristosSTDOFF = [-+]?[0-9:.]+
9811.51SchristosRULELESS_SAVE = (-|$(STDOFF)[sd]?)
9821.51SchristosRULELESS_SLASHED_ABBRS = \
9831.51Schristos  $(PRECEDES_STDOFF)$(STDOFF)[$s]+$(RULELESS_SAVE)[$s]+[^$s]*/
9841.51Schristos
9851.58Schristosslashed-abbrs.ck: $(TDATA_TO_CHECK)
9861.58Schristos		:;! grep -En '$(RULELESS_SLASHED_ABBRS)' $(TDATA_TO_CHECK)
9871.51Schristos		touch $@
9881.51Schristos
9891.23SchristosCHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
9901.23Schristos
9911.58Schristossorted.ck: backward backzone
9921.54Schristos		$(AWK) '/^Link/ {printf "%.5d %s\n", g, $$3} !/./ {g++}' \
9931.53Schristos		  backward | LC_ALL=C sort -cu
9941.58Schristos		$(AWK) '/^Zone.*\// {print $$2}' backzone | LC_ALL=C sort -cu
9951.41Schristos		touch $@
9961.23Schristos
9971.58Schristosback.ck: checklinks.awk $(TDATA_TO_CHECK)
9981.53Schristos		$(AWK) \
9991.53Schristos		  -v DATAFORM=$(DATAFORM) \
10001.53Schristos		  -v backcheck=backward \
10011.53Schristos		  -f checklinks.awk $(TDATA_TO_CHECK)
10021.54Schristos		touch $@
10031.54Schristos
10041.58Schristoslinks.ck: checklinks.awk tzdata.zi
10051.53Schristos		$(AWK) \
10061.53Schristos		  -v DATAFORM=$(DATAFORM) \
10071.53Schristos		  -f checklinks.awk tzdata.zi
10081.41Schristos		touch $@
10091.26Schristos
10101.56Schristos# Check timestamps from now through 28 years from now, to make sure
10111.56Schristos# that zonenow.tab contains all sequences of planned timestamps,
10121.56Schristos# without any duplicate sequences.  In theory this might require
10131.58Schristos# 2800+ years but that would take a long time to check.
10141.58SchristosCHECK_NOW_TIMESTAMP = $$(./date +%s)
10151.56SchristosCHECK_NOW_FUTURE_YEARS = 28
10161.58SchristosCHECK_NOW_FUTURE_SECS = $(CHECK_NOW_FUTURE_YEARS) * 366 * 24 * 60 * 60
10171.58Schristosnow.ck: checknow.awk date tzdata.zi zdump zic zone1970.tab zonenow.tab
10181.58Schristos		rm -fr $@d
10191.58Schristos		mkdir $@d
10201.58Schristos		./zic -d $@d tzdata.zi
10211.56Schristos		now=$(CHECK_NOW_TIMESTAMP) && \
10221.58Schristos		  future=$$(($(CHECK_NOW_FUTURE_SECS) + $$now)) && \
10231.56Schristos		  ./zdump -i -t $$now,$$future \
10241.58Schristos		     $$(find "$$PWD/$@d"/????*/ -type f) \
10251.58Schristos		     >$@d/zdump-now.tab && \
10261.58Schristos		  ./zdump -i -t 0,$$future \
10271.58Schristos		     $$(find "$$PWD/$@d" -name Etc -prune \
10281.58Schristos			  -o -type f ! -name '*.tab' -print) \
10291.60Schristos		     >$@d/zdump-1970.tab && \
10301.56Schristos		$(AWK) \
10311.60Schristos		  -v now=$$now \
10321.60Schristos		  -v now_out=$@.out \
10331.58Schristos		  -v zdump_table=$@d/zdump-now.tab \
10341.56Schristos		  -f checknow.awk zonenow.tab
10351.58Schristos		$(AWK) \
10361.58Schristos		  'BEGIN {print "-\t-\tUTC"} /^Zone/ {print "-\t-\t" $$2}' \
10371.58Schristos		  $(PRIMARY_YDATA) backward factory | \
10381.58Schristos		 $(AWK) \
10391.58Schristos		   -v zdump_table=$@d/zdump-1970.tab \
10401.58Schristos		   -f checknow.awk
10411.58Schristos		rm -fr $@d
10421.60Schristos		touch $@.out
10431.60Schristos		mv $@.out $@
10441.56Schristos
10451.58Schristostables.ck: checktab.awk $(YDATA) backward zone.tab zone1970.tab
10461.22Schristos		for tab in $(ZONETABLES); do \
10471.49Schristos		  test "$$tab" = zone.tab && links='$(BACKWARD)' || links=''; \
10481.49Schristos		  $(AWK) -f checktab.awk -v zone_table=$$tab $(YDATA) $$links \
10491.22Schristos		    || exit; \
10501.22Schristos		done
10511.41Schristos		touch $@
10521.1Smlelstv
10531.58Schristostzs.ck: $(TZS) $(TZS_NEW)
10541.41Schristos		if test -s $(TZS); then \
10551.58Schristos		  $(SETUP_DIFF_TZS) && $$DIFF_TZS $(TZS) $(TZS_NEW); \
10561.41Schristos		else \
10571.41Schristos		  cp $(TZS_NEW) $(TZS); \
10581.41Schristos		fi
10591.41Schristos		touch $@
10601.34Schristos
10611.42Schristoscheck_web:	$(CHECK_WEB_PAGES)
10621.58Schristos.SUFFIXES: .ck .html
10631.58Schristos.html.ck:
10641.58Schristos		{ ! ($(CURL) --version) >/dev/null 2>&1 || \
10651.58Schristos		    $(CURL) -sS --url https://validator.w3.org/nu/ -F out=gnu \
10661.58Schristos		          -F file=@$<; } >$@.out && \
10671.42Schristos		  test ! -s $@.out || { cat $@.out; exit 1; }
10681.42Schristos		mv $@.out $@
10691.38Schristos
10701.58Schristosziguard.ck: rearguard.zi vanguard.zi ziguard.awk
10711.51Schristos		$(AWK) -v DATAFORM=rearguard -f ziguard.awk vanguard.zi | \
10721.51Schristos		  diff -u rearguard.zi -
10731.51Schristos		$(AWK) -v DATAFORM=vanguard -f ziguard.awk rearguard.zi | \
10741.51Schristos		  diff -u vanguard.zi -
10751.51Schristos		touch $@
10761.51Schristos
10771.40Schristos# Check that zishrink.awk does not alter the data, and that ziguard.awk
10781.40Schristos# preserves main-format data.
10791.58Schristoscheck_zishrink: zishrink-posix.ck zishrink-right.ck
10801.58Schristoszishrink-posix.ck zishrink-right.ck: \
10811.51Schristos  zic leapseconds $(PACKRATDATA) $(PACKRATLIST) \
10821.51Schristos  $(TDATA) $(DATAFORM).zi tzdata.zi
10831.58Schristos		rm -fr $@d t-$@d shrunk-$@d
10841.58Schristos		mkdir $@d t-$@d shrunk-$@d
10851.41Schristos		case $@ in \
10861.58Schristos		  *right*) leap='-L leapseconds';; \
10871.41Schristos		  *) leap=;; \
10881.41Schristos		esac && \
10891.58Schristos		  $(ZIC) $$leap -d $@d $(DATAFORM).zi && \
10901.58Schristos		  $(ZIC) $$leap -d shrunk-$@d tzdata.zi && \
10911.51Schristos		  case $(DATAFORM),$(PACKRATLIST) in \
10921.51Schristos		    main,) \
10931.58Schristos		      $(ZIC) $$leap -d t-$@d $(TDATA) && \
10941.40Schristos		      $(AWK) '/^Rule/' $(TDATA) | \
10951.58Schristos			$(ZIC) $$leap -d t-$@d - $(PACKRATDATA) && \
10961.58Schristos		      diff -r $@d t-$@d;; \
10971.41Schristos		  esac
10981.58Schristos		diff -r $@d shrunk-$@d
10991.58Schristos		rm -fr $@d t-$@d shrunk-$@d
11001.41Schristos		touch $@
11011.1Smlelstv
11021.14Schristosclean_misc:
11031.58Schristos		rm -fr *.ckd *.dir
11041.60Schristos		rm -f *.ck *.core *.o *.out *.t core core.* \
11051.56Schristos		  date tzdir.h tzselect version.h zdump zic libtz.a
11061.14Schristosclean:		clean_misc
11071.58Schristos		rm -fr tzdb-*/
11081.43Schristos		rm -f *.zi $(TZS_NEW)
11091.1Smlelstv
11101.1Smlelstvmaintainer-clean: clean
11111.1Smlelstv		@echo 'This command is intended for maintainers to use; it'
11121.1Smlelstv		@echo 'deletes files that may need special tools to rebuild.'
11131.34Schristos		rm -f leapseconds version $(MANTXTS) $(TZS) *.asc *.tar.*
11141.1Smlelstv
11151.1Smlelstvnames:
11161.1Smlelstv		@echo $(ENCHILADA)
11171.1Smlelstv
11181.58Schristospublic: check public.ck $(CHECK_TIME_T_ALTERNATIVES) \
11191.16Schristos		tarballs signatures
11201.16Schristos
11211.16Schristosdate.1.txt:	date.1
11221.16Schristosnewctime.3.txt:	newctime.3
11231.16Schristosnewstrftime.3.txt: newstrftime.3
11241.16Schristosnewtzset.3.txt:	newtzset.3
11251.16Schristostime2posix.3.txt: time2posix.3
11261.16Schristostzfile.5.txt:	tzfile.5
11271.16Schristostzselect.8.txt:	tzselect.8
11281.16Schristoszdump.8.txt:	zdump.8
11291.16Schristoszic.8.txt:	zic.8
11301.16Schristos
11311.16Schristos$(MANTXTS):	workman.sh
11321.60Schristos		LC_ALL=C sh workman.sh $(MANFLAGS) $(@:.txt=) >$@.out
11331.35Schristos		mv $@.out $@
11341.9Schristos
11351.48Schristos# Set file timestamps deterministically if possible,
11361.48Schristos# so that tarballs containing the timestamps are reproducible.
11371.48Schristos#
11381.48Schristos# '$(SET_TIMESTAMP_N) N DEST A B C ...' sets the timestamp of the
11391.48Schristos# file DEST to the maximum of the timestamps of the files A B C ...,
11401.48Schristos# plus N if GNU ls and touch are available.
11411.48SchristosSET_TIMESTAMP_N = sh -c '\
11421.48Schristos  n=$$0 dest=$$1; shift; \
11431.56Schristos  <"$$dest" && \
11441.48Schristos  if test $$n != 0 && \
11451.58Schristos     lsout=$$(ls -nt --time-style="+%s" "$$@" 2>/dev/null); then \
11461.48Schristos    set x $$lsout && \
11471.58Schristos    timestamp=$$(($$7 + $$n)) && \
11481.56Schristos    echo "+ touch -md @$$timestamp $$dest" && \
11491.56Schristos    touch -md @$$timestamp "$$dest"; \
11501.56Schristos  else \
11511.58Schristos    newest=$$(ls -t "$$@" | sed 1q) && \
11521.56Schristos    echo "+ touch -mr $$newest $$dest" && \
11531.56Schristos    touch -mr "$$newest" "$$dest"; \
11541.56Schristos  fi'
11551.48Schristos# If DEST depends on A B C ... in this Makefile, callers should use
11561.48Schristos# $(SET_TIMESTAMP_DEP) DEST A B C ..., for the benefit of any
11571.48Schristos# downstream 'make' that considers equal timestamps to be out of date.
11581.48Schristos# POSIX allows this 'make' behavior, and HP-UX 'make' does it.
11591.48Schristos# If all that matters is that the timestamp be reproducible
11601.48Schristos# and plausible, use $(SET_TIMESTAMP).
11611.48SchristosSET_TIMESTAMP = $(SET_TIMESTAMP_N) 0
11621.48SchristosSET_TIMESTAMP_DEP = $(SET_TIMESTAMP_N) 1
11631.48Schristos
11641.41Schristos# Set the timestamps to those of the git repository, if available,
11651.6Schristos# and if the files have not changed since then.
11661.48Schristos# This uses GNU 'ls --time-style=+%s', which outputs the seconds count,
11671.48Schristos# and GNU 'touch -d@N FILE', where N is the number of seconds since 1970.
11681.48Schristos# If git or GNU is absent, don't bother to sync with git timestamps.
11691.16Schristos# Also, set the timestamp of each prebuilt file like 'leapseconds'
11701.16Schristos# to be the maximum of the files it depends on.
11711.41Schristosset-timestamps.out: $(EIGHT_YARDS)
11721.16Schristos		rm -f $@
11731.35Schristos		if (type git) >/dev/null 2>&1 && \
11741.58Schristos		   files=$$(git ls-files $(EIGHT_YARDS)) && \
11751.16Schristos		   touch -md @1 test.out; then \
11761.16Schristos		  rm -f test.out && \
11771.16Schristos		  for file in $$files; do \
11781.59Schristos		    if git diff --quiet HEAD $$file; then \
11791.58Schristos		      time=$$(TZ=UTC0 git log -1 \
11801.56Schristos			--format='tformat:%cd' \
11811.60Schristos			--date='format-local:%Y-%m-%dT%H:%M:%SZ' \
11821.58Schristos			$$file) && \
11831.56Schristos		      echo "+ touch -md $$time $$file" && \
11841.56Schristos		      touch -md $$time $$file; \
11851.16Schristos		    else \
11861.16Schristos		      echo >&2 "$$file: warning: does not match repository"; \
11871.16Schristos		    fi || exit; \
11881.16Schristos		  done; \
11891.16Schristos		fi
11901.48Schristos		$(SET_TIMESTAMP_DEP) leapseconds $(LEAP_DEPS)
11911.58Schristos		for file in $(MANTXTS); do \
11921.58Schristos		  $(SET_TIMESTAMP_DEP) $$file $${file%.txt} workman.sh || \
11931.16Schristos		    exit; \
11941.6Schristos		done
11951.48Schristos		$(SET_TIMESTAMP_DEP) version $(VERSION_DEPS)
11961.48Schristos		$(SET_TIMESTAMP_DEP) tzdata.zi $(TZDATA_ZI_DEPS)
11971.41Schristos		touch $@
11981.41Schristosset-tzs-timestamp.out: $(TZS)
11991.48Schristos		$(SET_TIMESTAMP_DEP) $(TZS) $(TZS_DEPS)
12001.16Schristos		touch $@
12011.6Schristos
12021.1Smlelstv# The zics below ensure that each data file can stand on its own.
12031.1Smlelstv# We also do an all-files run to catch links to links.
12041.1Smlelstv
12051.58Schristospublic.ck: $(VERSION_DEPS)
12061.58Schristos		rm -fr $@d
12071.58Schristos		mkdir $@d
12081.58Schristos		ln $(VERSION_DEPS) $@d
12091.58Schristos		cd $@d \
12101.56Schristos		  && $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' TZDIR='$(TZDIR)' ALL
12111.58Schristos		for i in $(TDATA_TO_CHECK) \
12121.58Schristos		    tzdata.zi vanguard.zi main.zi rearguard.zi; \
12131.48Schristos		do \
12141.58Schristos		  $@d/zic -v -d $@d/zoneinfo $@d/$$i || exit; \
12151.9Schristos		done
12161.58Schristos		$@d/zic -v -d $@d/zoneinfo-all $(TDATA_TO_CHECK)
12171.49Schristos		:
12181.49Schristos		: Also check 'backzone' syntax.
12191.58Schristos		rm $@d/main.zi
12201.58Schristos		cd $@d && $(MAKE) PACKRATDATA=backzone main.zi
12211.58Schristos		$@d/zic -d $@d/zoneinfo main.zi
12221.58Schristos		rm $@d/main.zi
12231.58Schristos		cd $@d && \
12241.51Schristos		  $(MAKE) PACKRATDATA=backzone PACKRATLIST=zone.tab main.zi
12251.58Schristos		$@d/zic -d $@d/zoneinfo main.zi
12261.49Schristos		:
12271.58Schristos		rm -fr $@d
12281.41Schristos		touch $@
12291.9Schristos
12301.14Schristos# Check that the code works under various alternative
12311.14Schristos# implementations of time_t.
12321.41Schristoscheck_time_t_alternatives: $(TIME_T_ALTERNATIVES)
12331.41Schristos$(TIME_T_ALTERNATIVES_TAIL): $(TIME_T_ALTERNATIVES_HEAD)
12341.41Schristos$(TIME_T_ALTERNATIVES): $(VERSION_DEPS)
12351.58Schristos		rm -fr $@d
12361.58Schristos		mkdir $@d
12371.58Schristos		ln $(VERSION_DEPS) $@d
12381.41Schristos		case $@ in \
12391.58Schristos		  *32_t*) range=-2147483648,2147483648;; \
12401.41Schristos		  u*) range=0,4294967296;; \
12411.41Schristos		  *) range=-4294967296,4294967296;; \
12421.41Schristos		esac && \
12431.58Schristos		wd=$$PWD && \
12441.58Schristos		zones=$$($(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab) && \
12451.41Schristos		if test $@ = $(TIME_T_ALTERNATIVES_HEAD); then \
12461.41Schristos		  range_target=; \
12471.23Schristos		else \
12481.41Schristos		  range_target=to$$range.tzs; \
12491.23Schristos		fi && \
12501.58Schristos		(cd $@d && \
12511.58Schristos		  $(MAKE) TOPDIR="$$wd/$@d" \
12521.58Schristos		    CFLAGS='$(CFLAGS) -Dtime_tz='"'$(@:.ck=)'" \
12531.23Schristos		    REDO='$(REDO)' \
12541.58Schristos		    D="$$wd/$@d" \
12551.41Schristos		    TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
12561.41Schristos		    install $$range_target) && \
12571.41Schristos		test $@ = $(TIME_T_ALTERNATIVES_HEAD) || { \
12581.58Schristos		  (cd $(TIME_T_ALTERNATIVES_HEAD)d && \
12591.58Schristos		    $(MAKE) TOPDIR="$$wd/$@d" \
12601.41Schristos		      TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
12611.58Schristos		      D="$$wd/$@d" \
12621.41Schristos		      to$$range.tzs) && \
12631.58Schristos		  $(SETUP_DIFF_TZS) && \
12641.58Schristos		  $$DIFF_TZS $(TIME_T_ALTERNATIVES_HEAD)d/to$$range.tzs \
12651.58Schristos			  $@d/to$$range.tzs && \
12661.41Schristos		  if diff -q Makefile Makefile 2>/dev/null; then \
12671.41Schristos		    quiet_option='-q'; \
12681.41Schristos		  else \
12691.41Schristos		    quiet_option=''; \
12701.41Schristos		  fi && \
12711.58Schristos		    diff $$quiet_option -r $(TIME_T_ALTERNATIVES_HEAD)d/etc \
12721.58Schristos					   $@d/etc && \
12731.41Schristos		    diff $$quiet_option -r \
12741.58Schristos		      $(TIME_T_ALTERNATIVES_HEAD)d/usr/share \
12751.58Schristos		      $@d/usr/share; \
12761.41Schristos		}
12771.41Schristos		touch $@
12781.34Schristos
12791.40SchristosTRADITIONAL_ASC = \
12801.60Schristos  tzcode$(VERSION).tar.gz.asc.t \
12811.60Schristos  tzdata$(VERSION).tar.gz.asc.t
12821.41SchristosREARGUARD_ASC = \
12831.60Schristos  tzdata$(VERSION)-rearguard.tar.gz.asc.t
12841.41SchristosALL_ASC = $(TRADITIONAL_ASC) $(REARGUARD_ASC) \
12851.60Schristos  tzdb-$(VERSION).tar.lz.asc.t
12861.40Schristos
12871.51Schristostarballs rearguard_tarballs tailored_tarballs traditional_tarballs \
12881.41Schristossignatures rearguard_signatures traditional_signatures: \
12891.51Schristos  version set-timestamps.out rearguard.zi vanguard.zi
12901.58Schristos		read -r VERSION <version && \
12911.48Schristos		$(MAKE) AWK='$(AWK)' VERSION="$$VERSION" $@_version
12921.35Schristos
12931.40Schristos# These *_version rules are intended for use if VERSION is set by some
12941.40Schristos# other means.  Ordinarily these rules are used only by the above
12951.40Schristos# non-_version rules, which set VERSION on the 'make' command line.
12961.41Schristostarballs_version: traditional_tarballs_version rearguard_tarballs_version \
12971.60Schristos  tzdb-$(VERSION).tar.lz.t
12981.41Schristosrearguard_tarballs_version: \
12991.60Schristos  tzdata$(VERSION)-rearguard.tar.gz.t
13001.38Schristostraditional_tarballs_version: \
13011.60Schristos  tzcode$(VERSION).tar.gz.t tzdata$(VERSION).tar.gz.t
13021.51Schristostailored_tarballs_version: \
13031.60Schristos  tzdata$(VERSION)-tailored.tar.gz.t
13041.40Schristossignatures_version: $(ALL_ASC)
13051.41Schristosrearguard_signatures_version: $(REARGUARD_ASC)
13061.40Schristostraditional_signatures_version: $(TRADITIONAL_ASC)
13071.9Schristos
13081.60Schristostzcode$(VERSION).tar.gz.t: set-timestamps.out
13091.58Schristos		$(SETUP_TAR) && \
13101.58Schristos		$$TAR -cf - \
13111.23Schristos		    $(COMMON) $(DOCS) $(SOURCES) | \
13121.60Schristos		  gzip $(GZIPFLAGS) >$(@:.t=)
13131.60Schristos		$(SET_TIMESTAMP) $(@:.t=) $(COMMON) $(DOCS) $(SOURCES)
13141.60Schristos		touch $@
13151.10Schristos
13161.60Schristostzdata$(VERSION).tar.gz.t: set-timestamps.out
13171.58Schristos		$(SETUP_TAR) && \
13181.58Schristos		$$TAR -cf - $(TZDATA_DIST) | \
13191.60Schristos		  gzip $(GZIPFLAGS) >$(@:.t=)
13201.60Schristos		$(SET_TIMESTAMP) $(@:.t=) $(TZDATA_DIST)
13211.60Schristos		touch $@
13221.9Schristos
13231.51Schristos# Create empty files with a reproducible timestamp.
13241.51SchristosCREATE_EMPTY = TZ=UTC0 touch -mt 202010122253.00
13251.51Schristos
13261.51Schristos# The obsolescent *rearguard* targets and related macros are present
13271.51Schristos# for backwards compatibility with tz releases 2018e through 2022a.
13281.51Schristos# They should go away eventually.  To build rearguard tarballs you
13291.51Schristos# can instead use 'make DATAFORM=rearguard tailored_tarballs'.
13301.60Schristostzdata$(VERSION)-rearguard.tar.gz.t: rearguard.zi set-timestamps.out
13311.51Schristos		rm -fr $@.dir
13321.51Schristos		mkdir $@.dir
13331.51Schristos		ln $(TZDATA_DIST) $@.dir
13341.51Schristos		cd $@.dir && rm -f $(TDATA) $(PACKRATDATA) version
13351.40Schristos		for f in $(TDATA) $(PACKRATDATA); do \
13361.51Schristos		  rearf=$@.dir/$$f; \
13371.40Schristos		  $(AWK) -v DATAFORM=rearguard -f ziguard.awk $$f >$$rearf && \
13381.48Schristos		  $(SET_TIMESTAMP_DEP) $$rearf ziguard.awk $$f || exit; \
13391.40Schristos		done
13401.51Schristos		sed '1s/$$/-rearguard/' <version >$@.dir/version
13411.47Schristos		: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
13421.51Schristos		$(CREATE_EMPTY) $@.dir/pacificnew
13431.56Schristos		touch -mr version $@.dir/version
13441.58Schristos		$(SETUP_TAR) && \
13451.51Schristos		  (cd $@.dir && \
13461.58Schristos		   $$TAR -cf - \
13471.51Schristos			$(TZDATA_DIST) pacificnew | \
13481.60Schristos		     gzip $(GZIPFLAGS)) >$(@:.t=)
13491.60Schristos		$(SET_TIMESTAMP) $(@:.t=) \
13501.60Schristos		  $$(cd $@.dir && \
13511.60Schristos		       ls $(TZDATA_DIST) pacificnew | sed 's,^,$@.dir/,')
13521.60Schristos		touch $@
13531.40Schristos
13541.51Schristos# Create a tailored tarball suitable for TZUpdater and compatible tools.
13551.51Schristos# For example, 'make DATAFORM=vanguard tailored_tarballs' makes a tarball
13561.51Schristos# useful for testing whether TZUpdater supports vanguard form.
13571.51Schristos# The generated tarball is not byte-for-byte equivalent to a hand-tailored
13581.51Schristos# traditional tarball, as data entries are put into 'etcetera' even if they
13591.51Schristos# came from some other source file.  However, the effect should be the same
13601.51Schristos# for ordinary use, which reads all the source files.
13611.60Schristostzdata$(VERSION)-tailored.tar.gz.t: set-timestamps.out
13621.51Schristos		rm -fr $@.dir
13631.51Schristos		mkdir $@.dir
13641.51Schristos		: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
13651.58Schristos		if test $(DATAFORM) = vanguard; then \
13661.58Schristos		  pacificnew=; \
13671.58Schristos		else \
13681.58Schristos		  pacificnew=pacificnew; \
13691.58Schristos		fi && \
13701.51Schristos		cd $@.dir && \
13711.51Schristos		  $(CREATE_EMPTY) $(PRIMARY_YDATA) $(NDATA) backward \
13721.58Schristos		  $$pacificnew
13731.60Schristos		(sed '/^#/!d' tzdata.zi && echo && cat $(DATAFORM).zi) \
13741.51Schristos		  >$@.dir/etcetera
13751.56Schristos		touch -mr tzdata.zi $@.dir/etcetera
13761.51Schristos		sed -n \
13771.51Schristos		  -e '/^# *version  *\(.*\)/h' \
13781.51Schristos		  -e '/^# *ddeps  */H' \
13791.51Schristos		  -e '$$!d' \
13801.51Schristos		  -e 'g' \
13811.51Schristos		  -e 's/^# *version  *//' \
13821.51Schristos		  -e 's/\n# *ddeps  */-/' \
13831.51Schristos		  -e 's/ /-/g' \
13841.51Schristos		  -e 'p' \
13851.51Schristos		  <tzdata.zi >$@.dir/version
13861.56Schristos		touch -mr version $@.dir/version
13871.51Schristos		links= && \
13881.51Schristos		  for file in $(TZDATA_DIST); do \
13891.51Schristos		    test -f $@.dir/$$file || links="$$links $$file"; \
13901.51Schristos		  done && \
13911.51Schristos		  ln $$links $@.dir
13921.58Schristos		$(SETUP_TAR) && \
13931.51Schristos		  (cd $@.dir && \
13941.60Schristos		   $$TAR -cf - *) | gzip $(GZIPFLAGS) >$(@:.t=)
13951.60Schristos		$(SET_TIMESTAMP) $(@:.t=) \
13961.60Schristos		  $$(cd $@.dir && ls * | sed 's,^,$@.dir/,')
13971.60Schristos		touch $@
13981.51Schristos
13991.60Schristostzdb-$(VERSION).tar.lz.t: set-timestamps.out set-tzs-timestamp.out
14001.34Schristos		rm -fr tzdb-$(VERSION)
14011.34Schristos		mkdir tzdb-$(VERSION)
14021.34Schristos		ln $(ENCHILADA) tzdb-$(VERSION)
14031.48Schristos		$(SET_TIMESTAMP) tzdb-$(VERSION) tzdb-$(VERSION)/*
14041.58Schristos		$(SETUP_TAR) && \
14051.60Schristos		  $$TAR -cf - tzdb-$(VERSION) | lzip -9 >$(@:.t=)
14061.60Schristos		$(SET_TIMESTAMP) $(@:.t=) tzdb-$(VERSION)
14071.60Schristos		touch $@
14081.9Schristos
14091.60Schristostzcode$(VERSION).tar.gz.asc.t: tzcode$(VERSION).tar.gz.t
14101.60Schristostzdata$(VERSION).tar.gz.asc.t: tzdata$(VERSION).tar.gz.t
14111.60Schristostzdata$(VERSION)-rearguard.tar.gz.asc.t: tzdata$(VERSION)-rearguard.tar.gz.t
14121.60Schristostzdb-$(VERSION).tar.lz.asc.t: tzdb-$(VERSION).tar.lz.t
14131.40Schristos$(ALL_ASC):
14141.60Schristos		$(GPG) --armor --detach-sign $(?:.t=)
14151.60Schristos		$(SET_TIMESTAMP) $(@:.t=) $(?:.t=)
14161.60Schristos		touch $@
14171.34Schristos
14181.41SchristosTYPECHECK_CFLAGS = $(CFLAGS) -DTYPECHECK -D__time_t_defined -D_TIME_T
14191.58Schristostypecheck: long-long.ck unsigned.ck
14201.58Schristoslong-long.ck unsigned.ck: $(VERSION_DEPS)
14211.58Schristos		rm -fr $@d
14221.58Schristos		mkdir $@d
14231.58Schristos		ln $(VERSION_DEPS) $@d
14241.58Schristos		cd $@d && \
14251.41Schristos		  case $@ in \
14261.58Schristos		    long-long.*) i="long long";; \
14271.58Schristos		    unsigned.* ) i="unsigned" ;; \
14281.41Schristos		  esac && \
14291.41Schristos		  $(MAKE) \
14301.41Schristos		    CFLAGS="$(TYPECHECK_CFLAGS) \"-Dtime_t=$$i\"" \
14311.58Schristos		    TOPDIR="$$PWD" \
14321.41Schristos		    install
14331.58Schristos		$@d/zdump -i -c 1970,1971 Europe/Rome
14341.41Schristos		touch $@
14351.1Smlelstv
14361.38Schristoszonenames:	tzdata.zi
14371.38Schristos		@$(AWK) '/^Z/ { print $$2 } /^L/ { print $$3 }' tzdata.zi
14381.1Smlelstv
14391.59Schristosasctime.o:	private.h
14401.1Smlelstvdate.o:		private.h
14411.1Smlelstvdifftime.o:	private.h
14421.59Schristoslocaltime.o:	private.h tzdir.h tzfile.h
14431.59Schristosstrftime.o:	localtime.c private.h tzdir.h tzfile.h
14441.59Schristoszdump.o:	private.h version.h
14451.59Schristoszic.o:		private.h tzdir.h tzfile.h version.h
14461.1Smlelstv
14471.22Schristos.PHONY: ALL INSTALL all
14481.54Schristos.PHONY: check check_mild check_time_t_alternatives
14491.42Schristos.PHONY: check_web check_zishrink
14501.57Schristos.PHONY: clean clean_misc commit-leap-seconds.list dummy.zd
14511.57Schristos.PHONY: fetch-leap-seconds.list force_tzs
14521.58Schristos.PHONY: install maintainer-clean names
14531.51Schristos.PHONY: posix_only posix_right public
14541.41Schristos.PHONY: rearguard_signatures rearguard_signatures_version
14551.41Schristos.PHONY: rearguard_tarballs rearguard_tarballs_version
14561.41Schristos.PHONY: right_only right_posix signatures signatures_version
14571.40Schristos.PHONY: tarballs tarballs_version
14581.40Schristos.PHONY: traditional_signatures traditional_signatures_version
14591.40Schristos.PHONY: traditional_tarballs traditional_tarballs_version
14601.51Schristos.PHONY: tailored_tarballs tailored_tarballs_version
14611.40Schristos.PHONY: typecheck
14621.22Schristos.PHONY: zonenames zones
14631.40Schristos.PHONY: $(ZDS)
1464