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