107 lines
2.6 KiB
Bash
107 lines
2.6 KiB
Bash
|
#!/bin/bash
|
||
|
# SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
green='\e[0;32m'
|
||
|
red='\e[0;31m'
|
||
|
eol='\e[0m'
|
||
|
|
||
|
BASE_DIR=$PWD
|
||
|
ABI_DIR=$BASE_DIR/scripts/abi
|
||
|
ABI_XML_DIR=$BASE_DIR/scripts/abi/abi_xml
|
||
|
ABI_RESULT_DIR=$BASE_DIR/scripts/abi/abi_xml
|
||
|
ORI_ABI_XML=abi_ori.xml
|
||
|
TARGET_ABI_XML=abi_target.xml
|
||
|
ABI_REPORT=abi-report.out
|
||
|
FINAL_ABI_REPORT=abi-report-final.out
|
||
|
|
||
|
#include abi_white_list to bypass violations
|
||
|
source $ABI_DIR/abi_white_list
|
||
|
#Find Delete/Changed/Added and leaf type change
|
||
|
#check_arr=("\[D\]" "\[C\]" "\[A\]" "^'.*' changed:$")
|
||
|
#Find Delete/Changed and leaf type change
|
||
|
check_arr=("\[D\]" "\[C\]" "^'.*' changed:$")
|
||
|
|
||
|
is_abi_violation_bypass=0
|
||
|
declare -i abi_violation_count=0
|
||
|
|
||
|
function print_usage(){
|
||
|
echo -e "${green}Script for auto generate \
|
||
|
$ABI_RESULT_DIR/$FINAL_ABI_REPORT from $ABI_RESULT_DIR/$ABI_REPORT ${eol}"
|
||
|
echo ""
|
||
|
echo -e "${red}Command for local test:${eol}"
|
||
|
echo ""
|
||
|
echo -e "${green}Example:${eol} ${red}./scripts/abi/FinalABI.sh${eol}"
|
||
|
echo ""
|
||
|
echo -e "${green}Script for auto generate \
|
||
|
$FINAL_ABI_REPORT by specified abi_result_path ${eol}"
|
||
|
echo ""
|
||
|
echo -e "${red}Command for local test:${eol}"
|
||
|
echo "[abi_result_path] ./scripts/abi/FinalABI.sh"
|
||
|
echo ""
|
||
|
echo -e "${green}Description:${eol}"
|
||
|
echo "[abi_result_path]: absolute path to generate fianl abi report"
|
||
|
echo ""
|
||
|
echo -e "${green}Example:${eol} ${red}abi_result_path=absolute_path \
|
||
|
/scripts/abi/FinalABI.sh${eol}"
|
||
|
exit -1
|
||
|
}
|
||
|
|
||
|
if [ -z "$abi_result_path" ]
|
||
|
then
|
||
|
echo "ABI_XML_DIR=$ABI_XML_DIR"
|
||
|
echo "ABI_RESULT_DIR=$ABI_RESULT_DIR"
|
||
|
else
|
||
|
ABI_RESULT_DIR=$abi_result_path
|
||
|
echo "ABI_XML_DIR=$ABI_XML_DIR"
|
||
|
echo "ABI_RESULT_DIR=$ABI_RESULT_DIR"
|
||
|
fi
|
||
|
|
||
|
if [[ "$1" == "h" ]] || [[ "$1" == "help" ]]
|
||
|
then
|
||
|
print_usage
|
||
|
fi
|
||
|
|
||
|
#remove temp files first
|
||
|
rm -rf $ABI_RESULT_DIR/$FINAL_ABI_REPORT
|
||
|
|
||
|
exec < $ABI_RESULT_DIR/$ABI_REPORT
|
||
|
while read line
|
||
|
do
|
||
|
for ((i=0; i < ${#check_arr[@]}; i++))
|
||
|
do
|
||
|
if [[ $line =~ ${check_arr[$i]} ]]
|
||
|
then
|
||
|
is_abi_violation_bypass=0
|
||
|
for ((j=0; j < ${#bypass_arr[@]}; j++))
|
||
|
do
|
||
|
if [[ $line =~ ${bypass_arr[$j]} ]]
|
||
|
then
|
||
|
is_abi_violation_bypass=1
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [[ $is_abi_violation_bypass == 0 ]]
|
||
|
then
|
||
|
abi_violation_count+=1
|
||
|
fi
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
#write $line to $FINAL_ABI_REPORT if $is_abi_violation = 0
|
||
|
if [[ $is_abi_violation_bypass == 0 ]]
|
||
|
then
|
||
|
echo $line >> $ABI_RESULT_DIR/$FINAL_ABI_REPORT
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [[ $abi_violation_count == 0 ]]
|
||
|
then
|
||
|
echo "ABI Monitor check PASS!!!"
|
||
|
else
|
||
|
echo "ABI Monitor check FAILED!!!\
|
||
|
Final abi_violation_count=$abi_violation_count!!!"
|
||
|
echo "Please check report: $ABI_RESULT_DIR/$FINAL_ABI_REPORT for details."
|
||
|
fi
|
||
|
exit $abi_violation_count
|