91 lines
1.6 KiB
Bash
Executable file
91 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# builds a pak0.pak file for a respective gamedir
|
|
|
|
set -e
|
|
|
|
usage ()
|
|
{
|
|
echo Usage: `basename $0` gamedir >&2
|
|
exit 2
|
|
}
|
|
|
|
if [ $# -lt 1 ]
|
|
then
|
|
usage
|
|
fi
|
|
|
|
FILES_OUTDIR="$(pwd)/_build/halflife/$1"
|
|
FILES_MISSING="$(pwd)/_build/missing-$1-loose.txt"
|
|
|
|
find_file ()
|
|
{
|
|
SEARCHNAME=$(basename "${1}")
|
|
|
|
#echo "Looking for $SEARCHNAME"
|
|
|
|
find "./_tmp" -type f -name "${SEARCHNAME}" | while read FOUND
|
|
do
|
|
# GNU vs non GNU
|
|
if [ -x "$(command -v sha512sum)" ]
|
|
then
|
|
CHECK=$(sha256sum "$FOUND" | awk '{ print $1 }')
|
|
elif [ -x "$(command -v sha512)" ]
|
|
then
|
|
CHECK=$(sha256 -q "$FOUND")
|
|
else
|
|
echo "No tool to validate sha256 sums with!"
|
|
exit 2
|
|
fi
|
|
|
|
if [ "${CHECK}" = "$2" ]
|
|
then
|
|
mkdir -p "${FILES_OUTDIR}/$(dirname $1)"
|
|
cp -v "${FOUND}" "${FILES_OUTDIR}/$1"
|
|
exit 0
|
|
fi
|
|
done
|
|
|
|
if [ ! -f "${FILES_OUTDIR}/$1" ]
|
|
then
|
|
echo "${1}" >> "$FILES_MISSING"
|
|
fi
|
|
}
|
|
|
|
find_file_whatever ()
|
|
{
|
|
echo "Looking for $1"
|
|
|
|
find "./_tmp" -type f -path "*/${2}/${1}*" | while read FOUND
|
|
do
|
|
mkdir -p "${FILES_OUTDIR}/$(dirname $1)"
|
|
cp -v "${FOUND}" "${FILES_OUTDIR}/$1"
|
|
exit 0
|
|
done
|
|
}
|
|
|
|
if [ ! -d "$FILES_OUTDIR" ]
|
|
then
|
|
echo "Please generate a pak0.pak first."
|
|
exit 2
|
|
fi
|
|
|
|
if [ -f "$FILES_MISSING" ]
|
|
then
|
|
rm -v "$FILES_MISSING"
|
|
fi
|
|
|
|
while read LINE
|
|
do
|
|
FILE=$(echo ${LINE} | cut -d ' ' -f 2)
|
|
SUM=$(echo ${LINE} | cut -d ' ' -f 1)
|
|
find_file ${FILE} $SUM $1
|
|
done < "games/$1.sha256"
|
|
|
|
# since we don't need to pass purity checks for these
|
|
# we'll find the next best equivalent
|
|
while read LINE
|
|
do
|
|
FILE=$(echo ${LINE} | cut -d ' ' -f 2)
|
|
find_file_whatever ${FILE} $1
|
|
done < "$FILES_MISSING"
|