mirror of
https://github.com/opnsense/src.git
synced 2026-05-27 03:33:51 -04:00
Merge commit '971fa603f2bdf16273135a00ff16c5585520c53f'
Changes: https://github.com/eggert/tz/blob/2022a/NEWS
With this merge, we return to our previous long-standing practice of
distributing the IANA Time Zone Database unmodified.
Releases of tzdb since 2021b have merged some time zones where clocks
have agreed since 1970. The overwhelming majority of users will not be
affected by this change. A port of the newly created global-tz fork of
the IANA Time Zone database (misc/global-tz) is available for users who
need more granular pre-1970 time zone history.
(cherry picked from commit 8ea5af2b77)
139 lines
4.5 KiB
Awk
139 lines
4.5 KiB
Awk
# Convert tzdata source into vanguard or rearguard form.
|
|
|
|
# Contributed by Paul Eggert. This file is in the public domain.
|
|
|
|
# This is not a general-purpose converter; it is designed for current tzdata.
|
|
# It just converts from current source to main, vanguard, and rearguard forms.
|
|
# Although it might be nice for it to be idempotent, or to be useful
|
|
# for converting back and forth between vanguard and rearguard formats,
|
|
# it does not do these nonessential tasks now.
|
|
#
|
|
# Although main and vanguard forms are currently equivalent,
|
|
# this need not always be the case.
|
|
#
|
|
# When converting to vanguard form, the output can use negative SAVE
|
|
# values.
|
|
#
|
|
# When converting to rearguard form, the output uses only nonnegative
|
|
# SAVE values. The idea is for the output data to simulate the behavior
|
|
# of the input data as best it can within the constraints of the
|
|
# rearguard format.
|
|
|
|
BEGIN {
|
|
dataform_type["vanguard"] = 1
|
|
dataform_type["main"] = 1
|
|
dataform_type["rearguard"] = 1
|
|
|
|
# The command line should set DATAFORM.
|
|
if (!dataform_type[DATAFORM]) exit 1
|
|
vanguard = DATAFORM == "vanguard"
|
|
}
|
|
|
|
/^Zone/ { zone = $2 }
|
|
|
|
DATAFORM != "main" {
|
|
in_comment = /^#/
|
|
uncomment = comment_out = 0
|
|
|
|
# If this line should differ due to Czechoslovakia using negative SAVE values,
|
|
# uncomment the desired version and comment out the undesired one.
|
|
if (zone == "Europe/Prague" && /^#?[\t ]+[01]:00[\t ]/ && /1947 Feb 23/) {
|
|
if (($(in_comment + 2) != "-") == vanguard) {
|
|
uncomment = in_comment
|
|
} else {
|
|
comment_out = !in_comment
|
|
}
|
|
}
|
|
|
|
# If this line should differ due to Ireland using negative SAVE values,
|
|
# uncomment the desired version and comment out the undesired one.
|
|
Rule_Eire = /^#?Rule[\t ]+Eire[\t ]/
|
|
Zone_Dublin_post_1968 \
|
|
= (zone == "Europe/Dublin" && /^#?[\t ]+[01]:00[\t ]/ \
|
|
&& (!$(in_comment + 4) || 1968 < $(in_comment + 4)))
|
|
if (Rule_Eire || Zone_Dublin_post_1968) {
|
|
if ((Rule_Eire \
|
|
|| (Zone_Dublin_post_1968 && $(in_comment + 3) == "IST/GMT")) \
|
|
== vanguard) {
|
|
uncomment = in_comment
|
|
} else {
|
|
comment_out = !in_comment
|
|
}
|
|
}
|
|
|
|
# If this line should differ due to Namibia using negative SAVE values,
|
|
# uncomment the desired version and comment out the undesired one.
|
|
Rule_Namibia = /^#?Rule[\t ]+Namibia[\t ]/
|
|
Zone_using_Namibia_rule \
|
|
= (zone == "Africa/Windhoek" && /^#?[\t ]+[12]:00[\t ]/ \
|
|
&& ($(in_comment + 2) == "Namibia" \
|
|
|| ($(in_comment + 2) == "-" && $(in_comment + 3) == "CAT" \
|
|
&& ((1994 <= $(in_comment + 4) && $(in_comment + 4) <= 2017) \
|
|
|| in_comment + 3 == NF))))
|
|
if (Rule_Namibia || Zone_using_Namibia_rule) {
|
|
if ((Rule_Namibia \
|
|
? ($(in_comment + 9) ~ /^-/ \
|
|
|| ($(in_comment + 9) == 0 && $(in_comment + 10) == "CAT")) \
|
|
: $(in_comment + 1) == "2:00" && $(in_comment + 2) == "Namibia") \
|
|
== vanguard) {
|
|
uncomment = in_comment
|
|
} else {
|
|
comment_out = !in_comment
|
|
}
|
|
}
|
|
|
|
if (uncomment) {
|
|
sub(/^#/, "")
|
|
}
|
|
if (comment_out) {
|
|
sub(/^/, "#")
|
|
}
|
|
|
|
# In rearguard format, change the Japan rule line with "Sat>=8 25:00"
|
|
# to "Sun>=9 1:00", to cater to zic before 2007 and to older Java.
|
|
if (!vanguard && $1 == "Rule" && $7 == "Sat>=8" && $8 == "25:00") {
|
|
sub(/Sat>=8/, "Sun>=9")
|
|
sub(/25:00/, " 1:00")
|
|
}
|
|
|
|
# In rearguard format, change the Morocco lines with negative SAVE values
|
|
# to use positive SAVE values.
|
|
if (!vanguard && $1 == "Rule" && $2 == "Morocco" && $4 == 2018 \
|
|
&& $6 == "Oct") {
|
|
sub(/\t2018\t/, "\t2017\t")
|
|
}
|
|
if (!vanguard && $1 == "Rule" && $2 == "Morocco" && 2019 <= $3) {
|
|
if ($9 == "0") {
|
|
last_std_date = $3 " " $6 " " $7 " " $8
|
|
sub(/\t0\t/, "\t1:00\t")
|
|
} else {
|
|
sub(/\t-1:00\t/, "\t0\t")
|
|
}
|
|
}
|
|
if (!vanguard && $1 == "1:00" && $2 == "Morocco" && $3 == "+01/+00") {
|
|
# This introduces a transition from 01:59:59 +00 to 03:00:00 +01
|
|
# with both times being standard (i.e., a change to standard UT offset).
|
|
# This is rearguard's way to approximate the actual prediction,
|
|
# which is that of an ordinary transition from DST to standard time.
|
|
sub(/1:00\tMorocco\t\+01\/\+00$/,
|
|
"0:00\tMorocco\t+00/+01\t" last_std_date "\n\t\t\t 1:00\t-\t+01")
|
|
}
|
|
}
|
|
|
|
# If a Link line is followed by a Link or Zone line for the same data, comment
|
|
# out the Link line. This can happen if backzone overrides a Link
|
|
# with a Zone or a different Link.
|
|
/^Zone/ {
|
|
sub(/^Link/, "#Link", line[linkline[$2]])
|
|
}
|
|
/^Link/ {
|
|
sub(/^Link/, "#Link", line[linkline[$3]])
|
|
linkline[$3] = NR
|
|
}
|
|
|
|
{ line[NR] = $0 }
|
|
|
|
END {
|
|
for (i = 1; i <= NR; i++)
|
|
print line[i]
|
|
}
|