diff options
Diffstat (limited to 'media/libvpx/lint_config.sh')
-rwxr-xr-x | media/libvpx/lint_config.sh | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/media/libvpx/lint_config.sh b/media/libvpx/lint_config.sh new file mode 100755 index 0000000000..1a6c96dfbb --- /dev/null +++ b/media/libvpx/lint_config.sh @@ -0,0 +1,112 @@ +#!/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 WIDE_REFERENCE)" +combined_config="$(echo "$combined_config" | grep -v ARCHITECTURE)" +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 +combined_config="$(echo "$combined_config" | sed 's/\.set//')" # apple 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 |