* Makefile (check_links): Propagate DATAFORM to checklinks.awk. * NEWS: Mention the change. * backward: Adjust whitespace so that using ziguard.awk to convert to vanguard form and back is a no-op * checklinks.awk: Do not warn about links to links in vanguard form. In warning, distiguish between dangling links and links to links. * ziguard.awk: Convert to and from vanguard form, which now uses links to links. --- Makefile | 10 +++++++--- NEWS | 4 +++- backward | 10 +++++----- checklinks.awk | 7 ++++++- ziguard.awk | 21 +++++++++++++++++++++ 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 6f8b2f9..d3cfbd0 100644 --- a/Makefile +++ b/Makefile @@ -829,9 +829,13 @@ check_sorted: backward backzone iso3166.tab zone.tab zone1970.tab touch $@ check_links: checklinks.awk $(TDATA_TO_CHECK) tzdata.zi - $(AWK) -f checklinks.awk -v backcheck=backward \ - $(TDATA_TO_CHECK) - $(AWK) -f checklinks.awk tzdata.zi + $(AWK) \ + -v DATAFORM=$(DATAFORM) \ + -v backcheck=backward \ + -f checklinks.awk $(TDATA_TO_CHECK) + $(AWK) \ + -v DATAFORM=$(DATAFORM) \ + -f checklinks.awk tzdata.zi touch $@ check_tables: checktab.awk $(YDATA) backward $(ZONETABLES) diff --git a/NEWS b/NEWS index f400d71..ac8de47 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,7 @@ Unreleased, experimental changes Briefly: Move links to 'backward'. In vanguard form, GMT is now a Zone and Etc/GMT a link. - zic now supports links to links. + zic now supports links to links, and vanguard form uses this. Simplify four Ontario zones into one. Fix a Y2438 bug when reading TZif data. @@ -19,6 +19,8 @@ Unreleased, experimental changes However, this change exposes a bug in TZUpdater 2.3.2 so it is present only in vanguard form for now. + Vanguard form now uses links to links, as zic now supports this. + Changes to past timestamps Simplify four Ontario zones to one, as the post-1970 differences diff --git a/backward b/backward index 4c1c5d5..46dc17d 100644 --- a/backward +++ b/backward @@ -89,7 +89,7 @@ Link Etc/GMT GMT0 Link Etc/GMT Greenwich # End of rearguard section. Link Asia/Hong_Kong Hongkong -Link Africa/Abidjan Iceland #= Atlantic/Reykjavik +Link Africa/Abidjan Iceland #= Atlantic/Reykjavik Link Asia/Tehran Iran Link Asia/Jerusalem Israel Link America/Jamaica Jamaica @@ -101,7 +101,7 @@ Link America/Mazatlan Mexico/BajaSur Link America/Mexico_City Mexico/General Link Pacific/Auckland NZ Link Pacific/Chatham NZ-CHAT -Link America/Denver Navajo #= America/Shiprock +Link America/Denver Navajo #= America/Shiprock Link Asia/Shanghai PRC Link Europe/Warsaw Poland Link Europe/Lisbon Portugal @@ -139,7 +139,7 @@ Link America/Argentina/Jujuy America/Jujuy Link America/Indiana/Knox America/Knox_IN Link America/Kentucky/Louisville America/Louisville Link America/Argentina/Mendoza America/Mendoza -Link America/Puerto_Rico America/Virgin #= America/St_Thomas +Link America/Puerto_Rico America/Virgin #= America/St_Thomas Link Pacific/Pago_Pago Pacific/Samoa @@ -293,11 +293,11 @@ Link Pacific/Port_Moresby Pacific/Yap # Alternate names for the same location # Link TARGET LINK-NAME #= TARGET1 -Link Africa/Nairobi Africa/Asmera #= Africa/Asmara +Link Africa/Nairobi Africa/Asmera #= Africa/Asmara Link America/Nuuk America/Godthab Link Asia/Ashgabat Asia/Ashkhabad Link Asia/Kolkata Asia/Calcutta -Link Asia/Shanghai Asia/Chungking #= Asia/Chongqing +Link Asia/Shanghai Asia/Chungking #= Asia/Chongqing Link Asia/Dhaka Asia/Dacca # Istanbul is in both continents. Link Europe/Istanbul Asia/Istanbul diff --git a/checklinks.awk b/checklinks.awk index 6e4fda8..82a5fea 100644 --- a/checklinks.awk +++ b/checklinks.awk @@ -46,8 +46,13 @@ BEGIN { END { for (tz in used) { if (defined[tz] != Zone) { - printf "%s: Link to non-zone\n", tz + if (!defined[tz]) { + printf "%s: Link to nowhere\n", tz status = 1 + } else if (DATAFORM != "vanguard") { + printf "%s: Link to link\n", tz + status = 1 + } } } for (tz in shortcut) { diff --git a/ziguard.awk b/ziguard.awk index a864f9f..8cff035 100644 --- a/ziguard.awk +++ b/ziguard.awk @@ -311,6 +311,10 @@ DATAFORM != "main" { } } +/^Link/ && $4 == "#=" && DATAFORM == "vanguard" { + $0 = "Link\t" $5 "\t" $3 +} + # 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. @@ -320,11 +324,28 @@ DATAFORM != "main" { /^Link/ { sub(/^Link/, "#Link", line[linkline[$3]]) linkline[$3] = NR + linktarget[$3] = $2 } { line[NR] = $0 } +function cut_link_chains_short(\ + linkname, target, t, u) +{ + for (linkname in linktarget) { + target = linktarget[linkname] + for (t = target; (u = linktarget[t]); t = u) + continue; + if (t != target) { + line[linkline[linkname]] = "Link\t" t "\t" linkname "\t#= " target + } + } +} + END { + if (DATAFORM != "vanguard") { + cut_link_chains_short() + } for (i = 1; i <= NR; i++) print line[i] } -- 2.37.3