| #!/bin/sh |
| # 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:$") |
| |
| 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 |