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 %define in YASM ASM files. 67 combined_config="$(echo "$combined_config" | sed 's/%define\s *//')" # yasm style 68 69 # Remove useless comma in gas style assembly file. 70 combined_config="$(echo "$combined_config" | sed 's/,//')" 71 72 # Substitute 0 with =no. 73 combined_config="$(echo "$combined_config" | sed 's/0$/=no/')" 74 75 # Substitute 1 with =yes. 76 combined_config="$(echo "$combined_config" | sed 's/1$/=yes/')" 77 78 # Find the mismatch variables. 79 odd_config="$(echo "$combined_config" | sort | uniq -u)" 80 odd_vars="$(echo "$odd_config" | sed 's/=.*//' | uniq)" 81 82 for var in $odd_vars; do 83 echo "Error: Configuration mismatch for $var." 84 echo "Header file: $header_file" 85 echo "$(cat -n $header_file | grep "$var[ \t]")" 86 echo "Assembly file: $asm_file" 87 echo "$(cat -n $asm_file | grep "$var[ \t]")" 88 echo "" 89 done 90 91 if [ -n "$odd_vars" ]; then 92 false 93 exit 94 fi 95 96 if [ "$print_final" = "no" ]; then 97 exit 98 fi 99 100 # Do some additional filter to make libvpx happy. 101 combined_config="$(echo "$combined_config" | grep -v ARCH_X86=no)" 102 combined_config="$(echo "$combined_config" | grep -v ARCH_X86_64=no)" 103 104 # Print out the unique configurations. 105 if [ -n "$out_file" ]; then 106 echo "$combined_config" | sort | uniq > $out_file 107 else 108 echo "$combined_config" | sort | uniq 109 fi 110