@ECHO OFF

REM fg-from-scratch - Windows utility to download, compile, and stage TerraGear and its dependencies
REM Copyright (C) 2018  Scott Giese (xDraconian) scttgs0@gmail.com

REM This program is free software; you can redistribute it and/or
REM modify it under the terms of the GNU General Public License
REM as published by the Free Software Foundation; either version 2
REM of the License, or (at your option) any later version.

REM This program is distributed in the hope that it will be useful,
REM but WITHOUT ANY WARRANTY; without even the implied warranty of
REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
REM GNU General Public License for more details.

REM You should have received a copy of the GNU General Public License
REM along with this program; if not, write to the Free Software
REM Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

SET ROOT_DIR=%CD%
SET PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows/bin;%PATH%
SET CMAKE_TOOLCHAIN="Visual Studio 15 2017 Win64"
SET QT5x64=C:/Qt/5.10.1/msvc2017_64

IF NOT EXIST vcpkg-git/NUL (
	echo Preparing to install external libraries via vcpkg . . .
	git clone https://github.com/Microsoft/vcpkg.git vcpkg-git

	echo Compiling vcpkg
	cd vcpkg-git
	call ./bootstrap-vcpkg

	echo Compiling external libraries . . .
	vcpkg install --triplet x64-windows boost cgal curl freeglut freetype gdal glew jasper libxml2 openal-soft openjpeg openssl plib sdl2 tiff zlib
) ELSE (
	echo Updating vcpkg . . .
	cd vcpkg-git
	git pull

	echo Updating external libraries . . .
	vcpkg update
	vcpkg upgrade --triplet x64-windows --no-dry-run

    REM Okay to comment out this line once all the packages have been confirmed to have been installed
	vcpkg install --triplet x64-windows boost cgal curl freeglut freetype gdal glew jasper libxml2 openal-soft openjpeg openssl plib sdl2 tiff zlib
)
cd %ROOT_DIR%

IF NOT EXIST openscenegraph-3.4-build/NUL (
	mkdir openscenegraph-3.4-build
)
IF NOT EXIST openscenegraph-3.4-git/NUL (
	echo Downloading OpenSceneGraph . . .
	git clone -b OpenSceneGraph-3.4 https://github.com/openscenegraph/OpenSceneGraph.git openscenegraph-3.4-git
) ELSE (
	echo Updating OpenSceneGraph . . .
	cd openscenegraph-3.4-git
	git pull
)
cd %ROOT_DIR%

IF NOT EXIST simgear-build/NUL (
	mkdir simgear-build
)
IF NOT EXIST simgear-git/NUL (
	echo Downloading SimGear . . .
	git clone -b next https://git.code.sf.net/p/flightgear/simgear simgear-git
) ELSE (
	echo Updating SimGear . . .
	cd simgear-git
	git pull
)
cd %ROOT_DIR%

IF NOT EXIST flightgear-build/NUL (
	mkdir flightgear-build
)
IF NOT EXIST flightgear-git/NUL (
	echo Downloading FlightGear . . .
	git clone -b next https://git.code.sf.net/p/flightgear/flightgear flightgear-git
) ELSE (
	echo Updating FlightGear . . .
	cd flightgear-git
	git pull
)
cd %ROOT_DIR%

IF NOT EXIST terragear-build/NUL (
	mkdir terragear-build
)
IF NOT EXIST terragear-git/NUL (
	echo Downloading TerraGear . . .
	git clone -b next https://git.code.sf.net/p/flightgear/terragear terragear-git
) ELSE (
	echo Updating TerraGear . . .
	cd terragear-git
	git pull
)
cd %ROOT_DIR%

ECHO Compiling OpenSceneGraph . . .
cd openscenegraph-3.4-build
cmake ..\openscenegraph-3.4-git -G %CMAKE_TOOLCHAIN% ^
	-DACTUAL_3RDPARTY_DIR:PATH=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
	-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
	-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
	-DOSG_USE_UTF8_FILENAME:BOOL=1 ^
	-DWIN32_USE_MP:BOOL=1 ^
	-DCURL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DCURL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libcurl.lib ^
	-DFREETYPE_INCLUDE_DIR_ft2build=%ROOT_DIR%/vcpkg-git/packages/freetype_x64-windows/include ^
	-DFREETYPE_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DFREETPE_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/freetype.lib ^
	-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
	-DGLUT_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DGLUT_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/freeglut.lib ^
	-DJPEG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DJPEG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/jpeg.lib ^
	-DLIBXML2_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DLIBXML2_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libxml2.lib ^
	-DPNG_PNG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DPNG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libpng16.lib ^
	-DSDL2_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DSDL2_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/SDL2.lib ^
	-DSDL2MAIN_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/manual-link/SDL2main.lib ^
	-DTIFF_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DTIFF_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/tiff.lib ^
	-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%

ECHO Compiling SimGear . . .
cd simgear-build
cmake ..\simgear-git -G  %CMAKE_TOOLCHAIN% ^
	-DCMAKE_BUILD_TYPE=Release ^
	-DMSVC_3RDPARTY_ROOT=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
	-DCMAKE_PREFIX_PATH:PATH=%ROOT_DIR%/Stage/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
	-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
	-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
	-DOSG_FSTREAM_EXPORT_FIXED:BOOL=1 ^
	-DENABLE_GDAL:BOOL=1 ^
	-DENABLE_OPENMP:BOOL=1 ^
	-DUSE_AEONWAVE:BOOL=0 ^
	-DBOOST_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DBOOST_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
	-DCURL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DCURL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libcurl.lib ^
	-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
	-DOPENAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DOPENAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/OpenAL32.lib ^
	-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%

ECHO Compiling FlightGear . . .
cd flightgear-build
cmake ..\flightgear-git -G  %CMAKE_TOOLCHAIN% ^
	-DMSVC_3RDPARTY_ROOT=%ROOT_DIR%/vcpkg-git/installed/x64-windows ^
	-DCMAKE_PREFIX_PATH:PATH=%ROOT_DIR%/Stage/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%QT5x64% ^
	-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
	-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
	-DOSG_FSTREAM_EXPORT_FIXED:BOOL=1 ^
	-DENABLE_GDAL:BOOL=1 ^
	-DENABLE_OPENMP:BOOL=1 ^
	-DENABLE_JSBSIM:BOOL=1 ^
	-DENABLE_GPSSMOOTH:BOOL=1 ^
	-DENABLE_FGVIEWER:BOOL=1 ^
	-DENABLE_STGMERGE:BOOL=0 ^
	-DWITH_FGPANEL:BOOL=0 ^
	-DUSE_AEONWAVE:BOOL=0 ^
	-DHAVE_CONFIG_H:BOOL=0 ^
	-DFREETYPE_INCLUDE_DIR_ft2build=%ROOT_DIR%/vcpkg-git/packages/freetype_x64-windows/include ^
	-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
	-DOPENAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DOPENAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/OpenAL32.lib ^
	-DPLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DPNG_PNG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DPNG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/libpng16.lib ^
	-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%

ECHO Compiling TerraGear . . .
cd terragear-build
cmake ..\terragear-git -G  %CMAKE_TOOLCHAIN% ^
	-DCMAKE_PREFIX_PATH:PATH=%ROOT_DIR%/Stage/lib;%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib;%QT5x64% ^
	-DCMAKE_CONFIGURATION_TYPES=Debug;Release ^
	-DCMAKE_INSTALL_PREFIX:PATH=%ROOT_DIR%/Stage ^
	-DMSVC-3RDPARTY_ROOT= ^
	-DBoost_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DBoost_LIBRARY_DIR_DEBUG=%ROOT_DIR%/vcpkg-git/installed/x64-windows/debug/lib ^
	-DBoost_LIBRARY_DIR_RELEASE=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib ^
	-DCGAL_DIR=%ROOT_DIR%/vcpkg-git/buildtrees/cgal/x64-windows-rel ^
	-DGDAL_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DGDAL_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/gdal.lib ^
	-DJPEG_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DJPEG_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/jpeg.lib ^
	-DTIFF_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DTIFF_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/tiff.lib ^
	-DZLIB_INCLUDE_DIR=%ROOT_DIR%/vcpkg-git/installed/x64-windows/include ^
	-DZLIB_LIBRARY=%ROOT_DIR%/vcpkg-git/installed/x64-windows/lib/zlib.lib ^
	-DSIMGEAR_INCLUDE_DIR=%ROOT_DIR%/Stage/include ^
	-DSIMGEAR_CORE_LIBRARY=%ROOT_DIR%/Stage/lib/SimGearCore.lib ^
	-DSIMGEAR_SCENE_LIBRARY=%ROOT_DIR%/Stage/lib/SimGearScene.lib
cmake --build . --config Release --target INSTALL
cd %ROOT_DIR%

REM TerraGear is expecting proj.dll instead of proj_4_9.dll, clone it so TG may find it.
for %%i in (vcpkg-git\installed\x64-windows\bin\proj*.dll) do copy /Y %%i Stage\bin\proj.dll

ECHO All done!