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