You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
827 lines
19 KiB
Bash
827 lines
19 KiB
Bash
#!/bin/bash
|
|
# set -x # turn-on for debugging
|
|
|
|
MISSINGTOOLS=0
|
|
|
|
command -v 7z >/dev/null 2>&1 || { echo "Error: 7z (7zip) is not on the path."; MISSINGTOOLS=1; }
|
|
command -v cmake >/dev/null 2>&1 || { echo "Error: cmake (CMake) is not on the path."; MISSINGTOOLS=1; }
|
|
|
|
if [ $MISSINGTOOLS -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
WORKINGDIR="$(pwd)"
|
|
case "$WORKINGDIR" in
|
|
*[[:space:]]*)
|
|
echo "Error: Working directory contains spaces."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
set -euo pipefail
|
|
|
|
APPVEYOR=${APPVEYOR:-}
|
|
CI=${CI:-}
|
|
STEP=${STEP:-}
|
|
|
|
VERBOSE=""
|
|
STRIP=""
|
|
SKIP_DOWNLOAD=""
|
|
SKIP_EXTRACT=""
|
|
KEEP=""
|
|
UNITY_BUILD=""
|
|
VS_VERSION=""
|
|
NMAKE=""
|
|
PLATFORM=""
|
|
CONFIGURATION=""
|
|
TEST_FRAMEWORK=""
|
|
GOOGLE_INSTALL_ROOT=""
|
|
|
|
while [ $# -gt 0 ]; do
|
|
ARGSTR=$1
|
|
shift
|
|
|
|
if [ ${ARGSTR:0:1} != "-" ]; then
|
|
echo "Unknown argument $ARGSTR"
|
|
echo "Try '$0 -h'"
|
|
exit 1
|
|
fi
|
|
|
|
for (( i=1; i<${#ARGSTR}; i++ )); do
|
|
ARG=${ARGSTR:$i:1}
|
|
case $ARG in
|
|
V )
|
|
VERBOSE=true ;;
|
|
|
|
d )
|
|
SKIP_DOWNLOAD=true ;;
|
|
|
|
e )
|
|
SKIP_EXTRACT=true ;;
|
|
|
|
k )
|
|
KEEP=true ;;
|
|
|
|
u )
|
|
UNITY_BUILD=true ;;
|
|
|
|
v )
|
|
VS_VERSION=$1
|
|
shift ;;
|
|
|
|
n )
|
|
NMAKE=true ;;
|
|
|
|
p )
|
|
PLATFORM=$1
|
|
shift ;;
|
|
|
|
c )
|
|
CONFIGURATION=$1
|
|
shift ;;
|
|
|
|
t )
|
|
TEST_FRAMEWORK=true ;;
|
|
|
|
h )
|
|
cat <<EOF
|
|
Usage: $0 [-cdehkpuvV]
|
|
Options:
|
|
-c <Release/Debug>
|
|
Set the configuration, can also be set with environment variable CONFIGURATION.
|
|
-d
|
|
Skip checking the downloads.
|
|
-e
|
|
Skip extracting dependencies.
|
|
-h
|
|
Show this message.
|
|
-k
|
|
Keep the old build directory, default is to delete it.
|
|
-p <Win32/Win64>
|
|
Set the build platform, can also be set with environment variable PLATFORM.
|
|
-t
|
|
Build unit tests / Google test
|
|
-u
|
|
Configure for unity builds.
|
|
-v <2013/2015/2017>
|
|
Choose the Visual Studio version to use.
|
|
-n
|
|
Produce NMake makefiles instead of a Visual Studio solution.
|
|
-V
|
|
Run verbosely
|
|
EOF
|
|
exit 0
|
|
;;
|
|
|
|
* )
|
|
echo "Unknown argument $ARG."
|
|
echo "Try '$0 -h'"
|
|
exit 1 ;;
|
|
esac
|
|
done
|
|
done
|
|
|
|
if [ -n "$NMAKE" ]; then
|
|
command -v nmake -? >/dev/null 2>&1 || { echo "Error: nmake (NMake) is not on the path. Make sure you have the necessary environment variables set for command-line C++ development (for example, by starting from a Developer Command Prompt)."; exit 1; }
|
|
fi
|
|
|
|
if [ -z $VERBOSE ]; then
|
|
STRIP="> /dev/null 2>&1"
|
|
fi
|
|
|
|
if [ -z $APPVEYOR ]; then
|
|
echo "Running prebuild outside of Appveyor."
|
|
|
|
DIR=$(echo "$0" | sed "s,\\\\,/,g" | sed "s,\(.\):,/\\1,")
|
|
cd $(dirname "$DIR")/..
|
|
else
|
|
echo "Running prebuild in Appveyor."
|
|
|
|
cd "$APPVEYOR_BUILD_FOLDER"
|
|
fi
|
|
|
|
run_cmd() {
|
|
CMD="$1"
|
|
shift
|
|
|
|
if [ -z $VERBOSE ]; then
|
|
eval $CMD $@ > output.log 2>&1
|
|
RET=$?
|
|
|
|
if [ $RET -ne 0 ]; then
|
|
if [ -z $APPVEYOR ]; then
|
|
echo "Command $CMD failed, output can be found in $(real_pwd)/output.log"
|
|
else
|
|
echo
|
|
echo "Command $CMD failed;"
|
|
cat output.log
|
|
fi
|
|
else
|
|
rm output.log
|
|
fi
|
|
|
|
return $RET
|
|
else
|
|
eval $CMD $@
|
|
return $?
|
|
fi
|
|
}
|
|
|
|
download() {
|
|
if [ $# -lt 3 ]; then
|
|
echo "Invalid parameters to download."
|
|
return 1
|
|
fi
|
|
|
|
NAME=$1
|
|
shift
|
|
|
|
echo "$NAME..."
|
|
|
|
while [ $# -gt 1 ]; do
|
|
URL=$1
|
|
FILE=$2
|
|
shift
|
|
shift
|
|
|
|
if ! [ -f $FILE ]; then
|
|
printf " Downloading $FILE... "
|
|
|
|
if [ -z $VERBOSE ]; then
|
|
curl --silent --retry 10 -kLy 5 -o $FILE $URL
|
|
RET=$?
|
|
else
|
|
curl --retry 10 -kLy 5 -o $FILE $URL
|
|
RET=$?
|
|
fi
|
|
|
|
if [ $RET -ne 0 ]; then
|
|
echo "Failed!"
|
|
else
|
|
echo "Done."
|
|
fi
|
|
else
|
|
echo " $FILE exists, skipping."
|
|
fi
|
|
done
|
|
|
|
if [ $# -ne 0 ]; then
|
|
echo "Missing parameter."
|
|
fi
|
|
}
|
|
|
|
real_pwd() {
|
|
if type cygpath >/dev/null 2>&1; then
|
|
cygpath -am "$PWD"
|
|
else
|
|
pwd # not git bash, Cygwin or the like
|
|
fi
|
|
}
|
|
|
|
CMAKE_OPTS=""
|
|
add_cmake_opts() {
|
|
CMAKE_OPTS="$CMAKE_OPTS $@"
|
|
}
|
|
|
|
RUNTIME_DLLS=""
|
|
add_runtime_dlls() {
|
|
RUNTIME_DLLS="$RUNTIME_DLLS $@"
|
|
}
|
|
|
|
OSG_PLUGINS=""
|
|
add_osg_dlls() {
|
|
OSG_PLUGINS="$OSG_PLUGINS $@"
|
|
}
|
|
|
|
QT_PLATFORMS=""
|
|
add_qt_platform_dlls() {
|
|
QT_PLATFORMS="$QT_PLATFORMS $@"
|
|
}
|
|
|
|
if [ -z $PLATFORM ]; then
|
|
PLATFORM="$(uname -m)"
|
|
fi
|
|
|
|
if [ -z $CONFIGURATION ]; then
|
|
CONFIGURATION="Debug"
|
|
fi
|
|
|
|
if [ -z $VS_VERSION ]; then
|
|
VS_VERSION="2013"
|
|
fi
|
|
|
|
case $VS_VERSION in
|
|
15|15.0|2017 )
|
|
GENERATOR="Visual Studio 15 2017"
|
|
TOOLSET="vc141"
|
|
MSVC_REAL_VER="15"
|
|
MSVC_VER="14.1"
|
|
MSVC_YEAR="2015"
|
|
MSVC_DISPLAY_YEAR="2017"
|
|
;;
|
|
|
|
14|14.0|2015 )
|
|
GENERATOR="Visual Studio 14 2015"
|
|
TOOLSET="vc140"
|
|
MSVC_REAL_VER="14"
|
|
MSVC_VER="14.0"
|
|
MSVC_YEAR="2015"
|
|
MSVC_DISPLAY_YEAR="2015"
|
|
;;
|
|
|
|
12|12.0|2013 )
|
|
GENERATOR="Visual Studio 12 2013"
|
|
TOOLSET="vc120"
|
|
MSVC_REAL_VER="12"
|
|
MSVC_VER="12.0"
|
|
MSVC_YEAR="2013"
|
|
MSVC_DISPLAY_YEAR="2013"
|
|
;;
|
|
esac
|
|
|
|
case $PLATFORM in
|
|
x64|x86_64|x86-64|win64|Win64 )
|
|
ARCHNAME="x86-64"
|
|
ARCHSUFFIX="64"
|
|
BITS="64"
|
|
;;
|
|
|
|
x32|x86|i686|i386|win32|Win32 )
|
|
ARCHNAME="x86"
|
|
ARCHSUFFIX="86"
|
|
BITS="32"
|
|
;;
|
|
|
|
* )
|
|
echo "Unknown platform $PLATFORM."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
case $CONFIGURATION in
|
|
debug|Debug|DEBUG )
|
|
CONFIGURATION=Debug
|
|
BUILD_CONFIG=Debug
|
|
;;
|
|
|
|
release|Release|RELEASE )
|
|
CONFIGURATION=Release
|
|
BUILD_CONFIG=Release
|
|
;;
|
|
|
|
relwithdebinfo|RelWithDebInfo|RELWITHDEBINFO )
|
|
CONFIGURATION=Release
|
|
BUILD_CONFIG=RelWithDebInfo
|
|
;;
|
|
esac
|
|
|
|
if [ ${BITS} -eq 64 ]; then
|
|
GENERATOR="${GENERATOR} Win64"
|
|
fi
|
|
|
|
if [ -n "$NMAKE" ]; then
|
|
GENERATOR="NMake Makefiles"
|
|
fi
|
|
|
|
add_cmake_opts "-G\"$GENERATOR\""
|
|
|
|
if [ -n "$NMAKE" ]; then
|
|
add_cmake_opts "-DCMAKE_BUILD_TYPE=${BUILD_CONFIG}"
|
|
fi
|
|
|
|
if ! [ -z $UNITY_BUILD ]; then
|
|
add_cmake_opts "-DOPENMW_UNITY_BUILD=True"
|
|
fi
|
|
|
|
echo
|
|
echo "==================================="
|
|
echo "Starting prebuild on MSVC${MSVC_DISPLAY_YEAR} WIN${BITS}"
|
|
echo "==================================="
|
|
echo
|
|
|
|
# cd OpenMW/AppVeyor-test
|
|
mkdir -p deps
|
|
cd deps
|
|
|
|
DEPS="$(pwd)"
|
|
|
|
if [ -z $SKIP_DOWNLOAD ]; then
|
|
echo "Downloading dependency packages."
|
|
echo
|
|
|
|
# Boost
|
|
if [ -z $APPVEYOR ]; then
|
|
download "Boost 1.67.0" \
|
|
"https://sourceforge.net/projects/boost/files/boost-binaries/1.67.0/boost_1_67_0-msvc-${MSVC_VER}-${BITS}.exe" \
|
|
"boost-1.67.0-msvc${MSVC_VER}-win${BITS}.exe"
|
|
fi
|
|
|
|
# Bullet
|
|
download "Bullet 2.86" \
|
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
|
"Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z"
|
|
|
|
# FFmpeg
|
|
download "FFmpeg 3.2.4" \
|
|
"https://ffmpeg.zeranoe.com/builds/win${BITS}/shared/ffmpeg-3.2.4-win${BITS}-shared.zip" \
|
|
"ffmpeg-3.2.4-win${BITS}.zip" \
|
|
"https://ffmpeg.zeranoe.com/builds/win${BITS}/dev/ffmpeg-3.2.4-win${BITS}-dev.zip" \
|
|
"ffmpeg-3.2.4-dev-win${BITS}.zip"
|
|
|
|
# MyGUI
|
|
download "MyGUI 3.2.2" \
|
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
|
"MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z"
|
|
|
|
# OpenAL
|
|
download "OpenAL-Soft 1.19.1" \
|
|
"http://openal-soft.org/openal-binaries/openal-soft-1.19.1-bin.zip" \
|
|
"OpenAL-Soft-1.19.1.zip"
|
|
|
|
# OSG
|
|
download "OpenSceneGraph 3.4.1-scrawl" \
|
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" \
|
|
"OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z"
|
|
|
|
# Qt
|
|
if [ -z $APPVEYOR ]; then
|
|
if [ $BITS == "64" ]; then
|
|
QT_SUFFIX="_64"
|
|
else
|
|
QT_SUFFIX=""
|
|
fi
|
|
|
|
download "Qt 5.7.0" \
|
|
"https://download.qt.io/archive/qt/5.7/5.7.0/qt-opensource-windows-x86-msvc${MSVC_YEAR}${QT_SUFFIX}-5.7.0.exe" \
|
|
"qt-5.7.0-msvc${MSVC_YEAR}-win${BITS}.exe" \
|
|
"https://www.lysator.liu.se/~ace/OpenMW/deps/qt-5-install.qs" \
|
|
"qt-5-install.qs"
|
|
fi
|
|
|
|
# SDL2
|
|
download "SDL 2.0.7" \
|
|
"https://www.libsdl.org/release/SDL2-devel-2.0.7-VC.zip" \
|
|
"SDL2-2.0.7.zip"
|
|
|
|
# Google test and mock
|
|
if [ ! -z $TEST_FRAMEWORK ]; then
|
|
echo "Google test 1.8.1..."
|
|
if [ -d googletest ]; then
|
|
printf " Google test exists, skipping."
|
|
else
|
|
git clone -b release-1.8.1 https://github.com/google/googletest.git
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
cd .. #/..
|
|
|
|
# Set up dependencies
|
|
BUILD_DIR="MSVC${MSVC_DISPLAY_YEAR}_${BITS}"
|
|
|
|
if [ -n "$NMAKE" ]; then
|
|
BUILD_DIR="${BUILD_DIR}_NMake_${BUILD_CONFIG}"
|
|
fi
|
|
|
|
if [ -z $KEEP ]; then
|
|
echo
|
|
echo "(Re)Creating build directory."
|
|
|
|
rm -rf "$BUILD_DIR"
|
|
fi
|
|
|
|
mkdir -p "${BUILD_DIR}/deps"
|
|
cd "${BUILD_DIR}/deps"
|
|
|
|
DEPS_INSTALL="$(pwd)"
|
|
cd $DEPS
|
|
|
|
echo
|
|
echo "Extracting dependencies, this might take a while..."
|
|
echo "---------------------------------------------------"
|
|
echo
|
|
|
|
|
|
# Boost
|
|
if [ -z $APPVEYOR ]; then
|
|
printf "Boost 1.67.0... "
|
|
else
|
|
if [ "${MSVC_VER}" -eq 12.0 ]; then
|
|
printf "Boost 1.58.0 AppVeyor... "
|
|
else
|
|
printf "Boost 1.67.0 AppVeyor... "
|
|
fi
|
|
fi
|
|
{
|
|
if [ -z $APPVEYOR ]; then
|
|
cd $DEPS_INSTALL
|
|
|
|
BOOST_SDK="$(real_pwd)/Boost"
|
|
|
|
# Boost's installer is still based on ms-dos API that doesn't support larger than 260 char path names
|
|
# We work around this by installing to root of the current working drive and then move it to our deps
|
|
# get the current working drive's root, we'll install to that temporarily
|
|
CWD_DRIVE_ROOT="$(powershell -command '(get-location).Drive.Root')Boost_temp"
|
|
CWD_DRIVE_ROOT_BASH=$(echo "$CWD_DRIVE_ROOT" | sed "s,\\\\,/,g" | sed "s,\(.\):,/\\1,")
|
|
if [ -d CWD_DRIVE_ROOT_BASH ]; then
|
|
printf "Cannot continue, ${CWD_DRIVE_ROOT_BASH} aka ${CWD_DRIVE_ROOT} already exists. Please remove before re-running. ";
|
|
exit 1;
|
|
fi
|
|
|
|
if [ -d ${BOOST_SDK} ] && grep "BOOST_VERSION 106700" Boost/boost/version.hpp > /dev/null; then
|
|
printf "Exists. "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf Boost
|
|
CI_EXTRA_INNO_OPTIONS=""
|
|
[ -n "$CI" ] && CI_EXTRA_INNO_OPTIONS="//SUPPRESSMSGBOXES //LOG='boost_install.log'"
|
|
"${DEPS}/boost-1.67.0-msvc${MSVC_VER}-win${BITS}.exe" //DIR="${CWD_DRIVE_ROOT}" //VERYSILENT //NORESTART ${CI_EXTRA_INNO_OPTIONS}
|
|
mv "${CWD_DRIVE_ROOT_BASH}" "${BOOST_SDK}"
|
|
fi
|
|
add_cmake_opts -DBOOST_ROOT="$BOOST_SDK" \
|
|
-DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}"
|
|
add_cmake_opts -DBoost_COMPILER="-${TOOLSET}"
|
|
echo Done.
|
|
else
|
|
# Appveyor unstable has all the boost we need already
|
|
if [ $MSVC_REAL_VER -eq 12 ]; then
|
|
BOOST_SDK="c:/Libraries/boost_1_58_0"
|
|
else
|
|
BOOST_SDK="c:/Libraries/boost_1_67_0"
|
|
fi
|
|
if [ $MSVC_REAL_VER -eq 15 ]; then
|
|
LIB_SUFFIX="1"
|
|
else
|
|
LIB_SUFFIX="0"
|
|
fi
|
|
|
|
add_cmake_opts -DBOOST_ROOT="$BOOST_SDK" \
|
|
-DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}.${LIB_SUFFIX}"
|
|
add_cmake_opts -DBoost_COMPILER="-${TOOLSET}"
|
|
|
|
echo Done.
|
|
fi
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# Bullet
|
|
printf "Bullet 2.86... "
|
|
{
|
|
cd $DEPS_INSTALL
|
|
if [ -d Bullet ]; then
|
|
printf -- "Exists. (No version checking) "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf Bullet
|
|
eval 7z x -y "${DEPS}/Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
|
|
mv "Bullet-2.86-msvc${MSVC_YEAR}-win${BITS}" Bullet
|
|
fi
|
|
export BULLET_ROOT="$(real_pwd)/Bullet"
|
|
echo Done.
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# FFmpeg
|
|
printf "FFmpeg 3.2.4... "
|
|
{
|
|
cd $DEPS_INSTALL
|
|
if [ -d FFmpeg ] && grep "FFmpeg version: 3.2.4" FFmpeg/README.txt > /dev/null; then
|
|
printf "Exists. "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf FFmpeg
|
|
eval 7z x -y "${DEPS}/ffmpeg-3.2.4-win${BITS}.zip" $STRIP
|
|
eval 7z x -y "${DEPS}/ffmpeg-3.2.4-dev-win${BITS}.zip" $STRIP
|
|
mv "ffmpeg-3.2.4-win${BITS}-shared" FFmpeg
|
|
cp -r "ffmpeg-3.2.4-win${BITS}-dev/"* FFmpeg/
|
|
rm -rf "ffmpeg-3.2.4-win${BITS}-dev"
|
|
fi
|
|
export FFMPEG_HOME="$(real_pwd)/FFmpeg"
|
|
add_runtime_dlls "$(pwd)/FFmpeg/bin/"{avcodec-57,avformat-57,avutil-55,swresample-2,swscale-4}.dll
|
|
if [ $BITS -eq 32 ]; then
|
|
add_cmake_opts "-DCMAKE_EXE_LINKER_FLAGS=\"/machine:X86 /safeseh:no\""
|
|
fi
|
|
echo Done.
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# MyGUI
|
|
printf "MyGUI 3.2.2... "
|
|
{
|
|
cd $DEPS_INSTALL
|
|
if [ -d MyGUI ] && \
|
|
grep "MYGUI_VERSION_MAJOR 3" MyGUI/include/MYGUI/MyGUI_Prerequest.h > /dev/null && \
|
|
grep "MYGUI_VERSION_MINOR 2" MyGUI/include/MYGUI/MyGUI_Prerequest.h > /dev/null && \
|
|
grep "MYGUI_VERSION_PATCH 2" MyGUI/include/MYGUI/MyGUI_Prerequest.h > /dev/null
|
|
then
|
|
printf "Exists. "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf MyGUI
|
|
eval 7z x -y "${DEPS}/MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
|
|
mv "MyGUI-3.2.2-msvc${MSVC_YEAR}-win${BITS}" MyGUI
|
|
fi
|
|
export MYGUI_HOME="$(real_pwd)/MyGUI"
|
|
if [ $CONFIGURATION == "Debug" ]; then
|
|
SUFFIX="_d"
|
|
else
|
|
SUFFIX=""
|
|
fi
|
|
add_runtime_dlls "$(pwd)/MyGUI/bin/${CONFIGURATION}/MyGUIEngine${SUFFIX}.dll"
|
|
echo Done.
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# OpenAL
|
|
printf "OpenAL-Soft 1.19.1... "
|
|
{
|
|
if [ -d openal-soft-1.19.1-bin ]; then
|
|
printf "Exists. "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf openal-soft-1.19.1-bin
|
|
eval 7z x -y OpenAL-Soft-1.19.1.zip $STRIP
|
|
fi
|
|
OPENAL_SDK="$(real_pwd)/openal-soft-1.19.1-bin"
|
|
add_cmake_opts -DOPENAL_INCLUDE_DIR="${OPENAL_SDK}/include/AL" \
|
|
-DOPENAL_LIBRARY="${OPENAL_SDK}/libs/Win${BITS}/OpenAL32.lib"
|
|
add_runtime_dlls "$(pwd)/openal-soft-1.19.1-bin/bin/WIN${BITS}/soft_oal.dll:OpenAL32.dll"
|
|
echo Done.
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# OSG
|
|
printf "OSG 3.4.1-scrawl... "
|
|
{
|
|
cd $DEPS_INSTALL
|
|
if [ -d OSG ] && \
|
|
grep "OPENSCENEGRAPH_MAJOR_VERSION 3" OSG/include/osg/Version > /dev/null && \
|
|
grep "OPENSCENEGRAPH_MINOR_VERSION 4" OSG/include/osg/Version > /dev/null && \
|
|
grep "OPENSCENEGRAPH_PATCH_VERSION 1" OSG/include/osg/Version > /dev/null
|
|
then
|
|
printf "Exists. "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf OSG
|
|
eval 7z x -y "${DEPS}/OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP
|
|
mv "OSG-3.4.1-scrawl-msvc${MSVC_YEAR}-win${BITS}" OSG
|
|
fi
|
|
OSG_SDK="$(real_pwd)/OSG"
|
|
add_cmake_opts -DOSG_DIR="$OSG_SDK"
|
|
if [ $CONFIGURATION == "Debug" ]; then
|
|
SUFFIX="d"
|
|
else
|
|
SUFFIX=""
|
|
fi
|
|
add_runtime_dlls "$(pwd)/OSG/bin/"{OpenThreads,zlib,libpng*}${SUFFIX}.dll \
|
|
"$(pwd)/OSG/bin/osg"{,Animation,DB,FX,GA,Particle,Text,Util,Viewer,Shadow}${SUFFIX}.dll
|
|
add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.1/osgdb_"{bmp,dds,freetype,jpeg,osg,png,tga}${SUFFIX}.dll
|
|
add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.1/osgdb_serializers_osg"{,animation,fx,ga,particle,text,util,viewer,shadow}${SUFFIX}.dll
|
|
echo Done.
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# Qt
|
|
if [ -z $APPVEYOR ]; then
|
|
printf "Qt 5.7.0... "
|
|
else
|
|
printf "Qt 5.10 AppVeyor... "
|
|
fi
|
|
{
|
|
if [ $BITS -eq 64 ]; then
|
|
SUFFIX="_64"
|
|
else
|
|
SUFFIX=""
|
|
fi
|
|
if [ -z $APPVEYOR ]; then
|
|
cd $DEPS_INSTALL
|
|
QT_SDK="$(real_pwd)/Qt/5.7/msvc${MSVC_YEAR}${SUFFIX}"
|
|
if [ -d Qt ] && head -n2 Qt/InstallationLog.txt | grep "5.7.0" > /dev/null; then
|
|
printf "Exists. "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf Qt
|
|
cp "${DEPS}/qt-5-install.qs" qt-install.qs
|
|
sed -i "s|INSTALL_DIR|$(real_pwd)/Qt|" qt-install.qs
|
|
sed -i "s/qt.VERSION.winBITS_msvcYEAR/qt.57.win${BITS}_msvc${MSVC_YEAR}${SUFFIX}/" qt-install.qs
|
|
printf -- "(Installation might take a while) "
|
|
"${DEPS}/qt-5.7.0-msvc${MSVC_YEAR}-win${BITS}.exe" --script qt-install.qs --silent
|
|
mv qt-install.qs Qt/
|
|
echo Done.
|
|
printf " Cleaning up extraneous data... "
|
|
rm -r "$(real_pwd)/Qt/"{dist,Docs,Examples,Tools,vcredist,components.xml,MaintenanceTool.dat,MaintenanceTool.exe,MaintenanceTool.ini,network.xml,qt-install.qs}
|
|
fi
|
|
cd $QT_SDK
|
|
add_cmake_opts -DDESIRED_QT_VERSION=5 \
|
|
-DQT_QMAKE_EXECUTABLE="${QT_SDK}/bin/qmake.exe" \
|
|
-DCMAKE_PREFIX_PATH="$QT_SDK"
|
|
if [ $CONFIGURATION == "Debug" ]; then
|
|
SUFFIX="d"
|
|
else
|
|
SUFFIX=""
|
|
fi
|
|
add_runtime_dlls "$(pwd)/bin/Qt5"{Core,Gui,Network,OpenGL,Widgets}${SUFFIX}.dll
|
|
add_qt_platform_dlls "$(pwd)/plugins/platforms/qwindows${SUFFIX}.dll"
|
|
echo Done.
|
|
else
|
|
QT_SDK="C:/Qt/5.10/msvc${MSVC_DISPLAY_YEAR}${SUFFIX}"
|
|
add_cmake_opts -DDESIRED_QT_VERSION=5 \
|
|
-DQT_QMAKE_EXECUTABLE="${QT_SDK}/bin/qmake.exe" \
|
|
-DCMAKE_PREFIX_PATH="$QT_SDK"
|
|
if [ $CONFIGURATION == "Debug" ]; then
|
|
SUFFIX="d"
|
|
else
|
|
SUFFIX=""
|
|
fi
|
|
DIR=$(echo "${QT_SDK}" | sed "s,\\\\,/,g" | sed "s,\(.\):,/\\1,")
|
|
add_runtime_dlls "${DIR}/bin/Qt5"{Core,Gui,Network,OpenGL,Widgets}${SUFFIX}.dll
|
|
add_qt_platform_dlls "${DIR}/plugins/platforms/qwindows${SUFFIX}.dll"
|
|
echo Done.
|
|
fi
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# SDL2
|
|
printf "SDL 2.0.7... "
|
|
{
|
|
if [ -d SDL2-2.0.7 ]; then
|
|
printf "Exists. "
|
|
elif [ -z $SKIP_EXTRACT ]; then
|
|
rm -rf SDL2-2.0.7
|
|
eval 7z x -y SDL2-2.0.7.zip $STRIP
|
|
fi
|
|
export SDL2DIR="$(real_pwd)/SDL2-2.0.7"
|
|
add_runtime_dlls "$(pwd)/SDL2-2.0.7/lib/x${ARCHSUFFIX}/SDL2.dll"
|
|
echo Done.
|
|
}
|
|
cd $DEPS
|
|
echo
|
|
# Google Test and Google Mock
|
|
if [ ! -z $TEST_FRAMEWORK ]; then
|
|
printf "Google test 1.8.1 ..."
|
|
|
|
cd googletest
|
|
if [ ! -d build ]; then
|
|
mkdir build
|
|
fi
|
|
|
|
cd build
|
|
|
|
GOOGLE_INSTALL_ROOT="${DEPS_INSTALL}/GoogleTest"
|
|
if [ $CONFIGURATION == "Debug" ]; then
|
|
DEBUG_SUFFIX="d"
|
|
else
|
|
DEBUG_SUFFIX=""
|
|
fi
|
|
|
|
if [ ! -d $GOOGLE_INSTALL_ROOT ]; then
|
|
|
|
cmake .. -DCMAKE_BUILD_TYPE="${CONFIGURATION}" -DCMAKE_INSTALL_PREFIX="${GOOGLE_INSTALL_ROOT}" -DCMAKE_USE_WIN32_THREADS_INIT=1 -G "${GENERATOR}" -DBUILD_SHARED_LIBS=1
|
|
cmake --build . --config "${CONFIGURATION}"
|
|
cmake --build . --target install --config "${CONFIGURATION}"
|
|
|
|
add_runtime_dlls "${GOOGLE_INSTALL_ROOT}\bin\gtest_main${DEBUG_SUFFIX}.dll"
|
|
add_runtime_dlls "${GOOGLE_INSTALL_ROOT}\bin\gtest${DEBUG_SUFFIX}.dll"
|
|
add_runtime_dlls "${GOOGLE_INSTALL_ROOT}\bin\gmock_main${DEBUG_SUFFIX}.dll"
|
|
add_runtime_dlls "${GOOGLE_INSTALL_ROOT}\bin\gmock${DEBUG_SUFFIX}.dll"
|
|
fi
|
|
|
|
add_cmake_opts -DBUILD_UNITTESTS=yes
|
|
# FindGTest and FindGMock do not work perfectly on Windows
|
|
# but we can help them by telling them everything we know about installation
|
|
add_cmake_opts -DGMOCK_ROOT="$GOOGLE_INSTALL_ROOT"
|
|
add_cmake_opts -DGTEST_ROOT="$GOOGLE_INSTALL_ROOT"
|
|
add_cmake_opts -DGTEST_LIBRARY="$GOOGLE_INSTALL_ROOT/lib/gtest${DEBUG_SUFFIX}.lib"
|
|
add_cmake_opts -DGTEST_MAIN_LIBRARY="$GOOGLE_INSTALL_ROOT/lib/gtest_main${DEBUG_SUFFIX}.lib"
|
|
add_cmake_opts -DGMOCK_LIBRARY="$GOOGLE_INSTALL_ROOT/lib/gmock${DEBUG_SUFFIX}.lib"
|
|
add_cmake_opts -DGMOCK_MAIN_LIBRARY="$GOOGLE_INSTALL_ROOT/lib/gmock_main${DEBUG_SUFFIX}.lib"
|
|
add_cmake_opts -DGTEST_LINKED_AS_SHARED_LIBRARY=True
|
|
echo Done.
|
|
|
|
fi
|
|
|
|
echo
|
|
cd $DEPS_INSTALL/..
|
|
echo
|
|
echo "Setting up OpenMW build..."
|
|
add_cmake_opts -DBUILD_BSATOOL=no \
|
|
-DBUILD_ESMTOOL=no \
|
|
-DBUILD_MYGUI_PLUGIN=no \
|
|
-DOPENMW_MP_BUILD=on
|
|
if [ ! -z $CI ]; then
|
|
case $STEP in
|
|
components )
|
|
echo " Building subproject: Components."
|
|
add_cmake_opts -DBUILD_ESSIMPORTER=no \
|
|
-DBUILD_LAUNCHER=no \
|
|
-DBUILD_MWINIIMPORTER=no \
|
|
-DBUILD_OPENCS=no \
|
|
-DBUILD_OPENMW=no \
|
|
-DBUILD_WIZARD=no
|
|
;;
|
|
openmw )
|
|
echo " Building subproject: OpenMW."
|
|
add_cmake_opts -DBUILD_ESSIMPORTER=no \
|
|
-DBUILD_LAUNCHER=no \
|
|
-DBUILD_MWINIIMPORTER=no \
|
|
-DBUILD_OPENCS=no \
|
|
-DBUILD_WIZARD=no
|
|
;;
|
|
opencs )
|
|
echo " Building subproject: OpenCS."
|
|
add_cmake_opts -DBUILD_ESSIMPORTER=no \
|
|
-DBUILD_LAUNCHER=no \
|
|
-DBUILD_MWINIIMPORTER=no \
|
|
-DBUILD_OPENMW=no \
|
|
-DBUILD_WIZARD=no
|
|
;;
|
|
misc )
|
|
echo " Building subprojects: Misc."
|
|
add_cmake_opts -DBUILD_OPENCS=no \
|
|
-DBUILD_OPENMW=no
|
|
;;
|
|
esac
|
|
fi
|
|
# NOTE: Disable this when/if we want to run test cases
|
|
#if [ -z $CI ]; then
|
|
echo "- Copying Runtime DLLs..."
|
|
DLL_PREFIX=""
|
|
if [ -z $NMAKE ]; then
|
|
mkdir -p $BUILD_CONFIG
|
|
DLL_PREFIX="$BUILD_CONFIG/"
|
|
fi
|
|
for DLL in $RUNTIME_DLLS; do
|
|
TARGET="$(basename "$DLL")"
|
|
if [[ "$DLL" == *":"* ]]; then
|
|
IFS=':'; SPLIT=( ${DLL} ); unset IFS
|
|
DLL=${SPLIT[0]}
|
|
TARGET=${SPLIT[1]}
|
|
fi
|
|
echo " ${TARGET}."
|
|
cp "$DLL" "${DLL_PREFIX}$TARGET"
|
|
done
|
|
echo
|
|
echo "- OSG Plugin DLLs..."
|
|
mkdir -p ${DLL_PREFIX}osgPlugins-3.4.1
|
|
for DLL in $OSG_PLUGINS; do
|
|
echo " $(basename $DLL)."
|
|
cp "$DLL" ${DLL_PREFIX}osgPlugins-3.4.1
|
|
done
|
|
echo
|
|
echo "- Qt Platform DLLs..."
|
|
mkdir -p ${DLL_PREFIX}platforms
|
|
for DLL in $QT_PLATFORMS; do
|
|
echo " $(basename $DLL)"
|
|
cp "$DLL" "${DLL_PREFIX}platforms"
|
|
done
|
|
echo
|
|
#fi
|
|
if [ -z $VERBOSE ]; then
|
|
printf -- "- Configuring... "
|
|
else
|
|
echo "- cmake .. $CMAKE_OPTS"
|
|
fi
|
|
run_cmd cmake .. $CMAKE_OPTS
|
|
RET=$?
|
|
if [ -z $VERBOSE ]; then
|
|
if [ $RET -eq 0 ]; then
|
|
echo Done.
|
|
else
|
|
echo Failed.
|
|
fi
|
|
fi
|
|
exit $RET
|