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)
|
2020-09-25 11:55:25 +00:00
|
|
|
if(APPLE)
|
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_PERSONAL_DIR "Documents/OpenTTD")
|
|
|
|
set(DEFAULT_SHARED_DIR "/Library/Application Support/OpenTTD")
|
|
|
|
set(DEFAULT_GLOBAL_DIR "(not set)")
|
2020-09-25 11:55:25 +00:00
|
|
|
elseif(WIN32)
|
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_PERSONAL_DIR "OpenTTD")
|
|
|
|
set(DEFAULT_SHARED_DIR "(not set)")
|
|
|
|
set(DEFAULT_GLOBAL_DIR "(not set)")
|
2020-09-25 11:55:25 +00:00
|
|
|
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}")
|
2020-09-25 11:55:25 +00:00
|
|
|
else()
|
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
|
|
|
message(FATAL_ERROR "Unknown OS found; please consider creating a Pull Request to add support for this OS.")
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
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
|
|
|
|
2020-09-25 11:55:25 +00:00
|
|
|
if(NOT PERSONAL_DIR)
|
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(PERSONAL_DIR "${DEFAULT_PERSONAL_DIR}" CACHE STRING "Personal directory")
|
|
|
|
message(STATUS "Detecting Personal Data directory - ${PERSONAL_DIR}")
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
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
|
|
|
|
2020-09-25 11:55:25 +00:00
|
|
|
if(NOT SHARED_DIR)
|
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(SHARED_DIR "${DEFAULT_SHARED_DIR}" CACHE STRING "Shared directory")
|
|
|
|
message(STATUS "Detecting Shared Data directory - ${SHARED_DIR}")
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
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
|
|
|
|
2020-09-25 11:55:25 +00:00
|
|
|
if(NOT GLOBAL_DIR)
|
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(GLOBAL_DIR "${DEFAULT_GLOBAL_DIR}" CACHE STRING "Global directory")
|
|
|
|
message(STATUS "Detecting Global Data directory - ${GLOBAL_DIR}")
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
2020-07-01 00:52:32 +00:00
|
|
|
|
|
|
|
set(HOST_BINARY_DIR "" CACHE PATH "Full path to native cmake build directory")
|
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()
|
|
|
|
|
|
|
|
# Set some generic options that influence what is being build.
|
|
|
|
#
|
|
|
|
# set_options()
|
|
|
|
#
|
|
|
|
function(set_options)
|
2021-02-05 11:31:27 +00:00
|
|
|
option(OPTION_PACKAGE_DEPENDENCIES "Copy dependencies into lib/ for easy packaging (Linux only)" OFF)
|
|
|
|
|
|
|
|
if(UNIX AND NOT APPLE AND NOT OPTION_PACKAGE_DEPENDENCIES)
|
2020-06-07 14:11:36 +00:00
|
|
|
set(DEFAULT_OPTION_INSTALL_FHS ON)
|
2020-09-25 11:55:25 +00:00
|
|
|
else()
|
2020-06-07 14:11:36 +00:00
|
|
|
set(DEFAULT_OPTION_INSTALL_FHS OFF)
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
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
|
|
|
|
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)
|
2020-12-05 20:57:47 +00:00
|
|
|
if(EMSCRIPTEN)
|
|
|
|
# Although pthreads is supported, it is not in a way yet that is
|
|
|
|
# useful for us.
|
|
|
|
option(OPTION_USE_THREADS "Use threads" OFF)
|
|
|
|
else()
|
|
|
|
option(OPTION_USE_THREADS "Use threads" ON)
|
|
|
|
endif()
|
2020-06-07 14:11:36 +00:00
|
|
|
option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF)
|
2020-12-12 23:24:55 +00:00
|
|
|
option(OPTION_TOOLS_ONLY "Build only tools target" OFF)
|
|
|
|
option(OPTION_DOCS_ONLY "Build only docs target" OFF)
|
|
|
|
|
|
|
|
if (OPTION_DOCS_ONLY)
|
|
|
|
set(OPTION_TOOLS_ONLY ON PARENT_SCOPE)
|
|
|
|
endif()
|
2023-04-25 17:43:45 +00:00
|
|
|
|
|
|
|
option(OPTION_SURVEY_KEY "Survey-key to use for the opt-in survey (empty if you have none)" "")
|
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)
|
2021-02-05 11:31:27 +00:00
|
|
|
message(STATUS "Option Package Dependencies - ${OPTION_PACKAGE_DEPENDENCIES}")
|
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
|
|
|
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}")
|
2023-04-25 17:43:45 +00:00
|
|
|
|
|
|
|
if(OPTION_SURVEY_KEY)
|
|
|
|
message(STATUS "Option Survey Key - USED")
|
|
|
|
else()
|
|
|
|
message(STATUS "Option Survey Key - NOT USED")
|
|
|
|
endif()
|
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)
|
2020-09-25 11:55:25 +00:00
|
|
|
if(OPTION_DEDICATED)
|
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
|
|
|
add_definitions(-DDEDICATED)
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
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
|
|
|
|
2020-09-25 11:55:25 +00:00
|
|
|
if(NOT OPTION_USE_THREADS)
|
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
|
|
|
add_definitions(-DNO_THREADS)
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
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
|
|
|
|
2020-09-25 11:55:25 +00:00
|
|
|
if(OPTION_USE_ASSERTS)
|
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
|
|
|
add_definitions(-DWITH_ASSERT)
|
2020-09-25 11:55:25 +00:00
|
|
|
else()
|
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
|
|
|
add_definitions(-DNDEBUG)
|
2020-09-25 11:55:25 +00:00
|
|
|
endif()
|
2023-04-25 17:43:45 +00:00
|
|
|
|
|
|
|
if(OPTION_SURVEY_KEY)
|
|
|
|
add_definitions(-DSURVEY_KEY="${OPTION_SURVEY_KEY}")
|
|
|
|
endif()
|
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()
|