wesnoth/utils/sanity_check
2021-06-19 12:10:02 -05:00

104 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
#
# sanity_check -- general sanity checker for the source and translations
#
# This had better take us to the top-level source directory.
# Otherwise, confusion will ensue.
#Detect location of this script use it to cd to top-level
FULL_PATH=`dirname $(readlink -f $0)`
cd $FULL_PATH/..
if [ ! -d data -o ! -d images ]
then
echo "sanity_check: " \
"this tool must be run from the Wesnoth utils directory."
exit 1
fi
problems=no
# First sanity check:
echo "Checking POTFILES correctness..."
potfiles="po/wesnoth/POTFILES.in po/wesnoth-lib/POTFILES.in po/wesnoth-editor/POTFILES.in"
# Gather the list of sources
find src -name '*.cpp' -print | sort >/tmp/sschk$$_sources
# See what's in the POTFILES
sort -u $potfiles >/tmp/sschk$$_potmembers
# Figure out which sources are not listed but should be
missing=`comm -23 /tmp/sschk$$_sources /tmp/sschk$$_potmembers | tr '\012' ' '`
if [ "$missing" ]
then
echo " Missing from the POTFILE.in files: $missing"
problems=missing
else
echo " All .cpp files have POTFILE.in entries."
fi
# Find invalid potfile entries
for file in $potfiles
do
sort -u $file >/tmp/sschk$$_uniq
invalid=`comm -23 /tmp/sschk$$_uniq /tmp/sschk$$_sources | tr '\012' ' '`
if [ "$invalid" ]
then
echo " Invalid $file entries: $invalid"
problems=invalid
else
echo " All $file entries are valid."
fi
done
# Check for duplicates within the individual POT files
for file in $potfiles
do
sort $file >/tmp/sschk$$_sorted
sort -u $file >/tmp/sschk$$_uniq
duplicates=`comm -23 /tmp/sschk$$_sorted /tmp/sschk$$_uniq | tr '\012' ' '`
if [ $duplicates ]
then
echo " Duplicates within $file: $duplicates"
problems=within
fi
done
# Check for duplication across POT files
for afile in $potfiles
do
for bfile in $potfiles
do
# The newer-than test is a klugy way to select
# only one of each two file pairs that are the
# same symmetrical set. This will give duplicate
# messages if the files were created in the same second.
if [ $afile != $bfile -a $afile -nt $bfile ]
then
sort -u $afile >/tmp/sschk$$_afile
sort -u $bfile >/tmp/sschk$$_bfile
duplicates=`comm -12 /tmp/sschk$$_afile /tmp/sschk$$_bfile | tr '\012' ' '`
if [ $duplicates ]
then
echo " Duplicated between $afile and $bfile: $duplicates"
problems=across
fi
fi
done
done
if [ $problems != within -a $problems != across ]
then
echo " No duplicates."
fi
# More sanity checks can go here...
# Cleanup
if [ $problems = 'no' ]
then
echo "All sanity checks passed."
fi
rm /tmp/sschk$$_*