tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

lint_config.sh (3107B)


      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 WIDE_REFERENCE)"
     55 combined_config="$(echo "$combined_config" | grep -v ARCHITECTURE)"
     56 combined_config="$(echo "$combined_config" | grep -v DO1STROUNDING)"
     57 
     58 # Remove all spaces.
     59 combined_config="$(echo "$combined_config" | sed 's/[ \t]//g')"
     60 
     61 # Remove #define in the header file.
     62 combined_config="$(echo "$combined_config" | sed 's/.*define//')"
     63 
     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
     68 
     69 # Remove %define in YASM ASM files.
     70 combined_config="$(echo "$combined_config" | sed 's/%define\s *//')" # yasm style
     71 
     72 # Remove useless comma in gas style assembly file.
     73 combined_config="$(echo "$combined_config" | sed 's/,//')"
     74 
     75 # Substitute 0 with =no.
     76 combined_config="$(echo "$combined_config" | sed 's/0$/=no/')"
     77 
     78 # Substitute 1 with =yes.
     79 combined_config="$(echo "$combined_config" | sed 's/1$/=yes/')"
     80 
     81 # Find the mismatch variables.
     82 odd_config="$(echo "$combined_config" | sort | uniq -u)"
     83 odd_vars="$(echo "$odd_config" | sed 's/=.*//' | uniq)"
     84 
     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]")"
     91  echo ""
     92 done
     93 
     94 if [ -n "$odd_vars" ]; then
     95  false
     96  exit
     97 fi
     98 
     99 if [ "$print_final" = "no" ]; then
    100  exit
    101 fi
    102 
    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)"
    106 
    107 # Print out the unique configurations.
    108 if [ -n "$out_file" ]; then
    109  echo "$combined_config" | sort | uniq > $out_file
    110 else
    111  echo "$combined_config" | sort | uniq
    112 fi