xref: /dpdk/buildtools/map-list-symbol.sh (revision 33af003eb13fe0c661f638797bacc50b0cc6f412)
13290ac14SDavid Marchand#!/bin/sh
23290ac14SDavid Marchand# SPDX-License-Identifier: BSD-3-Clause
33290ac14SDavid Marchand# Copyright(c) 2018 David Marchand <david.marchand@redhat.com>
43290ac14SDavid Marchand
53290ac14SDavid Marchandsection=all
63290ac14SDavid Marchandsymbol=all
73290ac14SDavid Marchandquiet=
8*33af003eSDengdui Huangversion=
93290ac14SDavid Marchand
106edec7f2SDavid Marchandwhile getopts 'S:s:qV:' name; do
113290ac14SDavid Marchand	case $name in
123290ac14SDavid Marchand	S)
133290ac14SDavid Marchand		[ $section = 'all' ] || {
143290ac14SDavid Marchand			echo 'Cannot list in multiple sections'
153290ac14SDavid Marchand			exit 1
163290ac14SDavid Marchand		}
173290ac14SDavid Marchand		section=$OPTARG
183290ac14SDavid Marchand	;;
193290ac14SDavid Marchand	s)
203290ac14SDavid Marchand		[ $symbol = 'all' ] || {
213290ac14SDavid Marchand			echo 'Cannot list multiple symbols'
223290ac14SDavid Marchand			exit 1
233290ac14SDavid Marchand		}
243290ac14SDavid Marchand		symbol=$OPTARG
253290ac14SDavid Marchand	;;
263290ac14SDavid Marchand	q)
273290ac14SDavid Marchand		quiet='y'
283290ac14SDavid Marchand	;;
296edec7f2SDavid Marchand	V)
306edec7f2SDavid Marchand		version=$OPTARG
316edec7f2SDavid Marchand	;;
323290ac14SDavid Marchand	?)
331fbb3977SDavid Marchand		echo 'usage: $0 [-S section] [-s symbol] [-V [version|unset]] [-q]'
343290ac14SDavid Marchand		exit 1
353290ac14SDavid Marchand	;;
363290ac14SDavid Marchand	esac
373290ac14SDavid Marchanddone
383290ac14SDavid Marchand
393290ac14SDavid Marchandshift $(($OPTIND - 1))
403290ac14SDavid Marchand
413290ac14SDavid Marchandfor file in $@; do
423290ac14SDavid Marchand	cat "$file" |awk '
433290ac14SDavid Marchand	BEGIN {
443290ac14SDavid Marchand		current_section = "";
456edec7f2SDavid Marchand		current_version = "";
466edec7f2SDavid Marchand		if ("'$section'" == "all" && "'$symbol'" == "all" && "'$version'" == "") {
473290ac14SDavid Marchand			ret = 0;
483290ac14SDavid Marchand		} else {
493290ac14SDavid Marchand			ret = 1;
503290ac14SDavid Marchand		}
513290ac14SDavid Marchand	}
52e1ab26dfSThomas Monjalon	/^.*\{/ {
533290ac14SDavid Marchand		if ("'$section'" == "all" || $1 == "'$section'") {
543290ac14SDavid Marchand			current_section = $1;
553290ac14SDavid Marchand		}
563290ac14SDavid Marchand	}
576edec7f2SDavid Marchand	/.*}/ { current_section = ""; current_version = ""; }
586edec7f2SDavid Marchand	/^\t# added in / {
596edec7f2SDavid Marchand		current_version=$4;
606edec7f2SDavid Marchand	}
613290ac14SDavid Marchand	/^[^}].*[^:*];/ {
626edec7f2SDavid Marchand		if (current_section == "") {
636edec7f2SDavid Marchand			next;
646edec7f2SDavid Marchand		}
651fbb3977SDavid Marchand		if ("'$version'" != "") {
661fbb3977SDavid Marchand			if ("'$version'" == "unset" && current_version != "") {
676edec7f2SDavid Marchand				next;
681fbb3977SDavid Marchand			} else if ("'$version'" != "unset" && "'$version'" != current_version) {
691fbb3977SDavid Marchand				next;
701fbb3977SDavid Marchand			}
716edec7f2SDavid Marchand		}
723290ac14SDavid Marchand		gsub(";","");
733290ac14SDavid Marchand		if ("'$symbol'" == "all" || $1 == "'$symbol'") {
743290ac14SDavid Marchand			ret = 0;
753290ac14SDavid Marchand			if ("'$quiet'" == "") {
763290ac14SDavid Marchand				print "'$file' "current_section" "$1;
773290ac14SDavid Marchand			}
783290ac14SDavid Marchand			if ("'$symbol'" != "all") {
793290ac14SDavid Marchand				exit 0;
803290ac14SDavid Marchand			}
813290ac14SDavid Marchand		}
823290ac14SDavid Marchand	}
833290ac14SDavid Marchand	END {
843290ac14SDavid Marchand		exit ret;
853290ac14SDavid Marchand	}'
863290ac14SDavid Marchanddone
87