xref: /dpdk/devtools/check-forbidden-tokens.awk (revision 129f38c5b7ab4428ed94d088e3d3ef6a81807b55)
142f4d724SArnon Warshavsky# SPDX-License-Identifier: BSD-3-Clause
242f4d724SArnon Warshavsky# Copyright 2018 Arnon Warshavsky <arnon@qwilt.com>
342f4d724SArnon Warshavsky
442f4d724SArnon Warshavsky# This awk script receives a list of expressions to monitor
542f4d724SArnon Warshavsky# and a list of folders to search these expressions in
642f4d724SArnon Warshavsky# - No search is done inside comments
742f4d724SArnon Warshavsky# - Both additions and removals of the expressions are checked
842f4d724SArnon Warshavsky#   A positive balance of additions fails the check
942f4d724SArnon Warshavsky
1042f4d724SArnon WarshavskyBEGIN {
1142f4d724SArnon Warshavsky	split(FOLDERS,deny_folders," ");
1242f4d724SArnon Warshavsky	split(EXPRESSIONS,deny_expr," ");
13*129f38c5SDavid Marchand	split(SKIP_FILES,skip_files," ");
1442f4d724SArnon Warshavsky	in_file=0;
1542f4d724SArnon Warshavsky	in_comment=0;
1642f4d724SArnon Warshavsky	count=0;
17d500e69fSDavid Marchand	warned=0;
1842f4d724SArnon Warshavsky	comment_start="/*"
1942f4d724SArnon Warshavsky	comment_end="*/"
2042f4d724SArnon Warshavsky}
2142f4d724SArnon Warshavsky# search for add/remove instances in current file
2242f4d724SArnon Warshavsky# state machine assumes the comments structure is enforced by
2342f4d724SArnon Warshavsky# checkpatches.pl
2442f4d724SArnon Warshavsky(in_file) {
25fdcc8970SDavid Marchand	if ($0 ~ "^@@") {
26fdcc8970SDavid Marchand		in_comment = 0
27fdcc8970SDavid Marchand	}
2842f4d724SArnon Warshavsky	# comment start
2942f4d724SArnon Warshavsky	if (index($0,comment_start) > 0) {
3042f4d724SArnon Warshavsky		in_comment = 1
3142f4d724SArnon Warshavsky	}
3242f4d724SArnon Warshavsky	# non comment code
3342f4d724SArnon Warshavsky	if (in_comment == 0) {
3442f4d724SArnon Warshavsky		for (i in deny_expr) {
3542f4d724SArnon Warshavsky			forbidden_added = "^\\+.*" deny_expr[i];
3642f4d724SArnon Warshavsky			forbidden_removed="^-.*" deny_expr[i];
3742f4d724SArnon Warshavsky			if ($0 ~ forbidden_added) {
3884cf9b71SDavid Marchand				count = count + 1
3942f4d724SArnon Warshavsky			}
4042f4d724SArnon Warshavsky			if ($0 ~ forbidden_removed) {
4184cf9b71SDavid Marchand				count = count - 1
4242f4d724SArnon Warshavsky			}
4342f4d724SArnon Warshavsky		}
4442f4d724SArnon Warshavsky	}
4542f4d724SArnon Warshavsky	# comment end
4642f4d724SArnon Warshavsky	if (index($0,comment_end) > 0) {
4742f4d724SArnon Warshavsky		in_comment = 0
4842f4d724SArnon Warshavsky	}
4942f4d724SArnon Warshavsky}
5042f4d724SArnon Warshavsky# switch to next file , check if the balance of add/remove
5142f4d724SArnon Warshavsky# of previous file had new additions
5242f4d724SArnon Warshavsky($0 ~ "^\\+\\+\\+ b/") {
5342f4d724SArnon Warshavsky	in_file = 0;
5442f4d724SArnon Warshavsky	if (count > 0) {
55d500e69fSDavid Marchand		warned = warned + 1
56d500e69fSDavid Marchand		print "Warning in " substr(last_file,7) ":"
5742f4d724SArnon Warshavsky	}
5884cf9b71SDavid Marchand	count = 0
5942f4d724SArnon Warshavsky	for (i in deny_folders) {
60*129f38c5SDavid Marchand		if (!($0 ~ "^\\+\\+\\+ b/" deny_folders[i])) {
61*129f38c5SDavid Marchand			continue
62*129f38c5SDavid Marchand		}
63*129f38c5SDavid Marchand		skip = 0
64*129f38c5SDavid Marchand		for (j in skip_files) {
65*129f38c5SDavid Marchand			if (!($0 ~ "^\\+\\+\\+ b/" skip_files[j])) {
66*129f38c5SDavid Marchand				continue
67*129f38c5SDavid Marchand			}
68*129f38c5SDavid Marchand			skip = 1
69*129f38c5SDavid Marchand			break
70*129f38c5SDavid Marchand		}
71*129f38c5SDavid Marchand		if (skip == 0) {
7242f4d724SArnon Warshavsky			in_file = 1
7342f4d724SArnon Warshavsky			last_file = $0
7442f4d724SArnon Warshavsky		}
75*129f38c5SDavid Marchand		break
7642f4d724SArnon Warshavsky	}
777e421ae3SJerin Jacob}
7842f4d724SArnon WarshavskyEND {
7942f4d724SArnon Warshavsky	if (count > 0) {
80d500e69fSDavid Marchand		warned = warned + 1
818d4a222eSDavid Marchand		print "Warning in " substr(last_file,7) ":"
82d500e69fSDavid Marchand	}
83d500e69fSDavid Marchand	if (warned > 0) {
84b467d382SArnon Warshavsky		print MESSAGE
8542f4d724SArnon Warshavsky		exit RET_ON_FAIL
8642f4d724SArnon Warshavsky	}
8742f4d724SArnon Warshavsky}
88