summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-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/QtToolchainHelpers.cmake7
5 files changed, 169 insertions, 0 deletions
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/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)