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.
7 # This script is used to compare vpx_config.h and vpx_config.asm to
8 # verify the two files match.
14 # -p - Print the options if correct.
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
25 while getopts "h:a:o:p" flag
27 if [ "$flag" = "h" ]; then
29 elif [ "$flag" = "a" ]; then
31 elif [ "$flag" = "o" ]; then
33 elif [ "$flag" = "p" ]; then
38 if [ -z "$header_file" ]; then
39 echo "Header file not specified."
44 if [ -z "$asm_file" ]; then
45 echo "ASM file not specified."
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] *$')"
53 # Extra filtering for known exceptions.
54 combined_config
="$(echo "$combined_config" | grep -v WIDE_REFERENCE)"
55 combined_config
="$(echo "$combined_config" | grep -v ARCHITECTURE)"
56 combined_config
="$(echo "$combined_config" | grep -v DO1STROUNDING)"
59 combined_config
="$(echo "$combined_config" | sed 's/[ \t]//g')"
61 # Remove #define in the header file.
62 combined_config
="$(echo "$combined_config" | sed 's/.*define//')"
64 # Remove equ in the ASM file.
65 combined_config
="$(echo "$combined_config" | sed 's/\.equ//')" # gas style
66 combined_config
="$(echo "$combined_config" | sed 's/equ//')" # rvds style
67 combined_config
="$(echo "$combined_config" | sed 's/\.set//')" # apple style
69 # Remove %define in YASM ASM files.
70 combined_config
="$(echo "$combined_config" | sed 's/%define\s *//')" # yasm style
72 # Remove useless comma in gas style assembly file.
73 combined_config
="$(echo "$combined_config" | sed 's/,//')"
75 # Substitute 0 with =no.
76 combined_config
="$(echo "$combined_config" | sed 's/0$/=no/')"
78 # Substitute 1 with =yes.
79 combined_config
="$(echo "$combined_config" | sed 's/1$/=yes/')"
81 # Find the mismatch variables.
82 odd_config
="$(echo "$combined_config" | sort | uniq -u)"
83 odd_vars
="$(echo "$odd_config" | sed 's/=.*//' | uniq)"
85 for var
in $odd_vars; do
86 echo "Error: Configuration mismatch for $var."
87 echo "Header file: $header_file"
88 echo "$(cat -n $header_file | grep "$var[ \t]")"
89 echo "Assembly file: $asm_file"
90 echo "$(cat -n $asm_file | grep "$var[ \t]")"
94 if [ -n "$odd_vars" ]; then
99 if [ "$print_final" = "no" ]; then
103 # Do some additional filter to make libvpx happy.
104 combined_config
="$(echo "$combined_config" | grep -v ARCH_X86=no)"
105 combined_config
="$(echo "$combined_config" | grep -v ARCH_X86_64=no)"
107 # Print out the unique configurations.
108 if [ -n "$out_file" ]; then
109 echo "$combined_config" |
sort |
uniq > $out_file
111 echo "$combined_config" |
sort |
uniq