1 #!/bin/bash -e 2 # 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 # This script is used to compare vpx_config.h and vpx_config.asm to 8 # verify the two files match. 9 # 10 # Arguments: 11 # 12 # -h - C Header file. 13 # -a - ASM file. 14 # -p - Print the options if correct. 15 # -o - Output file. 16 # 17 # Usage: 18 # 19 # # Compare the two configuration files and output the final results. 20 # ./lint_config.sh -h vpx_config.h -a vpx_config.asm -o libvpx.config -p 21 22 export LC_ALL=C 23 print_final="no" 24 25 while getopts "h:a:o:p" flag 26 do 27 if [ "$flag" = "h" ]; then 28 header_file=$OPTARG 29 elif [ "$flag" = "a" ]; then 30 asm_file=$OPTARG 31 elif [ "$flag" = "o" ]; then 32 out_file=$OPTARG 33 elif [ "$flag" = "p" ]; then 34 print_final="yes" 35 fi 36 done 37 38 if [ -z "$header_file" ]; then 39 echo "Header file not specified." 40 false 41 exit 42 fi 43 44 if [ -z "$asm_file" ]; then 45 echo "ASM file not specified." 46 false 47 exit 48 fi 49 50 # Concat header file and assembly file and select those ended with 0 or 1. 51 combined_config="$(cat $header_file $asm_file | grep -E ' +[01] *$')" 52 53 # Extra filtering for known exceptions. 54 combined_config="$(echo "$combined_config" | grep -v DO1STROUNDING)" 55 56 # Remove all spaces. 57 combined_config="$(echo "$combined_config" | sed 's/[ \t]//g')" 58 59 # Remove #define in the header file. 60 combined_config="$(echo "$combined_config" | sed 's/.*define//')" 61 62 # Remove equ in the ASM file. 63 combined_config="$(echo "$combined_config" | sed 's/\.equ//')" # gas style 64 combined_config="$(echo "$combined_config" | sed 's/equ//')" # rvds style 65 66 # Remove useless comma in gas style assembly file. 67 combined_config="$(echo "$combined_config" | sed 's/,//')" 68 69 # Substitute 0 with =no. 70 combined_config="$(echo "$combined_config" | sed 's/0$/=no/')" 71 72 # Substitute 1 with =yes. 73 combined_config="$(echo "$combined_config" | sed 's/1$/=yes/')" 74 75 # Find the mismatch variables. 76 odd_config="$(echo "$combined_config" | sort | uniq -u)" 77 odd_vars="$(echo "$odd_config" | sed 's/=.*//' | uniq)" 78 79 for var in $odd_vars; do 80 echo "Error: Configuration mismatch for $var." 81 echo "Header file: $header_file" 82 echo "$(cat -n $header_file | grep "$var[ \t]")" 83 echo "Assembly file: $asm_file" 84 echo "$(cat -n $asm_file | grep "$var[ \t]")" 85 echo "" 86 done 87 88 if [ -n "$odd_vars" ]; then 89 false 90 exit 91 fi 92 93 if [ "$print_final" = "no" ]; then 94 exit 95 fi 96 97 # Do some additional filter to make libvpx happy. 98 combined_config="$(echo "$combined_config" | grep -v ARCH_X86=no)" 99 combined_config="$(echo "$combined_config" | grep -v ARCH_X86_64=no)" 100 101 # Print out the unique configurations. 102 if [ -n "$out_file" ]; then 103 echo "$combined_config" | sort | uniq > $out_file 104 else 105 echo "$combined_config" | sort | uniq 106 fi 107