mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2024-11-30 15:41:12 +00:00
140 lines
3.9 KiB
Bash
Executable file
140 lines
3.9 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
host="gmqcc.qc.to"
|
|
location="$host/files"
|
|
list="$location/files"
|
|
hashes="$location/hashes"
|
|
options="$location/options"
|
|
|
|
#download required things
|
|
download_list=$(wget -qO- ${list})
|
|
download_hashes=$(wget -qO- ${hashes})
|
|
download_options=$(wget -qO- ${options})
|
|
|
|
download() {
|
|
local old="$PWD"
|
|
cd ~/.gmqcc/testsuite
|
|
echo "$download_list" | while read -r line
|
|
do
|
|
echo "downloading $line ..."
|
|
wget -q "${location}/$line"
|
|
done
|
|
|
|
echo "$download_hashes" > ~/.gmqcc/testsuite/hashes
|
|
echo "$download_options" > ~/.gmqcc/testsuite/options
|
|
|
|
cd "$old"
|
|
}
|
|
|
|
if [ -z "$download_list" -o -z "$download_hashes" -o -z "$download_options" ]; then
|
|
echo "failed to download required information to check projects."
|
|
|
|
if [ "$(ping -q -c1 "${host}")" ]; then
|
|
echo "host ${host} seems to be up but missing required files."
|
|
echo "please file bug report at: github.com/graphitemaster/gmqcc"
|
|
else
|
|
echo "host ${host} seems to be down, please try again later."
|
|
fi
|
|
|
|
echo "aborting"
|
|
exit 1
|
|
fi
|
|
|
|
# we have existing contents around
|
|
if [ -f ~/.gmqcc/testsuite/hashes -a -f ~/.gmqcc/testsuite/options ]; then
|
|
echo "$download_hashes" > /tmp/gmqcc_download_hashes
|
|
echo "$download_options" > /tmp/gmqcc_download_options
|
|
|
|
diff -u ~/.gmqcc/testsuite/hashes /tmp/gmqcc_download_hashes > /dev/null
|
|
check_hash=$?
|
|
diff -u ~/.gmqcc/testsuite/options /tmp/gmqcc_download_options > /dev/null
|
|
check_opts=$?
|
|
|
|
if [ $check_hash -ne 0 -o $check_opts -ne 0 ]; then
|
|
echo "consistency errors in hashes (possible update), obtaining fresh contents"
|
|
rm -rf ~/.gmqcc/testsuite/projects
|
|
rm ~/.gmqcc/testsuite/*.zip
|
|
|
|
download
|
|
fi
|
|
else
|
|
# do we even have the directory
|
|
echo "preparing project testsuite for the first time"
|
|
if [ ! -d ~/.gmqcc/testsuite ]; then
|
|
mkdir -p ~/.gmqcc/testsuite
|
|
fi
|
|
|
|
download
|
|
fi
|
|
|
|
if [ ! -d ~/.gmqcc/testsuite/projects ]; then
|
|
mkdir -p ~/.gmqcc/testsuite/projects
|
|
old="$PWD"
|
|
cd ~/.gmqcc/testsuite/projects
|
|
echo "$(ls ../ | grep -v '^hashes$' | grep -v '^projects$' | grep -v '^options$')" | while read -r line
|
|
do
|
|
echo "extracting project $line"
|
|
mkdir "$(echo "$line" | sed 's/\(.*\)\..*/\1/')"
|
|
unzip -qq "../$line" -d $(echo "$line" | sed 's/\(.*\)\..*/\1/')
|
|
done
|
|
cd "$old"
|
|
else
|
|
echo "previous state exists, using it"
|
|
fi
|
|
|
|
# compile projects in those directories
|
|
gmqcc_bin="gmqcc"
|
|
env -i type gmqcc 1>/dev/null 2>&1 || {
|
|
if [ -f ../gmqcc ]; then
|
|
echo "previous build of gmqcc exists, using it"
|
|
gmqcc_bin="$(pwd)/../gmqcc"
|
|
elif [ -f ./gmqcc ]; then
|
|
echo "previous build of gmqcc exists, using it"
|
|
gmqcc_bin="$(pwd)/gmqcc"
|
|
else
|
|
echo "gmqcc not installed and previous build doesn't exist"
|
|
echo "please run make, or make install"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
end_dir="$PWD"
|
|
cd ~/.gmqcc/testsuite/projects
|
|
start="$PWD"
|
|
find . -maxdepth 1 -mindepth 1 -type d | while read -r line
|
|
do
|
|
line="${line#./}"
|
|
echo -n "compiling $line... "
|
|
cd "${start}/${line}"
|
|
|
|
# does the project have multiple subprojects?
|
|
if [ -f dirs ]; then
|
|
echo ""
|
|
cat dirs | while read -r dir
|
|
do
|
|
# change to subproject
|
|
echo -n " compiling $dir... "
|
|
old="$PWD"
|
|
cd "$dir"
|
|
cmd="$(cat ../../../options | grep "$line:" | awk '{print substr($0, index($0, $2))}')"
|
|
"$gmqcc_bin" $cmd > /dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "error"
|
|
else
|
|
echo "success"
|
|
fi
|
|
cd "$old"
|
|
done
|
|
# nope only one project
|
|
else
|
|
cmd="$(cat ../../options | grep "$line:" | awk '{print substr($0, index($0, $2))}')"
|
|
"$gmqcc_bin" $cmd > /dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "error"
|
|
else
|
|
echo "success"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
cd "$end_dir"
|