diff --git a/CI/before_script.msvc.sh b/CI/before_script.msvc.sh index 6ed4365a4..61343c104 100644 --- a/CI/before_script.msvc.sh +++ b/CI/before_script.msvc.sh @@ -1,5 +1,21 @@ #!/bin/bash +set -euo pipefail + +APPVEYOR=${APPVEYOR:-} +CI=${CI:-} +STEP=${STEP:-} + +VERBOSE="" +STRIP="" +SKIP_DOWNLOAD="" +SKIP_EXTRACT="" +KEEP="" +UNITY_BUILD="" +VS_VERSION="" +PLATFORM="" +CONFIGURATION="" + while [ $# -gt 0 ]; do ARGSTR=$1 shift @@ -16,10 +32,6 @@ while [ $# -gt 0 ]; do V ) VERBOSE=true ;; - v ) - VS_VERSION=$1 - shift ;; - d ) SKIP_DOWNLOAD=true ;; @@ -32,6 +44,10 @@ while [ $# -gt 0 ]; do u ) UNITY_BUILD=true ;; + v ) + VS_VERSION=$1 + shift ;; + p ) PLATFORM=$1 shift ;; @@ -78,9 +94,6 @@ done if [ -z $VERBOSE ]; then STRIP="> /dev/null 2>&1" fi -if [ -z $VS_VERSION ]; then - VS_VERSION="2013" -fi if [ -z $APPVEYOR ]; then echo "Running prebuild outside of Appveyor." @@ -90,9 +103,7 @@ if [ -z $APPVEYOR ]; then else echo "Running prebuild in Appveyor." - cd $APPVEYOR_BUILD_FOLDER - VERSION="$(cat README.md | grep Version: | awk '{ print $3; }')-$(git rev-parse --short HEAD)" - appveyor UpdateBuild -Version "$VERSION" > /dev/null & + cd "$APPVEYOR_BUILD_FOLDER" fi run_cmd() { @@ -105,7 +116,7 @@ run_cmd() { if [ $RET -ne 0 ]; then if [ -z $APPVEYOR ]; then - echo "Command $CMD failed, output can be found in `real_pwd`/output.log" + echo "Command $CMD failed, output can be found in $(real_pwd)/output.log" else echo echo "Command $CMD failed;" @@ -184,44 +195,58 @@ add_osg_dlls() { OSG_PLUGINS="$OSG_PLUGINS $@" } +QT_PLATFORMS="" +add_qt_platform_dlls() { + QT_PLATFORMS="$QT_PLATFORMS $@" +} + if [ -z $PLATFORM ]; then - PLATFORM=`uname -m` + PLATFORM="$(uname -m)" fi if [ -z $CONFIGURATION ]; then CONFIGURATION="Debug" fi +if [ -z $VS_VERSION ]; then + VS_VERSION="2013" +fi + case $VS_VERSION in - 14|2015 ) + 14|14.0|2015 ) GENERATOR="Visual Studio 14 2015" XP_TOOLSET="v140_xp" + TOOLSET="v140" + MSVC_VER="14" + MSVC_YEAR="2015" ;; -# 12|2013| - * ) + 12|12.0|2013 ) GENERATOR="Visual Studio 12 2013" XP_TOOLSET="v120_xp" + TOOLSET="v120" + MSVC_VER="12" + MSVC_YEAR="2013" ;; esac case $PLATFORM in x64|x86_64|x86-64|win64|Win64 ) - ARCHNAME=x86-64 - ARCHSUFFIX=64 - BITS=64 + ARCHNAME="x86-64" + ARCHSUFFIX="64" + BITS="64" BASE_OPTS="-G\"$GENERATOR Win64\"" add_cmake_opts "-G\"$GENERATOR Win64\"" ;; x32|x86|i686|i386|win32|Win32 ) - ARCHNAME=x86 - ARCHSUFFIX=86 - BITS=32 + ARCHNAME="x86" + ARCHSUFFIX="86" + BITS="32" - BASE_OPTS="-G\"$GENERATOR\" -T$XP_TOOLSET" - add_cmake_opts "-G\"$GENERATOR\"" -T$XP_TOOLSET + BASE_OPTS="-G\"$GENERATOR\"" + add_cmake_opts "-G\"$GENERATOR\"" ;; * ) @@ -230,35 +255,38 @@ case $PLATFORM in ;; esac -if ! [ -z $UNITY_BUILD ]; then - add_cmake_opts "-DOPENMW_UNITY_BUILD=True" -fi - case $CONFIGURATION in debug|Debug|DEBUG ) CONFIGURATION=Debug + BUILD_CONFIG=Debug ;; release|Release|RELEASE ) CONFIGURATION=Release + BUILD_CONFIG=Release ;; relwithdebinfo|RelWithDebInfo|RELWITHDEBINFO ) - CONFIGURATION=RelWithDebInfo + CONFIGURATION=Release + BUILD_CONFIG=RelWithDebInfo ;; esac +if ! [ -z $UNITY_BUILD ]; then + add_cmake_opts "-DOPENMW_UNITY_BUILD=True" +fi + echo -echo "==========================" -echo "Starting prebuild on win$BITS" -echo "==========================" +echo "===================================" +echo "Starting prebuild on MSVC${MSVC_YEAR} WIN${BITS}" +echo "===================================" echo # cd OpenMW/AppVeyor-test mkdir -p deps cd deps -DEPS="`pwd`" +DEPS="$(pwd)" if [ -z $SKIP_DOWNLOAD ]; then echo "Downloading dependency packages." @@ -266,142 +294,165 @@ if [ -z $SKIP_DOWNLOAD ]; then # Boost if [ -z $APPVEYOR ]; then - download "Boost 1.58.0" \ - http://sourceforge.net/projects/boost/files/boost-binaries/1.58.0/boost_1_58_0-msvc-12.0-$BITS.exe \ - boost-1.58.0-win$BITS.exe + download "Boost 1.61.0" \ + "http://sourceforge.net/projects/boost/files/boost-binaries/1.61.0/boost_1_61_0-msvc-${MSVC_VER}.0-${BITS}.exe" \ + "boost-1.61.0-msvc${MSVC_YEAR}-win${BITS}.exe" fi # Bullet - download "Bullet 2.83.5" \ - http://www.lysator.liu.se/~ace/OpenMW/deps/Bullet-2.83.5-win$BITS.7z \ - Bullet-2.83.5-win$BITS.7z + download "Bullet 2.83.7" \ + "http://www.lysator.liu.se/~ace/OpenMW/deps/Bullet-2.83.7-msvc${MSVC_YEAR}-win${BITS}.7z" \ + "Bullet-2.83.7-msvc${MSVC_YEAR}-win${BITS}.7z" # FFmpeg - download "FFmpeg 2.5.2" \ - http://ffmpeg.zeranoe.com/builds/win$BITS/shared/ffmpeg-2.5.2-win$BITS-shared.7z \ - ffmpeg$BITS-2.5.2.7z \ - http://ffmpeg.zeranoe.com/builds/win$BITS/dev/ffmpeg-2.5.2-win$BITS-dev.7z \ - ffmpeg$BITS-2.5.2-dev.7z + download "FFmpeg 3.0.1" \ + "http://ffmpeg.zeranoe.com/builds/win${BITS}/shared/ffmpeg-3.0.1-win${BITS}-shared.7z" \ + "ffmpeg-3.0.1-win${BITS}.7z" \ + "http://ffmpeg.zeranoe.com/builds/win${BITS}/dev/ffmpeg-3.0.1-win${BITS}-dev.7z" \ + "ffmpeg-3.0.1-dev-win${BITS}.7z" # MyGUI - download "MyGUI 3.2.2" \ - http://www.lysator.liu.se/~ace/OpenMW/deps/MyGUI-3.2.2-win$BITS.7z \ - MyGUI-3.2.2-win$BITS.7z + download "MyGUI 3.2.3-git" \ + "http://www.lysator.liu.se/~ace/OpenMW/deps/MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}.7z" \ + "MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}.7z" # OpenAL - download "OpenAL-Soft 1.16.0" \ - http://kcat.strangesoft.net/openal-binaries/openal-soft-1.16.0-bin.zip \ - OpenAL-Soft-1.16.0.zip + download "OpenAL-Soft 1.17.2" \ + "http://kcat.strangesoft.net/openal-binaries/openal-soft-1.17.2-bin.zip" \ + "OpenAL-Soft-1.17.2.zip" # OSG - download "OpenSceneGraph 3.3.8" \ - http://www.lysator.liu.se/~ace/OpenMW/deps/OSG-3.3.8-win$BITS.7z \ - OSG-3.3.8-win$BITS.7z + download "OpenSceneGraph 3.4.0-scrawl" \ + "http://www.lysator.liu.se/~ace/OpenMW/deps/OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" \ + "OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" # Qt if [ -z $APPVEYOR ]; then - download "Qt 4.8.6" \ - http://sourceforge.net/projects/qt64ng/files/qt/$ARCHNAME/4.8.6/msvc2013/qt-4.8.6-x$ARCHSUFFIX-msvc2013.7z \ - qt$BITS-4.8.6.7z + if [ $BITS == "64" ]; then + QT_SUFFIX="_64" + else + QT_SUFFIX="" + fi + + download "Qt 5.7.2" \ + "http://download.qt.io/official_releases/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" \ + "http://www.lysator.liu.se/~ace/OpenMW/deps/qt-5-install.qs" \ + "qt-5-install.qs" fi # SDL2 - download "SDL 2.0.3" \ - https://www.libsdl.org/release/SDL2-devel-2.0.3-VC.zip \ - SDL2-2.0.3.zip + download "SDL 2.0.4" \ + "https://www.libsdl.org/release/SDL2-devel-2.0.4-VC.zip" \ + "SDL2-2.0.4.zip" fi cd .. #/.. # Set up dependencies +BUILD_DIR="MSVC${MSVC_YEAR}_${BITS}" if [ -z $KEEP ]; then echo - printf "Preparing build directory... " + echo "(Re)Creating build directory." - rm -rf Build_$BITS - mkdir -p Build_$BITS/deps - - echo Done. + rm -rf "$BUILD_DIR" fi -mkdir -p Build_$BITS/deps -cd Build_$BITS/deps -DEPS_INSTALL=`pwd` +mkdir -p "${BUILD_DIR}/deps" +cd "${BUILD_DIR}/deps" + +DEPS_INSTALL="$(pwd)" cd $DEPS echo -echo "Extracting dependencies..." +echo "Extracting dependencies, this might take a while..." +echo "---------------------------------------------------" +echo # Boost -printf "Boost 1.58.0... " +if [ -z $APPVEYOR ]; then + printf "Boost 1.61.0... " +else + if [ $MSVC_VER -eq 12 ]; then + printf "Boost 1.58.0 AppVeyor... " + else + printf "Boost 1.60.0 AppVeyor... " + fi +fi { if [ -z $APPVEYOR ]; then cd $DEPS_INSTALL - BOOST_SDK="`real_pwd`/Boost" + BOOST_SDK="$(real_pwd)/Boost" - if [ -d Boost ] && grep "BOOST_VERSION 105800" Boost/boost/version.hpp > /dev/null; then + if [ -d Boost ] && grep "BOOST_VERSION 106100" Boost/boost/version.hpp > /dev/null; then printf "Exists. " elif [ -z $SKIP_EXTRACT ]; then rm -rf Boost - $DEPS/boost-1.58.0-win$BITS.exe //dir="$(echo $BOOST_SDK | sed s,/,\\\\,g)" //verysilent + "${DEPS}/boost-1.61.0-msvc${MSVC_YEAR}-win${BITS}.exe" //dir="$(echo $BOOST_SDK | sed s,/,\\\\,g)" //verysilent fi add_cmake_opts -DBOOST_ROOT="$BOOST_SDK" \ - -DBOOST_LIBRARYDIR="$BOOST_SDK/lib$BITS-msvc-12.0" + -DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}.0" echo Done. else # Appveyor unstable has all the boost we need already - BOOST_SDK="c:/Libraries/boost" + if [ $MSVC_VER -eq 12 ]; then + BOOST_SDK="c:/Libraries/boost_1_58_0" + else + BOOST_SDK="c:/Libraries/boost_1_60_0" + fi add_cmake_opts -DBOOST_ROOT="$BOOST_SDK" \ - -DBOOST_LIBRARYDIR="$BOOST_SDK/lib$BITS-msvc-12.0" + -DBOOST_LIBRARYDIR="${BOOST_SDK}/lib${BITS}-msvc-${MSVC_VER}.0" - echo AppVeyor. + echo Done. fi } cd $DEPS +echo # Bullet -printf "Bullet 2.83.5... " +printf "Bullet 2.83.7... " { cd $DEPS_INSTALL if [ -d Bullet ]; then - printf "Exists. (No version checking) " + printf -- "Exists. (No version checking) " elif [ -z $SKIP_EXTRACT ]; then rm -rf Bullet - eval 7z x -y $DEPS/Bullet-2.83.5-win$BITS.7z $STRIP - mv Bullet-2.83.5-win$BITS Bullet + eval 7z x -y "${DEPS}/Bullet-2.83.7-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP + mv "Bullet-2.83.7-msvc${MSVC_YEAR}-win${BITS}" Bullet fi - export BULLET_ROOT="`real_pwd`/Bullet" + export BULLET_ROOT="$(real_pwd)/Bullet" echo Done. } cd $DEPS +echo # FFmpeg -printf "FFmpeg 2.5.2... " +printf "FFmpeg 3.0.1... " { cd $DEPS_INSTALL - if [ -d FFmpeg ] && grep "FFmpeg version: 2.5.2" FFmpeg/README.txt > /dev/null; then + if [ -d FFmpeg ] && grep "FFmpeg version: 3.0.1" FFmpeg/README.txt > /dev/null; then printf "Exists. " elif [ -z $SKIP_EXTRACT ]; then rm -rf FFmpeg - eval 7z x -y $DEPS/ffmpeg$BITS-2.5.2.7z $STRIP - eval 7z x -y $DEPS/ffmpeg$BITS-2.5.2-dev.7z $STRIP + eval 7z x -y "${DEPS}/ffmpeg-3.0.1-win${BITS}.7z" $STRIP + eval 7z x -y "${DEPS}/ffmpeg-3.0.1-dev-win${BITS}.7z" $STRIP - mv ffmpeg-2.5.2-win$BITS-shared FFmpeg - cp -r ffmpeg-2.5.2-win$BITS-dev/* FFmpeg/ - rm -rf ffmpeg-2.5.2-win$BITS-dev + mv "ffmpeg-3.0.1-win${BITS}-shared" FFmpeg + cp -r "ffmpeg-3.0.1-win${BITS}-dev/"* FFmpeg/ + rm -rf "ffmpeg-3.0.1-win${BITS}-dev" fi - export FFMPEG_HOME="`real_pwd`/FFmpeg" - add_runtime_dlls `pwd`/FFmpeg/bin/{avcodec-56,avformat-56,avutil-54,swresample-1,swscale-3}.dll + 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\"" @@ -410,74 +461,77 @@ printf "FFmpeg 2.5.2... " echo Done. } cd $DEPS +echo # MyGUI -printf "MyGUI 3.2.2... " +printf "MyGUI 3.2.3-git... " { 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 + grep "MYGUI_VERSION_PATCH 3" 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-win$BITS.7z $STRIP - mv MyGUI-3.2.2-win$BITS MyGUI + eval 7z x -y "${DEPS}/MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP + mv "MyGUI-3.2.3-git-msvc${MSVC_YEAR}-win${BITS}" MyGUI fi - export MYGUI_HOME="`real_pwd`/MyGUI" + 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 + add_runtime_dlls "$(pwd)/MyGUI/bin/${CONFIGURATION}/MyGUIEngine${SUFFIX}.dll" echo Done. } cd $DEPS +echo # OpenAL -printf "OpenAL-Soft 1.16.0... " +printf "OpenAL-Soft 1.17.2... " { - if [ -d openal-soft-1.16.0-bin ]; then + if [ -d openal-soft-1.17.2-bin ]; then printf "Exists. " elif [ -z $SKIP_EXTRACT ]; then - rm -rf openal-soft-1.16.0-bin - eval 7z x -y OpenAL-Soft-1.16.0.zip $STRIP + rm -rf openal-soft-1.17.2-bin + eval 7z x -y OpenAL-Soft-1.17.2.zip $STRIP fi - OPENAL_SDK="`real_pwd`/openal-soft-1.16.0-bin" + OPENAL_SDK="$(real_pwd)/openal-soft-1.17.2-bin" - add_cmake_opts -DOPENAL_INCLUDE_DIR="$OPENAL_SDK/include/AL" \ - -DOPENAL_LIBRARY="$OPENAL_SDK/libs/Win$BITS/OpenAL32.lib" + add_cmake_opts -DOPENAL_INCLUDE_DIR="${OPENAL_SDK}/include/AL" \ + -DOPENAL_LIBRARY="${OPENAL_SDK}/libs/Win${BITS}/OpenAL32.lib" echo Done. } cd $DEPS +echo # OSG -printf "OSG 3.3.8... " +printf "OSG 3.4.0-scrawl... " { cd $DEPS_INSTALL if [ -d OSG ] && \ grep "OPENSCENEGRAPH_MAJOR_VERSION 3" OSG/include/osg/Version > /dev/null && \ - grep "OPENSCENEGRAPH_MINOR_VERSION 3" OSG/include/osg/Version > /dev/null && \ - grep "OPENSCENEGRAPH_PATCH_VERSION 8" OSG/include/osg/Version > /dev/null + grep "OPENSCENEGRAPH_MINOR_VERSION 4" OSG/include/osg/Version > /dev/null && \ + grep "OPENSCENEGRAPH_PATCH_VERSION 0" OSG/include/osg/Version > /dev/null then printf "Exists. " elif [ -z $SKIP_EXTRACT ]; then rm -rf OSG - eval 7z x -y $DEPS/OSG-3.3.8-win$BITS.7z $STRIP - mv OSG-3.3.8-win$BITS OSG + eval 7z x -y "${DEPS}/OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}.7z" $STRIP + mv "OSG-3.4.0-scrawl-msvc${MSVC_YEAR}-win${BITS}" OSG fi - OSG_SDK="`real_pwd`/OSG" + OSG_SDK="$(real_pwd)/OSG" add_cmake_opts -DOSG_DIR="$OSG_SDK" @@ -487,82 +541,101 @@ printf "OSG 3.3.8... " SUFFIX="" fi - add_runtime_dlls `pwd`/OSG/bin/{OpenThreads,zlib}$SUFFIX.dll \ - `pwd`/OSG/bin/osg{,Animation,DB,FX,GA,Particle,Qt,Text,Util,Viewer}$SUFFIX.dll + add_runtime_dlls "$(pwd)/OSG/bin/"{OpenThreads,zlib,libpng*}${SUFFIX}.dll \ + "$(pwd)/OSG/bin/osg"{,Animation,DB,FX,GA,Particle,Text,Util,Viewer}${SUFFIX}.dll - add_osg_dlls `pwd`/OSG/bin/osgPlugins-3.3.8/osgdb_{bmp,dds,gif,jpeg,png,tga}$SUFFIX.dll + add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.0/osgdb_"{bmp,dds,jpeg,osg,png,tga}${SUFFIX}.dll + add_osg_dlls "$(pwd)/OSG/bin/osgPlugins-3.4.0/osgdb_serializers_osg"{,animation,fx,ga,particle,text,util,viewer}${SUFFIX}.dll echo Done. } cd $DEPS +echo # Qt if [ -z $APPVEYOR ]; then - printf "Qt 4.8.6... " + printf "Qt 5.7.0... " else - printf "Qt 5.4... " + printf "Qt 5.7 AppVeyor... " fi { + if [ $BITS -eq 64 ]; then + SUFFIX="_64" + else + SUFFIX="" + fi + if [ -z $APPVEYOR ]; then cd $DEPS_INSTALL - QT_SDK="`real_pwd`/Qt" + QT_SDK="$(real_pwd)/Qt/5.7/msvc${MSVC_YEAR}${SUFFIX}" - if [ -d Qt ] && head -n2 Qt/BUILDINFO.txt | grep "4.8.6" > /dev/null; then + 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 - eval 7z x -y $DEPS/qt$BITS-4.8.6.7z $STRIP - mv qt-4.8.6-* Qt - cd Qt - eval ./qtbinpatcher.exe $STRIP + 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=4 \ - -DQT_QMAKE_EXECUTABLE="$QT_SDK/bin/qmake.exe" + 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="d4" + SUFFIX="d" else - SUFFIX="4" + SUFFIX="" fi - add_runtime_dlls `pwd`/bin/Qt{Core,Gui,Network,OpenGL}$SUFFIX.dll + add_runtime_dlls "$(pwd)/bin/lib"{EGL,GLESv2}${SUFFIX}.dll \ + "$(pwd)/bin/Qt5"{Core,Gui,Network,OpenGL,Widgets}${SUFFIX}.dll + add_qt_platform_dlls "$(pwd)/plugins/platforms/qwindows${SUFFIX}.dll" echo Done. else - if [ $BITS -eq 32 ]; then - QT_SDK="C:/Qt/5.4/msvc2013_opengl" - else - QT_SDK="C:/Qt/5.4/msvc2013_64_opengl" - fi + QT_SDK="C:/Qt/5.7/msvc${MSVC_YEAR}${SUFFIX}" add_cmake_opts -DDESIRED_QT_VERSION=5 \ - -DQT_QMAKE_EXECUTABLE="$QT_SDK/bin/qmake.exe" \ + -DQT_QMAKE_EXECUTABLE="${QT_SDK}/bin/qmake.exe" \ -DCMAKE_PREFIX_PATH="$QT_SDK" - echo AppVeyor. + echo Done. fi } cd $DEPS +echo # SDL2 -printf "SDL 2.0.3... " +printf "SDL 2.0.4... " { - if [ -d SDL2-2.0.3 ]; then + if [ -d SDL2-2.0.4 ]; then printf "Exists. " elif [ -z $SKIP_EXTRACT ]; then - rm -rf SDL2-2.0.3 - eval 7z x -y SDL2-2.0.3.zip $STRIP + rm -rf SDL2-2.0.4 + eval 7z x -y SDL2-2.0.4.zip $STRIP fi - export SDL2DIR="`real_pwd`/SDL2-2.0.3" + export SDL2DIR="$(real_pwd)/SDL2-2.0.4" - add_runtime_dlls $SDL2DIR/lib/x$ARCHSUFFIX/SDL2.dll + add_runtime_dlls "${SDL2DIR}/lib/x${ARCHSUFFIX}/SDL2.dll" echo Done. } +echo cd $DEPS_INSTALL/.. @@ -575,12 +648,10 @@ add_cmake_opts -DBUILD_BSATOOL=no \ -DBUILD_MYGUI_PLUGIN=no \ -DOPENMW_MP_BUILD=on -if [ -z $CI ]; then - echo " (Outside of CI, doing full build.)" -else +if [ ! -z $CI ]; then case $STEP in components ) - echo " Subproject: Components." + echo " Building subproject: Components." add_cmake_opts -DBUILD_ESSIMPORTER=no \ -DBUILD_LAUNCHER=no \ -DBUILD_MWINIIMPORTER=no \ @@ -588,77 +659,90 @@ else -DBUILD_OPENMW=no \ -DBUILD_WIZARD=no ;; + openmw ) - echo " Subproject: 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 " Subproject: 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 " Subproject: Misc." + echo " Building subprojects: Misc." add_cmake_opts -DBUILD_OPENCS=no \ -DBUILD_OPENMW=no ;; - * ) - echo " Building everything." - ;; esac fi +# NOTE: Disable this when/if we want to run test cases +if [ -z $CI ]; then + echo "- Copying Runtime DLLs..." + mkdir -p $BUILD_CONFIG + for DLL in $RUNTIME_DLLS; do + echo " $(basename $DLL)." + cp "$DLL" $BUILD_CONFIG/ + done + echo + + echo "- OSG Plugin DLLs..." + mkdir -p $BUILD_CONFIG/osgPlugins-3.4.0 + for DLL in $OSG_PLUGINS; do + echo " $(basename $DLL)." + cp "$DLL" $BUILD_CONFIG/osgPlugins-3.4.0 + done + echo + + echo "- Qt Platform DLLs..." + mkdir -p ${BUILD_CONFIG}/platforms + for DLL in $QT_PLATFORMS; do + echo " $(basename $DLL)" + cp "$DLL" "${BUILD_CONFIG}/platforms" + done + echo +fi + if [ -z $VERBOSE ]; then - printf " Configuring... " + printf -- "- Configuring... " else - echo " cmake .. $CMAKE_OPTS" + 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 + if [ $RET -eq 0 ]; then + echo Done. + else + echo Failed. + fi fi -echo - -# NOTE: Disable this when/if we want to run test cases if [ -z $CI ]; then - echo "Copying Runtime DLLs..." - mkdir -p $CONFIGURATION - for DLL in $RUNTIME_DLLS; do - echo " `basename $DLL`." - cp "$DLL" $CONFIGURATION/ - done - echo "OSG Plugin DLLs..." - mkdir -p $CONFIGURATION/osgPlugins-3.3.8 - for DLL in $OSG_PLUGINS; do - echo " `basename $DLL`." - cp "$DLL" $CONFIGURATION/osgPlugins-3.3.8 - done + echo "- Copying Runtime Resources/Config Files" + echo " gamecontrollerdb.txt" + cp gamecontrollerdb.txt $BUILD_CONFIG/gamecontrollerdb.txt + echo " openmw.cfg" + cp openmw.cfg.install $BUILD_CONFIG/openmw.cfg + echo " openmw-cs.cfg" + cp openmw-cs.cfg $BUILD_CONFIG/openmw-cs.cfg + echo " settings-default.cfg" + cp settings-default.cfg $BUILD_CONFIG/settings-default.cfg + echo " resources/" + cp -r resources $BUILD_CONFIG/resources echo - - echo "Copying Runtime Resources/Config Files" - - echo " gamecontrollerdb.txt" - cp $CONFIGURATION/../gamecontrollerdb.txt $CONFIGURATION/gamecontrollerdb.txt - echo " openmw.cfg" - cp $CONFIGURATION/../openmw.cfg.install $CONFIGURATION/openmw.cfg - echo " openmw-cs.cfg" - cp $CONFIGURATION/../openmw-cs.cfg $CONFIGURATION/openmw-cs.cfg - echo " settings-default.cfg" - cp $CONFIGURATION/../settings-default.cfg $CONFIGURATION/settings-default.cfg - echo " resources/" - cp -r $CONFIGURATION/../resources $CONFIGURATION/resources fi -exit $RET +exit $RET \ No newline at end of file diff --git a/CI/build.msvc.sh b/CI/build.msvc.sh index 731c51eda..f8d5a2f24 100644 --- a/CI/build.msvc.sh +++ b/CI/build.msvc.sh @@ -1,5 +1,13 @@ #!/bin/bash +APPVEYOR="" +CI="" + +PACKAGE="" +PLATFORM="" +CONFIGURATION="" +VS_VERSION="" + if [ -z $PLATFORM ]; then PLATFORM=`uname -m` fi @@ -8,39 +16,63 @@ if [ -z $CONFIGURATION ]; then CONFIGURATION="Debug" fi -case $PLATFORM in - x32|x86|i686|i386|win32|Win32 ) - BITS=32 - PLATFORM=Win32 +case $VS_VERSION in + 14|14.0|2015 ) + GENERATOR="Visual Studio 14 2015" + MSVC_YEAR="2015" + MSVC_VER="14.0" ;; +# 12|2013| + * ) + GENERATOR="Visual Studio 12 2013" + MSVC_YEAR="2013" + MVSC_VER="12.0" + ;; +esac + +case $PLATFORM in x64|x86_64|x86-64|win64|Win64 ) BITS=64 - PLATFORM=x64 ;; - * ) - echo "Unknown platform $PLATFORM." - exit 1 ;; + x32|x86|i686|i386|win32|Win32 ) + BITS=32 + ;; +esac + +case $CONFIGURATION in + debug|Debug|DEBUG ) + CONFIGURATION=Debug + ;; + + release|Release|RELEASE ) + CONFIGURATION=Release + ;; + + relwithdebinfo|RelWithDebInfo|RELWITHDEBINFO ) + CONFIGURATION=RelWithDebInfo + ;; esac if [ -z $APPVEYOR ]; then - echo "Running $BITS-bit $CONFIGURATION build outside of Appveyor." + echo "Running ${BITS}-bit MSVC${MSVC_YEAR} ${CONFIGURATION} build outside of Appveyor." DIR=$(echo "$0" | sed "s,\\\\,/,g" | sed "s,\(.\):,/\\1,") cd $(dirname "$DIR")/.. else - echo "Running $BITS-bit $CONFIGURATION build in Appveyor." + echo "Running ${BITS}-bit MSVC${MSVC_YEAR} ${CONFIGURATION} build in Appveyor." cd $APPVEYOR_BUILD_FOLDER fi -cd build_$BITS +BUILD_DIR="MSVC${MSVC_YEAR}_${BITS}" +cd ${BUILD_DIR} which msbuild > /dev/null if [ $? -ne 0 ]; then msbuild() { - /c/Program\ Files\ \(x86\)/MSBuild/12.0/Bin/MSBuild.exe "$@" + /c/Program\ Files\ \(x86\)/MSBuild/${MSVC_VER}/Bin/MSBuild.exe "$@" } fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f38b8b26..15fce71ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -610,9 +610,15 @@ if (WIN32) 4987 # nonstandard extension used (triggered by setjmp.h) 4996 # Function was declared deprecated + # caused by OSG + 4589 # Constructor of abstract class 'osg::Operation' ignores initializer for virtual base class 'osg::Referenced' (False warning) + # caused by boost 4191 # 'type cast' : unsafe conversion (1.56, thread_primitives.hpp, normally off) + # caused by MyGUI + 4275 # non dll-interface class 'std::exception' used as base for dll-interface class 'MyGUI::Exception' + # OpenMW specific warnings 4099 # Type mismatch, declared class or struct is defined with other type 4100 # Unreferenced formal parameter (-Wunused-parameter) @@ -626,12 +632,20 @@ if (WIN32) 4309 # Variable overflow, trying to store 128 in a signed char for example 4351 # New behavior: elements of array 'array' will be default initialized (desired behavior) 4355 # Using 'this' in member initialization list + 4464 # relative include path contains '..' 4505 # Unreferenced local function has been removed 4701 # Potentially uninitialized local variable used 4702 # Unreachable code + 4714 # function 'QString QString::trimmed(void) &&' marked as __forceinline not inlined 4800 # Boolean optimization warning, e.g. myBool = (myInt != 0) instead of myBool = myInt ) + if (MSVC_VERSION GREATER 1800) + set(WARNINGS_DISABLE ${WARNINGS_DISABLE} 5026 5027 + 5031 # #pragma warning(pop): likely mismatch, popping warning state pushed in different file (config_begin.hpp, config_end.hpp) + ) + endif() + foreach(d ${WARNINGS_DISABLE}) set(WARNINGS "${WARNINGS} /wd${d}") endforeach(d) @@ -664,7 +678,12 @@ if (WIN32) endif() if (BUILD_OPENMW) - set_target_properties(openmw PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}") + # Very specific issue this, only needed on 32-bit VS2015 during unity builds. + if (MSVC_VERSION GREATER 1800 AND CMAKE_SIZEOF_VOID_P EQUAL 4 AND OPENMW_UNITY_BUILD) + set_target_properties(openmw PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD} /bigobj") + else() + set_target_properties(openmw PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}") + endif() endif() if (BUILD_WIZARD) diff --git a/appveyor.yml b/appveyor.yml index 1bc0d3ca6..e959792f5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,42 +6,54 @@ branches: - /openmw-.*$/ - appveyor +environment: + matrix: + - msvc: 2013 + - msvc: 2015 + platform: - Win32 -# - x64 +# - x64 -configuration: Debug - -matrix: - fast_finish: true +configuration: + - Debug +# - Release # For the Qt, Boost, CMake, etc installs -os: unstable +os: Visual Studio 2015 # We want the git revision for versioning, # so shallow clones don't work. clone_depth: 1 cache: - - C:\projects\openmw\deps\Bullet-2.83.5-win32.7z - - C:\projects\openmw\deps\Bullet-2.83.5-win64.7z - - C:\projects\openmw\deps\MyGUI-3.2.2-win32.7z - - C:\projects\openmw\deps\MyGUI-3.2.2-win64.7z - - C:\projects\openmw\deps\OSG-3.3.8-win32.7z - - C:\projects\openmw\deps\OSG-3.3.8-win64.7z - - C:\projects\openmw\deps\ffmpeg32-2.5.2.7z - - C:\projects\openmw\deps\ffmpeg32-2.5.2-dev.7z - - C:\projects\openmw\deps\ffmpeg64-2.5.2.7z - - C:\projects\openmw\deps\ffmpeg64-2.5.2-dev.7z + - C:\projects\openmw\deps\Bullet-2.83.7-msvc2013-win32.7z + - C:\projects\openmw\deps\Bullet-2.83.7-msvc2013-win64.7z + - C:\projects\openmw\deps\Bullet-2.83.7-msvc2015-win32.7z + - C:\projects\openmw\deps\Bullet-2.83.7-msvc2015-win64.7z + - C:\projects\openmw\deps\MyGUI-3.2.3-git-msvc2013-win32.7z + - C:\projects\openmw\deps\MyGUI-3.2.3-git-msvc2013-win32.7z + - C:\projects\openmw\deps\MyGUI-3.2.3-git-msvc2015-win64.7z + - C:\projects\openmw\deps\MyGUI-3.2.3-git-msvc2015-win64.7z + - C:\projects\openmw\deps\OSG-3.4.0-scrawl-msvc2013-win32.7z + - C:\projects\openmw\deps\OSG-3.4.0-scrawl-msvc2013-win32.7z + - C:\projects\openmw\deps\OSG-3.4.0-scrawl-msvc2015-win64.7z + - C:\projects\openmw\deps\OSG-3.4.0-scrawl-msvc2015-win64.7z + - C:\projects\openmw\deps\ffmpeg-3.0.1-dev-win32.7z + - C:\projects\openmw\deps\ffmpeg-3.0.1-dev-win64.7z + - C:\projects\openmw\deps\ffmpeg-3.0.1-win32.7z + - C:\projects\openmw\deps\ffmpeg-3.0.1-win64.7z + - C:\projects\openmw\deps\OpenAL-Soft-1.17.2.zip + - C:\projects\openmw\deps\SDL2-2.0.4.zip clone_folder: C:\projects\openmw before_build: - - cmd: sh %APPVEYOR_BUILD_FOLDER%\CI\before_script.msvc.sh -u -p %PLATFORM% + - cmd: sh %APPVEYOR_BUILD_FOLDER%\CI\before_script.msvc.sh -u -p %PLATFORM% -v %msvc% build_script: - - cmd: if %PLATFORM%==Win32 set build=Build_32 - - cmd: if %PLATFORM%==x64 set build=Build_64 + - cmd: if %PLATFORM%==Win32 set build=MSVC%msvc%_32 + - cmd: if %PLATFORM%==x64 set build=MSVC%msvc%_64 - cmd: msbuild %build%\OpenMW.sln /t:Build /p:Configuration=%configuration% /m:2 /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" test: off