007/scripts/test_files.sh

111 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# execute from the root source control directory.
result=$(basename "$PWD")
if [ $result = "scripts" ] ; then
cd ..
fi
SRC=
CONTINUE_ON_ERROR=0
VERBOSE=0
usage() {
echo "checks md5s generated from make/build_hashtable.sh"
echo ""
echo "This script should execute from root source control directory."
echo ""
echo "$0 usage:"
echo ""
echo " $0 -i file [-c]"
echo ""
echo " -c continue on error"
exit 0;
}
[ $# -eq 0 ] && usage
while getopts "i:chv" arg; do
case $arg in
i)
SRC="${OPTARG}"
;;
c)
CONTINUE_ON_ERROR=1
;;
v)
VERBOSE=1
;;
h | *) # Display help.
usage
exit 0
;;
esac
done
if [ "${SRC}" = "" ] ; then
usage
fi
if [ ! -f "${SRC}" ]; then
echo "File not found: ${SRC}"
exit 1
fi
OLDIFS=$IFS
IFS=","
TMP=$(mktemp /tmp/ge_test_files.XXXXXX)
TMP2=$(mktemp /tmp/ge_test_files.XXXXXX)
while read MD5 SECTION FILE
do
if [ ! -f "${SRC}" ]; then
echo "File not found: ${SRC}"
continue
fi
if [ -f $FILE ]; then
mips-linux-gnu-objcopy -j "${SECTION}" -O binary "${FILE}" "${TMP}"
ACTUAL=$(md5sum -b "${TMP}" | cut -c -32 | tr '[:upper:]' '[:lower:]')
EXPECTED=$(echo "${MD5}" | tr '[:upper:]' '[:lower:]')
FILENAME=$(echo $FILE | sed -E -e 's/build\/[uje]\/src\//src\//g;');
VERSION=$(echo $FILE | sed -E -e 's/build\/([uje])\/.*/\1/g;');
if [ "${ACTUAL}" != "${EXPECTED}" ] ; then
#if [ "${SECTION}" == ".data" ] || [ "${SECTION}" == ".rodata" ] ; then
# echo -e "\033[93m\033[1A";
#fi
echo "checksums differ, section'${SECTION}', file: '${FILE}'."
echo "Comparing Files..."
echo "Original | New"
if [ -f "build/${VERSION}-match/${FILENAME}" ]; then
mips-linux-gnu-objcopy -j "${SECTION}" -O binary "build/${VERSION}-match/${FILENAME}" "${TMP2}"
(diff -y -W 80 --suppress-common-lines <(xxd -c8 $TMP2) <(xxd -c8 $TMP) && echo -e "\033[92mFiles Identical!") || \
(\
echo -e "\033[91mDifference Found, Dumping assembly! (${FILE}New.mips)" && touch "${FILE}New.mips" && touch "${FILE}Match.mips" && \
mips-linux-gnu-objdump --all-headers --disassemble --debugging --source --full-contents --line-numbers "build/${VERSION}-match/${FILENAME}" > "${FILE}Match.mips" && \
mips-linux-gnu-objdump --all-headers --disassemble --debugging --source --full-contents --line-numbers "${FILE}" > "${FILE}New.mips" \
);
else
echo -e "\033[93mNo Previously matching files to compare... Please run this test again on a matching build to generate."
fi
if [ ${CONTINUE_ON_ERROR} -eq 0 ] ; then
IFS=$OLDIFS
rm -f "${TMP}"
rm -f "${TMP2}"
exit 1
fi
else
if [ ${VERBOSE} -eq 1 ]; then
echo -e "\033[92mpass: section'${SECTION}' ${FILE}"
fi
fi
echo -e -n "\033[m"
fi
done < "${SRC}"
IFS=$OLDIFS
rm -f "${TMP}"
rm -f "${TMP2}"
exit 0