tz
Threads by month
- ----- 2024 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2000 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1999 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1998 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1997 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1996 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1995 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1994 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1993 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1992 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1991 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1990 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1989 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1988 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1987 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1986 -----
- December
- November
June 2018
- 24 participants
- 26 discussions
28 Aug '19
Below find proposed time zone package changes; the executive summary:
* Makefile Change LOCALTIME default from "Factory" to "GMT";
do not compile "factory" file
(but keep it in the distribution).
* Theory Remove reference to "Factory" zone.
* australasia Change end of DST in Samoa in 2011 from
2011-04-03 0:00 to 2011-04-03 1:00
(thanks to Raymond Hughes for a reference).
* localtime.c Initialize ttinfo structures filled by tzparse
(thanks to Ravindra for reporting a valgrind warning).
* zic.c Fix generation of POSIX strings for zones with
rules using "weekday<=n" forms of dates
(thanks to Lei Liu for finding the problem).
Also, limit output for non-POSIX-specificable zones
defined to follow the same rules every year.
(Note that no zones of either of the above types
appear in the distribution; these changes cater to
add-on zones).
If no problems are found, 2010n will appear on 2010-10-25.
--ado
diff -r -c old/Makefile new/Makefile
*** old/Makefile Mon Sep 27 09:24:25 2010
--- new/Makefile Tue Oct 12 12:36:50 2010
***************
*** 1,5 ****
# <pre>
! # @(#)Makefile 8.8
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
--- 1,5 ----
# <pre>
! # @(#)Makefile 8.9
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
***************
*** 12,18 ****
# make zonenames
# to get a list of the values you can use for LOCALTIME.
! LOCALTIME= Factory
# If you want something other than Eastern United States time as a template
# for handling POSIX-style time zone environment variables,
--- 12,18 ----
# make zonenames
# to get a list of the values you can use for LOCALTIME.
! LOCALTIME= GMT
# If you want something other than Eastern United States time as a template
# for handling POSIX-style time zone environment variables,
***************
*** 262,269 ****
DOCS= README Theory $(MANS) date.1 Makefile
PRIMARY_YDATA= africa antarctica asia australasia \
europe northamerica southamerica
! YDATA= $(PRIMARY_YDATA) pacificnew etcetera factory backward
! NDATA= systemv
SDATA= solar87 solar88 solar89
TDATA= $(YDATA) $(NDATA) $(SDATA)
TABDATA= iso3166.tab zone.tab
--- 262,269 ----
DOCS= README Theory $(MANS) date.1 Makefile
PRIMARY_YDATA= africa antarctica asia australasia \
europe northamerica southamerica
! YDATA= $(PRIMARY_YDATA) pacificnew etcetera backward
! NDATA= systemv factory
SDATA= solar87 solar88 solar89
TDATA= $(YDATA) $(NDATA) $(SDATA)
TABDATA= iso3166.tab zone.tab
diff -r -c old/Theory new/Theory
*** old/Theory Mon Sep 27 09:24:25 2010
--- new/Theory Tue Oct 12 12:36:50 2010
***************
*** 1,4 ****
! @(#)Theory 8.4
This file is in the public domain, so clarified as of
2009-05-17 by Arthur David Olson.
--- 1,4 ----
! @(#)Theory 8.5
This file is in the public domain, so clarified as of
2009-05-17 by Arthur David Olson.
***************
*** 287,294 ****
See the file `backward' for most of these older names
(e.g. `US/Eastern' instead of `America/New_York').
The other old-fashioned names still supported are
! `WET', `CET', `MET', `EET' (see the file `europe'),
! and `Factory' (see the file `factory').
----- Time zone abbreviations -----
--- 287,293 ----
See the file `backward' for most of these older names
(e.g. `US/Eastern' instead of `America/New_York').
The other old-fashioned names still supported are
! `WET', `CET', `MET', and `EET' (see the file `europe').
----- Time zone abbreviations -----
diff -r -c old/australasia new/australasia
*** old/australasia Mon Sep 27 09:24:27 2010
--- new/australasia Tue Oct 12 13:14:56 2010
***************
*** 1,5 ****
# <pre>
! # @(#)australasia 8.18
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
--- 1,5 ----
# <pre>
! # @(#)australasia 8.19
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
***************
*** 487,497 ****
# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%2020…
# </a>
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
-11:30 - SAMT 1950 # Samoa Time
-11:00 - WST 2010 Sep 26
! -11:00 1:00 WSDT 2011 Apr 3
-11:00 - WST
# Solomon Is
--- 487,507 ----
# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%2020…
# </a>
+ # From Raymond Hughes (2010-10-07):
+ # Please see
+ # <a href="http://www.mcil.gov.ws">
+ # http://www.mcil.gov.ws
+ # </a>,
+ # the Ministry of Commerce, Industry and Labour (sideframe) "Last Sunday
+ # September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight
+ # to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks
+ # backwards from 1:00am to 12:00am"
+
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
-11:30 - SAMT 1950 # Samoa Time
-11:00 - WST 2010 Sep 26
! -11:00 1:00 WSDT 2011 Apr 3 1:00
-11:00 - WST
# Solomon Is
diff -r -c old/localtime.c new/localtime.c
*** old/localtime.c Mon Sep 27 09:24:26 2010
--- new/localtime.c Tue Oct 12 12:36:51 2010
***************
*** 5,11 ****
#ifndef lint
#ifndef NOID
! static char elsieid[] = "@(#)localtime.c 8.14";
#endif /* !defined NOID */
#endif /* !defined lint */
--- 5,11 ----
#ifndef lint
#ifndef NOID
! static char elsieid[] = "@(#)localtime.c 8.15";
#endif /* !defined NOID */
#endif /* !defined lint */
***************
*** 914,919 ****
--- 914,920 ----
register unsigned char * typep;
register char * cp;
register int load_result;
+ static struct ttinfo zttinfo;
INITIALIZE(dstname);
stdname = name;
***************
*** 986,991 ****
--- 987,993 ----
/*
** Two transitions per year, from EPOCH_YEAR forward.
*/
+ sp->ttis[0] = sp->ttis[1] = zttinfo;
sp->ttis[0].tt_gmtoff = -dstoffset;
sp->ttis[0].tt_isdst = 1;
sp->ttis[0].tt_abbrind = stdlen + 1;
***************
*** 1099,1106 ****
}
/*
** Finally, fill in ttis.
- ** ttisstd and ttisgmt need not be handled.
*/
sp->ttis[0].tt_gmtoff = -stdoffset;
sp->ttis[0].tt_isdst = FALSE;
sp->ttis[0].tt_abbrind = 0;
--- 1101,1108 ----
}
/*
** Finally, fill in ttis.
*/
+ sp->ttis[0] = sp->ttis[1] = zttinfo;
sp->ttis[0].tt_gmtoff = -stdoffset;
sp->ttis[0].tt_isdst = FALSE;
sp->ttis[0].tt_abbrind = 0;
***************
*** 1113,1118 ****
--- 1115,1121 ----
dstlen = 0;
sp->typecnt = 1; /* only standard time */
sp->timecnt = 0;
+ sp->ttis[0] = zttinfo;
sp->ttis[0].tt_gmtoff = -stdoffset;
sp->ttis[0].tt_isdst = 0;
sp->ttis[0].tt_abbrind = 0;
diff -r -c old/zic.c new/zic.c
*** old/zic.c Mon Sep 27 09:24:26 2010
--- new/zic.c Tue Oct 12 13:37:29 2010
***************
*** 3,9 ****
** 2006-07-17 by Arthur David Olson.
*/
! static char elsieid[] = "@(#)zic.c 8.22";
#include "private.h"
#include "locale.h"
--- 3,9 ----
** 2006-07-17 by Arthur David Olson.
*/
! static char elsieid[] = "@(#)zic.c 8.24";
#include "private.h"
#include "locale.h"
***************
*** 1881,1896 ****
register int week;
if (rp->r_dycode == DC_DOWGEQ) {
! week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
! if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
return -1;
} else if (rp->r_dycode == DC_DOWLEQ) {
if (rp->r_dayofmonth == len_months[1][rp->r_month])
week = 5;
else {
! week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
! if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
return -1;
}
} else return -1; /* "cannot happen" */
(void) sprintf(result, "M%d.%d.%d",
--- 1881,1896 ----
register int week;
if (rp->r_dycode == DC_DOWGEQ) {
! if ((rp->r_dayofmonth % DAYSPERWEEK) != 1)
return -1;
+ week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
} else if (rp->r_dycode == DC_DOWLEQ) {
if (rp->r_dayofmonth == len_months[1][rp->r_month])
week = 5;
else {
! if ((rp->r_dayofmonth % DAYSPERWEEK) != 0)
return -1;
+ week = rp->r_dayofmonth / DAYSPERWEEK;
}
} else return -1; /* "cannot happen" */
(void) sprintf(result, "M%d.%d.%d",
***************
*** 2018,2023 ****
--- 2018,2024 ----
register char * envvar;
register int max_abbr_len;
register int max_envvar_len;
+ register int prodstic; /* all rules are min to max */
max_abbr_len = 2 + max_format_len + max_abbrvar_len;
max_envvar_len = 2 * max_abbr_len + 5 * 9;
***************
*** 2032,2037 ****
--- 2033,2039 ----
timecnt = 0;
typecnt = 0;
charcnt = 0;
+ prodstic = zonecount == 1;
/*
** Thanks to Earl Chew
** for noting the need to unconditionally initialize startttisstd.
***************
*** 2053,2058 ****
--- 2055,2062 ----
updateminmax(rp->r_loyear);
if (rp->r_hiwasnum)
updateminmax(rp->r_hiyear);
+ if (rp->r_lowasnum || rp->r_hiwasnum)
+ prodstic = FALSE;
}
}
/*
***************
*** 2075,2080 ****
--- 2079,2094 ----
if (max_year <= INT_MAX - YEARSPERREPEAT)
max_year += YEARSPERREPEAT;
else max_year = INT_MAX;
+ /*
+ ** Regardless of any of the above,
+ ** for a "proDSTic" zone which specifies that its rules
+ ** always have and always will be in effect,
+ ** we only need one cycle to define the zone.
+ */
+ if (prodstic) {
+ min_year = 1900;
+ max_year = min_year + YEARSPERREPEAT;
+ }
}
/*
** For the benefit of older systems,
5
6
According to some news Brazilian state of Goiás may abolish DST:
"The Energy and Mines Commission of the House of Representatives
approved a Legislative Decree that suspends daylight saving time in Goiás."
http://www.infomoney.com.br/minhas-financas/consumo/noticia/7061178/comissa…
Also, ".... this year the federal government even considered not
implementing daylight saving time, but left the decision to 2018."
Alexander Krivenyshev
https://www.WorldTimeZone.com
5
5
[PATCH] Support building zic.exe and zdump.exe natively on Windows with Visual Studio nmake.
by Manuela Friedrich 28 Oct '18
by Manuela Friedrich 28 Oct '18
28 Oct '18
Provide getopt() implementation for Windows as per ftp://ftp.es.ele.tue.nl/pub/users/jos/poster/getopt.c
In localtime.c use native localtime(), gmtime(), ctime() and mktime().
Also use int or __int64 respectively for ssize_t type and check for Windows drive letters in tzloadbody().
In private.h and zdump.c define strotimax depending on Visual Studio version.
It needs to be strtol for up to VS 2010 and stroll for higher versions.
In zdump.c need prototype for gmtime_r() to suffice return type requirements.
Also use __time64_t variables on Windows instead of time_t.
In main() variable declarations had to be moved to the top to avoid compile errors.
In zic.c dolink() need to have an extra mkdirs() call for Windows as we don't have link support here and the previous mkdirs() calls wouldn't have been called therefore.
Also itsdir() needs separate Windows part to check for directory flag as the namesslashdot Linux alternative alway returns directory on Windows.
Add nmake specific Makefile.nmake based on existing Makefile.
It uses different object, library and executable extensions, sets CC and CFLAGS for 64 and 32bit Windows build.
Target root has been added to build zdump and zic.
Version and version.h rules were changed to batch.
---
Makefile.nmake | 934 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
getopt.c | 110 +++++++
localtime.c | 23 ++
private.h | 4 +
zdump.c | 47 ++-
zic.c | 14 +
6 files changed, 1128 insertions(+), 4 deletions(-)
create mode 100644 Makefile.nmake
create mode 100644 getopt.c
diff --git a/Makefile.nmake b/Makefile.nmake
new file mode 100644
index 0000000..730523e
--- /dev/null
+++ b/Makefile.nmake
@@ -0,0 +1,934 @@
+# This file is in the public domain, so clarified as of
+# 2009-05-17 by Arthur David Olson.
+
+# This file supports building zic.exe and zdump.exe with Visual Studio nmake
+
+# Package name for the code distribution.
+PACKAGE= tzcode
+
+# Version number for the distribution, overridden in the 'tarballs' rule below.
+VERSION= unknown
+
+# Email address for bug reports.
+BUGEMAIL= tz(a)iana.org
+
+# Change the line below for your time zone (after finding the zone you want in
+# the time zone files, or adding it to a time zone file).
+# Alternately, if you discover you've got the wrong time zone, you can just
+# zic -l rightzone
+# to correct things.
+# Use the command
+# make zonenames
+# to get a list of the values you can use for LOCALTIME.
+
+LOCALTIME= GMT
+
+# If you want something other than Eastern United States time as a template
+# for handling POSIX-style time zone environment variables,
+# change the line below (after finding the zone you want in the
+# time zone files, or adding it to a time zone file).
+# (When a POSIX-style environment variable is handled, the rules in the
+# template file are used to determine "spring forward" and "fall back" days and
+# times; the environment variable itself specifies UT offsets of standard and
+# summer time.)
+# Alternately, if you discover you've got the wrong time zone, you can just
+# zic -p rightzone
+# to correct things.
+# Use the command
+# make zonenames
+# to get a list of the values you can use for POSIXRULES.
+# If you want POSIX compatibility, use "America/New_York".
+
+POSIXRULES= America/New_York
+
+# Also see TZDEFRULESTRING below, which takes effect only
+# if the time zone files cannot be accessed.
+
+
+# Installation locations.
+#
+# The defaults are suitable for Debian, except that if REDO is
+# posix_right or right_posix then files that Debian puts under
+# /usr/share/zoneinfo/posix and /usr/share/zoneinfo/right are instead
+# put under /usr/share/zoneinfo-posix and /usr/share/zoneinfo-leaps,
+# respectively. Problems with the Debian approach are discussed in
+# the commentary for the right_posix rule (below).
+
+# Destination directory, which can be used for staging.
+# 'make DESTDIR=/stage install' installs under /stage (e.g., to
+# /stage/etc/localtime instead of to /etc/localtime). Files under
+# /stage are not intended to work as-is, but can be copied by hand to
+# the root directory later. If DESTDIR is empty, 'make install' does
+# not stage, but installs directly into production locations.
+DESTDIR =
+
+# Everything is installed into subdirectories of TOPDIR, and used there.
+# TOPDIR should be empty (meaning the root directory),
+# or a directory name that does not end in "/".
+# TOPDIR should be empty or an absolute name unless you're just testing.
+TOPDIR =
+
+# The default local time zone is taken from the file TZDEFAULT.
+TZDEFAULT = $(TOPDIR)/etc/localtime
+
+# The subdirectory containing installed program and data files, and
+# likewise for installed files that can be shared among architectures.
+# These should be relative file names.
+USRDIR = usr
+USRSHAREDIR = $(USRDIR)/share
+
+# "Compiled" time zone information is placed in the "TZDIR" directory
+# (and subdirectories).
+# TZDIR_BASENAME should not contain "/" and should not be ".", ".." or empty.
+TZDIR_BASENAME= zoneinfo
+TZDIR = $(TOPDIR)\\$(USRSHAREDIR)\\$(TZDIR_BASENAME)
+
+# The "tzselect" and (if you do "make INSTALL") "date" commands go in:
+BINDIR = $(TOPDIR)/$(USRDIR)/bin
+
+# The "zdump" command goes in:
+ZDUMPDIR = $(BINDIR)
+
+# The "zic" command goes in:
+ZICDIR = $(TOPDIR)/$(USRDIR)/sbin
+
+# Manual pages go in subdirectories of. . .
+MANDIR = $(TOPDIR)/$(USRSHAREDIR)/man
+
+# Library functions are put in an archive in LIBDIR.
+LIBDIR = $(TOPDIR)/$(USRDIR)/lib
+
+
+# Types to try, as an alternative to time_t. int64_t should be first.
+TIME_T_ALTERNATIVES = int64_t int32_t uint32_t uint64_t
+
+# If you want only POSIX time, with time values interpreted as
+# seconds since the epoch (not counting leap seconds), use
+# REDO= posix_only
+# below. If you want only "right" time, with values interpreted
+# as seconds since the epoch (counting leap seconds), use
+# REDO= right_only
+# below. If you want both sets of data available, with leap seconds not
+# counted normally, use
+# REDO= posix_right
+# below. If you want both sets of data available, with leap seconds counted
+# normally, use
+# REDO= right_posix
+# below. POSIX mandates that leap seconds not be counted; for compatibility
+# with it, use "posix_only" or "posix_right". Use POSIX time on systems with
+# leap smearing; this can work better than unsmeared "right" time with
+# applications that are not leap second aware, and is closer to unsmeared
+# "right" time than unsmeared POSIX time is (e.g., 0.5 vs 1.0 s max error).
+
+REDO= posix_right
+
+# To install data in text form that has all the information of the binary data,
+# (optionally incorporating leap second information), use
+# TZDATA_TEXT= tzdata.zi leapseconds
+# To install text data without leap second information (e.g., because
+# REDO='posix_only'), use
+# TZDATA_TEXT= tzdata.zi
+# To avoid installing text data, use
+# TZDATA_TEXT=
+
+TZDATA_TEXT= leapseconds tzdata.zi
+
+# For backward-compatibility links for old zone names, use
+# BACKWARD= backward
+# If you also want the link US/Pacific-New, even though it is confusing
+# and is planned to be removed from the database eventually, use
+# BACKWARD= backward pacificnew
+# To omit these links, use
+# BACKWARD=
+
+BACKWARD= backward
+
+# If you want out-of-scope and often-wrong data from the file 'backzone', use
+# PACKRATDATA= backzone
+# To omit this data, use
+# PACKRATDATA=
+
+PACKRATDATA=
+
+# The name of a locale using the UTF-8 encoding, used during self-tests.
+# The tests are skipped if the name does not appear to work on this system.
+
+UTF8_LOCALE= en_US.utf8
+
+# Since "." may not be in PATH...
+
+YEARISTYPE= ./yearistype
+
+# Non-default libraries needed to link.
+LDLIBS=
+
+# Add the following to the end of the "CFLAGS=" line as needed to override
+# defaults specified in the source code. "-DFOO" is equivalent to "-DFOO=1".
+# -DBIG_BANG=-9999999LL if the Big Bang occurred at time -9999999 (see zic.c)
+# -DDEPRECATE_TWO_DIGIT_YEARS for optional runtime warnings about strftime
+# formats that generate only the last two digits of year numbers
+# -DEPOCH_LOCAL if the 'time' function returns local time not UT
+# -DEPOCH_OFFSET=N if the 'time' function returns a value N greater
+# than what POSIX specifies, assuming local time is UT.
+# For example, N is 252460800 on AmigaOS.
+# -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
+# -DHAVE_DECL_ENVIRON if <unistd.h> declares 'environ'
+# -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
+# -DHAVE_GENERIC=0 if _Generic does not work
+# -DHAVE_GETTEXT if 'gettext' works (e.g., GNU/Linux, FreeBSD, Solaris)
+# -DHAVE_INCOMPATIBLE_CTIME_R if your system's time.h declares
+# ctime_r and asctime_r incompatibly with the POSIX standard
+# (Solaris when _POSIX_PTHREAD_SEMANTICS is not defined).
+# -DHAVE_INTTYPES_H if you have a non-C99 compiler with <inttypes.h>
+# -DHAVE_LINK=0 if your system lacks a link function
+# -DHAVE_LOCALTIME_R=0 if your system lacks a localtime_r function
+# -DHAVE_LOCALTIME_RZ=0 if you do not want zdump to use localtime_rz
+# localtime_rz can make zdump significantly faster, but is nonstandard.
+# -DHAVE_POSIX_DECLS=0 if your system's include files do not declare
+# functions like 'link' or variables like 'tzname' required by POSIX
+# -DHAVE_SNPRINTF=0 if your system lacks the snprintf function
+# -DHAVE_STDBOOL_H if you have a non-C99 compiler with <stdbool.h>
+# -DHAVE_STDINT_H if you have a non-C99 compiler with <stdint.h>
+# -DHAVE_STRFTIME_L if <time.h> declares locale_t and strftime_l
+# -DHAVE_STRDUP=0 if your system lacks the strdup function
+# -DHAVE_SYMLINK=0 if your system lacks the symlink function
+# -DHAVE_SYS_STAT_H=0 if your compiler lacks a <sys/stat.h>
+# -DHAVE_SYS_WAIT_H=0 if your compiler lacks a <sys/wait.h>
+# -DHAVE_TZSET=0 if your system lacks a tzset function
+# -DHAVE_UNISTD_H=0 if your compiler lacks a <unistd.h>
+# -Dlocale_t=XXX if your system uses XXX instead of locale_t
+# -Dssize_t=long on hosts like MS-Windows that lack ssize_t
+# -DTHREAD_SAFE to make localtime.c thread-safe, as POSIX requires;
+# not needed by the main-program tz code, which is single-threaded.
+# Append other compiler flags as needed, e.g., -pthread on GNU/Linux.
+# -Dtime_tz=\"T\" to use T as the time_t type, rather than the system time_t
+# This is intended for internal use only; it mangles external names.
+# -DTZ_DOMAIN=\"foo\" to use "foo" for gettext domain name; default is "tz"
+# -DTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
+# the default is system-supplied, typically "/usr/lib/locale"
+# -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
+# DST transitions if the time zone files cannot be accessed
+# -DUNINIT_TRAP if reading uninitialized storage can cause problems
+# other than simply getting garbage data
+# -DUSE_LTZ=0 to build zdump with the system time zone library
+# Also set TZDOBJS=zdump.o and CHECK_TIME_T_ALTERNATIVES= below.
+# -DZIC_MAX_ABBR_LEN_WO_WARN=3
+# (or some other number) to set the maximum time zone abbreviation length
+# that zic will accept without a warning (the default is 6)
+# $(GCC_DEBUG_FLAGS) if you are using recent GCC and want lots of checking
+# Select instrumentation via "make GCC_INSTRUMENT='whatever'".
+GCC_INSTRUMENT = \
+ -fsanitize=undefined -fsanitize-address-use-after-scope \
+ -fsanitize-undefined-trap-on-error -fstack-protector
+GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
+ $(GCC_INSTRUMENT) \
+ -Wall -Wextra \
+ -Walloc-size-larger-than=100000 -Warray-bounds=2 \
+ -Wbad-function-cast -Wcast-align -Wdate-time \
+ -Wdeclaration-after-statement -Wdouble-promotion \
+ -Wformat=2 -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation \
+ -Winit-self -Wjump-misses-init -Wlogical-op \
+ -Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
+ -Wold-style-definition -Woverlength-strings -Wpointer-arith \
+ -Wshadow -Wshift-overflow=2 -Wstrict-prototypes -Wstringop-overflow=5 \
+ -Wsuggest-attribute=const -Wsuggest-attribute=format \
+ -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \
+ -Wtrampolines -Wundef -Wuninitialized -Wunused \
+ -Wvariadic-macros -Wvla -Wwrite-strings \
+ -Wno-address -Wno-format-nonliteral -Wno-sign-compare \
+ -Wno-type-limits -Wno-unused-parameter
+#
+# If your system has a "GMT offset" field in its "struct tm"s
+# (or if you decide to add such a field in your system's "time.h" file),
+# add the name to a define such as
+# -DTM_GMTOFF=tm_gmtoff
+# to the end of the "CFLAGS=" line. If not defined, the code attempts to
+# guess TM_GMTOFF from other macros; define NO_TM_GMTOFF to suppress this.
+# Similarly, if your system has a "zone abbreviation" field, define
+# -DTM_ZONE=tm_zone
+# and define NO_TM_ZONE to suppress any guessing. These two fields are not
+# required by POSIX, but are widely available on GNU/Linux and BSD systems.
+#
+# The next batch of options control support for external variables
+# exported by tzcode. In practice these variables are less useful
+# than TM_GMTOFF and TM_ZONE. However, most of them are standardized.
+# #
+# # To omit or support the external variable "tzname", add one of:
+# # -DHAVE_TZNAME=0
+# # -DHAVE_TZNAME=1
+# # to the "CFLAGS=" line. "tzname" is required by POSIX 1988 and later.
+# # If not defined, the code attempts to guess HAVE_TZNAME from other macros.
+# # Warning: unless time_tz is also defined, HAVE_TZNAME=1 can cause
+# # crashes when combined with some platforms' standard libraries,
+# # presumably due to memory allocation issues.
+# #
+# # To omit or support the external variables "timezone" and "daylight", add
+# # -DUSG_COMPAT=0
+# # -DUSG_COMPAT=1
+# # to the "CFLAGS=" line; "timezone" and "daylight" are inspired by
+# # Unix Systems Group code and are required by POSIX 2008 (with XSI) and later.
+# # If not defined, the code attempts to guess USG_COMPAT from other macros.
+# #
+# # To support the external variable "altzone", add
+# # -DALTZONE
+# # to the end of the "CFLAGS=" line; although "altzone" appeared in
+# # System V Release 3.1 it has not been standardized.
+#
+# If you want functions that were inspired by early versions of X3J11's work,
+# add
+# -DSTD_INSPIRED
+# to the end of the "CFLAGS=" line. This arranges for the functions
+# "tzsetwall", "offtime", "timelocal", "timegm", "timeoff",
+# "posix2time", and "time2posix" to be added to the time conversion library.
+# "tzsetwall" is like "tzset" except that it arranges for local wall clock
+# time (rather than the time specified in the TZ environment variable)
+# to be used.
+# "offtime" is like "gmtime" except that it accepts a second (long) argument
+# that gives an offset to add to the time_t when converting it.
+# "timelocal" is equivalent to "mktime".
+# "timegm" is like "timelocal" except that it turns a struct tm into
+# a time_t using UT (rather than local time as "timelocal" does).
+# "timeoff" is like "timegm" except that it accepts a second (long) argument
+# that gives an offset to use when converting to a time_t.
+# "posix2time" and "time2posix" are described in an included manual page.
+# X3J11's work does not describe any of these functions.
+# Sun has provided "tzsetwall", "timelocal", and "timegm" in SunOS 4.0.
+# These functions may well disappear in future releases of the time
+# conversion package.
+#
+# If you don't want functions that were inspired by NetBSD, add
+# -DNETBSD_INSPIRED=0
+# to the end of the "CFLAGS=" line. Otherwise, the functions
+# "localtime_rz", "mktime_z", "tzalloc", and "tzfree" are added to the
+# time library, and if STD_INSPIRED is also defined the functions
+# "posix2time_z" and "time2posix_z" are added as well.
+# The functions ending in "_z" (or "_rz") are like their unsuffixed
+# (or suffixed-by-"_r") counterparts, except with an extra first
+# argument of opaque type timezone_t that specifies the time zone.
+# "tzalloc" allocates a timezone_t value, and "tzfree" frees it.
+#
+# If you want to allocate state structures in localtime, add
+# -DALL_STATE
+# to the end of the "CFLAGS=" line. Storage is obtained by calling malloc.
+#
+# NIST-PCTS:151-2, Version 1.4, (1993-12-03) is a test suite put
+# out by the National Institute of Standards and Technology
+# which claims to test C and Posix conformance. If you want to pass PCTS, add
+# -DPCTS
+# to the end of the "CFLAGS=" line.
+#
+# If you want strict compliance with XPG4 as of 1994-04-09, add
+# -DXPG4_1994_04_09
+# to the end of the "CFLAGS=" line. This causes "strftime" to always return
+# 53 as a week number (rather than 52 or 53) for January days before
+# January's first Monday when a "%V" format is used and January 1
+# falls on a Friday, Saturday, or Sunday.
+
+!IF "$(CPU)" == "AMD64"
+CFLAGS=/Zi -DHAVE_SYS_WAIT_H=0 -DHAVE_UNISTD_H=0 -DHAVE_INTTYPES_H=0 -DHAVE_POSIX_DECLS=0 -DHAVE_LINK=0 -DHAVE_SYMLINK=0 -DTYPECHECK=1 -DHAVE_DECL_ASCTIME_R=0
+!ELSE
+CFLAGS=/Zi -DHAVE_SYS_WAIT_H=0 -DHAVE_UNISTD_H=0 -DHAVE_INTTYPES_H=0 -DHAVE_POSIX_DECLS=0 -DHAVE_LINK=0 -DHAVE_SYMLINK=0 -DSTD_INSPIRED -DTYPECHECK=1 -DHAVE_DECL_ASCTIME_R=0
+!ENDIF
+
+# Linker flags. Default to $(LFLAGS) for backwards compatibility
+# to release 2012h and earlier.
+
+LDFLAGS= $(LFLAGS)
+
+# For leap seconds, this Makefile uses LEAPSECONDS='-L leapseconds' in
+# submake command lines. The default is no leap seconds.
+
+LEAPSECONDS=
+
+# The zic command and its arguments.
+
+zic= ./zic.exe
+ZIC= $(zic) $(ZFLAGS)
+
+ZFLAGS=
+
+# How to use zic to install tz binary files.
+
+ZIC_INSTALL= $(ZIC) -d '$(DESTDIR)$(TZDIR)' $(LEAPSECONDS)
+
+# The name of a Posix-compliant 'awk' on your system.
+AWK= awk
+
+# The full path name of a Posix-compliant shell, preferably one that supports
+# the Korn shell's 'select' statement as an extension.
+# These days, Bash is the most popular.
+# It should be OK to set this to /bin/sh, on platforms where /bin/sh
+# lacks 'select' or doesn't completely conform to Posix, but /bin/bash
+# is typically nicer if it works.
+KSHELL= /bin/bash
+
+# The path where SGML DTDs are kept and the catalog file(s) to use when
+# validating. The default should work on both Debian and Red Hat.
+SGML_TOPDIR= /usr
+SGML_DTDDIR= $(SGML_TOPDIR)/share/xml/w3c-sgml-lib/schema/dtd
+SGML_SEARCH_PATH= $(SGML_DTDDIR)/REC-html401-19991224
+SGML_CATALOG_FILES= \
+ $(SGML_TOPDIR)/share/doc/w3-recs/html/www.w3.org/TR/1999/REC-html401-19991224/HTML4.cat:$(SGML_TOPDIR)/share/sgml/html/4.01/HTML4.cat
+
+# The name, arguments and environment of a program to validate your web pages.
+# See <http://openjade.sourceforge.net/doc/> for a validator, and
+# <https://validator.w3.org/source/> for a validation library.
+# Set VALIDATE=':' if you do not have such a program.
+VALIDATE = nsgmls
+VALIDATE_FLAGS = -s -B -wall -wno-unused-param
+VALIDATE_ENV = \
+ SGML_CATALOG_FILES='$(SGML_CATALOG_FILES)' \
+ SGML_SEARCH_PATH='$(SGML_SEARCH_PATH)' \
+ SP_CHARSET_FIXED=YES \
+ SP_ENCODING=UTF-8
+
+# This expensive test requires USE_LTZ.
+# To suppress it, define this macro to be empty.
+CHECK_TIME_T_ALTERNATIVES = check_time_t_alternatives
+
+# SAFE_CHAR is a regular expression that matches a safe character.
+# Some parts of this distribution are limited to safe characters;
+# others can use any UTF-8 character.
+# For now, the safe characters are a safe subset of ASCII.
+# The caller must set the shell variable 'sharp' to the character '#',
+# since Makefile macros cannot contain '#'.
+# TAB_CHAR is a single tab character, in single quotes.
+TAB_CHAR= ' '
+SAFE_CHARSET1= $(TAB_CHAR)' !\"'$$sharp'$$%&'\''()*+,./0123456789:;<=>?@'
+SAFE_CHARSET2= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`'
+SAFE_CHARSET3= 'abcdefghijklmnopqrstuvwxyz{|}~'
+SAFE_CHARSET= $(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3)
+SAFE_CHAR= '[]'$(SAFE_CHARSET)'-]'
+
+# OK_CHAR matches any character allowed in the distributed files.
+# This is the same as SAFE_CHAR, except that multibyte letters are
+# also allowed so that commentary can contain people's names and quote
+# non-English sources. For non-letters the sources are limited to
+# ASCII renderings for the convenience of maintainers whose text editors
+# mishandle UTF-8 by default (e.g., XEmacs 21.4.22).
+OK_CHAR= '[][:alpha:]'$(SAFE_CHARSET)'-]'
+
+# SAFE_LINE matches a line of safe characters.
+# SAFE_SHARP_LINE is similar, except any OK character can follow '#';
+# this is so that comments can contain non-ASCII characters.
+# OK_LINE matches a line of OK characters.
+SAFE_LINE= '^'$(SAFE_CHAR)'*$$'
+SAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(OK_CHAR)'*)?$$'
+OK_LINE= '^'$(OK_CHAR)'*$$'
+
+# Flags to give 'tar' when making a distribution.
+# Try to use flags appropriate for GNU tar.
+GNUTARFLAGS= --numeric-owner --owner=0 --group=0 --mode=go+u,go-w --sort=name
+TARFLAGS= `if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; \
+ then echo $(GNUTARFLAGS); \
+ else :; \
+ fi`
+
+# Flags to give 'gzip' when making a distribution.
+GZIPFLAGS= -9n
+
+###############################################################################
+
+#MAKE= make
+
+cc= cl
+CC= $(cc) -DTZDIR=\"$(TZDIR)\"
+
+AR= lib
+
+# ':' on typical hosts; 'ranlib' on the ancient hosts that still need ranlib.
+RANLIB= :
+
+TZCOBJS= zic.obj getopt.obj
+TZDOBJS= zdump.obj localtime.obj asctime.obj getopt.obj strftime.obj
+DATEOBJS= date.obj localtime.obj strftime.obj asctime.obj
+LIBSRCS= localtime.c asctime.c difftime.c
+LIBOBJS= localtime.obj asctime.obj difftime.obj
+HEADERS= tzfile.h private.h
+NONLIBSRCS= zic.c zdump.c
+NEWUCBSRCS= date.c strftime.c
+SOURCES= $(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) \
+ tzselect.ksh workman.sh
+MANS= newctime.3 newstrftime.3 newtzset.3 time2posix.3 \
+ tzfile.5 tzselect.8 zic.8 zdump.8
+MANTXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \
+ time2posix.3.txt \
+ tzfile.5.txt tzselect.8.txt zic.8.txt zdump.8.txt \
+ date.1.txt
+COMMON= calendars CONTRIBUTING LICENSE Makefile \
+ NEWS README theory.html version
+WEB_PAGES= tz-art.html tz-how-to.html tz-link.html
+DOCS= $(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
+PRIMARY_YDATA= africa antarctica asia australasia \
+ europe northamerica southamerica
+YDATA= $(PRIMARY_YDATA) etcetera
+NDATA= systemv factory
+TDATA_TO_CHECK= $(YDATA) $(NDATA) backward pacificnew
+TDATA= $(YDATA) $(NDATA) $(BACKWARD)
+ZONETABLES= zone1970.tab zone.tab
+TABDATA= iso3166.tab $(TZDATA_TEXT) $(ZONETABLES)
+LEAP_DEPS= leapseconds.awk leap-seconds.list
+TZDATA_ZI_DEPS= zishrink.awk version $(TDATA) $(PACKRATDATA)
+DATA= $(TDATA_TO_CHECK) backzone iso3166.tab leap-seconds.list \
+ leapseconds yearistype.sh $(ZONETABLES)
+AWK_SCRIPTS= checklinks.awk checktab.awk leapseconds.awk zishrink.awk
+MISC= $(AWK_SCRIPTS) zoneinfo2tdf.pl
+TZS_YEAR= 2050
+TZS= to$(TZS_YEAR).tzs
+TZS_NEW= to$(TZS_YEAR)new.tzs
+TZS_DEPS= $(PRIMARY_YDATA) asctime.c localtime.c \
+ private.h tzfile.h zdump.c zic.c
+ENCHILADA= $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC) $(TZS) tzdata.zi
+
+# Consult these files when deciding whether to rebuild the 'version' file.
+# This list is not the same as the output of 'git ls-files', since
+# .gitignore is not distributed.
+VERSION_DEPS= \
+ calendars CONTRIBUTING LICENSE Makefile NEWS README \
+ africa antarctica asctime.c asia australasia \
+ backward backzone \
+ checklinks.awk checktab.awk \
+ date.1 date.c difftime.c \
+ etcetera europe factory iso3166.tab \
+ leap-seconds.list leapseconds.awk localtime.c \
+ newctime.3 newstrftime.3 newtzset.3 northamerica \
+ pacificnew private.h \
+ southamerica strftime.c systemv theory.html \
+ time2posix.3 tz-art.html tz-how-to.html tz-link.html \
+ tzfile.5 tzfile.h tzselect.8 tzselect.ksh \
+ workman.sh yearistype.sh \
+ zdump.8 zdump.c zic.8 zic.c \
+ zone.tab zone1970.tab zoneinfo2tdf.pl
+
+# And for the benefit of csh users on systems that assume the user
+# shell should be used to handle commands in Makefiles. . .
+
+SHELL= /bin/sh
+
+root: zic.exe zdump.exe
+
+ALL: root date $(ENCHILADA)
+
+install: root $(DATA) $(REDO) $(MANS)
+ mkdir $(DESTDIR)$(ETCDIR) $(DESTDIR)$(TZDIR) \
+ $(DESTDIR)$(LIBDIR) \
+ $(DESTDIR)$(MANDIR)/man3 $(DESTDIR)$(MANDIR)/man5 \
+ $(DESTDIR)$(MANDIR)/man8
+ $(ZIC_INSTALL) -l $(LOCALTIME) -p $(POSIXRULES) \
+ -t '$(DESTDIR)$(TZDEFAULT)'
+ cp -f $(TABDATA) $(DESTDIR)$(TZDIR)/.
+ cp tzselect $(DESTDIR)$(BINDIR)/.
+ cp zdump.exe $(DESTDIR)$(ZDUMPDIR)/.
+ cp zic.exe $(DESTDIR)$(ZICDIR)/.
+ cp libtz.lib $(DESTDIR)$(LIBDIR)/.
+ $(RANLIB) $(DESTDIR)$(LIBDIR)/libtz.lib
+ cp -f newctime.3 newtzset.3 $(DESTDIR)$(MANDIR)/man3/.
+ cp -f tzfile.5 $(DESTDIR)$(MANDIR)/man5/.
+ cp -f tzselect.8 zdump.8 zic.8 $(DESTDIR)$(MANDIR)/man8/.
+
+INSTALL: ALL install date.1
+ mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)/man1
+ cp date $(DESTDIR)$(BINDIR)/.
+ cp -f date.1 $(DESTDIR)$(MANDIR)/man1/.
+
+# for version get first token of git describe (e.g. 2018a from 2018a-5-g4a132ae) or $(VERSION)
+# if version file is already present, i.e. downloaded from ftp, skip recreating it
+version: $(VERSION_DEPS)
+!IF [git describe > nul 2>&1] == 0
+ if not exist version for /f "delims=-" %%a in ('git describe') do echo %%a > $@
+!ELSE
+ if not exist version echo $(VERSION) > $@
+!ENDIF
+
+# This file can be tailored by setting BACKWARD, PACKRATDATA, etc.
+tzdata.zi: $(TZDATA_ZI_DEPS)
+ version=`sed 1q version` && \
+ LC_ALL=C $(AWK) -v version="$$version" -f zishrink.awk \
+ $(TDATA) $(PACKRATDATA) >$@.out
+ mv $@.out $@
+
+version.h: version
+ echo static char const PKGVERSION[]="($(PACKAGE)) "; >$@
+ for /F %%H in ('type version') do echo static char const TZVERSION[]="%%H"; >> $@
+ echo static char const REPORT_BUGS_TO[]="$(BUGEMAIL)"; >>$@
+
+zdump.exe: $(TZDOBJS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(TZDOBJS) $(LDLIBS) /link /out:$@
+
+zic.exe: $(TZCOBJS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(TZCOBJS) $(LDLIBS) /link /out:$@
+
+yearistype: yearistype.sh
+ cp yearistype.sh yearistype
+ chmod +x yearistype
+
+leapseconds: $(LEAP_DEPS)
+ $(AWK) -f leapseconds.awk leap-seconds.list >$@.out
+ mv $@.out $@
+
+# Arguments to pass to submakes of install_data.
+# They can be overridden by later submake arguments.
+INSTALLARGS = \
+ BACKWARD='$(BACKWARD)' \
+ DESTDIR='$(DESTDIR)' \
+ LEAPSECONDS='$(LEAPSECONDS)' \
+ PACKRATDATA='$(PACKRATDATA)' \
+ TZDEFAULT='$(TZDEFAULT)' \
+ TZDIR='$(TZDIR)' \
+ YEARISTYPE='$(YEARISTYPE)' \
+ ZIC='$(ZIC)'
+
+# 'make install_data' installs one set of tz binary files.
+install_data: zic.exe leapseconds yearistype tzdata.zi
+ $(ZIC_INSTALL) tzdata.zi
+
+posix_only:
+ $(MAKE) $(INSTALLARGS) LEAPSECONDS= install_data
+
+right_only:
+ $(MAKE) $(INSTALLARGS) LEAPSECONDS='-L leapseconds' \
+ install_data
+
+# In earlier versions of this makefile, the other two directories were
+# subdirectories of $(TZDIR). However, this led to configuration errors.
+# For example, with posix_right under the earlier scheme,
+# TZ='right/Australia/Adelaide' got you localtime with leap seconds,
+# but gmtime without leap seconds, which led to problems with applications
+# like sendmail that subtract gmtime from localtime.
+# Therefore, the other two directories are now siblings of $(TZDIR).
+# You must replace all of $(TZDIR) to switch from not using leap seconds
+# to using them, or vice versa.
+right_posix: right_only
+ rm -fr '$(DESTDIR)$(TZDIR)-leaps'
+ ln -s '$(TZDIR_BASENAME)' '$(DESTDIR)$(TZDIR)-leaps' || \
+ $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-leaps' right_only
+ $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-posix' posix_only
+
+posix_right: posix_only
+ rm -fr '$(DESTDIR)$(TZDIR)-posix'
+ ln -s '$(TZDIR_BASENAME)' '$(DESTDIR)$(TZDIR)-posix' || \
+ $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-posix' posix_only
+ $(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-leaps' right_only
+
+# This obsolescent rule is present for backwards compatibility with
+# tz releases 2014g through 2015g. It should go away eventually.
+posix_packrat:
+ $(MAKE) $(INSTALLARGS) PACKRATDATA=backzone posix_only
+
+zones: $(REDO)
+
+$(TZS_NEW): tzdata.zi zdump zic
+ mkdir -p tzs.dir
+ $(zic) -d tzs.dir tzdata.zi
+ $(AWK) '/^L/{print "Link\t" $$2 "\t" $$3}' \
+ tzdata.zi | LC_ALL=C sort >$@.out
+ wd=`pwd` && \
+ zones=`$(AWK) -v wd="$$wd" \
+ '/^Z/{print wd "/tzs.dir/" $$2}' tzdata.zi \
+ | LC_ALL=C sort` && \
+ ./zdump -i -c $(TZS_YEAR) $$zones >>$@.out
+ sed 's,^TZ=".*tzs\.dir/,TZ=",' $@.out >$@.sed.out
+ rm -fr tzs.dir $@.out
+ mv $@.sed.out $@
+
+# If $(TZS) does not already exist (e.g., old-format tarballs), create it.
+# If it exists but 'make check_tzs' fails, a maintainer should inspect the
+# failed output and fix the inconsistency, perhaps by running 'make force_tzs'.
+$(TZS):
+ $(MAKE) force_tzs
+
+force_tzs: $(TZS_NEW)
+ cp $(TZS_NEW) $(TZS)
+
+libtz.lib: $(LIBOBJS)
+ del $@
+ $(AR) $@ $(LIBOBJS)
+ $(RANLIB) $@
+
+date: $(DATEOBJS)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
+
+tzselect: tzselect.ksh version
+ VERSION=`cat version` && sed \
+ -e 's|#!/bin/bash|#!$(KSHELL)|g' \
+ -e 's|AWK=[^}]*|AWK=$(AWK)|g' \
+ -e 's|\(PKGVERSION\)=.*|\1='\''($(PACKAGE)) '\''|' \
+ -e 's|\(REPORT_BUGS_TO\)=.*|\1=$(BUGEMAIL)|' \
+ -e 's|TZDIR=[^}]*|TZDIR=$(TZDIR)|' \
+ -e 's|\(TZVERSION\)=.*|\1='"$$VERSION"'|' \
+ <$@.ksh >$@.out
+ chmod +x $@.out
+ mv $@.out $@
+
+check: check_character_set check_white_space check_links \
+ check_name_lengths check_sorted \
+ check_tables check_web check_zishrink check_tzs
+
+check_character_set: $(ENCHILADA)
+ test ! '$(UTF8_LOCALE)' || \
+ ! printf 'A\304\200B\n' | \
+ LC_ALL='$(UTF8_LOCALE)' grep -q '^A.B$$' >/dev/null 2>&1 || { \
+ LC_ALL='$(UTF8_LOCALE)' && export LC_ALL && \
+ sharp='#' && \
+ ! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \
+ $(MISC) $(SOURCES) $(WEB_PAGES) \
+ CONTRIBUTING LICENSE Makefile README \
+ version tzdata.zi && \
+ ! grep -Env $(SAFE_SHARP_LINE) $(TDATA_TO_CHECK) backzone \
+ leapseconds yearistype.sh zone.tab && \
+ ! grep -Env $(OK_LINE) $(ENCHILADA); \
+ }
+
+check_white_space: $(ENCHILADA)
+ patfmt=' \t|[\f\r\v]' && pat=`printf "$$patfmt\\n"` && \
+ ! grep -En "$$pat" $(ENCHILADA)
+ ! grep -n '[[:space:]]$$' \
+ $$(ls $(ENCHILADA) | grep -Fvx leap-seconds.list)
+
+PRECEDES_FILE_NAME = ^(Zone|Link[[:space:]]+[^[:space:]]+)[[:space:]]+
+FILE_NAME_COMPONENT_TOO_LONG = \
+ $(PRECEDES_FILE_NAME)[^[:space:]]*[^/[:space:]]{15}
+
+check_name_lengths: $(TDATA_TO_CHECK) backzone
+ ! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
+ $(TDATA_TO_CHECK) backzone
+
+CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
+
+check_sorted: backward backzone iso3166.tab zone.tab zone1970.tab
+ $(AWK) '/^Link/ {print $$3}' backward | LC_ALL=C sort -cu
+ $(AWK) '/^Zone/ {print $$2}' backzone | LC_ALL=C sort -cu
+ $(AWK) '/^[^#]/ {print $$1}' iso3166.tab | LC_ALL=C sort -cu
+ $(AWK) '/^[^#]/ {print $$1}' zone.tab | LC_ALL=C sort -c
+ $(AWK) '/^[^#]/ {print substr($$0, 1, 2)}' zone1970.tab | \
+ LC_ALL=C sort -c
+ $(AWK) '/^[^#]/ $(CHECK_CC_LIST)' zone1970.tab | \
+ LC_ALL=C sort -cu
+
+check_links: checklinks.awk $(TDATA_TO_CHECK)
+ $(AWK) -f checklinks.awk $(TDATA_TO_CHECK)
+ $(AWK) -f checklinks.awk tzdata.zi
+
+check_tables: checktab.awk $(PRIMARY_YDATA) $(ZONETABLES)
+ for tab in $(ZONETABLES); do \
+ $(AWK) -f checktab.awk -v zone_table=$$tab $(PRIMARY_YDATA) \
+ || exit; \
+ done
+
+check_tzs: $(TZS) $(TZS_NEW)
+ diff -u $(TZS) $(TZS_NEW)
+
+# This checks only the HTML 4.01 strict page.
+# To check the the other pages, use <https://validator.w3.org/>.
+check_web: tz-how-to.html
+ $(VALIDATE_ENV) $(VALIDATE) $(VALIDATE_FLAGS) tz-how-to.html
+
+# Check that tzdata.zi generates the same binary data that its sources do.
+check_zishrink: tzdata.zi zic leapseconds $(PACKRATDATA) $(TDATA)
+ for type in posix right; do \
+ mkdir -p time_t.dir/$$type time_t.dir/$$type-shrunk && \
+ case $$type in \
+ right) leap='-L leapseconds';; \
+ *) leap=;; \
+ esac && \
+ $(ZIC) $$leap -d time_t.dir/$$type $(TDATA) && \
+ $(AWK) '/^Rule/' $(TDATA) | \
+ $(ZIC) $$leap -d time_t.dir/$$type - $(PACKRATDATA) && \
+ $(ZIC) $$leap -d time_t.dir/$$type-shrunk tzdata.zi && \
+ diff -r time_t.dir/$$type time_t.dir/$$type-shrunk || exit; \
+ done
+ rm -fr time_t.dir
+
+clean_misc:
+ del core *.obj *.out \
+ date tzselect version.h zdump.exe zic.exe yearistype libtz.lib
+clean: clean_misc
+ del *.dir tzdata.zi $(TZS_NEW)
+
+maintainer-clean: clean
+ @echo 'This command is intended for maintainers to use; it'
+ @echo 'deletes files that may need special tools to rebuild.'
+ rm -f leapseconds version $(MANTXTS) $(TZS) *.asc *.tar.*
+
+names:
+ @echo $(ENCHILADA)
+
+public: check check_public $(CHECK_TIME_T_ALTERNATIVES) \
+ tarballs signatures
+
+date.1.txt: date.1
+newctime.3.txt: newctime.3
+newstrftime.3.txt: newstrftime.3
+newtzset.3.txt: newtzset.3
+time2posix.3.txt: time2posix.3
+tzfile.5.txt: tzfile.5
+tzselect.8.txt: tzselect.8
+zdump.8.txt: zdump.8
+zic.8.txt: zic.8
+
+$(MANTXTS): workman.sh
+ LC_ALL=C sh workman.sh `expr $@ : '\(.*\)\.txt$$'` >$@.out
+ mv $@.out $@
+
+# Set the time stamps 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.
+# Also, set the timestamp of each prebuilt file like 'leapseconds'
+# to be the maximum of the files it depends on.
+set-timestamps.out: $(ENCHILADA)
+ rm -f $@
+ if (type git) >/dev/null 2>&1 && \
+ files=`git ls-files $(ENCHILADA)` && \
+ touch -md @1 test.out; then \
+ rm -f test.out && \
+ for file in $$files; do \
+ if git diff --quiet $$file; then \
+ time=`git log -1 --format='tformat:%ct' $$file` && \
+ touch -cmd @$$time $$file; \
+ else \
+ echo >&2 "$$file: warning: does not match repository"; \
+ fi || exit; \
+ done; \
+ fi
+ touch -cmr `ls -t $(LEAP_DEPS) | sed 1q` leapseconds
+ for file in `ls $(MANTXTS) | sed 's/\.txt$$//'`; do \
+ touch -cmr `ls -t $$file workman.sh | sed 1q` $$file.txt || \
+ exit; \
+ done
+ touch -cmr `ls -t $(TZDATA_ZI_DEPS) | sed 1q` tzdata.zi
+ touch -cmr `ls -t $(TZS_DEPS) | sed 1q` $(TZS)
+ touch -cmr `ls -t $(VERSION_DEPS) | sed 1q` version
+ touch $@
+
+# The zics below ensure that each data file can stand on its own.
+# We also do an all-files run to catch links to links.
+
+check_public:
+ $(MAKE) maintainer-clean
+ $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' ALL
+ mkdir -p public.dir
+ for i in $(TDATA_TO_CHECK) tzdata.zi; do \
+ $(zic) -v -d public.dir $$i 2>&1 || exit; \
+ done
+ $(zic) -v -d public.dir $(TDATA_TO_CHECK)
+ rm -fr public.dir
+
+# Check that the code works under various alternative
+# implementations of time_t.
+check_time_t_alternatives:
+ if diff -q Makefile Makefile 2>/dev/null; then \
+ quiet_option='-q'; \
+ else \
+ quiet_option=''; \
+ fi && \
+ wd=`pwd` && \
+ zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \
+ for type in $(TIME_T_ALTERNATIVES); do \
+ mkdir -p time_t.dir/$$type && \
+ $(MAKE) clean_misc && \
+ $(MAKE) TOPDIR="$$wd/time_t.dir/$$type" \
+ CFLAGS='$(CFLAGS) -Dtime_tz='"'$$type'" \
+ REDO='$(REDO)' \
+ install && \
+ diff $$quiet_option -r \
+ time_t.dir/int64_t/etc \
+ time_t.dir/$$type/etc && \
+ diff $$quiet_option -r \
+ time_t.dir/int64_t/usr/share \
+ time_t.dir/$$type/usr/share && \
+ case $$type in \
+ int32_t) range=-2147483648,2147483647;; \
+ uint32_t) range=0,4294967296;; \
+ int64_t) continue;; \
+ *u*) range=0,10000000000;; \
+ *) range=-10000000000,10000000000;; \
+ esac && \
+ echo checking $$type zones ... && \
+ time_t.dir/int64_t/usr/bin/zdump -V -t $$range $$zones \
+ >time_t.dir/int64_t.out && \
+ time_t.dir/$$type/usr/bin/zdump -V -t $$range $$zones \
+ >time_t.dir/$$type.out && \
+ diff -u time_t.dir/int64_t.out time_t.dir/$$type.out \
+ || exit; \
+ done
+ rm -fr time_t.dir
+
+tarballs traditional_tarballs signatures traditional_signatures: version
+ VERSION=`cat version` && \
+ $(MAKE) VERSION="$$VERSION" $@_version
+
+tarballs_version: traditional_tarballs_version tzdb-$(VERSION).tar.lz
+traditional_tarballs_version: \
+ tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz
+signatures_version: traditional_signatures_version tzdb-$(VERSION).tar.lz.asc
+traditional_signatures_version: \
+ tzcode$(VERSION).tar.gz.asc tzdata$(VERSION).tar.gz.asc \
+
+tzcode$(VERSION).tar.gz: set-timestamps.out
+ LC_ALL=C && export LC_ALL && \
+ tar $(TARFLAGS) -cf - \
+ $(COMMON) $(DOCS) $(SOURCES) | \
+ gzip $(GZIPFLAGS) >$@.out
+ mv $@.out $@
+
+tzdata$(VERSION).tar.gz: set-timestamps.out
+ LC_ALL=C && export LC_ALL && \
+ tar $(TARFLAGS) -cf - $(COMMON) $(DATA) $(MISC) | \
+ gzip $(GZIPFLAGS) >$@.out
+ mv $@.out $@
+
+tzdb-$(VERSION).tar.lz: set-timestamps.out
+ rm -fr tzdb-$(VERSION)
+ mkdir tzdb-$(VERSION)
+ ln $(ENCHILADA) tzdb-$(VERSION)
+ touch -cmr `ls -t tzdb-$(VERSION)/* | sed 1q` tzdb-$(VERSION)
+ LC_ALL=C && export LC_ALL && \
+ tar $(TARFLAGS) -cf - tzdb-$(VERSION) | lzip -9 >$@.out
+ mv $@.out $@
+
+tzcode$(VERSION).tar.gz.asc: tzcode$(VERSION).tar.gz
+ gpg --armor --detach-sign $?
+
+tzdata$(VERSION).tar.gz.asc: tzdata$(VERSION).tar.gz
+ gpg --armor --detach-sign $?
+
+tzdb-$(VERSION).tar.lz.asc: tzdb-$(VERSION).tar.lz
+ gpg --armor --detach-sign $?
+
+typecheck:
+ $(MAKE) clean
+ for i in "long long" unsigned; \
+ do \
+ $(MAKE) CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \
+ ./zdump -v Europe/Rome ; \
+ $(MAKE) clean ; \
+ done
+
+zonenames: tzdata.zi
+ @$(AWK) '/^Z/ { print $$2 } /^L/ { print $$3 }' tzdata.zi
+
+asctime.obj: private.h tzfile.h
+date.obj: private.h
+difftime.obj: private.h
+localtime.obj: private.h tzfile.h
+strftime.obj: private.h tzfile.h
+zdump.obj: version.h
+zic.obj: private.h tzfile.h version.h
+getopt.obj:
+msvcrt.lib:
+
+.KEEP_STATE:
+
+.PHONY: ALL INSTALL root
+.PHONY: check check_character_set check_links
+.PHONY: check_public check_sorted check_tables
+.PHONY: check_time_t_alternatives check_tzs check_web check_white_space
+.PHONY: check_zishrink
+.PHONY: clean clean_misc force_tzs
+.PHONY: install install_data maintainer-clean names
+.PHONY: posix_only posix_packrat posix_right
+.PHONY: public right_only right_posix signatures signatures_version
+.PHONY: tarballs tarballs_version typecheck
+.PHONY: zonenames zones
diff --git a/getopt.c b/getopt.c
new file mode 100644
index 0000000..9608eae
--- /dev/null
+++ b/getopt.c
@@ -0,0 +1,110 @@
+/* transcript/src/getopt.c
+ *
+ * public domain getopt from mod.sources
+ * RCSID: $Header: getopt.c,v 2.1 85/11/24 11:49:10 shore Rel $
+ */
+
+/*
+** This is a public domain version of getopt(3).
+** Bugs, fixes to:
+** Keith Bostic
+** ARPA: keith@seismo
+** UUCP: seismo!keith
+** Added NO_STDIO, opterr handling, Rich $alz (mirror!rs).
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+/*
+** Error macro. Maybe we want stdio, maybe we don't.
+** The (undocumented?) variable opterr tells us whether or not
+** to print errors.
+*/
+
+#ifdef NO_STDIO
+
+#define tell(s) \
+ if (opterr) \
+ { \
+ char ebuf[2]; \
+ (void)write(2, nargv, (unsigned int)strlen(nargv)); \
+ (void)write(2, s, (unsigned int)strlen(s)); \
+ ebuf[0] = optopt; \
+ ebuf[1] = '\n'; \
+ (void)write(2, ebuf, 2); \
+ }
+
+#else
+
+#define tell(s) \
+ if (opterr) \
+ (void)fputs(*nargv, stderr), \
+ (void)fputs(s,stderr), \
+ (void)fputc(optopt, stderr), \
+ (void)fputc('\n', stderr)
+
+#endif
+
+
+/* Global variables. */
+static char EMSG[] = "";
+int opterr = 1; /* undocumented error-suppressor*/
+int optind = 1; /* index into argv vector */
+int optopt; /* char checked for validity */
+char *optarg; /* arg associated with option */
+
+
+
+getopt(nargc, nargv, ostr)
+ int nargc;
+ char **nargv;
+ char *ostr;
+{
+ static char *place = EMSG; /* option letter processing */
+ register char *oli; /* option letter list index */
+
+ if (!*place) /* update scanning pointer */
+ {
+ if (optind >= nargc || *(place = nargv[optind]) != '-' || !*++place)
+ return(EOF);
+ if (*place == '-') /* found "--" */
+ {
+ optind++;
+ return(EOF);
+ }
+ }
+ /* option letter okay? */
+ if ((optopt = *place++) == ':' || (oli = strchr(ostr, optopt)) == NULL)
+ {
+ if (!*place)
+ optind++;
+ tell(": illegal option -- ");
+ goto Bad;
+ }
+ if (*++oli != ':') /* don't need argument */
+ {
+ optarg = NULL;
+ if (!*place)
+ optind++;
+ }
+ else /* need an argument */
+ {
+ if (*place)
+ optarg = place; /* no white space */
+ else
+ if (nargc <= ++optind)
+ {
+ place = EMSG;
+ tell(": option requires an argument -- ");
+ goto Bad;
+ }
+ else
+ optarg = nargv[optind]; /* white space */
+ place = EMSG;
+ optind++;
+ }
+ return(optopt); /* dump back option letter */
+Bad:
+ return('?');
+}
\ No newline at end of file
diff --git a/localtime.c b/localtime.c
index 9b8266a..06243dd 100644
--- a/localtime.c
+++ b/localtime.c
@@ -58,6 +58,14 @@ static void unlock(void) { }
#define OPEN_MODE O_RDONLY
#endif /* !defined O_BINARY */
+#ifdef _WIN32
+#ifdef _WIN64
+typedef unsigned __int64 ssize_t;
+#else
+typedef unsigned int ssize_t;
+#endif
+#endif
+
#ifndef WILDABBR
/*
** Someone might make incorrect use of a time zone abbreviation:
@@ -401,6 +409,13 @@ tzloadbody(char const *name, struct state *sp, bool doextend,
if (name[0] == ':')
++name;
doaccess = name[0] == '/';
+#ifdef _WIN32
+ /*
+ ** DOS drive specifier?
+ */
+ if (isalpha(name[0]) && name[1]==':' && name[2] == '\\')
+ doaccess = true;
+#endif
if (!doaccess) {
size_t namelen = strlen(name);
if (sizeof lsp->fullname - sizeof tzdirslash <= namelen)
@@ -1529,11 +1544,13 @@ localtime_tzset(time_t const *timep, struct tm *tmp, bool setname)
return tmp;
}
+#ifndef _WIN32
struct tm *
localtime(const time_t *timep)
{
return localtime_tzset(timep, &tm, true);
}
+#endif
struct tm *
localtime_r(const time_t *timep, struct tm *tmp)
@@ -1575,11 +1592,13 @@ gmtime_r(const time_t *timep, struct tm *tmp)
return gmtsub(gmtptr, timep, 0, tmp);
}
+#ifndef _WIN32
struct tm *
gmtime(const time_t *timep)
{
return gmtime_r(timep, &tm);
}
+#endif
#ifdef STD_INSPIRED
@@ -1724,6 +1743,7 @@ timesub(const time_t *timep, int_fast32_t offset,
return NULL;
}
+#ifndef _WIN32
char *
ctime(const time_t *timep)
{
@@ -1736,6 +1756,7 @@ ctime(const time_t *timep)
struct tm *tmp = localtime(timep);
return tmp ? asctime(tmp) : NULL;
}
+#endif
char *
ctime_r(const time_t *timep, char *buf)
@@ -2155,6 +2176,7 @@ mktime_z(struct state *sp, struct tm *tmp)
#endif
+#ifndef _WIN32
time_t
mktime(struct tm *tmp)
{
@@ -2169,6 +2191,7 @@ mktime(struct tm *tmp)
unlock();
return t;
}
+#endif
#ifdef STD_INSPIRED
diff --git a/private.h b/private.h
index 2e8415e..d460ca3 100644
--- a/private.h
+++ b/private.h
@@ -266,7 +266,11 @@ typedef int int_fast32_t;
#ifndef INTMAX_MAX
# ifdef LLONG_MAX
typedef long long intmax_t;
+# if _MSC_VER <= 1600
+# define strtoimax strtol
+# else
# define strtoimax strtoll
+# endif
# define INTMAX_MAX LLONG_MAX
# define INTMAX_MIN LLONG_MIN
# else
diff --git a/zdump.c b/zdump.c
index 60a027e..fc90662 100644
--- a/zdump.c
+++ b/zdump.c
@@ -4,6 +4,9 @@
*/
#include "version.h"
+#ifdef _WIN32
+#include <stdlib.h>
+#endif
/*
** This code has been made independent of the rest of the time
@@ -22,6 +25,12 @@
#include "private.h"
#include <stdio.h>
+#if _MSC_VER <= 1600
+# define strtoimax strtol
+#else
+# define strtoimax strtoll
+#endif
+
#ifndef HAVE_SNPRINTF
# define HAVE_SNPRINTF (199901 <= __STDC_VERSION__)
#endif
@@ -181,6 +190,9 @@ gmtime_r(time_t *tp, struct tm *tmp)
return r;
}
+#endif
+#ifdef _WIN32
+struct tm * gmtime_r(time_t *tp, struct tm *tmp);
#endif
/* Platforms with TM_ZONE don't need tzname, so they can use the
@@ -198,7 +210,11 @@ gmtime_r(time_t *tp, struct tm *tmp)
# undef localtime_r
# define localtime_r zdump_localtime_r
static struct tm *
+#ifdef _WIN32
+localtime_r(__time64_t *tp, struct tm *tmp)
+#else
localtime_r(time_t *tp, struct tm *tmp)
+#endif
{
struct tm *r = localtime(tp);
if (r) {
@@ -212,7 +228,11 @@ localtime_r(time_t *tp, struct tm *tmp)
# undef localtime_rz
# define localtime_rz zdump_localtime_rz
static struct tm *
+#ifdef _WIN32
+localtime_rz(timezone_t rz, __time64_t *tp, struct tm *tmp)
+#else
localtime_rz(timezone_t rz, time_t *tp, struct tm *tmp)
+#endif
{
return localtime_r(tp, tmp);
}
@@ -421,10 +441,22 @@ main(int argc, char *argv[])
register bool Vflag;
register char * cutarg;
register char * cuttimes;
+#ifdef _WIN32
+ register __time64_t cutlotime;
+ register __time64_t cuthitime;
+ __time64_t now;
+ __time64_t t;
+ __time64_t newt;
+#else
register time_t cutlotime;
register time_t cuthitime;
time_t now;
+ time_t t;
+ time_t newt;
+#endif
+ struct tm * newtmp;
bool iflag = false;
+ bool newtm_ok;
cutlotime = absolute_min_time;
cuthitime = absolute_max_time;
@@ -531,7 +563,6 @@ main(int argc, char *argv[])
for (i = optind; i < argc; ++i) {
timezone_t tz = tzalloc(argv[i]);
char const *ab;
- time_t t;
struct tm tm, newtm;
bool tm_ok;
if (!tz) {
@@ -562,12 +593,12 @@ main(int argc, char *argv[])
}
}
while (t < cuthitime) {
- time_t newt = ((t < absolute_max_time - SECSPERDAY / 2
+ newt = ((t < absolute_max_time - SECSPERDAY / 2
&& t + SECSPERDAY / 2 < cuthitime)
? t + SECSPERDAY / 2
: cuthitime);
- struct tm *newtmp = localtime_rz(tz, &newt, &newtm);
- bool newtm_ok = newtmp != NULL;
+ newtmp = localtime_rz(tz, &newt, &newtm);
+ newtm_ok = newtmp != NULL;
if (tm_ok != newtm_ok
|| (tm_ok && (delta(&newtm, &tm) != newt - t
|| newtm.tm_isdst != tm.tm_isdst
@@ -605,11 +636,19 @@ main(int argc, char *argv[])
return EXIT_SUCCESS;
}
+#ifdef _WIN32
+static __time64_t
+#else
static time_t
+#endif
yeartot(intmax_t y)
{
register intmax_t myy, seconds, years;
+#ifdef _WIN32
+ register __time64_t t;
+#else
register time_t t;
+#endif
myy = EPOCH_YEAR;
t = 0;
diff --git a/zic.c b/zic.c
index 304410f..11120ee 100644
--- a/zic.c
+++ b/zic.c
@@ -897,6 +897,11 @@ dolink(char const *fromfield, char const *tofield, bool staysymlink)
mkdirs(tofield, true);
symlink_errno = symlink(contents, tofield) == 0 ? 0 : errno;
}
+#ifdef _WIN32
+ /* there is no link support on Windows */
+ if (symlink_errno == ENOTSUP && !todirs_made)
+ mkdirs(tofield, true);
+#endif
free(linkalloc);
if (symlink_errno == 0) {
if (link_errno != ENOTSUP)
@@ -986,6 +991,14 @@ itsdir(char const *name)
if (res == 0)
return S_ISDIR(st.st_mode) != 0;
#endif
+#ifdef _WIN32
+ if (res == 0 ) {
+ if ((st.st_mode & 0170000) == 0040000)
+ return 1;
+ else
+ return 0;
+ }
+#else
if (res == 0 || errno == EOVERFLOW) {
size_t n = strlen(name);
char *nameslashdot = emalloc(n + 3);
@@ -996,6 +1009,7 @@ itsdir(char const *name)
free(nameslashdot);
return dir;
}
+#endif
return false;
}
--
2.15.1.windows.2
4
16
The legislators have approved a bill to allow California voters to
decide whether the state should move to permanent daylight time.
The governor now has less than 12 days to veto.
Even if voters say yes, federal approval will be required.
http://www.santacruzsentinel.com/technology/20180622/year-round-daylight-sa…
--
Steve Allen <sla(a)ucolick.org> WGS-84 (GPS)
UCO/Lick Observatory--ISB 260 Natural Sciences II, Room 165 Lat +36.99855
1156 High Street Voice: +1 831 459 3046 Lng -122.06015
Santa Cruz, CA 95064 http://www.ucolick.org/~sla/ Hgt +250 m
7
7
[I am cc'ing this to the tz mailing list (and changing the subject line)
to give tz readers a heads-up about the terminology issue. The question
here is: should tzdb man pages say "time zone" or "timezone"?
For context please see Michael Kerrisk's email
<https://marc.info/?m=152964652828320>, which says:
> When I inherited the project, the pages used a mixture of "time zone"
> and "timezone", with the former predominant. I nevertheless
> standardized on the latter, and although I don't recall for sure, I
> suspect it was because that is the spelling used in POSIX. (As an
> aside, there's an argument that--because POSIX--tzdb might want to
> consider switching spellings.) I'm not religious about the particular
> choice (although I have naturally now got used to the particular
> choice I made some years ago), but I did make that choice because I
> want consistency within the project, and I'm reluctant to introduce
> inconsistency.
and my response <https://marc.info/?m=152964676331902>, which says:
> I deferred to POSIX for "timestamp" versus "time stamp", but
> "timezone" is a bridge too far for me.
]
On second thought, perhaps I was too hasty. We could distinguish "time
zone" in the usual English-language sense (a set of geographic locations
that currently share the same standard time offset from UTC) from
"timezone" in the POSIX sense (a history and predicted future of UTC
offsets, abbreviations and isdst flags). If so, the tzdb documentation
could be more careful about using "time zone" for the former and
"timezone" for the latter, and this would make for fewer changes to the
GNU/Linux man-pages for tzdb. I can look into this and propose an
updated set of tzdb-related patches accordingly.
If I were designing the terminology from scratch, I wouldn't specify two
nearly-identical phrases "time zone" and "timezone" to mean such
different things. However, the phrases do have the advantage of existing
practice (common English usage and POSIX, respectively).
9
11
29 Jun '18
---
tz-link.html | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tz-link.html b/tz-link.html
index 548fbba..7ed1efd 100644
--- a/tz-link.html
+++ b/tz-link.html
@@ -813,11 +813,15 @@ title="Network Time Protocol">NTP</abbr>: The Network
Time Protocol</a> (Internet <abbr>RFC</abbr> 5905)
discusses how to synchronize clocks of
Internet hosts.</li>
+<li>The <a href="https://www.usenix.org/system/files/conference/nsdi18/nsdi18-geng.pdf"><font style="font-variant: small-caps">Huygens</font></a>
+family of software algorithms can achieve accuracy to a few tens of
+nanoseconds in scalable server farms without special hardware.</li>
<li>The <a
href="https://www.nist.gov/intelligent-systems-division/ieee-1588">Precision
Time Protocol</a> (<abbr
title="Institute of Electrical and Electronics Engineers">IEEE</abbr> 1588)
-can achieve submicrosecond clock accuracy on a local area network.</li>
+can achieve submicrosecond clock accuracy on a local area network
+with special-purpose hardware.</li>
<li><a
href="https://tools.ietf.org/html/rfc4833">Timezone
Options for <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr></a>
--
2.17.1
1
0
The governor approved AB 807
https://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?bill_id=201720…
Daylight time in California was established by the voters, and must be
repealed by the voters, so nothing happens until after an election
decides whether to ask the state legislature to consider how permanent
daylight time could be achieved.
--
Steve Allen <sla(a)ucolick.org> WGS-84 (GPS)
UCO/Lick Observatory--ISB 260 Natural Sciences II, Room 165 Lat +36.99855
1156 High Street Voice: +1 831 459 3046 Lng -122.06015
Santa Cruz, CA 95064 http://www.ucolick.org/~sla/ Hgt +250 m
1
0
Although this still does not fully work with GNU Make,
it’s better than what we had.
* Makefile (TIME_T_ALTERNATIVES_HEAD)
(TIME_T_ALTERNATIVES_TAIL): New macros.
(TIME_T_ALTERNATIVES): Use them.
(TZS_CUTOFF_FLAG): New macro.
($(ZDS)): Use it, so that submakes can use -t instead of -c cutoffs.
(EIGHT_YARDS): New macro.
(ENCHILADA): Use it.
(INSTALL_DATA_DEPS, TZS_NEW_DEPS): New macros.
(install_data, posix_only, right_only, posix_packrat, $(TZS_NEW)):
Use them to avoid duplicate work with GNU make -j.
($(TZS_NEW), check_zishrink_posix, check_zishrink_right, check_public)
(check_time_t_alternatives):
Use rule-specific temporary directories so that other rules can
run in parallel.
($(TZS_NEW)): Check for sort failure.
($(TZS)): Simply touch it if it doesn’t exist, so that it’s empty.
(check_tzs): Treat empty $(TZS) as nonexistent.
(check_character_set, check_white_space, check_name_lengths)
(check_sorted, check_links, check_tables, check_tzs, check_web)
(check_zishrink, check_public):
No longer phony.
(check_zishrink_posix, check_zishrink_right)
(typecheck_long_long, typecheck_unsigned):
New rules, so that they can be done in parallel.
(clean_misc): Clean the timestamp files that are now made due
to rules no longer being phony.
(set-timestamps.out): Do not set timestamp of $(TZS).
(set-tzs-timestamp.out): New rule.
(check_time_t_alternatives): Break into subrules, one for each
alternative, so that they can be done in parallel.
(tarballs, rearguard_tarballs, traditional_tarballs)
(signatures, rearguard_signatures, traditional_signatures):
Depend on set-timestamps.out and rearguard.zi.
(tzdb-$(VERSION).tar.lz): Depend on set-tzs-timestamp.out.
(TYPECHECK_CFLAGS): New macro.
---
Makefile | 240 +++++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 142 insertions(+), 98 deletions(-)
diff --git a/Makefile b/Makefile
index 2289dff..29058e5 100644
--- a/Makefile
+++ b/Makefile
@@ -106,8 +106,10 @@ MANDIR = $(TOPDIR)/$(USRSHAREDIR)/man
LIBDIR = $(TOPDIR)/$(USRDIR)/lib
-# Types to try, as an alternative to time_t. int64_t should be first.
-TIME_T_ALTERNATIVES = int64_t int32_t uint32_t uint64_t
+# Types to try, as an alternative to time_t.
+TIME_T_ALTERNATIVES = $(TIME_T_ALTERNATIVES_HEAD) $(TIME_T_ALTERNATIVES_TAIL)
+TIME_T_ALTERNATIVES_HEAD = int64_t
+TIME_T_ALTERNATIVES_TAIL = int32_t uint32_t uint64_t
# What kind of TZif data files to generate.
# (TZif is the binary time zone data format that zic generates.)
@@ -493,11 +495,14 @@ AWK_SCRIPTS= checklinks.awk checktab.awk leapseconds.awk \
ziguard.awk zishrink.awk
MISC= $(AWK_SCRIPTS) zoneinfo2tdf.pl
TZS_YEAR= 2050
+TZS_CUTOFF_FLAG= -c $(TZS_YEAR)
TZS= to$(TZS_YEAR).tzs
TZS_NEW= to$(TZS_YEAR)new.tzs
TZS_DEPS= $(PRIMARY_YDATA) asctime.c localtime.c \
private.h tzfile.h zdump.c zic.c
-ENCHILADA= $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC) $(TZS) tzdata.zi
+# EIGHT_YARDS is just a yard short of the whole ENCHILADA.
+EIGHT_YARDS = $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC) tzdata.zi
+ENCHILADA = $(EIGHT_YARDS) $(TZS)
# Consult these files when deciding whether to rebuild the 'version' file.
# This list is not the same as the output of 'git ls-files', since
@@ -606,14 +611,16 @@ INSTALLARGS = \
YEARISTYPE='$(YEARISTYPE)' \
ZIC='$(ZIC)'
+INSTALL_DATA_DEPS = zic leapseconds yearistype tzdata.zi
+
# 'make install_data' installs one set of TZif files.
-install_data: zic leapseconds yearistype tzdata.zi
+install_data: $(INSTALL_DATA_DEPS)
$(ZIC_INSTALL) tzdata.zi
-posix_only:
+posix_only: $(INSTALL_DATA_DEPS)
$(MAKE) $(INSTALLARGS) LEAPSECONDS= install_data
-right_only:
+right_only: $(INSTALL_DATA_DEPS)
$(MAKE) $(INSTALLARGS) LEAPSECONDS='-L leapseconds' \
install_data
@@ -640,7 +647,7 @@ posix_right: posix_only
# This obsolescent rule is present for backwards compatibility with
# tz releases 2014g through 2015g. It should go away eventually.
-posix_packrat:
+posix_packrat: $(INSTALL_DATA_DEPS)
$(MAKE) $(INSTALLARGS) PACKRATDATA=backzone posix_only
zones: $(REDO)
@@ -651,29 +658,33 @@ ZDS = dummy.zd
# Rule used only by submakes invoked by the $(TZS_NEW) rule.
# It is separate so that GNU 'make -j' can run instances in parallel.
$(ZDS): zdump
- ./zdump -i -c $(TZS_YEAR) '$(wd)/'$$(expr $@ : '\(.*\).zd') >$@
-
-$(TZS_NEW): tzdata.zi zdump zic
- rm -fr tzs.dir
- mkdir tzs.dir
- $(zic) -d tzs.dir tzdata.zi
+ ./zdump -i $(TZS_CUTOFF_FLAG) '$(wd)/'$$(expr $@ : '\(.*\).zd') \
+ >$@
+
+TZS_NEW_DEPS = tzdata.zi zdump zic
+$(TZS_NEW): $(TZS_NEW_DEPS)
+ rm -fr tzs$(TZS_YEAR).dir
+ mkdir tzs$(TZS_YEAR).dir
+ $(zic) -d tzs$(TZS_YEAR).dir tzdata.zi
$(AWK) '/^L/{print "Link\t" $$2 "\t" $$3}' \
tzdata.zi | LC_ALL=C sort >$@.out
wd=`pwd` && \
- set x `$(AWK) '/^Z/{print "tzs.dir/" $$2 ".zd"}' tzdata.zi \
+ x=`$(AWK) '/^Z/{print "tzs$(TZS_YEAR).dir/" $$2 ".zd"}' \
+ tzdata.zi \
| LC_ALL=C sort -t . -k 2,2` && \
+ set x $$x && \
shift && \
ZDS=$$* && \
- $(MAKE) wd="$$wd" TZS_YEAR=$(TZS_YEAR) ZDS="$$ZDS" $$ZDS && \
- sed 's,^TZ=".*tzs\.dir/,TZ=",' $$ZDS >>$@.out
- rm -fr tzs.dir
+ $(MAKE) wd="$$wd" TZS_CUTOFF_FLAG="$(TZS_CUTOFF_FLAG)" \
+ ZDS="$$ZDS" $$ZDS && \
+ sed 's,^TZ=".*\.dir/,TZ=",' $$ZDS >>$@.out
+ rm -fr tzs$(TZS_YEAR).dir
mv $@.out $@
-# If $(TZS) does not already exist (e.g., old-format tarballs), create it.
-# If it exists but 'make check_tzs' fails, a maintainer should inspect the
+# If $(TZS) exists but 'make check_tzs' fails, a maintainer should inspect the
# failed output and fix the inconsistency, perhaps by running 'make force_tzs'.
$(TZS):
- $(MAKE) force_tzs
+ touch $@
force_tzs: $(TZS_NEW)
cp $(TZS_NEW) $(TZS)
@@ -718,12 +729,14 @@ check_character_set: $(ENCHILADA)
leapseconds yearistype.sh zone.tab && \
! grep -Env $(OK_LINE) $(ENCHILADA); \
}
+ touch $@
check_white_space: $(ENCHILADA)
patfmt=' \t|[\f\r\v]' && pat=`printf "$$patfmt\\n"` && \
! grep -En "$$pat" $(ENCHILADA)
! grep -n '[[:space:]]$$' \
$$(ls $(ENCHILADA) | grep -Fvx leap-seconds.list)
+ touch $@
PRECEDES_FILE_NAME = ^(Zone|Link[[:space:]]+[^[:space:]]+)[[:space:]]+
FILE_NAME_COMPONENT_TOO_LONG = \
@@ -732,6 +745,7 @@ FILE_NAME_COMPONENT_TOO_LONG = \
check_name_lengths: $(TDATA_TO_CHECK) backzone
! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
$(TDATA_TO_CHECK) backzone
+ touch $@
CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
@@ -744,52 +758,61 @@ check_sorted: backward backzone iso3166.tab zone.tab zone1970.tab
LC_ALL=C sort -c
$(AWK) '/^[^#]/ $(CHECK_CC_LIST)' zone1970.tab | \
LC_ALL=C sort -cu
+ touch $@
check_links: checklinks.awk $(TDATA_TO_CHECK) tzdata.zi
$(AWK) -f checklinks.awk $(TDATA_TO_CHECK)
$(AWK) -f checklinks.awk tzdata.zi
+ touch $@
check_tables: checktab.awk $(PRIMARY_YDATA) $(ZONETABLES)
for tab in $(ZONETABLES); do \
$(AWK) -f checktab.awk -v zone_table=$$tab $(PRIMARY_YDATA) \
|| exit; \
done
+ touch $@
check_tzs: $(TZS) $(TZS_NEW)
- diff -u $(TZS) $(TZS_NEW)
+ if test -s $(TZS); then \
+ diff -u $(TZS) $(TZS_NEW); \
+ else \
+ cp $(TZS_NEW) $(TZS); \
+ fi
+ touch $@
# This checks only the HTML 4.01 strict page.
# To check the the other pages, use <https://validator.w3.org/>.
check_web: tz-how-to.html
$(VALIDATE_ENV) $(VALIDATE) $(VALIDATE_FLAGS) tz-how-to.html
+ touch $@
# Check that zishrink.awk does not alter the data, and that ziguard.awk
# preserves main-format data.
-check_zishrink: zic leapseconds $(PACKRATDATA) $(TDATA) \
- $(DATAFORM).zi tzdata.zi
- for type in posix right; do \
- mkdir -p time_t.dir/$$type time_t.dir/$$type-t \
- time_t.dir/$$type-shrunk && \
- case $$type in \
- right) leap='-L leapseconds';; \
- *) leap=;; \
- esac && \
- $(ZIC) $$leap -d time_t.dir/$$type $(DATAFORM).zi && \
+check_zishrink: check_zishrink_posix check_zishrink_right
+check_zishrink_posix check_zishrink_right: \
+ zic leapseconds $(PACKRATDATA) $(TDATA) $(DATAFORM).zi tzdata.zi
+ rm -fr $@.dir $(a)-t.dir $(a)-shrunk.dir
+ mkdir $@.dir $(a)-t.dir $(a)-shrunk.dir
+ case $@ in \
+ *_right) leap='-L leapseconds';; \
+ *) leap=;; \
+ esac && \
+ $(ZIC) $$leap -d $@.dir $(DATAFORM).zi && \
+ $(ZIC) $$leap -d $(a)-shrunk.dir tzdata.zi && \
case $(DATAFORM) in \
main) \
- $(ZIC) $$leap -d time_t.dir/$$type-t $(TDATA) && \
+ $(ZIC) $$leap -d $(a)-t.dir $(TDATA) && \
$(AWK) '/^Rule/' $(TDATA) | \
- $(ZIC) $$leap -d time_t.dir/$$type-t - \
- $(PACKRATDATA) && \
- diff -r time_t.dir/$$type time_t.dir/$$type-t;; \
- esac && \
- $(ZIC) $$leap -d time_t.dir/$$type-shrunk tzdata.zi && \
- diff -r time_t.dir/$$type time_t.dir/$$type-shrunk || exit; \
- done
- rm -fr time_t.dir
+ $(ZIC) $$leap -d $(a)-t.dir - $(PACKRATDATA) && \
+ diff -r $@.dir $(a)-t.dir;; \
+ esac
+ diff -r $@.dir $(a)-shrunk.dir
+ rm -fr $@.dir $(a)-t.dir $(a)-shrunk.dir
+ touch $@
clean_misc:
- rm -f core *.o *.out \
+ rm -f *.o *.out $(TIME_T_ALTERNATIVES) \
+ check_* core typecheck_* \
date tzselect version.h zdump zic yearistype libtz.a
clean: clean_misc
rm -fr *.dir *.zi tzdb-*/ $(TZS_NEW)
@@ -826,10 +849,10 @@ $(MANTXTS): workman.sh
# If git or GNU 'touch' 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: $(ENCHILADA)
+set-timestamps.out: $(EIGHT_YARDS)
rm -f $@
if (type git) >/dev/null 2>&1 && \
- files=`git ls-files $(ENCHILADA)` && \
+ files=`git ls-files $(EIGHT_YARDS)` && \
touch -md @1 test.out; then \
rm -f test.out && \
for file in $$files; do \
@@ -847,62 +870,74 @@ set-timestamps.out: $(ENCHILADA)
exit; \
done
touch -cmr `ls -t $(TZDATA_ZI_DEPS) | sed 1q` tzdata.zi
- touch -cmr `ls -t $(TZS_DEPS) | sed 1q` $(TZS)
touch -cmr `ls -t $(VERSION_DEPS) | sed 1q` version
touch $@
+set-tzs-timestamp.out: $(TZS)
+ touch -cmr `ls -t $(TZS_DEPS) | sed 1q` $(TZS)
+ touch $@
# The zics below ensure that each data file can stand on its own.
# We also do an all-files run to catch links to links.
-check_public:
- $(MAKE) maintainer-clean
- $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' ALL
- mkdir -p public.dir
- for i in $(TDATA_TO_CHECK) tzdata.zi; do \
- $(zic) -v -d public.dir $$i 2>&1 || exit; \
+check_public: $(VERSION_DEPS)
+ rm -fr public.dir
+ mkdir public.dir
+ ln $(VERSION_DEPS) public.dir
+ cd public.dir && $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' ALL
+ for i in $(TDATA_TO_CHECK) public.dir/tzdata.zi; do \
+ public.dir/zic -v -d public.dir/zoneinfo $$i 2>&1 || exit; \
done
- $(zic) -v -d public.dir $(TDATA_TO_CHECK)
+ public.dir/zic -v -d public.dir/zoneinfo-all $(TDATA_TO_CHECK)
rm -fr public.dir
+ touch $@
# Check that the code works under various alternative
# implementations of time_t.
-check_time_t_alternatives:
- if diff -q Makefile Makefile 2>/dev/null; then \
- quiet_option='-q'; \
- else \
- quiet_option=''; \
- fi && \
+check_time_t_alternatives: $(TIME_T_ALTERNATIVES)
+$(TIME_T_ALTERNATIVES_TAIL): $(TIME_T_ALTERNATIVES_HEAD)
+$(TIME_T_ALTERNATIVES): $(VERSION_DEPS)
+ rm -fr $@.dir
+ mkdir $@.dir
+ ln $(VERSION_DEPS) $@.dir
+ case $@ in \
+ int32_t) range=-2147483648,2147483648;; \
+ u*) range=0,4294967296;; \
+ *) range=-4294967296,4294967296;; \
+ esac && \
wd=`pwd` && \
zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \
- for type in $(TIME_T_ALTERNATIVES); do \
- mkdir -p time_t.dir/$$type && \
- $(MAKE) clean_misc && \
- $(MAKE) TOPDIR="$$wd/time_t.dir/$$type" \
- CFLAGS='$(CFLAGS) -Dtime_tz='"'$$type'" \
+ if test $@ = $(TIME_T_ALTERNATIVES_HEAD); then \
+ range_target=; \
+ else \
+ range_target=to$$range.tzs; \
+ fi && \
+ (cd $@.dir && \
+ $(MAKE) TOPDIR="$$wd/$@.dir" \
+ CFLAGS='$(CFLAGS) -Dtime_tz='"'$@'" \
REDO='$(REDO)' \
- install && \
- diff $$quiet_option -r \
- time_t.dir/int64_t/etc \
- time_t.dir/$$type/etc && \
- diff $$quiet_option -r \
- time_t.dir/int64_t/usr/share \
- time_t.dir/$$type/usr/share && \
- case $$type in \
- int32_t) range=-2147483648,2147483647;; \
- uint32_t) range=0,4294967296;; \
- int64_t) continue;; \
- *u*) range=0,10000000000;; \
- *) range=-10000000000,10000000000;; \
- esac && \
- echo checking $$type zones ... && \
- time_t.dir/int64_t/usr/bin/zdump -V -t $$range $$zones \
- >time_t.dir/int64_t.out && \
- time_t.dir/$$type/usr/bin/zdump -V -t $$range $$zones \
- >time_t.dir/$$type.out && \
- diff -u time_t.dir/int64_t.out time_t.dir/$$type.out \
- || exit; \
- done
- rm -fr time_t.dir
+ D=$$wd/$@.dir \
+ TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
+ install $$range_target) && \
+ test $@ = $(TIME_T_ALTERNATIVES_HEAD) || { \
+ (cd $(TIME_T_ALTERNATIVES_HEAD).dir && \
+ $(MAKE) TOPDIR="$$wd/$@.dir" \
+ TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
+ D=$$wd/$@.dir \
+ to$$range.tzs) && \
+ diff -u $(TIME_T_ALTERNATIVES_HEAD).dir/to$$range.tzs \
+ $@.dir/to$$range.tzs && \
+ if diff -q Makefile Makefile 2>/dev/null; then \
+ quiet_option='-q'; \
+ else \
+ quiet_option=''; \
+ fi && \
+ diff $$quiet_option -r $(TIME_T_ALTERNATIVES_HEAD).dir/etc \
+ $@.dir/etc && \
+ diff $$quiet_option -r \
+ $(TIME_T_ALTERNATIVES_HEAD).dir/usr/share \
+ $@.dir/usr/share; \
+ }
+ touch $@
TRADITIONAL_ASC = \
tzcode$(VERSION).tar.gz.asc \
@@ -913,7 +948,8 @@ ALL_ASC = $(TRADITIONAL_ASC) $(REARGUARD_ASC) \
tzdb-$(VERSION).tar.lz.asc
tarballs rearguard_tarballs traditional_tarballs \
-signatures rearguard_signatures traditional_signatures: version
+signatures rearguard_signatures traditional_signatures: \
+ version set-timestamps.out rearguard.zi
VERSION=`cat version` && \
$(MAKE) VERSION="$$VERSION" $@_version
@@ -963,7 +999,7 @@ tzdata$(VERSION)-rearguard.tar.gz: rearguard.zi set-timestamps.out
gzip $(GZIPFLAGS)) >$@.out
mv $@.out $@
-tzdb-$(VERSION).tar.lz: set-timestamps.out
+tzdb-$(VERSION).tar.lz: set-timestamps.out set-tzs-timestamp.out
rm -fr tzdb-$(VERSION)
mkdir tzdb-$(VERSION)
ln $(ENCHILADA) tzdb-$(VERSION)
@@ -979,14 +1015,24 @@ tzdb-$(VERSION).tar.lz.asc: tzdb-$(VERSION).tar.lz
$(ALL_ASC):
gpg2 --armor --detach-sign $?
-typecheck:
- $(MAKE) clean
- for i in "long long" unsigned; \
- do \
- $(MAKE) CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \
- ./zdump -v Europe/Rome ; \
- $(MAKE) clean ; \
- done
+TYPECHECK_CFLAGS = $(CFLAGS) -DTYPECHECK -D__time_t_defined -D_TIME_T
+typecheck: typecheck_long_long typecheck_unsigned
+typecheck_long_long typecheck_unsigned: $(VERSION_DEPS)
+ rm -fr $@.dir
+ mkdir $@.dir
+ ln $(VERSION_DEPS) $@.dir
+ cd $@.dir && \
+ case $@ in \
+ *_long_long) i="long long";; \
+ *_unsigned ) i="unsigned" ;; \
+ esac && \
+ typecheck_cflags='' && \
+ $(MAKE) \
+ CFLAGS="$(TYPECHECK_CFLAGS) \"-Dtime_t=$$i\"" \
+ TOPDIR="`pwd`" \
+ install
+ $@.dir/zdump -i -c 1970,1971 Europe/Rome
+ touch $@
zonenames: tzdata.zi
@$(AWK) '/^Z/ { print $$2 } /^L/ { print $$3 }' tzdata.zi
@@ -1002,9 +1048,7 @@ zic.o: private.h tzfile.h version.h
.KEEP_STATE:
.PHONY: ALL INSTALL all
-.PHONY: check check_character_set check_links check_name_lengths
-.PHONY: check_public check_sorted check_tables
-.PHONY: check_time_t_alternatives check_tzs check_web check_white_space
+.PHONY: check check_time_t_alternatives
.PHONY: check_zishrink
.PHONY: clean clean_misc dummy.zd force_tzs
.PHONY: install install_data maintainer-clean names
--
2.7.4
1
0
Recently during a conversation about the tzdb and a colleague of mine mentioned that it seems to be a strange outlier that Europe/Zaporozhye has its own zone, since Zaporozh'ye is not a particularly large city (it's quite close to Donetsk, which he deemed more likely to be the major city in the area). I looked at the source code and saw that it mentions:
# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
(https://github.com/eggert/tz/blob/master/europe#L3850)
He seemed to think that this was an absurd notion and that more or less any city in Ukraine would either follow Moscow time or Crimea time, but none of them would have yet a third history. It does seem a bit strange (though perfectly consistent with the weird nonsense everyone else gets up to) that only Zaporozh'ye and eastern Lugansk would follow a different time zone than their immediate neighbors - these are not even contiguous regions. In the timezone-boundary-builder project (https://github.com/evansiroky/timezone-boundary-builder) it seems that only Zaporozhia Oblast is included in the shapefile.
We did a cursory search for references (including in the archives of this mailing list and the git history) in English and Russian and couldn't find any reference to Zaporozhia and Lugansk having a different time zone that wasn't derived from this project.
So, questions about this:
1. Can anyone point to a reference to the fact that these regions used a different time zone than their neighbors?
2. If no reference is handy, does anyone know on what basis this zone was included in the database in the first place?
3. Is there any clarification as to the geographic extent of the zone? Does it cover Donetsk as well? What part of Lugansk counts as "eastern Lugansk"?
Best,
Paul
2
1
In Paul Eggert's proposal for Macao from 2018-05-10, we find
+Rule Macau 1949 1951 - Apr Sat>=1 23:00s
1:00 D
+Rule Macau 1951 only - Mar 31 23:00s 1:00 D
with two successive switches to summer time at 1951-03-31 and
1951-04-07.
The later switch has no effect, and can easily be omitted:
+Rule Macau 1949 1950 - Apr Sat>=1 23:00s
1:00 D
There are several similar cases in tzdb where the specification
contains redundant data. For instance,
Rule HK 1965 1976 - Apr Sun>=16 3:30
1:00 S
Rule HK 1973 only - Dec 30 3:30 1:00 S
with two successive switches to summer time at 1973-12-30 and
1974-04-21,
the latter having no effect. In this case, removal of the redundancy
would require an addtional Rule line, so concise notation could be
construed as a reason for retaining the redundancy.
Do we have a guideline for such cases?
Michael Deckers.
2
1