summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtAndroidHelpers.cmake3
-rw-r--r--cmake/QtAutoDetectHelpers.cmake37
-rw-r--r--cmake/QtBaseConfigureTests.cmake30
-rw-r--r--cmake/QtCMakeVersionHelpers.cmake87
-rw-r--r--cmake/QtFeature.cmake8
-rw-r--r--cmake/QtPublicCMakeVersionHelpers.cmake36
-rw-r--r--cmake/QtToolchainHelpers.cmake7
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)