#------------------------------------------------------------------------
# ET: Legacy, http://www.etlegacy.com
# - Wolfenstein: Enemy Territory 2.60b compatible client/server
# - based on raedwulf-et: https://bitbucket.org/tcmreastwood/raedwulf-et
#
# Please use TABs to indent! (x4)
#------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.10.3)

project(ETLEGACY C CXX)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
include(GetGitRevisionDescription)
include(CMakeDependentOption)

# We need to add the macros & Functions before any other includes
include(cmake/ETLFunctions.cmake)

#-----------------------------------------------------------------
# Options
#-----------------------------------------------------------------

option(BUILD_SERVER		"Build the dedicated server executable"							ON)
option(BUILD_CLIENT		"Build the client executable"									ON)
option(BUILD_MOD		"Build the mod libraries"										ON)

option(BUILD_MOD_PK3	"Pack the mod libraries into etl_bin.pk3"						ON)
option(BUILD_PAK3_PK3	"Pack updated game scripts into pak3.pk3"						ON)

option(BUNDLED_LIBS		"Use all available bundled libraries instead of system libs"	ON)

LEG_BUNDLE(SDL SDL)
LEG_BUNDLE(ZLIB Zlib)
LEG_BUNDLE(MINIZIP Minizip)
LEG_BUNDLE(JPEG JPEG)
LEG_BUNDLE(PNG libpng)
LEG_BUNDLE(CURL Curl "NOT APPLE")
LEG_BUNDLE(OPENSSL OpenSSL "OFF")
LEG_BUNDLE(LUA Lua)
LEG_BUNDLE(OGG_VORBIS OGG)
LEG_BUNDLE(THEORA Theora)
LEG_BUNDLE(OPENAL OpenAL "NOT APPLE")
LEG_BUNDLE(OPENAL_INCLUDE OpenAL-OSX "APPLE")
LEG_BUNDLE(GLEW Glew)
LEG_BUNDLE(FREETYPE Freetype2)
LEG_BUNDLE(SQLITE3 SQlite3)

# no support for 32 bit binaries on OpenBSD/amd64
cmake_dependent_option(CROSS_COMPILE32 "Compile 32-bit version of ET:L (64bit is incompatible with 2.60b)" ON "NOT CMAKE_SYSTEM MATCHES OpenBSD*" OFF)

# Optional features
option(FEATURE_CURL				"Enable auto-download support using cURL (client)"		ON)
option(FEATURE_OPENSSL			"Build openssl for curl and authentication"				OFF)
option(FEATURE_OGG_VORBIS		"Enable OGG Vorbis support (client)"					ON)
option(FEATURE_THEORA			"Enable Theora video support (client)"					ON)
option(FEATURE_OPENAL			"Enable OpenAL sound backend (client)"					ON)
option(FEATURE_FREETYPE			"Enable Freetype font library support (client)"			ON)
option(FEATURE_PNG				"Enable PNG screenshot support (client)"				ON)
option(FEATURE_LUA				"Enable Lua support (mod)"								ON)
option(FEATURE_MULTIVIEW		"Enable multiview support (mod)"						ON)
option(FEATURE_EDV				"Enable extended demo viewer support (mod)"				ON)
option(FEATURE_ANTICHEAT		"Enable server side anti-wallhack code (server)"		ON)
option(FEATURE_AUTOUPDATE		"Enable updater which downloads latest ET:L files"		ON)
option(FEATURE_RENDERER2		"Build and use the new renderer"						ON)
option(FEATURE_RENDERER_GLES	"Build and use OpenGL ES renderer"						OFF)
option(FEATURE_IPV6				"Enable IPv6 networking code"							OFF)
option(FEATURE_IRC_CLIENT		"Enable IRC client client side"							ON)
option(FEATURE_IRC_SERVER		"Enable IRC client server side"							ON)
option(RENDERER_DYNAMIC			"Build renderer into a dynamic library"					ON)
option(FEATURE_WINDOWS_CONSOLE	"Build win32 executables with Windows console"			ON)
option(FEATURE_GETTEXT			"Enable localization using tinygettext"					ON)
option(FEATURE_SERVERMDX		"Enable MDX support on server side (mod)"				ON)
option(FEATURE_DBMS				"Enable dbms support (sqlite3)"							ON)
option(FEATURE_PAKISOLATION		"Enable custom pak isolation"							ON)
option(FORCE_DEBUG				"Force enable legacy debug macros"						OFF)

cmake_dependent_option(FEATURE_LUASQL	"Enable LuaSQL sqlite3 backend (mod)"			ON "FEATURE_LUA" OFF)
cmake_dependent_option(FEATURE_RATING	"Enable skill rating support (mod)"				ON "FEATURE_DBMS" OFF)
cmake_dependent_option(FEATURE_PRESTIGE	"Enable prestige support (mod)"					ON "FEATURE_DBMS" OFF)
cmake_dependent_option(FEATURE_OMNIBOT	"Enable Omni-bot support (mod)"					ON "WIN32 OR APPLE OR CMAKE_SYSTEM_NAME MATCHES Linux" OFF)

option(INSTALL_EXTRA			"Install extra add-ons (omni-bot, geoip, wolfadmin)."	ON)

cmake_dependent_option(INSTALL_OMNIBOT		"Install Omni-bot"							ON "INSTALL_EXTRA" OFF)
cmake_dependent_option(INSTALL_GEOIP		"Install GeoLite geolocation database"		ON "INSTALL_EXTRA" OFF)
cmake_dependent_option(INSTALL_WOLFADMIN	"Install WolfAdmin enhancement suite"		ON "INSTALL_EXTRA" OFF)

option(ARM						"Build ARM version"										OFF)

set(ET_FS_BASEPATH "" CACHE STRING "Copy required genuine ET files from ET_FS_BASEPATH")
cmake_dependent_option(ET_KEY	"Copy existing etkey file from ET_FS_BASEPATH)"			ON "ET_FS_BASEPATH" OFF)

#-----------------------------------------------------------------
# Setup
#-----------------------------------------------------------------

# Group the VisualStudio projects
set(CMAKE_TARGETS_FOLDER CMake)
set(BUNDLED_TARGETS_FOLDER Bundled)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER ${CMAKE_TARGETS_FOLDER})

# Find and setup programs the build needs
include(cmake/ETLPrograms.cmake)

# Setup some basic helper variables
include(cmake/ETLCommon.cmake)

# Platform specific compiler settings
include(cmake/ETLPlatform.cmake)

# Source globs
include(cmake/ETLSources.cmake)

# Git version header generation
include(cmake/ETLVersion.cmake)

# Use bundled libraries
if(BUNDLED_LIBS)
	include(cmake/ETLBundledLibs.cmake)
endif(BUNDLED_LIBS)

# Set up includes and libraries based on feature options
include(cmake/ETLSetupFeatures.cmake)

# Group the sources (only msvc and xcode now)
include(cmake/ETLSourceGroup.cmake)

#-----------------------------------------------------------------
# Build
#-----------------------------------------------------------------

if(BUILD_CLIENT)
	include(cmake/ETLBuildRenderer.cmake)
	include(cmake/ETLBuildClient.cmake)

	#Since CMake 3.6 you are able to set the Visual Studio startup project
	if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 3.6)
		set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT etl)
	endif()
endif(BUILD_CLIENT)

if(BUILD_SERVER)
	include(cmake/ETLBuildServer.cmake)
endif(BUILD_SERVER)

if(BUILD_MOD)
	include(cmake/ETLBuildMod.cmake)
endif(BUILD_MOD)

if(BUILD_PAK3_PK3)
	include(cmake/ETLBuildPack.cmake)
endif(BUILD_PAK3_PK3)

#-----------------------------------------------------------------
# Post build
#-----------------------------------------------------------------

# Install third-party add-ons
if(BUILD_MOD AND INSTALL_EXTRA)
	if(INSTALL_OMNIBOT)
		include(cmake/ETLInstallOmniBot.cmake)
	endif(INSTALL_OMNIBOT)
	if(INSTALL_GEOIP)
		include(cmake/ETLInstallGeoIP.cmake)
	endif(INSTALL_GEOIP)
	if(INSTALL_WOLFADMIN)
		include(cmake/ETLInstallWolfAdmin.cmake)
	endif(INSTALL_WOLFADMIN)
endif(BUILD_MOD AND INSTALL_EXTRA)

# Generate install and uninstall packs
include(cmake/ETLInstall.cmake)

# Packaging support
include(cmake/ETLCPack.cmake)

set_target_properties(uninstall PROPERTIES FOLDER ${CMAKE_TARGETS_FOLDER})
