cmake_minimum_required(VERSION 3.16...3.26) include_guard(GLOBAL) # Enable automatic PUSH and POP of policies to parent scope if(POLICY CMP0011) cmake_policy(SET CMP0011 NEW) endif() # Enable distinction between Clang and AppleClang if(POLICY CMP0025) cmake_policy(SET CMP0025 NEW) endif() # Enable strict checking of "break()" usage if(POLICY CMP0055) cmake_policy(SET CMP0055 NEW) endif() # Honor visibility presets for all target types (executable, shared, module, static) if(POLICY CMP0063) cmake_policy(SET CMP0063 NEW) endif() # Disable export function calls to populate package registry by default if(POLICY CMP0090) cmake_policy(SET CMP0090 NEW) endif() # Prohibit in-source builds if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") message(FATAL_ERROR "In-source builds are not supported. " "Specify a build directory via 'cmake -S -B ' instead.") file(REMOVE_RECURSE "${CMAKE_CURRENT_SOURCE_DIR}/CMakeCache.txt" "${CMAKE_CURRENT_SOURCE_DIR}/CMakeFiles") endif() # Use folders for source file organization with IDE generators (Visual Studio/Xcode) set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Add common module directories to default search path list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/common") file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec) # cmake-format: off string(JSON _name GET ${buildspec} name) string(JSON _website GET ${buildspec} website) string(JSON _author GET ${buildspec} author) string(JSON _email GET ${buildspec} email) string(JSON _version GET ${buildspec} version) string(JSON _bundleId GET ${buildspec} platformConfig macos bundleId) string(JSON _macosPackageUUID GET ${buildspec} uuids macosPackage) string(JSON _macosInstallerUUID GET ${buildspec} uuids macosInstaller) string(JSON _windowsAppUUID GET ${buildspec} uuids windowsApp) # cmake-format: on set(PLUGIN_AUTHOR ${_author}) set(PLUGIN_WEBSITE ${_website}) set(PLUGIN_EMAIL ${_email}) set(PLUGIN_VERSION ${_version}) set(MACOS_BUNDLEID ${_bundleId}) include(buildnumber) include(osconfig) # Allow selection of common build types via UI if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo Debug MinSizeRel) endif() # Disable exports automatically going into the CMake package registry set(CMAKE_EXPORT_PACKAGE_REGISTRY FALSE) # Enable default inclusion of targets' source and binary directory set(CMAKE_INCLUDE_CURRENT_DIR TRUE)