numam-spdk/scripts/bpf/gen_enums.sh
Konrad Sztyber a78d8ea4f2 scripts/bpftrace: force basic regex syntax in grep
Forced grep to use use basic regular expression syntax (-G option) and
removed escape characters from "{", as they're not needed in this mode.
It fixes the following errors:

fatal: command line, 'enum spdk_nvmf_subsystem_state \{': Unmatched \{
fatal: command line, 'enum nvmf_tgt_state \{': Unmatched \{

Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I7dd15207d6ff22d229d8f66668d33e0f5596379e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9932
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2021-10-20 23:39:59 +00:00

53 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
rootdir=$(git rev-parse --show-toplevel)
_print_enums() {
local enum_type=$1 enum_string=$2 enum_prefix=$3 enum output
output=$(< "$rootdir/$(git -C "$rootdir" grep -G -l "$enum_string" -- lib module)")
# Isolate the enum block
output=${output#*$enum_string$'\n'} output=${output%%$'\n'\};*}
# Fold it onto an array
IFS="," read -ra output <<< "${output//[[:space:]]/}"
# Drop the assignments
output=("${output[@]/=*/}")
for enum in "${!output[@]}"; do
if [[ ${output[enum]} != "$enum_prefix"* ]]; then
printf 'enum name %s does not start with expected prefix %s\n' "${output[enum]}" "$enum_prefix"
return 1
fi >&2
printf ' @%s[%d] = "%s";\n' "$enum_type" "$enum" "${output[enum]#$enum_prefix}"
done
}
print_enums() {
for state in "${!state_enums[@]}"; do
_print_enums "$state" "${state_enums["$state"]}" "${state_prefix["$state"]}"
done
}
print_clear() { printf ' clear(@%s);\n' "${!state_enums[@]}"; }
declare -A state_enums=() state_prefix=()
state_enums["target"]="enum nvmf_tgt_state {"
state_enums["subsystem"]="enum spdk_nvmf_subsystem_state {"
state_prefix["target"]=NVMF_TGT_
state_prefix["subsystem"]=SPDK_NVMF_SUBSYSTEM_
enums=$(print_enums)
clear=$(print_clear)
cat <<- ENUM
BEGIN {
$enums
}
END {
$clear
}
ENUM