diff options
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/QtAndroidHelpers.cmake | 3 | ||||
| -rw-r--r-- | cmake/QtAutoDetectHelpers.cmake | 37 | ||||
| -rw-r--r-- | cmake/QtBaseConfigureTests.cmake | 30 | ||||
| -rw-r--r-- | cmake/QtCMakeVersionHelpers.cmake | 87 | ||||
| -rw-r--r-- | cmake/QtFeature.cmake | 8 | ||||
| -rw-r--r-- | cmake/QtPublicCMakeVersionHelpers.cmake | 36 | ||||
| -rw-r--r-- | cmake/QtToolchainHelpers.cmake | 7 |
7 files changed, 190 insertions, 18 deletions
diff --git a/cmake/QtAndroidHelpers.cmake b/cmake/QtAndroidHelpers.cmake index b473c2c331b..59a469b1683 100644 --- a/cmake/QtAndroidHelpers.cmake +++ b/cmake/QtAndroidHelpers.cmake @@ -442,8 +442,9 @@ function(qt_internal_create_source_jar) add_dependencies(android_source_jars ${jar_target}) if(QT_WILL_INSTALL) + qt_path_join(destination "${INSTALL_DATADIR}" "android" "${module}") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${jar_name}-${PROJECT_VERSION}.jar" - DESTINATION "${INSTALL_DATADIR}/android/${module}" + DESTINATION "${destination}" COMPONENT _install_android_source_jar_${module} EXCLUDE_FROM_ALL ) diff --git a/cmake/QtAutoDetectHelpers.cmake b/cmake/QtAutoDetectHelpers.cmake index fe6087748d6..6e6473da641 100644 --- a/cmake/QtAutoDetectHelpers.cmake +++ b/cmake/QtAutoDetectHelpers.cmake @@ -64,6 +64,41 @@ function(qt_auto_detect_wasm) endif() endfunction() +# Handle assignment of CMAKE_POLICY_VERSION_MINIMUM for Android NDK cmake toolchain files shipped +# with NDK < r28, to avoid deprecation warnings. +# +# NOTE: If updating the version, also update +# qt_internal_get_android_qt_default_cmake_policy_version_minimum. +# +# Use a macro, to make propagation of the variable in the parent scope of the calling function +# easier. +macro(qt_auto_detect_set_android_cmake_policy_version_minimum is_android_detected) + if("${is_android_detected}" + AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0" + AND NOT QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM + ) + + if(QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM) + set(min_policy_version "${QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM}") + elseif(CMAKE_POLICY_VERSION_MINIMUM) + set(min_policy_version "${CMAKE_POLICY_VERSION_MINIMUM}") + else() + set(min_policy_version "3.10") + endif() + + message(DEBUG + "Setting CMAKE_POLICY_VERSION_MINIMUM to ${min_policy_version} for Android builds.") + + # Set the variable in the qtbase directory scope for easier reading. + set(CMAKE_POLICY_VERSION_MINIMUM "${min_policy_version}" PARENT_SCOPE) + + # Also set the environment variable, otherwise any try_compile project that's started + # by CMake itself, rather than Qt (e.g. compiler detection), will not inherit the + # assignment. + set(ENV{CMAKE_POLICY_VERSION_MINIMUM} "${min_policy_version}") + endif() +endmacro() + function(qt_auto_detect_android) # Don't assume an Android build if we're requesting to build Java documentation on the host. if(QT_BUILD_HOST_JAVA_DOCS) @@ -154,6 +189,8 @@ function(qt_auto_detect_android) elseif (QT_AUTODETECT_ANDROID) message(STATUS "Android build detected") endif() + + qt_auto_detect_set_android_cmake_policy_version_minimum("${android_detected}") endfunction() function(qt_auto_detect_vcpkg) diff --git a/cmake/QtBaseConfigureTests.cmake b/cmake/QtBaseConfigureTests.cmake index fcc3b1a3f1c..da97e2b4f8b 100644 --- a/cmake/QtBaseConfigureTests.cmake +++ b/cmake/QtBaseConfigureTests.cmake @@ -306,6 +306,36 @@ function(qt_internal_print_cmake_host_and_target_info) message(STATUS "CMAKE_SYSTEM_PROCESSOR: \"${CMAKE_SYSTEM_PROCESSOR}\"") message(STATUS "CMAKE_CROSSCOMPILING: \"${CMAKE_CROSSCOMPILING}\"") + + message(STATUS "CMAKE_CXX_COMPILER_ID: \"${CMAKE_CXX_COMPILER_ID}\"") + message(STATUS "CMAKE_CXX_COMPILER_VERSION: \"${CMAKE_CXX_COMPILER_VERSION}\"") + + # The variables might not be defined depending on platform and CMake version. + if(CMAKE_CXX_COMPILER_TARGET) + message(STATUS "CMAKE_CXX_COMPILER_TARGET: \"${CMAKE_CXX_COMPILER_TARGET}\"") + endif() + if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID) + message(STATUS + "CMAKE_CXX_COMPILER_ARCHITECTURE_ID: \"${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}\"") + endif() + if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT) + message(STATUS + "CMAKE_CXX_COMPILER_FRONTEND_VARIANT: \"${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}\"") + endif() + + if(CMAKE_CXX_COMPILER_LINKER_ID) + message(STATUS "CMAKE_CXX_COMPILER_LINKER_ID: \"${CMAKE_CXX_COMPILER_LINKER_ID}\"") + endif() + + if(CMAKE_CXX_COMPILER_LINKER_VERSION) + message(STATUS + "CMAKE_CXX_COMPILER_LINKER_VERSION: \"${CMAKE_CXX_COMPILER_LINKER_VERSION}\"") + endif() + + if(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT) + message(STATUS "CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT: " + "\"${CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT}\"") + endif() endfunction() qt_internal_print_cmake_host_and_target_info() diff --git a/cmake/QtCMakeVersionHelpers.cmake b/cmake/QtCMakeVersionHelpers.cmake index 3a3ba0fc750..73b40b4a610 100644 --- a/cmake/QtCMakeVersionHelpers.cmake +++ b/cmake/QtCMakeVersionHelpers.cmake @@ -300,3 +300,90 @@ function(qt_internal_upgrade_cmake_policies) qt_internal_get_max_new_policy_cmake_version(upper_version) cmake_minimum_required(VERSION ${lower_version}...${upper_version}) endfunction() + +# Get which version to use for CMAKE_POLICY_VERSION_MINIMUM on Android. +# Allow various overrides via QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM and reading an existing +# CMAKE_POLICY_VERSION_MINIMUM. +function(qt_internal_get_android_cmake_policy_version_minimum_value out_var) + if(QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM) + set(value "${QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM}") + elseif(CMAKE_POLICY_VERSION_MINIMUM) + set(value "${CMAKE_POLICY_VERSION_MINIMUM}") + else() + qt_internal_get_android_qt_default_cmake_policy_version_minimum(default_value) + set(value "${default_value}") + endif() + + set(${out_var} "${value}" PARENT_SCOPE) +endfunction() + +# NOTE: If updating the version, also update +# qt_auto_detect_set_android_cmake_policy_version_minimum. +function(qt_internal_get_android_qt_default_cmake_policy_version_minimum out_var) + set(${out_var} "3.10" PARENT_SCOPE) +endfunction() + +# Handle assignment of CMAKE_POLICY_VERSION_MINIMUM for Android NDK cmake toolchain files shipped +# with NDK < r28, to avoid deprecation warnings. +# See https://github.com/android/ndk/issues/2100 +# and https://android.googlesource.com/platform/ndk/+/799e5a2d44cc2cc6c7d67f52f2d67957944b7680 +# The function is to get the appropriate var asisgnment for try_compile calls, +# as well as writing it to the Qt generated toolchain file. +# Various opt-outs and opt-ins are provided via QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM +# and QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM. +# +# See also usage in qt_auto_detect_set_android_cmake_policy_version_minimum. +function(qt_internal_get_android_cmake_policy_version_minimum_assignment out_var) + set(option_args "") + set(single_args + TYPE + ) + set(multi_args "") + + cmake_parse_arguments(PARSE_ARGV 1 arg + "${option_args}" + "${single_args}" + "${multi_args}" + ) + _qt_internal_validate_all_args_are_parsed(arg) + + set(value "") + if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0" + AND NOT QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM + ) + qt_internal_get_android_cmake_policy_version_minimum_value(version) + + if(arg_TYPE STREQUAL "COMMAND_LINE") + set(value "-DCMAKE_POLICY_VERSION_MINIMUM=${version}") + + elseif(arg_TYPE STREQUAL "TOOLCHAIN_FILE_ASSIGNMENT") + set(value " +# Avoid deprecation warnings in Android ndk cmake toolchain file < r28 +set(__qt_initially_configured_android_cmake_policy_version_minimum \"${version}\") +if(CMAKE_VERSION VERSION_GREATER_EQUAL \"4.0\" + AND NOT QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM + ) + if(QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM) + set(__qt_toolchain_cmake_policy_version_minimum + \"\${QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM}\") + elseif(CMAKE_POLICY_VERSION_MINIMUM) + set(__qt_toolchain_cmake_policy_version_minimum + \"\${CMAKE_POLICY_VERSION_MINIMUM}\") + else() + set(__qt_toolchain_cmake_policy_version_minimum + \"\${__qt_initially_configured_android_cmake_policy_version_minimum}\") + endif() + set(CMAKE_POLICY_VERSION_MINIMUM \"\${__qt_toolchain_cmake_policy_version_minimum}\") + message(DEBUG + \"Setting CMAKE_POLICY_VERSION_MINIMUM to \" + \"\${__qt_toolchain_cmake_policy_version_minimum}\ in toolchain file.\") +endif() +") + else() + message(FATAL_ERROR "Unknown TYPE value '${arg_TYPE}'. " + " Supported values are COMMAND_LINE and VAR_ASSIGNMENT.") + endif() + endif() + + set(${out_var} "${value}" PARENT_SCOPE) +endfunction() diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index e8ae3dd5163..de0323214c5 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -1737,6 +1737,14 @@ function(qt_get_platform_try_compile_vars out_var) list(APPEND flags_cmd_line "-DCMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH:BOOL=OFF") endif() + if(ANDROID) + qt_internal_get_android_cmake_policy_version_minimum_assignment( + android_cmake_policy_version_minimum TYPE COMMAND_LINE) + if(android_cmake_policy_version_minimum) + list(APPEND flags_cmd_line "${android_cmake_policy_version_minimum}") + endif() + endif() + set("${out_var}" "${flags_cmd_line}" PARENT_SCOPE) endfunction() diff --git a/cmake/QtPublicCMakeVersionHelpers.cmake b/cmake/QtPublicCMakeVersionHelpers.cmake index 292d97c84e7..0207c087e1a 100644 --- a/cmake/QtPublicCMakeVersionHelpers.cmake +++ b/cmake/QtPublicCMakeVersionHelpers.cmake @@ -107,10 +107,9 @@ endfunction() # Handle force-assignment of CMP0156 policy when using CMake 3.29+. # # For Apple-platforms we set it to NEW, to avoid duplicate linker issues when using -ObjC flag. +# For Emscripten / WebAssembly we also set it to NEW, to avoid duplicate linker issues. # -# For non-Apple platforms we set it to OLD, because we haven't done the necessary testing to -# see which platforms / linkers can handle the new deduplication behavior, without breaking the -# various linking techniques that Qt uses for object library propagation. +# For other platforms, we leave the policy value as-is, without showing any warnings. function(__qt_internal_set_cmp0156) # Exit early if not using CMake 3.29+ if(NOT POLICY CMP0156) @@ -164,29 +163,32 @@ function(__qt_internal_set_cmp0156) set(default_policy_value NEW) set(unsupported_policy_value OLD) else() - # For non-Apple linkers, we keep the previous behavior of not deduplicating libraries, - # because we haven't done the necessary testing to identify on which platforms - # it is safe to deduplicate. - set(default_policy_value OLD) - set(unsupported_policy_value NEW) + # For other platforms we don't enforce any policy values and keep them as-is. + set(default_policy_value "") + set(unsupported_policy_value "") endif() # Force set the default policy value for the given platform, even if the policy value is # the same or empty. That's because in the calling function scope, the value can be empty # due to the cmake_minimum_required call in Qt6Config.cmake resetting the policy value. - get_cmake_property(debug_message_shown _qt_internal_cmp0156_debug_message_shown) - if(NOT debug_message_shown) - message(DEBUG "Force setting the CMP0156 policy to '${default_policy_value}' " - "for platform '${CMAKE_SYSTEM_NAME}'.") - set_property(GLOBAL PROPERTY _qt_internal_cmp0156_debug_message_shown TRUE) - endif() + if(default_policy_value) + get_cmake_property(debug_message_shown _qt_internal_cmp0156_debug_message_shown) + if(NOT debug_message_shown) + message(DEBUG "Force setting the CMP0156 policy to '${default_policy_value}' " + "for platform '${CMAKE_SYSTEM_NAME}'.") + set_property(GLOBAL PROPERTY _qt_internal_cmp0156_debug_message_shown TRUE) + endif() - cmake_policy(SET CMP0156 "${default_policy_value}") + cmake_policy(SET CMP0156 "${default_policy_value}") + endif() - # If the policy is explicitly set to a value other than the default, issue a warning. + # If the policy is explicitly set to a value other than the (non-empty) default, issue a + # warning. # Don't show the warning if the policy is unset, which would be the default for most # projects, because it's too much noise. Also don't show it for Qt builds. - if("${policy_value}" STREQUAL "${unsupported_policy_value}" AND NOT QT_BUILDING_QT) + if(unsupported_policy_value + AND "${policy_value}" STREQUAL "${unsupported_policy_value}" + AND NOT QT_BUILDING_QT) message(WARNING "CMP0156 is set to '${policy_value}'. Qt forces the '${default_policy_value}'" " behavior of this policy for the '${CMAKE_SYSTEM_NAME}' platform by default." diff --git a/cmake/QtToolchainHelpers.cmake b/cmake/QtToolchainHelpers.cmake index 9407fd0ebe5..348a3c25603 100644 --- a/cmake/QtToolchainHelpers.cmake +++ b/cmake/QtToolchainHelpers.cmake @@ -309,6 +309,13 @@ endif()") " \"Please specify the toolchain file with -DQT_CHAINLOAD_TOOLCHAIN_FILE=<file>.\")") list(APPEND init_platform " endif()") list(APPEND init_platform "endif()") + + qt_internal_get_android_cmake_policy_version_minimum_assignment( + android_cmake_policy_version_minimum TYPE TOOLCHAIN_FILE_ASSIGNMENT) + if(android_cmake_policy_version_minimum) + list(APPEND init_platform "${android_cmake_policy_version_minimum}") + endif() + elseif(EMSCRIPTEN) list(APPEND init_platform "include(\${CMAKE_CURRENT_LIST_DIR}/QtPublicWasmToolchainHelpers.cmake) |
