1*5dfe80d6SVesa Jääskeläinen#!/bin/bash 2*5dfe80d6SVesa Jääskeläinen# SPDX-License-Identifier: BSD-2-Clause 3*5dfe80d6SVesa Jääskeläinen 4*5dfe80d6SVesa JääskeläinenSHOW_DETAILS=1 5*5dfe80d6SVesa JääskeläinenERRORS="" 6*5dfe80d6SVesa Jääskeläinenbasepath="$(dirname $(dirname $(readlink -f "$0")))" 7*5dfe80d6SVesa Jääskeläinen 8*5dfe80d6SVesa Jääskeläinendetails () [[ ${SHOW_DETAILS} -ne 0 ]] 9*5dfe80d6SVesa Jääskeläinen 10*5dfe80d6SVesa Jääskeläinenverify_enum () { 11*5dfe80d6SVesa Jääskeläinen PREFIX=$1 12*5dfe80d6SVesa Jääskeläinen SYMBOL_LIST="$(grep PKCS11\_$PREFIX\_ ${basepath}/include/pkcs11_ta.h | cut -f2 | cut '-d ' -f1)" 13*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[4m${PREFIX}\e[0m" 14*5dfe80d6SVesa Jääskeläinen details && echo "" 15*5dfe80d6SVesa Jääskeläinen details && echo -e "symbol\tuses\tstatus" 16*5dfe80d6SVesa Jääskeläinen for symbol in $SYMBOL_LIST ; do 17*5dfe80d6SVesa Jääskeläinen details && echo -n "$symbol" 18*5dfe80d6SVesa Jääskeläinen COUNT="$(grep ${symbol} ${basepath}/src/* | wc -l)" 19*5dfe80d6SVesa Jääskeläinen details && echo -n -e "\t${COUNT}\t" 20*5dfe80d6SVesa Jääskeläinen PRESENT="$(grep PKCS11_ID.*\($symbol.*\) ${basepath}/src/pkcs11_helpers.c | wc -l)" 21*5dfe80d6SVesa Jääskeläinen if [ ${PRESENT} -ne 0 ] ; then 22*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[32mOK\e[0m" 23*5dfe80d6SVesa Jääskeläinen elif [ $COUNT -eq 0 ] ; then 24*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[33mmissing but unused\e[0m" 25*5dfe80d6SVesa Jääskeläinen else 26*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[31mMISSING!\e[0m" 27*5dfe80d6SVesa Jääskeläinen ERRORS+=" ${symbol}" 28*5dfe80d6SVesa Jääskeläinen fi 29*5dfe80d6SVesa Jääskeläinen done 30*5dfe80d6SVesa Jääskeläinen details && echo "" 31*5dfe80d6SVesa Jääskeläinen} 32*5dfe80d6SVesa Jääskeläinen 33*5dfe80d6SVesa Jääskeläinenverify_define () { 34*5dfe80d6SVesa Jääskeläinen PREFIX=$1 35*5dfe80d6SVesa Jääskeläinen SYMBOL_LIST="$(grep PKCS11\_$PREFIX\_ ${basepath}/include/pkcs11_ta.h | grep ^#define | cut '-d ' -f2 | cut -f1)" 36*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[4m${PREFIX}\e[0m" 37*5dfe80d6SVesa Jääskeläinen details && echo "" 38*5dfe80d6SVesa Jääskeläinen details && echo -e "symbol\tuses\tstatus" 39*5dfe80d6SVesa Jääskeläinen for symbol in $SYMBOL_LIST ; do 40*5dfe80d6SVesa Jääskeläinen details && echo -n "$symbol" 41*5dfe80d6SVesa Jääskeläinen COUNT="$(grep ${symbol} ${basepath}/src/* | wc -l)" 42*5dfe80d6SVesa Jääskeläinen details && echo -n -e "\t${COUNT}\t" 43*5dfe80d6SVesa Jääskeläinen PRESENT="$(grep PKCS11_ID.*\($symbol.*\) ${basepath}/src/pkcs11_helpers.c | wc -l)" 44*5dfe80d6SVesa Jääskeläinen if [ ${PRESENT} -ne 0 ] ; then 45*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[32mOK\e[0m" 46*5dfe80d6SVesa Jääskeläinen elif [ $COUNT -eq 0 ] ; then 47*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[33mmissing but unused\e[0m" 48*5dfe80d6SVesa Jääskeläinen else 49*5dfe80d6SVesa Jääskeläinen details && echo -e "\e[31mMISSING!\e[0m" 50*5dfe80d6SVesa Jääskeläinen ERRORS+=" ${symbol}" 51*5dfe80d6SVesa Jääskeläinen fi 52*5dfe80d6SVesa Jääskeläinen done 53*5dfe80d6SVesa Jääskeläinen details && echo "" 54*5dfe80d6SVesa Jääskeläinen} 55*5dfe80d6SVesa Jääskeläinen 56*5dfe80d6SVesa Jääskeläinenusage() { 57*5dfe80d6SVesa Jääskeläinen SCR=$(basename "$0") 58*5dfe80d6SVesa Jääskeläinen echo "Usage: $SCR Verify that helpers are up to date" 59*5dfe80d6SVesa Jääskeläinen echo " $SCR --quiet Only print errors" 60*5dfe80d6SVesa Jääskeläinen echo " $SCR --help This help" 61*5dfe80d6SVesa Jääskeläinen echo "" 62*5dfe80d6SVesa Jääskeläinen echo "Verification checks that all PKCS11_* enums or defines from \ 63*5dfe80d6SVesa Jääskeläineninclude/pkcs11_ta.h are either present in src/pkcs11_helpers.c or not used at \ 64*5dfe80d6SVesa Jääskeläinenall." 65*5dfe80d6SVesa Jääskeläinen exit 1 66*5dfe80d6SVesa Jääskeläinen} 67*5dfe80d6SVesa Jääskeläinen 68*5dfe80d6SVesa Jääskeläinenwhile [[ $# -gt 0 ]]; do 69*5dfe80d6SVesa Jääskeläinen arg="$1" 70*5dfe80d6SVesa Jääskeläinen shift 71*5dfe80d6SVesa Jääskeläinen 72*5dfe80d6SVesa Jääskeläinen case $arg in 73*5dfe80d6SVesa Jääskeläinen -q|--quiet) 74*5dfe80d6SVesa Jääskeläinen SHOW_DETAILS=0 75*5dfe80d6SVesa Jääskeläinen ;; 76*5dfe80d6SVesa Jääskeläinen -h|--help) 77*5dfe80d6SVesa Jääskeläinen usage 78*5dfe80d6SVesa Jääskeläinen ;; 79*5dfe80d6SVesa Jääskeläinen *) 80*5dfe80d6SVesa Jääskeläinen echo "error: invalid argument: ${arg}" 1>&2 81*5dfe80d6SVesa Jääskeläinen exit 1 82*5dfe80d6SVesa Jääskeläinen esac 83*5dfe80d6SVesa Jääskeläinendone 84*5dfe80d6SVesa Jääskeläinen 85*5dfe80d6SVesa Jääskeläinen# check that symbols exists 86*5dfe80d6SVesa Jääskeläinenverify_enum CKA 87*5dfe80d6SVesa Jääskeläinenverify_define CKFS 88*5dfe80d6SVesa Jääskeläinenverify_define CKFT 89*5dfe80d6SVesa Jääskeläinenverify_define CKFSS 90*5dfe80d6SVesa Jääskeläinenverify_enum CKS 91*5dfe80d6SVesa Jääskeläinenverify_enum CKR 92*5dfe80d6SVesa Jääskeläinenverify_enum CKO 93*5dfe80d6SVesa Jääskeläinenverify_enum CKK 94*5dfe80d6SVesa Jääskeläinen 95*5dfe80d6SVesa Jääskeläinenif [ -n "${ERRORS}" ] ; then 96*5dfe80d6SVesa Jääskeläinen SCR=$(basename "$0") 97*5dfe80d6SVesa Jääskeläinen for symbol in $ERRORS ; do 98*5dfe80d6SVesa Jääskeläinen echo "${SCR}: error: missing symbol ${symbol} in ${basepath}/src/pkcs11_helpers.c" 1>&2 99*5dfe80d6SVesa Jääskeläinen done 100*5dfe80d6SVesa Jääskeläinen exit 1 101*5dfe80d6SVesa Jääskeläinenfi 102*5dfe80d6SVesa Jääskeläinen 103*5dfe80d6SVesa Jääskeläinenexit 0 104