1
0
forked from 0ad/0ad
0ad/libraries/build-source-libs.sh
Ralph Sennhauser 6f5ac7c4ae Fix issues pointed out by shellcheck
Some are real bugs, some are bashisms, but most is zealous quoting of
variables.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-08-28 18:23:18 +02:00

119 lines
3.6 KiB
Bash
Executable File

#!/bin/sh
die()
{
echo ERROR: "$*"
exit 1
}
# SVN revision to checkout for source-libs
# Update this line when you commit an update to source-libs
source_svnrev="28207"
if [ "$(uname -s)" = "Darwin" ]; then
die "This script should not be used on macOS: use build-macos-libs.sh instead."
fi
cd "$(dirname "$0")" || die
# Now in libraries/ (where we assume this script resides)
# Check for whitespace in absolute path; this will cause problems in the
# SpiderMonkey build and maybe elsewhere, so we just forbid it
# Use perl as an alternative to readlink -f, which isn't available on BSD
SCRIPTPATH=$(perl -MCwd -e 'print Cwd::abs_path shift' "$0")
case "$SCRIPTPATH" in
*\ *)
die "Absolute path contains whitespace, which will break the build - move the game to a path without spaces"
;;
esac
# Parse command-line options (download options and build options):
source_libs_dir="source"
without_nvtt=false
with_system_nvtt=false
with_system_mozjs=false
JOBS=${JOBS:="-j2"}
for i in "$@"; do
case $i in
--source-libs-dir=*) source_libs_dir=${1#*=} ;;
--source-libs-dir) die "correct syntax is --source-libs-dir=/path/to/dir" ;;
--without-nvtt) without_nvtt=true ;;
--with-system-nvtt) with_system_nvtt=true ;;
--with-system-mozjs) with_system_mozjs=true ;;
-j*) JOBS=$i ;;
esac
done
# Download source libs
echo "Downloading source libs..."
echo
if [ -e "${source_libs_dir}"/.svn ]; then
(cd "${source_libs_dir}" && svn cleanup && svn up -r $source_svnrev)
else
svn co -r $source_svnrev https://svn.wildfiregames.com/public/source-libs/trunk "${source_libs_dir}"
fi
# Build/update bundled external libraries
echo "Building third-party dependencies..."
echo
# Some of our makefiles depend on GNU make, so we set some sane defaults if MAKE
# is not set.
case "$(uname -s)" in
"FreeBSD" | "OpenBSD")
MAKE=${MAKE:="gmake"}
;;
*)
MAKE=${MAKE:="make"}
;;
esac
(cd "${source_libs_dir}"/fcollada && MAKE=${MAKE} JOBS=${JOBS} ./build.sh) || die "FCollada build failed"
echo
if [ "$with_system_nvtt" = "false" ] && [ "$without_nvtt" = "false" ]; then
(cd "${source_libs_dir}"/nvtt && MAKE=${MAKE} JOBS=${JOBS} ./build.sh) || die "NVTT build failed"
fi
echo
if [ "$with_system_mozjs" = "false" ]; then
(cd "${source_libs_dir}"/spidermonkey && MAKE=${MAKE} JOBS=${JOBS} ./build.sh) || die "SpiderMonkey build failed"
fi
echo
echo "Copying built files..."
# Copy built binaries to binaries/system/
cp "${source_libs_dir}"/fcollada/bin/* ../binaries/system/
if [ "$with_system_nvtt" = "false" ] && [ "$without_nvtt" = "false" ]; then
cp "${source_libs_dir}"/nvtt/bin/* ../binaries/system/
fi
if [ "$with_system_mozjs" = "false" ]; then
cp "${source_libs_dir}"/spidermonkey/bin/* ../binaries/system/
fi
# If a custom source-libs dir was used, includes and static libs should be copied to libraries/source/
# and all other bundled content should be copied.
if [ "$source_libs_dir" != "source" ]; then
rsync -avzq \
--exclude fcollada \
--exclude nvtt \
--exclude spidermonkey \
"${source_libs_dir}"/ source
mkdir -p source/fcollada
cp -r "${source_libs_dir}"/fcollada/include source/fcollada/
cp -r "${source_libs_dir}"/fcollada/lib source/fcollada/
if [ "$with_system_nvtt" = "false" ] && [ "$without_nvtt" = "false" ]; then
mkdir -p source/nvtt
cp -r "${source_libs_dir}"/nvtt/include source/nvtt/
cp -r "${source_libs_dir}"/nvtt/lib source/nvtt/
fi
if [ "$with_system_mozjs" = "false" ]; then
mkdir -p source/spidermonkey
cp -r "${source_libs_dir}"/spidermonkey/include-unix-debug source/spidermonkey/
cp -r "${source_libs_dir}"/spidermonkey/include-unix-release source/spidermonkey/
cp -r "${source_libs_dir}"/spidermonkey/lib source/spidermonkey/
fi
fi
echo "Done."