Home | History | Annotate | Line # | Download | only in dist
checklinks.awk revision 1.1.1.3.6.1
      1          1.1       apb # Check links in tz tables.
      2          1.1       apb 
      3      1.1.1.2  christos # Contributed by Paul Eggert.  This file is in the public domain.
      4          1.1       apb 
      5      1.1.1.2  christos BEGIN {
      6      1.1.1.2  christos     # Special marker indicating that the name is defined as a Zone.
      7      1.1.1.2  christos     # It is a newline so that it cannot match a valid name.
      8      1.1.1.2  christos     # It is not null so that its slot does not appear unset.
      9      1.1.1.2  christos     Zone = "\n"
     10      1.1.1.2  christos }
     11          1.1       apb 
     12      1.1.1.3       kre /^Z/ {
     13      1.1.1.2  christos     if (defined[$2]) {
     14      1.1.1.2  christos 	if (defined[$2] == Zone) {
     15      1.1.1.2  christos 	    printf "%s: Zone has duplicate definition\n", $2
     16      1.1.1.2  christos 	} else {
     17      1.1.1.2  christos 	    printf "%s: Link with same name as Zone\n", $2
     18      1.1.1.2  christos 	}
     19      1.1.1.2  christos 	status = 1
     20      1.1.1.2  christos     }
     21      1.1.1.2  christos     defined[$2] = Zone
     22      1.1.1.2  christos }
     23          1.1       apb 
     24      1.1.1.3       kre /^L/ {
     25      1.1.1.2  christos     if (defined[$3]) {
     26      1.1.1.2  christos 	if (defined[$3] == Zone) {
     27      1.1.1.2  christos 	    printf "%s: Link with same name as Zone\n", $3
     28      1.1.1.2  christos 	} else if (defined[$3] == $2) {
     29      1.1.1.2  christos 	    printf "%s: Link has duplicate definition\n", $3
     30      1.1.1.2  christos 	} else {
     31      1.1.1.2  christos 	    printf "%s: Link to both %s and %s\n", $3, defined[$3], $2
     32      1.1.1.2  christos 	}
     33      1.1.1.2  christos 	status = 1
     34      1.1.1.2  christos     }
     35  1.1.1.3.6.1    martin     if (backcheck && FILENAME != backcheck && $3 != "GMT") {
     36  1.1.1.3.6.1    martin       printf "%s: Link should be in '%s'\n", $3, backcheck
     37  1.1.1.3.6.1    martin       status = 1
     38  1.1.1.3.6.1    martin     }
     39  1.1.1.3.6.1    martin     if ($4 == "#=") {
     40  1.1.1.3.6.1    martin       shortcut[$5] = $3
     41  1.1.1.3.6.1    martin     }
     42      1.1.1.2  christos     used[$2] = 1
     43      1.1.1.2  christos     defined[$3] = $2
     44      1.1.1.2  christos }
     45      1.1.1.2  christos 
     46      1.1.1.2  christos END {
     47          1.1       apb     for (tz in used) {
     48      1.1.1.2  christos 	if (defined[tz] != Zone) {
     49  1.1.1.3.6.1    martin 	  if (!defined[tz]) {
     50  1.1.1.3.6.1    martin 	    printf "%s: Link to nowhere\n", tz
     51          1.1       apb 	    status = 1
     52  1.1.1.3.6.1    martin 	  } else if (DATAFORM != "vanguard") {
     53  1.1.1.3.6.1    martin 	    printf "%s: Link to link\n", tz
     54  1.1.1.3.6.1    martin 	    status = 1
     55  1.1.1.3.6.1    martin 	  }
     56          1.1       apb 	}
     57          1.1       apb     }
     58  1.1.1.3.6.1    martin     for (tz in shortcut) {
     59  1.1.1.3.6.1    martin       if (defined[shortcut[tz]] != defined[tz]) {
     60  1.1.1.3.6.1    martin 	target = (!defined[tz] ? "absence" \
     61  1.1.1.3.6.1    martin 		  : defined[tz] == "\n" ? "zone" \
     62  1.1.1.3.6.1    martin 		  : defined[tz])
     63  1.1.1.3.6.1    martin 	printf "%s: target %s disagrees with %s's target %s\n", \
     64  1.1.1.3.6.1    martin 	  tz, target, shortcut[tz], defined[shortcut[tz]]
     65  1.1.1.3.6.1    martin 	status = 1
     66  1.1.1.3.6.1    martin       }
     67  1.1.1.3.6.1    martin     }
     68          1.1       apb 
     69          1.1       apb     exit status
     70          1.1       apb }
     71