Home | History | Annotate | Line # | Download | only in sysinst
      1 # $NetBSD: unif.awk,v 1.1 2014/07/26 19:30:44 dholland Exp $
      2 
      3 # Copyright (c) 2003 The NetBSD Foundation, Inc.
      4 # All rights reserved.
      5 #
      6 # This code is derived from software contributed to The NetBSD Foundation
      7 # by David Laight.
      8 #
      9 # Redistribution and use in source and binary forms, with or without
     10 # modification, are permitted provided that the following conditions
     11 # are met:
     12 # 1. Redistributions of source code must retain the above copyright
     13 #    notice, this list of conditions and the following disclaimer.
     14 # 2. Redistributions in binary form must reproduce the above copyright
     15 #    notice, this list of conditions and the following disclaimer in the
     16 #    documentation and/or other materials provided with the distribution.
     17 #
     18 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     19 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     20 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     21 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     22 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     23 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     24 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     25 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     26 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     27 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     28 # POSSIBILITY OF SUCH DAMAGE.
     29 
     30 # 'unif' lines of file
     31 #
     32 # usage: awk -f unif.awk -v defines=varlist file
     33 #
     34 # looks for blocks of the form:
     35 #
     36 # .if var [|| var]
     37 # ...
     38 # .else
     39 # ...
     40 # .endif
     41 #
     42 # and removes the unwanted lines
     43 # There is some error detection...
     44 
     45 BEGIN {
     46 	split(defines, defns)
     47 	for (v in defns)
     48 		deflist[defns[v]] = 1
     49 	delete defns
     50 	nested = 0
     51 	skip = 0
     52 }
     53 
     54 /^\.if/ {
     55 	nested++
     56 	else_ok[nested] = 1
     57 	if (skip)
     58 		next
     59 	for (i = 2; i <= NF; i += 2) {
     60 		if ($i in deflist)
     61 			next
     62 		if ($(i+1) != "" && $(i+1) != "||")
     63 			exit 1
     64 	}
     65 	if (!skip)
     66 		skip = nested
     67 	next
     68 }
     69 
     70 /^\.else/  {
     71 	if (!else_ok[nested])
     72 		exit 1
     73 	else_ok[nested] = 0
     74 	if (skip == nested)
     75 		skip = 0
     76 	else if (!skip)
     77 		skip = nested
     78 	next
     79 }
     80 
     81 /^\.endif/ {
     82 	if (nested == 0)
     83 		exit 1
     84 	if (skip == nested)
     85 		skip = 0
     86 	nested--
     87 	next
     88 }
     89 
     90 {
     91 	if (skip == 0)
     92 		print
     93 }
     94 	
     95 END {
     96 	if (nested != 0)
     97 		exit 1
     98 }
     99