diff --git a/CMakeLists.txt b/CMakeLists.txt index d8e251090c..5249ac8b57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,36 +1,14 @@ -cmake_minimum_required(VERSION 3.0.2) +cmake_minimum_required(VERSION 3.13) set(CMAKE_DISABLE_SOURCE_CHANGES ON) # Must go before project() below set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) # Must go before project() below -if(CMAKE_VERSION VERSION_GREATER "3.11" OR POLICY CMP0072) - # Prefer GLVND over libGL when available; this will be enabled by default - # once the minimum CMake version is at least 3.11. - cmake_policy(SET CMP0072 NEW) -endif() - -if(CMAKE_VERSION VERSION_GREATER "3.12" OR POLICY CMP0074) - # Needed for THIRDPARTY_DIRECTORY support; this will be enabled by default - # once the minimum CMake version is at least 3.12. - cmake_policy(SET CMP0074 NEW) -endif() - if(POLICY CMP0091) # Needed for CMake to pass /MD flag properly with non-VC generators. cmake_policy(SET CMP0091 NEW) endif() # Determine whether we are using a multi-config generator. -if(CMAKE_VERSION VERSION_GREATER "3.8") - get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -else() - message(WARNING "Multi-configuration builds may not work properly when using -a CMake < 3.9. Making a guess if this is a multi-config generator.") - if(DEFINED CMAKE_CONFIGURATION_TYPES) - set(IS_MULTICONFIG ON) - else() - set(IS_MULTICONFIG OFF) - endif() -endif() +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) # Set the default CMAKE_BUILD_TYPE before calling project(). if(IS_MULTICONFIG) @@ -89,11 +67,9 @@ string(REPLACE "$(EFFECTIVE_PLATFORM_NAME)" "" PANDA_CFG_INTDIR "${CMAKE_CFG_INT set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macros/") -if(CMAKE_VERSION VERSION_GREATER "3.8") - # When using the Xcode generator, don't append the platform name to the - # intermediate configuration directory. - set_property(GLOBAL PROPERTY XCODE_EMIT_EFFECTIVE_PLATFORM_NAME OFF) -endif() +# When using the Xcode generator, don't append the platform name to the +# intermediate configuration directory. +set_property(GLOBAL PROPERTY XCODE_EMIT_EFFECTIVE_PLATFORM_NAME OFF) # Include modules builtin to CMake include(GNUInstallDirs) # Defines CMAKE_INSTALL_ variables diff --git a/cmake/macros/BuildMetalib.cmake b/cmake/macros/BuildMetalib.cmake index 079b794b85..8ac7a418a6 100644 --- a/cmake/macros/BuildMetalib.cmake +++ b/cmake/macros/BuildMetalib.cmake @@ -5,83 +5,6 @@ # instead just an agglomeration of the various component libraries that get # linked into them. A library of libraries - a "metalibrary." -# -# Function: target_link_libraries(...) -# -# Overrides CMake's target_link_libraries() to support "linking" object -# libraries. This is a partial reimplementation of CMake commit dc38970f83, -# which is only available in CMake 3.12+ -# -if(CMAKE_VERSION VERSION_LESS "3.12") - function(target_link_libraries target) - get_target_property(target_type "${target}" TYPE) - if(NOT target_type STREQUAL "OBJECT_LIBRARY") - _target_link_libraries("${target}" ${ARGN}) - return() - endif() - - foreach(library ${ARGN}) - # This is a quick and dirty regex to tell targets apart from other stuff. - # It just checks if it's alphanumeric and starts with p3/panda. - if(library MATCHES "^(PKG::|p3|panda)[A-Za-z0-9]*$") - # We need to add "library"'s include directories to "target" - # (and transitively to INTERFACE_INCLUDE_DIRECTORIES so further - # dependencies will work) - set(include_directories "$") - set_property(TARGET "${target}" APPEND PROPERTY INCLUDE_DIRECTORIES "${include_directories}") - set_property(TARGET "${target}" APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${include_directories}") - - # SYSTEM include directories should still be reported as SYSTEM, so - # that warnings from those includes are suppressed - set(sys_include_directories - "$") - target_include_directories("${target}" SYSTEM PUBLIC "${sys_include_directories}") - - # And for INTERFACE_COMPILE_DEFINITIONS as well - set(compile_definitions "$") - set_property(TARGET "${target}" APPEND PROPERTY COMPILE_DEFINITIONS "${compile_definitions}") - set_property(TARGET "${target}" APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "${compile_definitions}") - - # Build up some generator expressions for determining whether `library` - # is a component library or not. - if(library MATCHES ".*::.*") - # "::" messes up CMake's genex parser; fortunately, a library whose - # name contains that is either an interface library or alias, and - # definitely not a component - set(is_component 0) - set(name_of_component "") - set(name_of_non_component "${library}") - - else() - set(is_component "$") - - # CMake complains if we lookup IS_COMPONENT on an INTERFACE library :( - set(is_object "$,OBJECT_LIBRARY>") - set(is_component "$>") - - set(name_of_component "$<${is_component}:$>") - set(name_of_non_component "$<$:$>") - - endif() - - # Libraries are only linked transitively if they aren't components. - set_property(TARGET "${target}" APPEND PROPERTY - INTERFACE_LINK_LIBRARIES "${name_of_non_component}") - - else() - # This is a file path to an out-of-tree library - this needs to be - # recorded so that the metalib can link them. (They aren't needed at - # all for the object libraries themselves, so they don't have to work - # transitively.) - set_property(TARGET "${target}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${library}") - - endif() - - endforeach(library) - - endfunction(target_link_libraries) -endif() - # # Function: add_component_library(target [SYMBOL building_symbol] # [SOURCES] [[NOINIT]/[INIT func [header]]]) diff --git a/cmake/macros/PackageConfig.cmake b/cmake/macros/PackageConfig.cmake index ac020f7866..873c93d098 100644 --- a/cmake/macros/PackageConfig.cmake +++ b/cmake/macros/PackageConfig.cmake @@ -176,18 +176,6 @@ function(package_option name) # Create the INTERFACE library used to depend on this package. add_library(PKG::${name} INTERFACE IMPORTED GLOBAL) - # Explicitly record the package's include directories as system include - # directories. CMake does do this automatically for INTERFACE libraries, but - # it does it by discovering all transitive links first, then reading - # INTERFACE_INCLUDE_DIRECTORIES for those which are INTERFACE libraries. So, - # this would be broken for the metalib system (pre CMake 3.12) which doesn't - # "link" the object libraries. - if(CMAKE_VERSION VERSION_LESS "3.12") - set_target_properties(PKG::${name} PROPERTIES - INTERFACE_SYSTEM_INCLUDE_DIRECTORIES - "$") - endif() - # If the option actually is enabled, populate the INTERFACE library created above if(HAVE_${name}) set(use_variables ON) @@ -412,9 +400,8 @@ function(export_packages filename) endforeach(config) endif() - elseif(CMAKE_VERSION VERSION_GREATER "3.8") - # This is an INTERFACE_LIBRARY, and CMake is new enough to support - # IMPORTED_IMPLIB + else() + # This is an INTERFACE_LIBRARY. get_target_property(imported_libname "${head}" IMPORTED_LIBNAME) if(imported_libname) list(APPEND libraries ${imported_libname}) diff --git a/dtool/CompilerFlags.cmake b/dtool/CompilerFlags.cmake index 8b909ef3ed..b2ec74b980 100644 --- a/dtool/CompilerFlags.cmake +++ b/dtool/CompilerFlags.cmake @@ -48,21 +48,9 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GCC") endif() -# Panda3D is now a C++11 project. Newer versions of CMake support this out of -# the box; for older versions we take a shot in the dark: -if(CMAKE_VERSION VERSION_LESS "3.1") - check_cxx_compiler_flag("-std=gnu++11" COMPILER_SUPPORTS_CXX11) - if(COMPILER_SUPPORTS_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") - endif() - -else() - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) - -endif() +# Panda3D is now a C++11 project. +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) # Set certain CMake flags we expect set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON) @@ -110,21 +98,6 @@ if(APPLE) set(CMAKE_SHARED_MODULE_SUFFIX ".dylib") endif() -# We want the output structured like build/CONFIG/bin, not build/bin/CONFIG per -# the default for multi-configuration generators. In CMake 3.4+, it switches -# automatically if the *_OUTPUT_DIRECTORY property contains a generator -# expresssion, but as of this writing we support as early as CMake 3.0.2. -# -# So, let's just do this: -if(CMAKE_VERSION VERSION_LESS "3.4") - foreach(_type RUNTIME ARCHIVE LIBRARY) - foreach(_config ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER "${_config}" _config) - set(CMAKE_${_type}_OUTPUT_DIRECTORY_${_config} "${CMAKE_${_type}_OUTPUT_DIRECTORY}") - endforeach(_config) - endforeach(_type) -endif() - # Set warning levels if(MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3") diff --git a/dtool/Package.cmake b/dtool/Package.cmake index f98283d8ee..5ac4278cf0 100644 --- a/dtool/Package.cmake +++ b/dtool/Package.cmake @@ -211,19 +211,6 @@ if(Python_FOUND) set(PYTHON_INCLUDE_DIRS ${Python_INCLUDE_DIRS}) set(PYTHON_LIBRARY_DIRS ${Python_LIBRARY_DIRS}) set(PYTHON_VERSION_STRING ${Python_VERSION}) - -elseif(CMAKE_VERSION VERSION_LESS "3.12") - find_package(PythonInterp ${WANT_PYTHON_VERSION} QUIET) - find_package(PythonLibs ${PYTHON_VERSION_STRING} QUIET) - - if(PYTHONLIBS_FOUND) - set(PYTHON_FOUND ON) - - if(NOT PYTHON_VERSION_STRING) - set(PYTHON_VERSION_STRING ${PYTHONLIBS_VERSION_STRING}) - endif() - endif() - endif() if(CMAKE_VERSION VERSION_LESS "3.15") diff --git a/dtool/PandaVersion.cmake b/dtool/PandaVersion.cmake index e27bcbd95d..3813d4ccde 100644 --- a/dtool/PandaVersion.cmake +++ b/dtool/PandaVersion.cmake @@ -46,10 +46,6 @@ math(EXPR PANDA_NUMERIC_VERSION "${PROJECT_VERSION_MAJOR}*1000000 + ${PROJECT_VE # If SOURCE_DATE_EPOCH is set, it affects PandaSystem::get_build_date() if(DEFINED ENV{SOURCE_DATE_EPOCH}) - if(CMAKE_VERSION VERSION_LESS "3.8") - message(FATAL_ERROR "CMake 3.8 is required to support SOURCE_DATE_EPOCH properly.") - endif() - string(TIMESTAMP _build_date "%b %d %Y %H:%M:%S" UTC) # CMake doesn't support %e, replace leading zero in day with space