xref: /dpdk/buildtools/map-list-symbol.sh (revision 33af003eb13fe0c661f638797bacc50b0cc6f412)
1#!/bin/sh
2# SPDX-License-Identifier: BSD-3-Clause
3# Copyright(c) 2018 David Marchand <david.marchand@redhat.com>
4
5section=all
6symbol=all
7quiet=
8version=
9
10while getopts 'S:s:qV:' name; do
11	case $name in
12	S)
13		[ $section = 'all' ] || {
14			echo 'Cannot list in multiple sections'
15			exit 1
16		}
17		section=$OPTARG
18	;;
19	s)
20		[ $symbol = 'all' ] || {
21			echo 'Cannot list multiple symbols'
22			exit 1
23		}
24		symbol=$OPTARG
25	;;
26	q)
27		quiet='y'
28	;;
29	V)
30		version=$OPTARG
31	;;
32	?)
33		echo 'usage: $0 [-S section] [-s symbol] [-V [version|unset]] [-q]'
34		exit 1
35	;;
36	esac
37done
38
39shift $(($OPTIND - 1))
40
41for file in $@; do
42	cat "$file" |awk '
43	BEGIN {
44		current_section = "";
45		current_version = "";
46		if ("'$section'" == "all" && "'$symbol'" == "all" && "'$version'" == "") {
47			ret = 0;
48		} else {
49			ret = 1;
50		}
51	}
52	/^.*\{/ {
53		if ("'$section'" == "all" || $1 == "'$section'") {
54			current_section = $1;
55		}
56	}
57	/.*}/ { current_section = ""; current_version = ""; }
58	/^\t# added in / {
59		current_version=$4;
60	}
61	/^[^}].*[^:*];/ {
62		if (current_section == "") {
63			next;
64		}
65		if ("'$version'" != "") {
66			if ("'$version'" == "unset" && current_version != "") {
67				next;
68			} else if ("'$version'" != "unset" && "'$version'" != current_version) {
69				next;
70			}
71		}
72		gsub(";","");
73		if ("'$symbol'" == "all" || $1 == "'$symbol'") {
74			ret = 0;
75			if ("'$quiet'" == "") {
76				print "'$file' "current_section" "$1;
77			}
78			if ("'$symbol'" != "all") {
79				exit 0;
80			}
81		}
82	}
83	END {
84		exit ret;
85	}'
86done
87