Home | History | Annotate | Download | only in libvpx
      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