110 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/bin/bash -e
 | 
						|
#
 | 
						|
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
 | 
						|
# Use of this source code is governed by a BSD-style license that can be
 | 
						|
# found in the LICENSE file.
 | 
						|
 | 
						|
# This script is used to compare vpx_config.h and vpx_config.asm to
 | 
						|
# verify the two files match.
 | 
						|
#
 | 
						|
# Arguments:
 | 
						|
#
 | 
						|
# -h - C Header file.
 | 
						|
# -a - ASM file.
 | 
						|
# -p - Print the options if correct.
 | 
						|
# -o - Output file.
 | 
						|
#
 | 
						|
# Usage:
 | 
						|
#
 | 
						|
# # Compare the two configuration files and output the final results.
 | 
						|
# ./lint_config.sh -h vpx_config.h -a vpx_config.asm -o libvpx.config -p
 | 
						|
 | 
						|
export LC_ALL=C
 | 
						|
print_final="no"
 | 
						|
 | 
						|
while getopts "h:a:o:p" flag
 | 
						|
do
 | 
						|
  if [ "$flag" = "h" ]; then
 | 
						|
    header_file=$OPTARG
 | 
						|
  elif [ "$flag" = "a" ]; then
 | 
						|
    asm_file=$OPTARG
 | 
						|
  elif [ "$flag" = "o" ]; then
 | 
						|
    out_file=$OPTARG
 | 
						|
  elif [ "$flag" = "p" ]; then
 | 
						|
    print_final="yes"
 | 
						|
  fi
 | 
						|
done
 | 
						|
 | 
						|
if [ -z "$header_file" ]; then
 | 
						|
  echo "Header file not specified."
 | 
						|
  false
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
if [ -z "$asm_file" ]; then
 | 
						|
  echo "ASM file not specified."
 | 
						|
  false
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
# Concat header file and assembly file and select those ended with 0 or 1.
 | 
						|
combined_config="$(cat $header_file $asm_file | grep -E ' +[01] *$')"
 | 
						|
 | 
						|
# Extra filtering for known exceptions.
 | 
						|
combined_config="$(echo "$combined_config" | grep -v DO1STROUNDING)"
 | 
						|
 | 
						|
# Remove all spaces.
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/[ \t]//g')"
 | 
						|
 | 
						|
# Remove #define in the header file.
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/.*define//')"
 | 
						|
 | 
						|
# Remove equ in the ASM file.
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/\.equ//')" # gas style
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/equ//')" # rvds style
 | 
						|
 | 
						|
# Remove %define in YASM ASM files.
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/%define\s *//')" # yasm style
 | 
						|
 | 
						|
# Remove useless comma in gas style assembly file.
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/,//')"
 | 
						|
 | 
						|
# Substitute 0 with =no.
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/0$/=no/')"
 | 
						|
 | 
						|
# Substitute 1 with =yes.
 | 
						|
combined_config="$(echo "$combined_config" | sed 's/1$/=yes/')"
 | 
						|
 | 
						|
# Find the mismatch variables.
 | 
						|
odd_config="$(echo "$combined_config" | sort | uniq -u)"
 | 
						|
odd_vars="$(echo "$odd_config" | sed 's/=.*//' | uniq)"
 | 
						|
 | 
						|
for var in $odd_vars; do
 | 
						|
  echo "Error: Configuration mismatch for $var."
 | 
						|
  echo "Header file: $header_file"
 | 
						|
  echo "$(cat -n $header_file | grep "$var[ \t]")"
 | 
						|
  echo "Assembly file: $asm_file"
 | 
						|
  echo "$(cat -n $asm_file | grep "$var[ \t]")"
 | 
						|
  echo ""
 | 
						|
done
 | 
						|
 | 
						|
if [ -n "$odd_vars" ]; then
 | 
						|
  false
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$print_final" = "no" ]; then
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
# Do some additional filter to make libvpx happy.
 | 
						|
combined_config="$(echo "$combined_config" | grep -v ARCH_X86=no)"
 | 
						|
combined_config="$(echo "$combined_config" | grep -v ARCH_X86_64=no)"
 | 
						|
 | 
						|
# Print out the unique configurations.
 | 
						|
if [ -n "$out_file" ]; then
 | 
						|
  echo "$combined_config" | sort | uniq > $out_file
 | 
						|
else
 | 
						|
  echo "$combined_config" | sort | uniq
 | 
						|
fi
 |