2020-06-18 16:34:19 +00:00
|
|
|
include(GNUInstallDirs)
|
|
|
|
|
Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.
Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.
This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.
Addtiionally, this heavily improves our detection of libraries, etc.
2019-04-07 09:57:55 +00:00
|
|
|
# Set the options for the directories (personal, shared, global).
|
|
|
|
#
|
|
|
|
# set_directory_options()
|
|
|
|
#
|
|
|
|
function(set_directory_options)
|
|
|
|
if (APPLE)
|
|
|
|
set(DEFAULT_PERSONAL_DIR "Documents/OpenTTD")
|
|
|
|
set(DEFAULT_SHARED_DIR "/Library/Application Support/OpenTTD")
|
|
|
|
set(DEFAULT_GLOBAL_DIR "(not set)")
|
|
|
|
elseif (WIN32)
|
|
|
|
set(DEFAULT_PERSONAL_DIR "OpenTTD")
|
|
|
|
set(DEFAULT_SHARED_DIR "(not set)")
|
|
|
|
set(DEFAULT_GLOBAL_DIR "(not set)")
|
|
|
|
elseif (UNIX)
|
2020-06-11 19:57:14 +00:00
|
|
|
set(DEFAULT_PERSONAL_DIR ".${BINARY_NAME}")
|
Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.
Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.
This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.
Addtiionally, this heavily improves our detection of libraries, etc.
2019-04-07 09:57:55 +00:00
|
|
|
set(DEFAULT_SHARED_DIR "(not set)")
|
2020-06-11 19:57:14 +00:00
|
|
|
set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${BINARY_NAME}")
|
Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.
Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.
This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.
Addtiionally, this heavily improves our detection of libraries, etc.
2019-04-07 09:57:55 +00:00
|
|
|
else ()
|
|
|
|
message(FATAL_ERROR "Unknown OS found; please consider creating a Pull Request to add support for this OS.")
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
if (NOT PERSONAL_DIR)
|
|
|
|
set(PERSONAL_DIR "${DEFAULT_PERSONAL_DIR}" CACHE STRING "Personal directory")
|
|
|
|
message(STATUS "Detecting Personal Data directory - ${PERSONAL_DIR}")
|
|
|
|
endif (NOT PERSONAL_DIR)
|
|
|
|
|
|
|
|
if (NOT SHARED_DIR)
|
|
|
|
set(SHARED_DIR "${DEFAULT_SHARED_DIR}" CACHE STRING "Shared directory")
|
|
|
|
message(STATUS "Detecting Shared Data directory - ${SHARED_DIR}")
|
|
|
|
endif (NOT SHARED_DIR)
|
|
|
|
|
|
|
|
if (NOT GLOBAL_DIR)
|
|
|
|
set(GLOBAL_DIR "${DEFAULT_GLOBAL_DIR}" CACHE STRING "Global directory")
|
|
|
|
message(STATUS "Detecting Global Data directory - ${GLOBAL_DIR}")
|
|
|
|
endif (NOT GLOBAL_DIR)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
# Set some generic options that influence what is being build.
|
|
|
|
#
|
|
|
|
# set_options()
|
|
|
|
#
|
|
|
|
function(set_options)
|
|
|
|
if (UNIX AND NOT APPLE)
|
2020-06-07 14:11:36 +00:00
|
|
|
set(DEFAULT_OPTION_INSTALL_FHS ON)
|
Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.
Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.
This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.
Addtiionally, this heavily improves our detection of libraries, etc.
2019-04-07 09:57:55 +00:00
|
|
|
else (UNIX AND NOT APPLE)
|
2020-06-07 14:11:36 +00:00
|
|
|
set(DEFAULT_OPTION_INSTALL_FHS OFF)
|
Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.
Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.
This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.
Addtiionally, this heavily improves our detection of libraries, etc.
2019-04-07 09:57:55 +00:00
|
|
|
endif (UNIX AND NOT APPLE)
|
|
|
|
|
2020-06-04 12:38:56 +00:00
|
|
|
option(OPTION_FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF)
|
|
|
|
|
2020-06-07 14:11:36 +00:00
|
|
|
option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF)
|
2020-06-11 19:57:14 +00:00
|
|
|
option(OPTION_INSTALL_FHS "Install with Filesystem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS})
|
2020-06-07 14:11:36 +00:00
|
|
|
option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" ON)
|
|
|
|
option(OPTION_USE_THREADS "Use threads" ON)
|
|
|
|
option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF)
|
Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.
Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.
This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.
Addtiionally, this heavily improves our detection of libraries, etc.
2019-04-07 09:57:55 +00:00
|
|
|
endfunction()
|
|
|
|
|
|
|
|
# Show the values of the generic options.
|
|
|
|
#
|
|
|
|
# show_options()
|
|
|
|
#
|
|
|
|
function(show_options)
|
|
|
|
message(STATUS "Option Dedicated - ${OPTION_DEDICATED}")
|
|
|
|
message(STATUS "Option Install FHS - ${OPTION_INSTALL_FHS}")
|
|
|
|
message(STATUS "Option Use assert - ${OPTION_USE_ASSERTS}")
|
|
|
|
message(STATUS "Option Use threads - ${OPTION_USE_THREADS}")
|
2020-06-07 02:34:50 +00:00
|
|
|
message(STATUS "Option Use NSIS - ${OPTION_USE_NSIS}")
|
Add: introduce CMake for project management
CMake works on all our supported platforms, like MSVC, Mingw, GCC,
Clang, and many more. It allows for a single way of doing things,
so no longer we need shell scripts and vbs scripts to work on all
our supported platforms.
Additionally, CMake allows to generate project files for like MSVC,
KDevelop, etc.
This heavily reduces the lines of code we need to support multiple
platforms from a project perspective.
Addtiionally, this heavily improves our detection of libraries, etc.
2019-04-07 09:57:55 +00:00
|
|
|
endfunction()
|
|
|
|
|
|
|
|
# Add the definitions for the options that are selected.
|
|
|
|
#
|
|
|
|
# add_definitions_based_on_options()
|
|
|
|
#
|
|
|
|
function(add_definitions_based_on_options)
|
|
|
|
if (OPTION_DEDICATED)
|
|
|
|
add_definitions(-DDEDICATED)
|
|
|
|
endif (OPTION_DEDICATED)
|
|
|
|
|
|
|
|
if (NOT OPTION_USE_THREADS)
|
|
|
|
add_definitions(-DNO_THREADS)
|
|
|
|
endif (NOT OPTION_USE_THREADS)
|
|
|
|
|
|
|
|
if (OPTION_USE_ASSERTS)
|
|
|
|
add_definitions(-DWITH_ASSERT)
|
|
|
|
else (OPTION_USE_ASSERTS)
|
|
|
|
add_definitions(-DNDEBUG)
|
|
|
|
endif (OPTION_USE_ASSERTS)
|
|
|
|
endfunction()
|