14616d0f9Sopenharmony_ci# Convert tzdata source into a smaller version of itself.
24616d0f9Sopenharmony_ci
34616d0f9Sopenharmony_ci# Contributed by Paul Eggert.  This file is in the public domain.
44616d0f9Sopenharmony_ci
54616d0f9Sopenharmony_ci# This is not a general-purpose converter; it is designed for current tzdata.
64616d0f9Sopenharmony_ci# 'zic' should treat this script's output as if it were identical to
74616d0f9Sopenharmony_ci# this script's input.
84616d0f9Sopenharmony_ci
94616d0f9Sopenharmony_ci# Record a hash N for the new name NAME, checking for collisions.
104616d0f9Sopenharmony_ci
114616d0f9Sopenharmony_cifunction record_hash(n, name)
124616d0f9Sopenharmony_ci{
134616d0f9Sopenharmony_ci  if (used_hashes[n]) {
144616d0f9Sopenharmony_ci    printf "# ! collision: %s %s\n", used_hashes[n], name
154616d0f9Sopenharmony_ci    exit 1
164616d0f9Sopenharmony_ci  }
174616d0f9Sopenharmony_ci  used_hashes[n] = name
184616d0f9Sopenharmony_ci}
194616d0f9Sopenharmony_ci
204616d0f9Sopenharmony_ci# Return a shortened rule name representing NAME,
214616d0f9Sopenharmony_ci# and record this relationship to the hash table.
224616d0f9Sopenharmony_ci
234616d0f9Sopenharmony_cifunction gen_rule_name(name, \
244616d0f9Sopenharmony_ci		       n)
254616d0f9Sopenharmony_ci{
264616d0f9Sopenharmony_ci  # Use a simple mnemonic: the first two letters.
274616d0f9Sopenharmony_ci  n = substr(name, 1, 2)
284616d0f9Sopenharmony_ci  record_hash(n, name)
294616d0f9Sopenharmony_ci  # printf "# %s = %s\n", n, name
304616d0f9Sopenharmony_ci  return n
314616d0f9Sopenharmony_ci}
324616d0f9Sopenharmony_ci
334616d0f9Sopenharmony_cifunction prehash_rule_names( \
344616d0f9Sopenharmony_ci			    name)
354616d0f9Sopenharmony_ci{
364616d0f9Sopenharmony_ci  # Rule names are not part of the tzdb API, so substitute shorter
374616d0f9Sopenharmony_ci  # ones.  Shortening them consistently from one release to the next
384616d0f9Sopenharmony_ci  # simplifies comparison of the output.  That being said, the
394616d0f9Sopenharmony_ci  # 1-letter names below are not standardized in any way, and can
404616d0f9Sopenharmony_ci  # change arbitrarily from one release to the next, as the main goal
414616d0f9Sopenharmony_ci  # here is compression not comparison.
424616d0f9Sopenharmony_ci
434616d0f9Sopenharmony_ci  # Abbreviating these rules names to one letter saved the most space
444616d0f9Sopenharmony_ci  # circa 2018e.
454616d0f9Sopenharmony_ci  rule["Arg"] = "A"
464616d0f9Sopenharmony_ci  rule["Brazil"] = "B"
474616d0f9Sopenharmony_ci  rule["Canada"] = "C"
484616d0f9Sopenharmony_ci  rule["Denmark"] = "D"
494616d0f9Sopenharmony_ci  rule["EU"] = "E"
504616d0f9Sopenharmony_ci  rule["France"] = "F"
514616d0f9Sopenharmony_ci  rule["GB-Eire"] = "G"
524616d0f9Sopenharmony_ci  rule["Halifax"] = "H"
534616d0f9Sopenharmony_ci  rule["Italy"] = "I"
544616d0f9Sopenharmony_ci  rule["Jordan"] = "J"
554616d0f9Sopenharmony_ci  rule["Egypt"] = "K" # "Kemet" in ancient Egyptian
564616d0f9Sopenharmony_ci  rule["Libya"] = "L"
574616d0f9Sopenharmony_ci  rule["Morocco"] = "M"
584616d0f9Sopenharmony_ci  rule["Neth"] = "N"
594616d0f9Sopenharmony_ci  rule["Poland"] = "O" # arbitrary
604616d0f9Sopenharmony_ci  rule["Palestine"] = "P"
614616d0f9Sopenharmony_ci  rule["Cuba"] = "Q" # Its start sounds like "Q".
624616d0f9Sopenharmony_ci  rule["Russia"] = "R"
634616d0f9Sopenharmony_ci  rule["Syria"] = "S"
644616d0f9Sopenharmony_ci  rule["Turkey"] = "T"
654616d0f9Sopenharmony_ci  rule["Uruguay"] = "U"
664616d0f9Sopenharmony_ci  rule["Vincennes"] = "V"
674616d0f9Sopenharmony_ci  rule["Winn"] = "W"
684616d0f9Sopenharmony_ci  rule["Mongol"] = "X" # arbitrary
694616d0f9Sopenharmony_ci  rule["NT_YK"] = "Y"
704616d0f9Sopenharmony_ci  rule["Zion"] = "Z"
714616d0f9Sopenharmony_ci  rule["Austria"] = "a"
724616d0f9Sopenharmony_ci  rule["Belgium"] = "b"
734616d0f9Sopenharmony_ci  rule["C-Eur"] = "c"
744616d0f9Sopenharmony_ci  rule["Algeria"] = "d" # country code DZ
754616d0f9Sopenharmony_ci  rule["E-Eur"] = "e"
764616d0f9Sopenharmony_ci  rule["Taiwan"] = "f" # Formosa
774616d0f9Sopenharmony_ci  rule["Greece"] = "g"
784616d0f9Sopenharmony_ci  rule["Hungary"] = "h"
794616d0f9Sopenharmony_ci  rule["Iran"] = "i"
804616d0f9Sopenharmony_ci  rule["StJohns"] = "j"
814616d0f9Sopenharmony_ci  rule["Chatham"] = "k" # arbitrary
824616d0f9Sopenharmony_ci  rule["Lebanon"] = "l"
834616d0f9Sopenharmony_ci  rule["Mexico"] = "m"
844616d0f9Sopenharmony_ci  rule["Tunisia"] = "n" # country code TN
854616d0f9Sopenharmony_ci  rule["Moncton"] = "o" # arbitrary
864616d0f9Sopenharmony_ci  rule["Port"] = "p"
874616d0f9Sopenharmony_ci  rule["Albania"] = "q" # arbitrary
884616d0f9Sopenharmony_ci  rule["Regina"] = "r"
894616d0f9Sopenharmony_ci  rule["Spain"] = "s"
904616d0f9Sopenharmony_ci  rule["Toronto"] = "t"
914616d0f9Sopenharmony_ci  rule["US"] = "u"
924616d0f9Sopenharmony_ci  rule["Louisville"] = "v" # ville
934616d0f9Sopenharmony_ci  rule["Iceland"] = "w" # arbitrary
944616d0f9Sopenharmony_ci  rule["Chile"] = "x" # arbitrary
954616d0f9Sopenharmony_ci  rule["Para"] = "y" # country code PY
964616d0f9Sopenharmony_ci  rule["Romania"] = "z" # arbitrary
974616d0f9Sopenharmony_ci  rule["Macau"] = "_" # arbitrary
984616d0f9Sopenharmony_ci
994616d0f9Sopenharmony_ci  # Use ISO 3166 alpha-2 country codes for remaining names that are countries.
1004616d0f9Sopenharmony_ci  # This is more systematic, and avoids collisions (e.g., Malta and Moldova).
1014616d0f9Sopenharmony_ci  rule["Armenia"] = "AM"
1024616d0f9Sopenharmony_ci  rule["Aus"] = "AU"
1034616d0f9Sopenharmony_ci  rule["Azer"] = "AZ"
1044616d0f9Sopenharmony_ci  rule["Barb"] = "BB"
1054616d0f9Sopenharmony_ci  rule["Dhaka"] = "BD"
1064616d0f9Sopenharmony_ci  rule["Bulg"] = "BG"
1074616d0f9Sopenharmony_ci  rule["Bahamas"] = "BS"
1084616d0f9Sopenharmony_ci  rule["Belize"] = "BZ"
1094616d0f9Sopenharmony_ci  rule["Swiss"] = "CH"
1104616d0f9Sopenharmony_ci  rule["Cook"] = "CK"
1114616d0f9Sopenharmony_ci  rule["PRC"] = "CN"
1124616d0f9Sopenharmony_ci  rule["Cyprus"] = "CY"
1134616d0f9Sopenharmony_ci  rule["Czech"] = "CZ"
1144616d0f9Sopenharmony_ci  rule["Germany"] = "DE"
1154616d0f9Sopenharmony_ci  rule["DR"] = "DO"
1164616d0f9Sopenharmony_ci  rule["Ecuador"] = "EC"
1174616d0f9Sopenharmony_ci  rule["Finland"] = "FI"
1184616d0f9Sopenharmony_ci  rule["Fiji"] = "FJ"
1194616d0f9Sopenharmony_ci  rule["Falk"] = "FK"
1204616d0f9Sopenharmony_ci  rule["Ghana"] = "GH"
1214616d0f9Sopenharmony_ci  rule["Guat"] = "GT"
1224616d0f9Sopenharmony_ci  rule["Hond"] = "HN"
1234616d0f9Sopenharmony_ci  rule["Haiti"] = "HT"
1244616d0f9Sopenharmony_ci  rule["Eire"] = "IE"
1254616d0f9Sopenharmony_ci  rule["Iraq"] = "IQ"
1264616d0f9Sopenharmony_ci  rule["Japan"] = "JP"
1274616d0f9Sopenharmony_ci  rule["Kyrgyz"] = "KG"
1284616d0f9Sopenharmony_ci  rule["ROK"] = "KR"
1294616d0f9Sopenharmony_ci  rule["Latvia"] = "LV"
1304616d0f9Sopenharmony_ci  rule["Lux"] = "LX"
1314616d0f9Sopenharmony_ci  rule["Moldova"] = "MD"
1324616d0f9Sopenharmony_ci  rule["Malta"] = "MT"
1334616d0f9Sopenharmony_ci  rule["Mauritius"] = "MU"
1344616d0f9Sopenharmony_ci  rule["Namibia"] = "NA"
1354616d0f9Sopenharmony_ci  rule["Nic"] = "NI"
1364616d0f9Sopenharmony_ci  rule["Norway"] = "NO"
1374616d0f9Sopenharmony_ci  rule["Peru"] = "PE"
1384616d0f9Sopenharmony_ci  rule["Phil"] = "PH"
1394616d0f9Sopenharmony_ci  rule["Pakistan"] = "PK"
1404616d0f9Sopenharmony_ci  rule["Sudan"] = "SD"
1414616d0f9Sopenharmony_ci  rule["Salv"] = "SV"
1424616d0f9Sopenharmony_ci  rule["Tonga"] = "TO"
1434616d0f9Sopenharmony_ci  rule["Vanuatu"] = "VU"
1444616d0f9Sopenharmony_ci
1454616d0f9Sopenharmony_ci  # Avoid collisions.
1464616d0f9Sopenharmony_ci  rule["Detroit"] = "Dt" # De = Denver
1474616d0f9Sopenharmony_ci
1484616d0f9Sopenharmony_ci  for (name in rule) {
1494616d0f9Sopenharmony_ci    record_hash(rule[name], name)
1504616d0f9Sopenharmony_ci  }
1514616d0f9Sopenharmony_ci}
1524616d0f9Sopenharmony_ci
1534616d0f9Sopenharmony_cifunction make_line(n, field, \
1544616d0f9Sopenharmony_ci		   f, r)
1554616d0f9Sopenharmony_ci{
1564616d0f9Sopenharmony_ci  r = field[1]
1574616d0f9Sopenharmony_ci  for (f = 2; f <= n; f++)
1584616d0f9Sopenharmony_ci    r = r " " field[f]
1594616d0f9Sopenharmony_ci  return r
1604616d0f9Sopenharmony_ci}
1614616d0f9Sopenharmony_ci
1624616d0f9Sopenharmony_ci# Process the input line LINE and save it for later output.
1634616d0f9Sopenharmony_ci
1644616d0f9Sopenharmony_cifunction process_input_line(line, \
1654616d0f9Sopenharmony_ci			    f, field, end, n, outline, r, \
1664616d0f9Sopenharmony_ci			    linkline, ruleline, zoneline)
1674616d0f9Sopenharmony_ci{
1684616d0f9Sopenharmony_ci  # Remove comments, normalize spaces, and append a space to each line.
1694616d0f9Sopenharmony_ci  sub(/#.*/, "", line)
1704616d0f9Sopenharmony_ci  line = line " "
1714616d0f9Sopenharmony_ci  gsub(/[\t ]+/, " ", line)
1724616d0f9Sopenharmony_ci
1734616d0f9Sopenharmony_ci  # Abbreviate keywords and determine line type.
1744616d0f9Sopenharmony_ci  linkline = sub(/^Link /, "L ", line)
1754616d0f9Sopenharmony_ci  ruleline = sub(/^Rule /, "R ", line)
1764616d0f9Sopenharmony_ci  zoneline = sub(/^Zone /, "Z ", line)
1774616d0f9Sopenharmony_ci
1784616d0f9Sopenharmony_ci  # Replace FooAsia rules with the same rules without "Asia", as they
1794616d0f9Sopenharmony_ci  # are duplicates.
1804616d0f9Sopenharmony_ci  if (match(line, /[^ ]Asia /)) {
1814616d0f9Sopenharmony_ci    if (ruleline) return
1824616d0f9Sopenharmony_ci    line = substr(line, 1, RSTART) substr(line, RSTART + 5)
1834616d0f9Sopenharmony_ci  }
1844616d0f9Sopenharmony_ci
1854616d0f9Sopenharmony_ci  # Abbreviate times.
1864616d0f9Sopenharmony_ci  while (match(line, /[: ]0+[0-9]/))
1874616d0f9Sopenharmony_ci    line = substr(line, 1, RSTART) substr(line, RSTART + RLENGTH - 1)
1884616d0f9Sopenharmony_ci  while (match(line, /:0[^:]/))
1894616d0f9Sopenharmony_ci    line = substr(line, 1, RSTART - 1) substr(line, RSTART + 2)
1904616d0f9Sopenharmony_ci
1914616d0f9Sopenharmony_ci  # Abbreviate weekday names.
1924616d0f9Sopenharmony_ci  while (match(line, / (last)?(Mon|Wed|Fri)[ <>]/)) {
1934616d0f9Sopenharmony_ci    end = RSTART + RLENGTH
1944616d0f9Sopenharmony_ci    line = substr(line, 1, end - 4) substr(line, end - 1)
1954616d0f9Sopenharmony_ci  }
1964616d0f9Sopenharmony_ci  while (match(line, / (last)?(Sun|Tue|Thu|Sat)[ <>]/)) {
1974616d0f9Sopenharmony_ci    end = RSTART + RLENGTH
1984616d0f9Sopenharmony_ci    line = substr(line, 1, end - 3) substr(line, end - 1)
1994616d0f9Sopenharmony_ci  }
2004616d0f9Sopenharmony_ci
2014616d0f9Sopenharmony_ci  # Abbreviate "max", "min", "only" and month names.
2024616d0f9Sopenharmony_ci  # Although "max" and "min" can both be abbreviated to just "m",
2034616d0f9Sopenharmony_ci  # the longer forms "ma" and "mi" are needed with zic 2023d and earlier.
2044616d0f9Sopenharmony_ci  gsub(/ max /, dataform == "vanguard" ? " m " : " ma ", line)
2054616d0f9Sopenharmony_ci  gsub(/ min /, dataform == "vanguard" ? " m " : " mi ", line)
2064616d0f9Sopenharmony_ci  gsub(/ only /, " o ", line)
2074616d0f9Sopenharmony_ci  gsub(/ Jan /, " Ja ", line)
2084616d0f9Sopenharmony_ci  gsub(/ Feb /, " F ", line)
2094616d0f9Sopenharmony_ci  gsub(/ Apr /, " Ap ", line)
2104616d0f9Sopenharmony_ci  gsub(/ Aug /, " Au ", line)
2114616d0f9Sopenharmony_ci  gsub(/ Sep /, " S ", line)
2124616d0f9Sopenharmony_ci  gsub(/ Oct /, " O ", line)
2134616d0f9Sopenharmony_ci  gsub(/ Nov /, " N ", line)
2144616d0f9Sopenharmony_ci  gsub(/ Dec /, " D ", line)
2154616d0f9Sopenharmony_ci
2164616d0f9Sopenharmony_ci  # Strip leading and trailing space.
2174616d0f9Sopenharmony_ci  sub(/^ /, "", line)
2184616d0f9Sopenharmony_ci  sub(/ $/, "", line)
2194616d0f9Sopenharmony_ci
2204616d0f9Sopenharmony_ci  # Remove unnecessary trailing zero fields.
2214616d0f9Sopenharmony_ci  sub(/ 0+$/, "", line)
2224616d0f9Sopenharmony_ci
2234616d0f9Sopenharmony_ci  # Remove unnecessary trailing days-of-month "1".
2244616d0f9Sopenharmony_ci  if (match(line, /[A-Za-z] 1$/))
2254616d0f9Sopenharmony_ci    line = substr(line, 1, RSTART)
2264616d0f9Sopenharmony_ci
2274616d0f9Sopenharmony_ci  # Remove unnecessary trailing " Ja" (for January).
2284616d0f9Sopenharmony_ci  sub(/ Ja$/, "", line)
2294616d0f9Sopenharmony_ci
2304616d0f9Sopenharmony_ci  n = split(line, field)
2314616d0f9Sopenharmony_ci
2324616d0f9Sopenharmony_ci  # Record which rule names are used, and generate their abbreviations.
2334616d0f9Sopenharmony_ci  f = zoneline ? 4 : linkline || ruleline ? 0 : 2
2344616d0f9Sopenharmony_ci  r = field[f]
2354616d0f9Sopenharmony_ci  if (r ~ /^[^-+0-9]/) {
2364616d0f9Sopenharmony_ci    rule_used[r] = 1
2374616d0f9Sopenharmony_ci  }
2384616d0f9Sopenharmony_ci
2394616d0f9Sopenharmony_ci  if (zoneline)
2404616d0f9Sopenharmony_ci    zonename = startdef = field[2]
2414616d0f9Sopenharmony_ci  else if (linkline)
2424616d0f9Sopenharmony_ci    zonename = startdef = field[3]
2434616d0f9Sopenharmony_ci  else if (ruleline)
2444616d0f9Sopenharmony_ci    zonename = ""
2454616d0f9Sopenharmony_ci
2464616d0f9Sopenharmony_ci  # Save the information for later output.
2474616d0f9Sopenharmony_ci  outline = make_line(n, field)
2484616d0f9Sopenharmony_ci  if (ruleline)
2494616d0f9Sopenharmony_ci    rule_output_line[nrule_out++] = outline
2504616d0f9Sopenharmony_ci  else if (linkline) {
2514616d0f9Sopenharmony_ci    # In vanguard format with Gawk, links are output sorted by destination.
2524616d0f9Sopenharmony_ci    if (dataform == "vanguard" && PROCINFO["version"])
2534616d0f9Sopenharmony_ci      linkdef[zonename] = field[2]
2544616d0f9Sopenharmony_ci    else
2554616d0f9Sopenharmony_ci      link_output_line[nlink_out++] = outline
2564616d0f9Sopenharmony_ci  }else
2574616d0f9Sopenharmony_ci    zonedef[zonename] = (zoneline ? "" : zonedef[zonename] "\n") outline
2584616d0f9Sopenharmony_ci}
2594616d0f9Sopenharmony_ci
2604616d0f9Sopenharmony_cifunction omit_unused_rules( \
2614616d0f9Sopenharmony_ci			   i, field)
2624616d0f9Sopenharmony_ci{
2634616d0f9Sopenharmony_ci  for (i = 0; i < nrule_out; i++) {
2644616d0f9Sopenharmony_ci    split(rule_output_line[i], field)
2654616d0f9Sopenharmony_ci    if (!rule_used[field[2]])
2664616d0f9Sopenharmony_ci      rule_output_line[i] = ""
2674616d0f9Sopenharmony_ci  }
2684616d0f9Sopenharmony_ci}
2694616d0f9Sopenharmony_ci
2704616d0f9Sopenharmony_cifunction abbreviate_rule_names( \
2714616d0f9Sopenharmony_ci			       abbr, f, field, i, n, newdef, newline, r, \
2724616d0f9Sopenharmony_ci			       zoneline, zonelines, zonename)
2734616d0f9Sopenharmony_ci{
2744616d0f9Sopenharmony_ci  for (i = 0; i < nrule_out; i++) {
2754616d0f9Sopenharmony_ci    n = split(rule_output_line[i], field)
2764616d0f9Sopenharmony_ci    if (n) {
2774616d0f9Sopenharmony_ci      r = field[2]
2784616d0f9Sopenharmony_ci      if (r ~ /^[^-+0-9]/) {
2794616d0f9Sopenharmony_ci	abbr = rule[r]
2804616d0f9Sopenharmony_ci	if (!abbr) {
2814616d0f9Sopenharmony_ci	  rule[r] = abbr = gen_rule_name(r)
2824616d0f9Sopenharmony_ci	}
2834616d0f9Sopenharmony_ci	field[2] = abbr
2844616d0f9Sopenharmony_ci	rule_output_line[i] = make_line(n, field)
2854616d0f9Sopenharmony_ci      }
2864616d0f9Sopenharmony_ci    }
2874616d0f9Sopenharmony_ci  }
2884616d0f9Sopenharmony_ci  for (zonename in zonedef) {
2894616d0f9Sopenharmony_ci    zonelines = split(zonedef[zonename], zoneline, /\n/)
2904616d0f9Sopenharmony_ci    newdef = ""
2914616d0f9Sopenharmony_ci    for (i = 1; i <= zonelines; i++) {
2924616d0f9Sopenharmony_ci      newline = zoneline[i]
2934616d0f9Sopenharmony_ci      n = split(newline, field)
2944616d0f9Sopenharmony_ci      f = i == 1 ? 4 : 2
2954616d0f9Sopenharmony_ci      r = rule[field[f]]
2964616d0f9Sopenharmony_ci      if (r) {
2974616d0f9Sopenharmony_ci	field[f] = r
2984616d0f9Sopenharmony_ci	newline = make_line(n, field)
2994616d0f9Sopenharmony_ci      }
3004616d0f9Sopenharmony_ci      newdef = (newdef ? newdef "\n" : "") newline
3014616d0f9Sopenharmony_ci    }
3024616d0f9Sopenharmony_ci    zonedef[zonename] = newdef
3034616d0f9Sopenharmony_ci  }
3044616d0f9Sopenharmony_ci}
3054616d0f9Sopenharmony_ci
3064616d0f9Sopenharmony_cifunction output_saved_lines( \
3074616d0f9Sopenharmony_ci			    i, zonename)
3084616d0f9Sopenharmony_ci{
3094616d0f9Sopenharmony_ci  for (i = 0; i < nrule_out; i++)
3104616d0f9Sopenharmony_ci    if (rule_output_line[i])
3114616d0f9Sopenharmony_ci      print rule_output_line[i]
3124616d0f9Sopenharmony_ci
3134616d0f9Sopenharmony_ci  # When using gawk, output zones sorted by name.
3144616d0f9Sopenharmony_ci  # This makes the output a bit more compressible.
3154616d0f9Sopenharmony_ci  PROCINFO["sorted_in"] = "@ind_str_asc"
3164616d0f9Sopenharmony_ci  for (zonename in zonedef)
3174616d0f9Sopenharmony_ci    print zonedef[zonename]
3184616d0f9Sopenharmony_ci
3194616d0f9Sopenharmony_ci  if (nlink_out)
3204616d0f9Sopenharmony_ci    for (i = 0; i < nlink_out; i++)
3214616d0f9Sopenharmony_ci      print link_output_line[i]
3224616d0f9Sopenharmony_ci  else {
3234616d0f9Sopenharmony_ci    # When using gawk, output links sorted by destination.
3244616d0f9Sopenharmony_ci    # This also helps compressibility a bit.
3254616d0f9Sopenharmony_ci    PROCINFO["sorted_in"] = "@val_type_asc"
3264616d0f9Sopenharmony_ci    for (zonename in linkdef)
3274616d0f9Sopenharmony_ci      printf "L %s %s\n", linkdef[zonename], zonename
3284616d0f9Sopenharmony_ci  }
3294616d0f9Sopenharmony_ci}
3304616d0f9Sopenharmony_ci
3314616d0f9Sopenharmony_ciBEGIN {
3324616d0f9Sopenharmony_ci  # Files that the output normally depends on.
3334616d0f9Sopenharmony_ci  default_dep["africa"] = 1
3344616d0f9Sopenharmony_ci  default_dep["antarctica"] = 1
3354616d0f9Sopenharmony_ci  default_dep["asia"] = 1
3364616d0f9Sopenharmony_ci  default_dep["australasia"] = 1
3374616d0f9Sopenharmony_ci  default_dep["backward"] = 1
3384616d0f9Sopenharmony_ci  default_dep["etcetera"] = 1
3394616d0f9Sopenharmony_ci  default_dep["europe"] = 1
3404616d0f9Sopenharmony_ci  default_dep["factory"] = 1
3414616d0f9Sopenharmony_ci  default_dep["northamerica"] = 1
3424616d0f9Sopenharmony_ci  default_dep["southamerica"] = 1
3434616d0f9Sopenharmony_ci  default_dep["ziguard.awk"] = 1
3444616d0f9Sopenharmony_ci  default_dep["zishrink.awk"] = 1
3454616d0f9Sopenharmony_ci
3464616d0f9Sopenharmony_ci  # Output a version string from 'version' and related configuration variables
3474616d0f9Sopenharmony_ci  # supported by tzdb's Makefile.  If you change the makefile or any other files
3484616d0f9Sopenharmony_ci  # that affect the output of this script, you should append '-SOMETHING'
3494616d0f9Sopenharmony_ci  # to the contents of 'version', where SOMETHING identifies what was changed.
3504616d0f9Sopenharmony_ci
3514616d0f9Sopenharmony_ci  ndeps = split(deps, dep)
3524616d0f9Sopenharmony_ci  ddeps = ""
3534616d0f9Sopenharmony_ci  for (i = 1; i <= ndeps; i++) {
3544616d0f9Sopenharmony_ci    if (default_dep[dep[i]]) {
3554616d0f9Sopenharmony_ci      default_dep[dep[i]]++
3564616d0f9Sopenharmony_ci    } else {
3574616d0f9Sopenharmony_ci      ddeps = ddeps " " dep[i]
3584616d0f9Sopenharmony_ci    }
3594616d0f9Sopenharmony_ci  }
3604616d0f9Sopenharmony_ci  for (d in default_dep) {
3614616d0f9Sopenharmony_ci    if (default_dep[d] == 1) {
3624616d0f9Sopenharmony_ci      ddeps = ddeps " !" d
3634616d0f9Sopenharmony_ci    }
3644616d0f9Sopenharmony_ci  }
3654616d0f9Sopenharmony_ci  print "# version", version
3664616d0f9Sopenharmony_ci  if (dataform != "main") {
3674616d0f9Sopenharmony_ci    print "# dataform", dataform
3684616d0f9Sopenharmony_ci  }
3694616d0f9Sopenharmony_ci  if (redo != "posix_right") {
3704616d0f9Sopenharmony_ci    print "# redo " redo
3714616d0f9Sopenharmony_ci  }
3724616d0f9Sopenharmony_ci  if (ddeps) {
3734616d0f9Sopenharmony_ci    print "# ddeps" ddeps
3744616d0f9Sopenharmony_ci  }
3754616d0f9Sopenharmony_ci  print "# This zic input file is in the public domain."
3764616d0f9Sopenharmony_ci
3774616d0f9Sopenharmony_ci  prehash_rule_names()
3784616d0f9Sopenharmony_ci}
3794616d0f9Sopenharmony_ci
3804616d0f9Sopenharmony_ci/^[\t ]*[^#\t ]/ {
3814616d0f9Sopenharmony_ci  process_input_line($0)
3824616d0f9Sopenharmony_ci}
3834616d0f9Sopenharmony_ci
3844616d0f9Sopenharmony_ciEND {
3854616d0f9Sopenharmony_ci  omit_unused_rules()
3864616d0f9Sopenharmony_ci  abbreviate_rule_names()
3874616d0f9Sopenharmony_ci  output_saved_lines()
3884616d0f9Sopenharmony_ci}
389