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