Desurium/CMakeLists.txt

310 lines
11 KiB
CMake

###############################################################################
#
# you can pass some options to cmake via -D<option>[=<value>]
#
# name default description
#
# global options:
# BUILD_CEF ON Build cef
# BUILD_TESTS ON Build various unit tests
# BUILD_TOOLS ON Build various Desura tools
# OFFICIAL_BUILD OFF for official build only
# BRANDING depends on which branding should be used?
# OFFICIAL_BUILD
# DEBUG OFF will add debug symbols and other
# debugging stuff
# PACKAGE_TYPE DEB Which packages should be created with "make package"
# FORCE_SYS_DEPS OFF Force the use of system libs
# WITH_FLASH ON Build with flash support
#
# BREAKPAD_URL URL to breakdpad archive, should be rev. 850
# CEF_URL URL to cef archive, should be rev. 291
# CEF_BIN_URL URL to cef bin files for windows
# CHROMIUM_URL URL to chromium archive, has to be 15.0.876.0
# CURL_URL URL to curl archive
# DEPOT_TOOLS_URL URL to depot_tools archive
# V8_URL URL to v8 archive
# WXWIDGET_URL URL to wxWidget archive, has to be 2.9.3
#
# cef options:
# H264_SUPPORT OFF build ffmpeg with mpeg-4 support. Be aware of patent and license problems
#
# installation options:
# BINDIR ./bin the directory where binaries should be installed, a relative path will be
# relative to CMAKE_INSTALL_PREFIX, an absolute will stay absolute
# RUNTIME_LIBDIR ./lib/desura the directory where runtime loaded libs should be stored
# DATADIR ./share/desura same as RUNTIME_LIBDIR only for data files
# DESKTOPDIR depends on OS the directory where the desktop file or link should be installed
#
# unix-only options:
# FORCE_BUNDLED_WXGTK ON: bundle wxGTK 2.9.3
# ON OFF: use system wxGTK (has to be 2.9.x, work stable on 2.9.3)
# DEBUG_EXTERNAL OFF same as DEBUG, but for externap deps
# WITH_ARES ON build CURL with ares support (c-ares REQUIRED)
# DIR_TYPE SINGLE how should game data be stored?
# SINGLE: in a single dir in $HOME
# XDG: like the official xdg specification
# PORTABLE: in the desura installaion dir
# INSTALL_DESKTOP_FILE INSTALL a desktop file in /usr/share/applications
# OFF
#
# Linux-only options:
# DESKTOP_EXE desura the value of Exe in the desktop file
# DESKTOP_ICON desura the value of Icon in the desktop file
#
# wxWidgets select correct version
# wxWidgets_CONFIG_EXECUTABLE path to wx-config (version 2.9.x)
# wxWidgets_wxrc_EXECUTABLE path to wxrc (version 2.9.x)
#
# windows-only options:
# BOOST_URL URL to boost archive
# DEBUG_CEF OFF turn on/off debugging in CEF
# DEBUG_V8 OFF turn on/off debugging in v8
#
# some dev notes:
#
# if you want to port desura to another compiler on UNIX bases systems,
# please create a file for compiler flags in:
#
# cmake/platform/unix/compiler/${CMAKE_C_COMPILER_ID}.cmake
#
# Take a look into the other files.
#
###############################################################################
###############################################################################
# some overrides
###############################################################################
# TODO: silent output for externel dependencies
project(Desura)
if(APPLE) # see #418
cmake_minimum_required(VERSION 2.8.10)
else()
cmake_minimum_required(VERSION 2.8.2)
endif()
###############################################################################
# some globale variables
###############################################################################
set(CMAKE_OUTPUT "${CMAKE_SOURCE_DIR}/build_out")
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
set(CMAKE_PLATFORM_PATH "${CMAKE_SOURCE_DIR}/cmake/platform")
set(CMAKE_EXTERNAL_BINARY_DIR "${CMAKE_BINARY_DIR}/external")
set(CMAKE_THIRD_PARTY_DIR "${CMAKE_SOURCE_DIR}/third_party")
set(CMAKE_SCRIPT_PATH "${CMAKE_SOURCE_DIR}/cmake/scripts")
set(CMAKE_PATCH_DIR "${CMAKE_SOURCE_DIR}/cmake/patches")
set(CMAKE_GEN_SRC_DIR "${CMAKE_BINARY_DIR}/gen")
set(CMAKE_TEST_PROJECTS "${CMAKE_SOURCE_DIR}/cmake/tests")
set(CMAKE_TEST_PROJECTS_BIN "${CMAKE_BINARY_DIR}/cmake_test")
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
if(DEBUG)
set(CMAKE_BUILD_TYPE Debug)
else()
if(OFFICIAL_BUILD)
set(CMAKE_BUILD_TYPE RelWithDebInfo)
else()
set(CMAKE_BUILD_TYPE Release)
endif()
endif()
###############################################################################
# some includes
###############################################################################
include(CheckOptions)
include(ExternalProject)
include(macros)
include(parsearguments)
include(CheckCompiler)
include(SetInstallPaths)
include(Package)
if(UNIX)
include(FindPkgConfig)
endif()
###############################################################################
# find all packages which are needed
###############################################################################
if(NOT WIN32)
set(REQUIRED_ON_UNIX REQUIRED)
endif()
if(NOT BUILD_ONLY_CEF)
if(WIN32)
set(Boost_ADDITION_LIBS ${Boost_ADDITION_LIBS} chrono)
endif()
if(BUILD_TESTS)
set(Boost_ADDITION_LIBS ${Boost_ADDITION_LIBS} unit_test_framework)
endif()
set(Boost_USE_MULTITHREADED ON)
if(WIN32)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
endif()
find_package(Boost COMPONENTS date_time filesystem thread system ${Boost_ADDITION_LIBS})
if(NOT WITH_ARES)
find_package(CURL 7.19.1 ${REQUIRED_IF_OPTION})
endif()
if(NOT WIN32)
find_package(GTK2 REQUIRED)
find_package(X11 REQUIRED)
if(NOT X11_Xt_FOUND)
message(FATAL_ERROR "libXt is required")
endif()
pkg_check_modules(GTHREAD2 REQUIRED gthread-2.0)
find_package(Threads)
find_package(Notify REQUIRED)
if(NOT HAVE_LIBNOTIFY_0_7)
message(FATAL_ERROR "libnotify >= 0.7 is required")
endif()
pkg_check_modules(TINYXML ${REQUIRED_IF_OPTION} tinyxml2)
endif()
find_package(BZip2 ${REQUIRED_IF_OPTION})
find_package(Sqlite ${REQUIRED_IF_OPTION})
find_package(v8 ${REQUIRED_IF_OPTION})
if(NOT FORCE_BUNDLED_WXGTK)
find_package(wxWidgets 2.9 COMPONENTS richtext ${REQUIRED_IF_OPTION})
endif()
if(WITH_GTEST)
find_package(GTest ${REQUIRED_IF_OPTION})
add_definitions(-DGTEST_LINKED_AS_SHARED_LIBRARY -DWITH_GTEST)
endif()
endif()
find_package(PythonInterp REQUIRED)
if(WIN32)
find_package(PythonLibs REQUIRED)
endif()
find_package(Patch REQUIRED)
if(MSVC)
configure_file(${CMAKE_SCRIPT_PATH}/patch.bat ${CMAKE_GEN_SRC_DIR}/scripts/patch.bat @ONLY)
set(PATCH_SCRIPT_PATH ${CMAKE_GEN_SRC_DIR}/scripts/patch.bat)
else()
set(PATCH_SCRIPT_PATH ${CMAKE_SCRIPT_PATH}/patch.sh)
endif()
if(WIN32)
find_package(NMake REQUIRED)
endif()
###############################################################################
# SVN, HTTP stuff
###############################################################################
set(DOWNLOAD_URL "https://s3-us-west-2.amazonaws.com/lecs.desura.lindenlab.com/" CACHE STRING "Download mirror for third party source code and binaries")
macro(SetupDownloadUrl name url md5)
set(${name}_URL_DEFAULT "${DOWNLOAD_URL}${url}")
set(${name}_URL ${${name}_URL_DEFAULT} CACHE STRING "URL to get ${name} archive")
if(${name}_URL STREQUAL ${name}_URL_DEFAULT)
set(${name}_MD5 ${md5} CACHE STRING "Md5 for ${name} archive")
else()
unset(${name}_MD5)
endif()
endmacro()
if(WIN32)
SetupDownloadUrl(BOOST "boost_1_53_0.zip" c618e030fd4882e4dbacf54baf824544)
SetupDownloadUrl(CEF_BIN "cef_bin.zip" c9c0379579d9d26557ca8f4b42f937f2)
SetupDownloadUrl(DESURA_EXTRA_BIN "desura_extra_bin.zip" fdb2a4dd704a90e5174c64d3eaf8392b)
endif()
SetupDownloadUrl(BREAKPAD "breakpad-850-r1.zip" b0061a854df1a0d285edc74c5ac37c42)
SetupDownloadUrl(CEF "cef-291.tar.gz" 97e925e33f2d48cd50172247dbe40f30)
SetupDownloadUrl(CHROMIUM "chromium-15.0.876.0.tar.bz2" 22c8e1db4d1c4b474c600dffbb5fdd0c)
if(WIN32 OR NOT CURL_FOUND)
SetupDownloadUrl(CURL "curl-7.32.0.tar.bz2" 30d04b0a8c43c6770039d1bf033dfe79)
endif()
SetupDownloadUrl(DEPOT_TOOLS "depot_tools-r1.zip" a27266b8d2388c4dc51645d1159dd0de)
SetupDownloadUrl(GTEST "gtest-1.7.0.zip" 2d6ec8ccdf5c46b05ba54a9fd1d130d7)
SetupDownloadUrl(WXWIDGET "wxWidgets-2.9.3.tar.bz2" 6b6003713289ea4d3cd9b49c5db5b721)
SetupDownloadUrl(V8 "v8-3.18.5.14.tar.bz2" 657802ea63c89190fd510ee1a2a719bf)
###############################################################################
# build some externel projects
###############################################################################
if(NOT BUILD_ONLY_CEF)
if(NOT wxWidgets_FOUND)
include(BuildwxWidgets)
endif()
if(NOT Boost_FOUND)
include(BuildBoost)
endif()
if(NOT BREAKPAD_EXCEPTION_HANDLER_FOUND)
include(BuildGoogleBreakpad)
endif()
if(NOT CURL_FOUND)
include(BuildCURL)
endif()
if(NOT GTEST_FOUND AND WITH_GTEST)
include(BuildGTest)
endif()
if(NOT V8_FOUND)
include(Buildv8)
endif()
if(WIN32)
include(BuildDesuraExtraBin)
endif()
endif()
include(BuildCEF)
if(NOT BUILD_ONLY_CEF)
###############################################################################
# build third_party
###############################################################################
if(NOT BZIP2_FOUND)
add_subdirectory(third_party/bzip2)
endif()
add_subdirectory(third_party/courgette) # for headers only, build via ExternalProject
if(NOT TINYXML_FOUND)
add_subdirectory(third_party/tinyxml2)
endif()
if(NOT SQLITE_FOUND)
add_subdirectory(third_party/sqlite)
endif()
add_subdirectory(third_party/sqlite3x)
if(NOT Boost_FOUND)
add_dependencies(sqlite3x boost)
endif()
if(WITH_FLASH AND NOT WIN32)
add_subdirectory(third_party/npwrapper)
endif()
###############################################################################
# build desura
###############################################################################
add_subdirectory(src)
add_subdirectory(build_out)
endif()