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 | ||||
| -rw-r--r-- | cmake/configure-cmake-mapping.md | 1 | 
8 files changed, 190 insertions, 19 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) diff --git a/cmake/configure-cmake-mapping.md b/cmake/configure-cmake-mapping.md index 95b1215ddce..fadc03c831b 100644 --- a/cmake/configure-cmake-mapping.md +++ b/cmake/configure-cmake-mapping.md @@ -128,7 +128,6 @@ The following table describes the mapping of configure options to CMake argument  | -glib                                 | -DFEATURE_glib=ON                                 |                                                                 |  | -inotify                              | -DFEATURE_inotify=ON                              |                                                                 |  | -icu                                  | -DFEATURE_icu=ON                                  |                                                                 | -| -pcre                                 | -DFEATURE_pcre2=ON                                |                                                                 |  | -pcre [system/qt]                     | -DFEATURE_system_pcre2=ON/OFF                     |                                                                 |  | -pps                                  | n/a                                               | QNX feature. Not available for 6.0.                             |  | -zlib [system/qt]                     | -DFEATURE_system_zlib=ON/OFF                      |                                                                 | | 
