mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-02 07:15:27 +08:00
6.5.3 clean
This commit is contained in:
@ -128,7 +128,8 @@ check_cxx_source_compiles("
|
||||
#include <EGL/egl.h>
|
||||
|
||||
int main(int, char **) {
|
||||
EGLint x = 0; EGLDisplay dpy = 0; EGLContext ctx = 0;
|
||||
[[maybe_unused]] EGLint x = 0;
|
||||
EGLDisplay dpy = 0; EGLContext ctx = 0;
|
||||
eglDestroyContext(dpy, ctx);
|
||||
}" HAVE_EGL)
|
||||
|
||||
|
@ -12,12 +12,24 @@ find_path(GSSAPI_INCLUDE_DIRS
|
||||
HINTS ${PC_GSSAPI_INCLUDEDIR}
|
||||
)
|
||||
|
||||
# On macOS, vcpkg opts for finding frameworks LAST. This is generally fine;
|
||||
# however, in the case of GSSAPI, `usr/lib/libgssapi_krb5.tbd` which is a
|
||||
# symlink to `Kerberos.framework` misses a few symols, e.g.,
|
||||
# `___gss_c_nt_hostbased_service_oid_desc`, and it causes build failure.
|
||||
# So, we need to make sure that we find `GSS.framework`.
|
||||
set(gssapi_library_names
|
||||
GSS # framework
|
||||
gss # solaris
|
||||
gssapi # FreeBSD
|
||||
gssapi_krb5
|
||||
)
|
||||
if(APPLE)
|
||||
list(REMOVE_ITEM gssapi_library_names "gssapi_krb5")
|
||||
endif()
|
||||
|
||||
find_library(GSSAPI_LIBRARIES
|
||||
NAMES
|
||||
GSS # framework
|
||||
gss # solaris
|
||||
gssapi # FreeBSD
|
||||
gssapi_krb5
|
||||
${gssapi_library_names}
|
||||
HINTS ${PC_GSSAPI_LIBDIR}
|
||||
)
|
||||
|
||||
@ -44,4 +56,3 @@ mark_as_advanced(GSSAPI_INCLUDE_DIRS GSSAPI_LIBRARIES)
|
||||
include(FeatureSummary)
|
||||
set_package_properties(GSSAPI PROPERTIES
|
||||
DESCRIPTION "Generic Security Services Application Program Interface")
|
||||
|
||||
|
@ -18,9 +18,7 @@ find_package_handle_standard_args(PPS DEFAULT_MSG PPS_INCLUDE_DIR PPS_LIBRARY)
|
||||
mark_as_advanced(PPS_INCLUDE_DIR PPS_LIBRARY)
|
||||
|
||||
if(PPS_FOUND)
|
||||
add_library(__PPS INTERFACE IMPORTED)
|
||||
target_link_libraries(__PPS INTERFACE "${PPS_LIBRARY}")
|
||||
target_include_directories(__PPS INTERFACE "${PPS_INCLUDE_DIR}")
|
||||
|
||||
add_library(PPS::PPS ALIAS __PPS)
|
||||
add_library(PPS::PPS INTERFACE IMPORTED)
|
||||
target_link_libraries(PPS::PPS INTERFACE "${PPS_LIBRARY}")
|
||||
target_include_directories(PPS::PPS INTERFACE "${PPS_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
@ -17,14 +17,18 @@ if (OpenGL_FOUND)
|
||||
|
||||
add_library(WrapOpenGL::WrapOpenGL INTERFACE IMPORTED)
|
||||
if(APPLE)
|
||||
# CMake 3.27 and older:
|
||||
# On Darwin platforms FindOpenGL sets IMPORTED_LOCATION to the absolute path of the library
|
||||
# within the framework. This ends up as an absolute path link flag, which we don't want,
|
||||
# because that makes our .prl files un-relocatable.
|
||||
# Extract the framework path instead, and use that in INTERFACE_LINK_LIBRARIES,
|
||||
# which CMake ends up transforming into a reloctable -framework flag.
|
||||
# which CMake ends up transforming into a relocatable -framework flag.
|
||||
# See https://gitlab.kitware.com/cmake/cmake/-/issues/20871 for details.
|
||||
#
|
||||
# CMake 3.28 and above:
|
||||
# IMPORTED_LOCATION is the absolute path the the OpenGL.framework folder.
|
||||
get_target_property(__opengl_fw_lib_path OpenGL::GL IMPORTED_LOCATION)
|
||||
if(__opengl_fw_lib_path)
|
||||
if(__opengl_fw_lib_path AND NOT __opengl_fw_lib_path MATCHES "/([^/]+)\\.framework$")
|
||||
get_filename_component(__opengl_fw_path "${__opengl_fw_lib_path}" DIRECTORY)
|
||||
endif()
|
||||
|
||||
|
@ -53,6 +53,7 @@ function(qt_internal_add_app target)
|
||||
${arg_NO_UNITY_BUILD}
|
||||
${forward_install_dir}
|
||||
SOURCES ${arg_SOURCES}
|
||||
NO_PCH_SOURCES ${arg_NO_PCH_SOURCES}
|
||||
NO_UNITY_BUILD_SOURCES ${arg_NO_UNITY_BUILD_SOURCES}
|
||||
INCLUDE_DIRECTORIES
|
||||
${arg_INCLUDE_DIRECTORIES}
|
||||
|
@ -115,43 +115,38 @@ endfunction()
|
||||
|
||||
|
||||
function(qt_run_linker_version_script_support)
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/version_flag.map" "VERS_1 { global: sym; };
|
||||
VERS_2 { global: sym; }
|
||||
VERS_1;
|
||||
")
|
||||
if(DEFINED CMAKE_REQUIRED_FLAGS)
|
||||
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
|
||||
else()
|
||||
set(CMAKE_REQUIRED_FLAGS "")
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script=\"${CMAKE_CURRENT_BINARY_DIR}/version_flag.map\"")
|
||||
|
||||
# Pass the linker that the main project uses to the version script compile test.
|
||||
qt_internal_get_active_linker_flags(linker_flags)
|
||||
if(linker_flags)
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS ${linker_flags})
|
||||
endif()
|
||||
|
||||
check_cxx_source_compiles("int main(void){return 0;}" HAVE_LD_VERSION_SCRIPT)
|
||||
if(DEFINED CMAKE_REQUIRED_FLAGS_SAVE)
|
||||
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
|
||||
endif()
|
||||
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
|
||||
|
||||
# For some reason the linker command line written by the XCode generator, which is
|
||||
# subsequently executed by xcodebuild, ignores the linker flag, and thus the test
|
||||
# seemingly succeeds. Explicitly disable the version script test on darwin platforms.
|
||||
if(APPLE)
|
||||
set(HAVE_LD_VERSION_SCRIPT OFF)
|
||||
endif()
|
||||
# Also makes no sense with MSVC-style command-line
|
||||
if(MSVC)
|
||||
if(NOT APPLE AND NOT MSVC)
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/version_flag.map" [=[
|
||||
VERS_1 { global: sym1; };
|
||||
VERS_2 { global: sym2; } VERS_1;
|
||||
]=])
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS "")
|
||||
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS
|
||||
"-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/version_flag.map")
|
||||
# Pass the linker that the main project uses to the version script compile test.
|
||||
qt_internal_get_active_linker_flags(linker_flags)
|
||||
if(linker_flags)
|
||||
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${linker_flags})
|
||||
endif()
|
||||
check_cxx_source_compiles([=[
|
||||
int sym1;
|
||||
int sym2;
|
||||
int main(void) { return 0; }
|
||||
]=] HAVE_LD_VERSION_SCRIPT)
|
||||
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/version_flag.map")
|
||||
else()
|
||||
set(HAVE_LD_VERSION_SCRIPT OFF)
|
||||
endif()
|
||||
|
||||
set(TEST_ld_version_script "${HAVE_LD_VERSION_SCRIPT}" CACHE INTERNAL "linker version script support")
|
||||
set(TEST_ld_version_script "${HAVE_LD_VERSION_SCRIPT}"
|
||||
CACHE INTERNAL "linker version script support")
|
||||
list(APPEND QT_BASE_CONFIGURE_TESTS_VARS_TO_EXPORT TEST_ld_version_script)
|
||||
set(QT_BASE_CONFIGURE_TESTS_VARS_TO_EXPORT ${QT_BASE_CONFIGURE_TESTS_VARS_TO_EXPORT} CACHE INTERNAL "Test variables that should be exported")
|
||||
set(QT_BASE_CONFIGURE_TESTS_VARS_TO_EXPORT ${QT_BASE_CONFIGURE_TESTS_VARS_TO_EXPORT}
|
||||
CACHE INTERNAL "Test variables that should be exported")
|
||||
endfunction()
|
||||
|
||||
function(qt_internal_ensure_latest_win_nt_api)
|
||||
|
@ -101,7 +101,8 @@ if(MACOS AND QT_IS_MACOS_UNIVERSAL
|
||||
QT_FEATURE_x86intrin)
|
||||
endif()
|
||||
|
||||
if(MACOS AND QT_IS_MACOS_UNIVERSAL AND __qt_osx_first_arch STREQUAL "x86_64")
|
||||
if(MACOS AND QT_IS_MACOS_UNIVERSAL AND
|
||||
(__qt_osx_first_arch STREQUAL "x86_64" OR __qt_osx_first_arch STREQUAL "x86_64h"))
|
||||
set(QT_FORCE_FEATURE_neon ON CACHE INTERNAL "Force enable neon due to platform requirements.")
|
||||
set(__QtFeature_custom_enabled_cache_variables
|
||||
TEST_subarch_neon
|
||||
@ -373,6 +374,10 @@ qt_copy_or_install(DIRECTORY cmake/
|
||||
FILES_MATCHING PATTERN "Find*.cmake"
|
||||
PATTERN "tests" EXCLUDE
|
||||
PATTERN "3rdparty" EXCLUDE
|
||||
PATTERN "macos" EXCLUDE
|
||||
PATTERN "ios" EXCLUDE
|
||||
PATTERN "platforms" EXCLUDE
|
||||
PATTERN "QtBuildInternals" EXCLUDE
|
||||
)
|
||||
|
||||
# In prefix builds we also need to copy the files into the build config directory, so that the
|
||||
@ -383,6 +388,10 @@ if(QT_WILL_INSTALL)
|
||||
FILES_MATCHING PATTERN "Find*.cmake"
|
||||
PATTERN "tests" EXCLUDE
|
||||
PATTERN "3rdparty" EXCLUDE
|
||||
PATTERN "macos" EXCLUDE
|
||||
PATTERN "ios" EXCLUDE
|
||||
PATTERN "platforms" EXCLUDE
|
||||
PATTERN "QtBuildInternals" EXCLUDE
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@ -284,21 +284,21 @@ if(WIN32)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
list(APPEND QT_DEFAULT_PLATFORM_DEFINITIONS WIN64 _WIN64)
|
||||
endif()
|
||||
if(MSVC)
|
||||
if (CLANG)
|
||||
|
||||
if(CLANG)
|
||||
if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" OR MSVC)
|
||||
set(QT_DEFAULT_MKSPEC win32-clang-msvc)
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
|
||||
elseif(CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU" OR MINGW)
|
||||
set(QT_DEFAULT_MKSPEC win32-clang-g++)
|
||||
endif()
|
||||
elseif(MSVC)
|
||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
|
||||
set(QT_DEFAULT_MKSPEC win32-arm64-msvc)
|
||||
else()
|
||||
set(QT_DEFAULT_MKSPEC win32-msvc)
|
||||
endif()
|
||||
elseif(CLANG AND MINGW)
|
||||
set(QT_DEFAULT_MKSPEC win32-clang-g++)
|
||||
elseif(MINGW)
|
||||
set(QT_DEFAULT_MKSPEC win32-g++)
|
||||
endif()
|
||||
|
||||
if (MINGW)
|
||||
list(APPEND QT_DEFAULT_PLATFORM_DEFINITIONS MINGW_HAS_SECURE_API=1)
|
||||
endif()
|
||||
elseif(LINUX)
|
||||
@ -376,15 +376,23 @@ else()
|
||||
set(QT_QMAKE_HOST_MKSPEC "${QT_QMAKE_TARGET_MKSPEC}")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${QT_MKSPECS_DIR}/${QT_QMAKE_TARGET_MKSPEC}")
|
||||
if(NOT QT_QMAKE_TARGET_MKSPEC OR NOT EXISTS "${QT_MKSPECS_DIR}/${QT_QMAKE_TARGET_MKSPEC}")
|
||||
if(NOT QT_QMAKE_TARGET_MKSPEC)
|
||||
set(reason "Platform is not detected. Please make sure your build environment is configured"
|
||||
" properly or specify it manually using QT_QMAKE_TARGET_MKSPEC variable and one of the"
|
||||
" known platforms.")
|
||||
else()
|
||||
set(reason "Unknown platform ${QT_QMAKE_TARGET_MKSPEC}")
|
||||
endif()
|
||||
|
||||
file(GLOB known_platforms
|
||||
LIST_DIRECTORIES true
|
||||
RELATIVE "${QT_MKSPECS_DIR}"
|
||||
"${QT_MKSPECS_DIR}/*"
|
||||
)
|
||||
list(JOIN known_platforms "\n " known_platforms)
|
||||
message(FATAL_ERROR "Unknown platform ${QT_QMAKE_TARGET_MKSPEC}\n\
|
||||
Known platforms:\n ${known_platforms}")
|
||||
message(FATAL_ERROR "${reason}\n"
|
||||
"Known platforms:\n ${known_platforms}")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED QT_DEFAULT_PLATFORM_DEFINITIONS)
|
||||
@ -459,6 +467,7 @@ set(__default_private_args
|
||||
DISABLE_AUTOGEN_TOOLS
|
||||
ENABLE_AUTOGEN_TOOLS
|
||||
PLUGIN_TYPES
|
||||
NO_PCH_SOURCES
|
||||
NO_UNITY_BUILD_SOURCES
|
||||
)
|
||||
set(__default_public_args
|
||||
|
@ -109,7 +109,7 @@ from the build directory")
|
||||
set(QT_INTERNAL_BUILD_INSTRUCTIONS_SHOWN "TRUE" CACHE STRING "" FORCE)
|
||||
|
||||
if(QT_SUPERBUILD)
|
||||
qt_internal_save_previously_found_packages()
|
||||
qt_internal_save_previously_visited_packages()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
@ -308,24 +308,19 @@ function(qt_build_internals_add_toplevel_targets)
|
||||
endfunction()
|
||||
|
||||
macro(qt_enable_cmake_languages)
|
||||
include(CheckLanguage)
|
||||
set(__qt_required_language_list C CXX)
|
||||
set(__qt_optional_language_list )
|
||||
set(__qt_platform_required_language_list )
|
||||
|
||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/20545
|
||||
if(APPLE)
|
||||
list(APPEND __qt_optional_language_list OBJC OBJCXX)
|
||||
list(APPEND __qt_platform_required_language_list OBJC OBJCXX)
|
||||
endif()
|
||||
|
||||
foreach(__qt_lang ${__qt_required_language_list})
|
||||
enable_language(${__qt_lang})
|
||||
endforeach()
|
||||
|
||||
foreach(__qt_lang ${__qt_optional_language_list})
|
||||
check_language(${__qt_lang})
|
||||
if(CMAKE_${__qt_lang}_COMPILER)
|
||||
enable_language(${__qt_lang})
|
||||
endif()
|
||||
foreach(__qt_lang ${__qt_platform_required_language_list})
|
||||
enable_language(${__qt_lang})
|
||||
endforeach()
|
||||
|
||||
# The qtbase call is handled in qtbase/CMakeLists.txt.
|
||||
@ -434,6 +429,12 @@ macro(qt_build_repo_begin)
|
||||
add_custom_target(sync_headers)
|
||||
endif()
|
||||
|
||||
# The special target that we use to sync 3rd-party headers before the gn run when building
|
||||
# qtwebengine in top-level builds.
|
||||
if(NOT TARGET thirdparty_sync_headers)
|
||||
add_custom_target(thirdparty_sync_headers)
|
||||
endif()
|
||||
|
||||
# Add global qt_plugins, qpa_plugins and qpa_default_plugins convenience custom targets.
|
||||
# Internal executables will add a dependency on the qpa_default_plugins target,
|
||||
# so that building and running a test ensures it won't fail at runtime due to a missing qpa
|
||||
@ -562,7 +563,7 @@ macro(qt_build_repo_end)
|
||||
endif()
|
||||
|
||||
if(NOT QT_SUPERBUILD)
|
||||
qt_internal_save_previously_found_packages()
|
||||
qt_internal_save_previously_visited_packages()
|
||||
endif()
|
||||
|
||||
if(QT_INTERNAL_FRESH_REQUESTED)
|
||||
@ -1415,3 +1416,13 @@ function(qt_internal_run_common_config_tests)
|
||||
qt_internal_check_cmp0099_available()
|
||||
qt_configure_end_summary_section()
|
||||
endfunction()
|
||||
|
||||
# It is used in QtWebEngine to replace the REALPATH with ABSOLUTE path, which is
|
||||
# useful for building Qt in Homebrew.
|
||||
function(qt_internal_get_filename_path_mode out_var)
|
||||
set(mode REALPATH)
|
||||
if(APPLE AND QT_ALLOW_SYMLINK_IN_PATHS)
|
||||
set(mode ABSOLUTE)
|
||||
endif()
|
||||
set(${out_var} ${mode} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
@ -124,5 +124,5 @@ endif()
|
||||
# Emscripten Clang
|
||||
if(WASM)
|
||||
set(QT_CFLAGS_OPTIMIZE_DEBUG "-O2 -g") # -Og is not supported
|
||||
set(QT_CFLAGS_SSE2 -O2 -msimd128 -msse -msse2)
|
||||
set(QT_CFLAGS_SSE2 "-O2 -msimd128 -msse -msse2")
|
||||
endif()
|
||||
|
@ -30,6 +30,7 @@ function(qt_internal_add_executable name)
|
||||
endif()
|
||||
|
||||
_qt_internal_create_executable(${name})
|
||||
qt_internal_mark_as_internal_target(${name})
|
||||
if(ANDROID)
|
||||
_qt_internal_android_executable_finalizer(${name})
|
||||
endif()
|
||||
@ -119,6 +120,7 @@ function(qt_internal_add_executable name)
|
||||
qt_internal_extend_target("${name}"
|
||||
${arg_NO_UNITY_BUILD}
|
||||
SOURCES ${arg_SOURCES}
|
||||
NO_PCH_SOURCES ${arg_NO_PCH_SOURCES}
|
||||
NO_UNITY_BUILD_SOURCES ${arg_NO_UNITY_BUILD_SOURCES}
|
||||
INCLUDE_DIRECTORIES ${private_includes}
|
||||
DEFINES ${arg_DEFINES}
|
||||
@ -369,6 +371,7 @@ function(qt_internal_add_configure_time_executable target)
|
||||
set(target_binary_dir "${CMAKE_CURRENT_BINARY_DIR}/configure_time_bins")
|
||||
if(arg_CONFIG)
|
||||
set(CMAKE_TRY_COMPILE_CONFIGURATION "${arg_CONFIG}")
|
||||
string(TOUPPER "_${arg_CONFIG}" config_suffix)
|
||||
endif()
|
||||
|
||||
get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
|
||||
@ -462,6 +465,29 @@ function(qt_internal_add_configure_time_executable target)
|
||||
set(cmake_flags_arg CMAKE_FLAGS "${arg_CMAKE_FLAGS}")
|
||||
endif()
|
||||
configure_file("${template}" "${target_binary_dir}/CMakeLists.txt" @ONLY)
|
||||
|
||||
qt_internal_get_enabled_languages_for_flag_manipulation(enabled_languages)
|
||||
foreach(lang IN LISTS enabled_languages)
|
||||
set(compiler_flags_var "CMAKE_${lang}_FLAGS")
|
||||
list(APPEND cmake_flags_arg "-D${compiler_flags_var}:STRING=${${compiler_flags_var}}")
|
||||
if(arg_CONFIG)
|
||||
set(compiler_flags_var_config "${compiler_flags_var}${config_suffix}")
|
||||
list(APPEND cmake_flags_arg
|
||||
"-D${compiler_flags_var_config}:STRING=${${compiler_flags_var_config}}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
qt_internal_get_target_link_types_for_flag_manipulation(target_link_types)
|
||||
foreach(linker_type IN LISTS target_link_types)
|
||||
set(linker_flags_var "CMAKE_${linker_type}_LINKER_FLAGS")
|
||||
list(APPEND cmake_flags_arg "-D${linker_flags_var}:STRING=${${linker_flags_var}}")
|
||||
if(arg_CONFIG)
|
||||
set(linker_flags_var_config "${linker_flags_var}${config_suffix}")
|
||||
list(APPEND cmake_flags_arg
|
||||
"-D${linker_flags_var_config}:STRING=${${linker_flags_var_config}}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
try_compile(result
|
||||
"${target_binary_dir}"
|
||||
"${target_binary_dir}"
|
||||
|
@ -41,10 +41,13 @@ macro(qt_find_package)
|
||||
# Due to this behavior being different from what general CMake projects expect, it is only
|
||||
# done for -developer-builds.
|
||||
if(QT_INTERNAL_PREVIOUSLY_FOUND_PACKAGES AND
|
||||
NOT "${ARGV0}" IN_LIST QT_INTERNAL_PREVIOUSLY_FOUND_PACKAGES)
|
||||
NOT "${ARGV0}" IN_LIST QT_INTERNAL_PREVIOUSLY_FOUND_PACKAGES
|
||||
AND "${ARGV0}" IN_LIST QT_INTERNAL_PREVIOUSLY_SEARCHED_PACKAGES)
|
||||
set(_qt_find_package_skip_find_package TRUE)
|
||||
endif()
|
||||
|
||||
set_property(GLOBAL APPEND PROPERTY _qt_previously_searched_packages "${ARGV0}")
|
||||
|
||||
if(QT_DEBUG_QT_FIND_PACKAGE AND ${ARGV0}_FOUND AND arg_PROVIDED_TARGETS)
|
||||
set(_qt_find_package_skip_find_package TRUE)
|
||||
foreach(qt_find_package_target_name ${arg_PROVIDED_TARGETS})
|
||||
@ -221,7 +224,7 @@ endmacro()
|
||||
# Only applies to -developer-builds by default.
|
||||
# Can also be opted in or opted out via QT_INTERNAL_SAVE_PREVIOUSLY_FOUND_PACKAGES.
|
||||
# Opting out will need two reconfigurations to take effect.
|
||||
function(qt_internal_save_previously_found_packages)
|
||||
function(qt_internal_save_previously_visited_packages)
|
||||
if(DEFINED QT_INTERNAL_SAVE_PREVIOUSLY_FOUND_PACKAGES)
|
||||
set(should_save "${QT_INTERNAL_SAVE_PREVIOUSLY_FOUND_PACKAGES}")
|
||||
else()
|
||||
@ -235,6 +238,7 @@ function(qt_internal_save_previously_found_packages)
|
||||
if(NOT should_save)
|
||||
# When the value is flipped to OFF, remove any previously saved packages.
|
||||
unset(QT_INTERNAL_PREVIOUSLY_FOUND_PACKAGES CACHE)
|
||||
unset(QT_INTERNAL_PREVIOUSLY_SEARCHED_PACKAGES CACHE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
@ -244,6 +248,15 @@ function(qt_internal_save_previously_found_packages)
|
||||
set(QT_INTERNAL_PREVIOUSLY_FOUND_PACKAGES "${_qt_previously_found_packages}" CACHE INTERNAL
|
||||
"List of CMake packages found during configuration using qt_find_package.")
|
||||
endif()
|
||||
|
||||
get_property(_qt_previously_searched_packages GLOBAL PROPERTY _qt_previously_searched_packages)
|
||||
if(_qt_previously_searched_packages)
|
||||
list(REMOVE_DUPLICATES _qt_previously_searched_packages)
|
||||
set(QT_INTERNAL_PREVIOUSLY_SEARCHED_PACKAGES
|
||||
"${_qt_previously_searched_packages}" CACHE INTERNAL
|
||||
"List of CMake packages searched during configuration using qt_find_package."
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Return qmake library name for the given target, e.g. return "vulkan" for "Vulkan::Vulkan".
|
||||
|
@ -33,22 +33,15 @@ function(qt_internal_add_linker_version_script target)
|
||||
endif()
|
||||
string(APPEND contents "};\n")
|
||||
set(current "Qt_${PROJECT_VERSION_MAJOR}")
|
||||
if (QT_NAMESPACE STREQUAL "")
|
||||
set(tag_symbol "qt_version_tag")
|
||||
else()
|
||||
set(tag_symbol "qt_version_tag_${QT_NAMESPACE}")
|
||||
endif()
|
||||
string(APPEND contents "${current} { *; };\n")
|
||||
|
||||
foreach(minor_version RANGE ${PROJECT_VERSION_MINOR})
|
||||
set(previous "${current}")
|
||||
set(current "Qt_${PROJECT_VERSION_MAJOR}.${minor_version}")
|
||||
if (minor_version EQUAL ${PROJECT_VERSION_MINOR})
|
||||
string(APPEND contents "${current} { ${tag_symbol}; } ${previous};\n")
|
||||
else()
|
||||
string(APPEND contents "${current} {} ${previous};\n")
|
||||
endif()
|
||||
endforeach()
|
||||
get_target_property(type ${target} TYPE)
|
||||
if(NOT target_type STREQUAL "INTERFACE_LIBRARY")
|
||||
set(property_genex "$<TARGET_PROPERTY:${target},_qt_extra_linker_script_content>")
|
||||
set(check_genex "$<BOOL:${property_genex}>")
|
||||
string(APPEND contents
|
||||
"$<${check_genex}:${property_genex}>")
|
||||
endif()
|
||||
|
||||
set(infile "${CMAKE_CURRENT_BINARY_DIR}/${target}.version.in")
|
||||
set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${target}.version")
|
||||
@ -87,6 +80,11 @@ function(qt_internal_add_link_flags_no_undefined target)
|
||||
if (NOT QT_BUILD_SHARED_LIBS OR WASM)
|
||||
return()
|
||||
endif()
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||
# ld64 defaults to -undefined,error, and in Xcode 15
|
||||
# passing this option is deprecated, causing a warning.
|
||||
return()
|
||||
endif()
|
||||
if ((GCC OR CLANG) AND NOT MSVC)
|
||||
if(CLANG AND QT_FEATURE_sanitizer)
|
||||
return()
|
||||
@ -124,11 +122,20 @@ endfunction()
|
||||
|
||||
function(qt_internal_apply_gc_binaries target visibility)
|
||||
set(possible_visibilities PRIVATE INTERFACE PUBLIC)
|
||||
list(FIND possible_visibilities "${visibility}" known_visibility)
|
||||
if (known_visibility EQUAL "-1")
|
||||
if(NOT visibility IN_LIST possible_visibilities)
|
||||
message(FATAL_ERROR "Visibitily setting must be one of PRIVATE, INTERFACE or PUBLIC.")
|
||||
endif()
|
||||
|
||||
string(JOIN "" clang_or_gcc_begin
|
||||
"$<$<OR:"
|
||||
"$<CXX_COMPILER_ID:GNU>,"
|
||||
"$<CXX_COMPILER_ID:Clang>,"
|
||||
"$<CXX_COMPILER_ID:AppleClang>,"
|
||||
"$<CXX_COMPILER_ID:IntelLLVM>"
|
||||
">:"
|
||||
)
|
||||
set(clang_or_gcc_end ">")
|
||||
|
||||
if ((GCC OR CLANG) AND NOT WASM AND NOT UIKIT AND NOT MSVC)
|
||||
if(APPLE)
|
||||
set(gc_sections_flag "-Wl,-dead_strip")
|
||||
@ -137,16 +144,26 @@ function(qt_internal_apply_gc_binaries target visibility)
|
||||
elseif(LINUX OR BSD OR WIN32 OR ANDROID)
|
||||
set(gc_sections_flag "-Wl,--gc-sections")
|
||||
endif()
|
||||
|
||||
# Save the flag value with and without genex wrapping, so we can remove the wrapping
|
||||
# when generating .pc pkgconfig files.
|
||||
set_property(GLOBAL PROPERTY _qt_internal_gc_sections_without_genex "${gc_sections_flag}")
|
||||
|
||||
set(gc_sections_flag
|
||||
"${clang_or_gcc_begin}${gc_sections_flag}${clang_or_gcc_end}")
|
||||
|
||||
set_property(GLOBAL PROPERTY _qt_internal_gc_sections_with_genex "${gc_sections_flag}")
|
||||
endif()
|
||||
if(gc_sections_flag)
|
||||
target_link_options("${target}" ${visibility} "${gc_sections_flag}")
|
||||
endif()
|
||||
|
||||
if((GCC OR CLANG) AND NOT WASM AND NOT UIKIT AND NOT MSVC)
|
||||
set(split_sections_flags "-ffunction-sections" "-fdata-sections")
|
||||
set(split_sections_flags
|
||||
"${clang_or_gcc_begin}-ffunction-sections;-fdata-sections${clang_or_gcc_end}")
|
||||
endif()
|
||||
if(split_sections_flags)
|
||||
target_compile_options("${target}" ${visibility} ${split_sections_flags})
|
||||
target_compile_options("${target}" ${visibility} "${split_sections_flags}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
@ -156,13 +173,17 @@ function(qt_internal_apply_intel_cet target visibility)
|
||||
endif()
|
||||
|
||||
set(possible_visibilities PRIVATE INTERFACE PUBLIC)
|
||||
list(FIND possible_visibilities "${visibility}" known_visibility)
|
||||
if (known_visibility EQUAL "-1")
|
||||
if(NOT visibility IN_LIST possible_visibilities)
|
||||
message(FATAL_ERROR "Visibitily setting must be one of PRIVATE, INTERFACE or PUBLIC.")
|
||||
endif()
|
||||
|
||||
if(GCC)
|
||||
set(flags "-mshstk")
|
||||
string(JOIN "" flags
|
||||
"$<$<OR:"
|
||||
"$<CXX_COMPILER_ID:GNU>,"
|
||||
"$<CXX_COMPILER_ID:Clang>,"
|
||||
"$<CXX_COMPILER_ID:AppleClang>"
|
||||
">:-mshstk>")
|
||||
endif()
|
||||
if(flags)
|
||||
target_compile_options("${target}" ${visibility} "${flags}")
|
||||
@ -287,14 +308,15 @@ function(qt_set_msvc_cplusplus_options target visibility)
|
||||
# Check qt_config_compile_test for more info.
|
||||
if(MSVC AND MSVC_VERSION GREATER_EQUAL 1913)
|
||||
set(flags "-Zc:__cplusplus" "-permissive-")
|
||||
target_compile_options("${target}" ${visibility} "$<$<COMPILE_LANGUAGE:CXX>:${flags}>")
|
||||
target_compile_options("${target}" ${visibility}
|
||||
"$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<COMPILE_LANGUAGE:CXX>>:${flags}>")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(qt_enable_utf8_sources target)
|
||||
set(utf8_flags "")
|
||||
if(MSVC)
|
||||
list(APPEND utf8_flags "-utf-8")
|
||||
list(APPEND utf8_flags "$<$<CXX_COMPILER_ID:MSVC>:-utf-8>")
|
||||
endif()
|
||||
|
||||
if(utf8_flags)
|
||||
@ -557,12 +579,20 @@ endfunction()
|
||||
|
||||
# Removes specified flags from CMAKE_<LANGUAGES>_FLAGS[_CONFIGS] variables
|
||||
#
|
||||
# IN_CACHE enables flags removal from CACHE
|
||||
# CONFIGS list of configurations that need to clear flags. Clears all configs by default if not
|
||||
# specified.
|
||||
# LANGUAGES list of LANGUAGES that need clear flags. Clears all languages by default if not
|
||||
# specified.
|
||||
# REGEX enables the flag processing as a regular expression.
|
||||
# Option Arguments:
|
||||
# IN_CACHE
|
||||
# Enables flags removal from CACHE
|
||||
# REGEX
|
||||
# Enables the flag processing as a regular expression.
|
||||
#
|
||||
# Multi-value Arguments:
|
||||
# CONFIGS
|
||||
# List of configurations that need to clear flags. Clears all configs by default if not
|
||||
# specified.
|
||||
#
|
||||
# LANGUAGES
|
||||
# List of LANGUAGES that need clear flags. Clears all languages by default if not
|
||||
# specified.
|
||||
function(qt_internal_remove_compiler_flags flags)
|
||||
cmake_parse_arguments(PARSE_ARGV 1 arg
|
||||
"IN_CACHE;REGEX"
|
||||
@ -585,8 +615,7 @@ function(qt_internal_remove_compiler_flags flags)
|
||||
if(arg_CONFIGS)
|
||||
set(configs "${arg_CONFIGS}")
|
||||
else()
|
||||
message(FATAL_ERROR
|
||||
"You must specify at least one configuration for which to remove the flags.")
|
||||
qt_internal_get_configs_for_flag_manipulation(configs)
|
||||
endif()
|
||||
|
||||
if(arg_REGEX)
|
||||
@ -992,14 +1021,42 @@ function(qt_internal_set_up_config_optimizations_like_in_qmake)
|
||||
IN_CACHE)
|
||||
endif()
|
||||
|
||||
# Legacy Android toolchain file adds the `-g` flag to CMAKE_<LANG>_FLAGS, as a
|
||||
# result, our release build ends up containing debug symbols. To avoid that, we
|
||||
# remove the flag from CMAKE_<LANGL>_FLAGS and add
|
||||
# it to CMAKE_<LANG>_FLAGS_DEBUG.
|
||||
#
|
||||
# Note:
|
||||
# The new `android.toolchain.cmake` file does not have this problem, but
|
||||
# it has other issues, eg., https://github.com/android/ndk/issues/1693, so we
|
||||
# cannot force it. While we do load the new toolchain, it automatically falls
|
||||
# back to the legacy toolchain, ie., `android-legacy.toolchain.cmake` which
|
||||
# has the problem described above.
|
||||
#
|
||||
# Todo:
|
||||
# When the new toolchain is fixed, and it doesn't fall back to the legacy
|
||||
# anymore by default, then we should be able to remove this workaround.
|
||||
if(ANDROID AND ANDROID_COMPILER_FLAGS MATCHES "(^| )-g")
|
||||
qt_internal_remove_compiler_flags("-g")
|
||||
qt_internal_add_compiler_flags(FLAGS "-g" CONFIGS DEBUG RELWITHDEBINFO)
|
||||
endif()
|
||||
|
||||
# Update all relevant flags in the calling scope
|
||||
foreach(config ${configs})
|
||||
foreach(lang ${enabled_languages})
|
||||
foreach(lang ${enabled_languages})
|
||||
set(flag_var_name "CMAKE_${lang}_FLAGS")
|
||||
set(${flag_var_name} "${${flag_var_name}}" PARENT_SCOPE)
|
||||
|
||||
foreach(config ${configs})
|
||||
set(flag_var_name "CMAKE_${lang}_FLAGS_${config}")
|
||||
set(${flag_var_name} "${${flag_var_name}}" PARENT_SCOPE)
|
||||
endforeach()
|
||||
endforeach()
|
||||
|
||||
foreach(t ${target_link_types})
|
||||
foreach(t ${target_link_types})
|
||||
set(flag_var_name "CMAKE_${t}_LINKER_FLAGS")
|
||||
set(${flag_var_name} "${${flag_var_name}}" PARENT_SCOPE)
|
||||
|
||||
foreach(config ${configs})
|
||||
set(flag_var_name "CMAKE_${t}_LINKER_FLAGS_${config}")
|
||||
set(${flag_var_name} "${${flag_var_name}}" PARENT_SCOPE)
|
||||
endforeach()
|
||||
|
@ -185,6 +185,9 @@ function(qt_internal_add_headersclean_target module_target module_headers)
|
||||
# <windows.h> and <GL.h> violate the standards.
|
||||
set(hcleanFLAGS -std:c++latest -Zc:__cplusplus -WX -W3)
|
||||
|
||||
# Because we now add `-DNOMINMAX` to `PlatformCommonInternal`.
|
||||
set(hcleanUDEFS -UNOMINMAX)
|
||||
|
||||
# cl.exe needs a source path
|
||||
get_filename_component(source_path "${QT_MKSPECS_DIR}/features/data/dummy.cpp" REALPATH)
|
||||
|
||||
@ -195,6 +198,7 @@ function(qt_internal_add_headersclean_target module_target module_headers)
|
||||
"${hcleanFLAGS}"
|
||||
"${target_includes_joined_genex}"
|
||||
"${hcleanDEFS}"
|
||||
"${hcleanUDEFS}"
|
||||
)
|
||||
string(JOIN " " compiler_command_line_variables
|
||||
"-FI"
|
||||
@ -227,7 +231,7 @@ function(qt_internal_add_headersclean_target module_target module_headers)
|
||||
file(GENERATE OUTPUT "${headers_check_parameters}"
|
||||
CONTENT "${headers_check_parameters_content}")
|
||||
|
||||
set(sync_headers_dep "sync_headers")
|
||||
set(sync_headers_dep "${module_target}_sync_headers")
|
||||
|
||||
foreach(header ${hclean_headers})
|
||||
# We need realpath here to make sure path starts with drive letter
|
||||
|
@ -102,7 +102,7 @@ function(qt_internal_add_global_definition definition)
|
||||
set(optional_args)
|
||||
set(single_value_args VALUE)
|
||||
set(multi_value_args SCOPE)
|
||||
cmake_parse_arguments(args
|
||||
cmake_parse_arguments(arg
|
||||
"${optional_args}"
|
||||
"${single_value_args}"
|
||||
"${multi_value_args}"
|
||||
@ -168,6 +168,8 @@ if(WIN32)
|
||||
# Needed for M_PI define. Same as mkspecs/features/qt_module.prf.
|
||||
# It's set for every module being built, but it's not propagated to user apps.
|
||||
target_compile_definitions(PlatformModuleInternal INTERFACE _USE_MATH_DEFINES)
|
||||
# Not disabling min/max macros may result in unintended substitutions of std::min/max
|
||||
target_compile_definitions(PlatformCommonInternal INTERFACE NOMINMAX)
|
||||
endif()
|
||||
if(FEATURE_largefile AND UNIX)
|
||||
target_compile_definitions(PlatformCommonInternal
|
||||
@ -205,6 +207,14 @@ function(qt_internal_apply_bitcode_flags target)
|
||||
target_compile_options("${target}" INTERFACE ${bitcode_flags})
|
||||
endfunction()
|
||||
|
||||
# Function guards linker options that are applicable for internal Qt targets only from propagating
|
||||
# them to user projects.
|
||||
function(qt_internal_platform_link_options target scope)
|
||||
set(options ${ARGN})
|
||||
set(is_internal_target_genex "$<BOOL:$<TARGET_PROPERTY:_qt_is_internal_target>>")
|
||||
target_link_options(${target} ${scope} "$<${is_internal_target_genex}:${options}>")
|
||||
endfunction()
|
||||
|
||||
# Apple deprecated the entire OpenGL API in favor of Metal, which
|
||||
# we are aware of, so silence the deprecation warnings in code.
|
||||
# This does not apply to user-code, which will need to silence
|
||||
@ -283,7 +293,7 @@ if (MSVC)
|
||||
$<$<NOT:$<CONFIG:Debug>>:-guard:cf -Gw>
|
||||
)
|
||||
|
||||
target_link_options(PlatformCommonInternal INTERFACE
|
||||
qt_internal_platform_link_options(PlatformCommonInternal INTERFACE
|
||||
-DYNAMICBASE -NXCOMPAT -LARGEADDRESSAWARE
|
||||
$<$<NOT:$<CONFIG:Debug>>:-OPT:REF -OPT:ICF -GUARD:CF>
|
||||
)
|
||||
@ -299,7 +309,7 @@ endif()
|
||||
|
||||
if(QT_FEATURE_intelcet)
|
||||
if(MSVC)
|
||||
target_link_options(PlatformCommonInternal INTERFACE
|
||||
qt_internal_platform_link_options(PlatformCommonInternal INTERFACE
|
||||
-CETCOMPAT
|
||||
)
|
||||
else()
|
||||
@ -328,30 +338,31 @@ endif()
|
||||
if(DEFINED QT_EXTRA_FRAMEWORKPATHS AND APPLE)
|
||||
list(TRANSFORM QT_EXTRA_FRAMEWORKPATHS PREPEND "-F" OUTPUT_VARIABLE __qt_fw_flags)
|
||||
target_compile_options(PlatformCommonInternal INTERFACE ${__qt_fw_flags})
|
||||
target_link_options(PlatformCommonInternal INTERFACE ${__qt_fw_flags})
|
||||
qt_internal_platform_link_options(PlatformCommonInternal INTERFACE ${__qt_fw_flags})
|
||||
unset(__qt_fw_flags)
|
||||
endif()
|
||||
|
||||
qt_internal_get_active_linker_flags(__qt_internal_active_linker_flags)
|
||||
if(__qt_internal_active_linker_flags)
|
||||
target_link_options(PlatformCommonInternal INTERFACE "${__qt_internal_active_linker_flags}")
|
||||
qt_internal_platform_link_options(PlatformCommonInternal INTERFACE
|
||||
"${__qt_internal_active_linker_flags}")
|
||||
endif()
|
||||
unset(__qt_internal_active_linker_flags)
|
||||
|
||||
if(QT_FEATURE_enable_gdb_index)
|
||||
target_link_options(PlatformCommonInternal INTERFACE "-Wl,--gdb-index")
|
||||
qt_internal_platform_link_options(PlatformCommonInternal INTERFACE "-Wl,--gdb-index")
|
||||
endif()
|
||||
|
||||
if(QT_FEATURE_enable_new_dtags)
|
||||
target_link_options(PlatformCommonInternal INTERFACE "-Wl,--enable-new-dtags")
|
||||
qt_internal_platform_link_options(PlatformCommonInternal INTERFACE "-Wl,--enable-new-dtags")
|
||||
endif()
|
||||
|
||||
function(qt_get_implicit_sse2_genex_condition out_var)
|
||||
set(is_shared_lib "$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>")
|
||||
set(is_static_lib "$<STREQUAL:$<TARGET_PROPERTY:TYPE>,STATIC_LIBRARY>")
|
||||
set(is_static_qt_build "$<NOT:$<BOOL:${QT_BUILD_SHARED_LIBS}>>")
|
||||
set(is_staitc_lib_during_static_qt_build "$<AND:${is_static_qt_build},${is_static_lib}>")
|
||||
set(enable_sse2_condition "$<OR:${is_shared_lib},${is_staitc_lib_during_static_qt_build}>")
|
||||
set(is_static_lib_during_static_qt_build "$<AND:${is_static_qt_build},${is_static_lib}>")
|
||||
set(enable_sse2_condition "$<OR:${is_shared_lib},${is_static_lib_during_static_qt_build}>")
|
||||
set(${out_var} "${enable_sse2_condition}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
@ -4,6 +4,10 @@
|
||||
# This function can be used to compile java sources into a jar package.
|
||||
|
||||
function(qt_internal_add_jar target)
|
||||
set(options)
|
||||
set(oneValueArgs OUTPUT_DIR)
|
||||
set(multiValueArgs INCLUDE_JARS SOURCES)
|
||||
cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
set(javac_target_version "${QT_ANDROID_JAVAC_TARGET}")
|
||||
if (NOT javac_target_version)
|
||||
@ -18,4 +22,8 @@ function(qt_internal_add_jar target)
|
||||
set(CMAKE_JAVA_COMPILE_FLAGS -source "${javac_source_version}" -target "${javac_target_version}" -Xlint:unchecked -bootclasspath "${QT_ANDROID_JAR}")
|
||||
add_jar(${ARGV})
|
||||
|
||||
foreach(f IN LISTS arg_SOURCES)
|
||||
_qt_internal_expose_source_file_to_ide(${target} "${f}")
|
||||
endforeach()
|
||||
|
||||
endfunction()
|
||||
|
@ -37,7 +37,6 @@ macro(qt_internal_get_internal_add_module_keywords option_args single_args multi
|
||||
QMAKE_MODULE_CONFIG
|
||||
EXTRA_CMAKE_FILES
|
||||
EXTRA_CMAKE_INCLUDES
|
||||
NO_PCH_SOURCES
|
||||
EXTERNAL_HEADERS
|
||||
POLICIES
|
||||
${__default_private_args}
|
||||
@ -447,6 +446,8 @@ function(qt_internal_add_module target)
|
||||
# If EXTERNAL_HEADERS_DIR is set we install the specified directory and keep the structure
|
||||
# without taking into the account the CMake source tree and syncqt outputs.
|
||||
if(arg_EXTERNAL_HEADERS_DIR)
|
||||
set_property(TARGET ${target}
|
||||
PROPERTY _qt_external_headers_dir "${arg_EXTERNAL_HEADERS_DIR}")
|
||||
qt_install(DIRECTORY "${arg_EXTERNAL_HEADERS_DIR}/"
|
||||
DESTINATION "${module_install_interface_include_dir}"
|
||||
)
|
||||
@ -1186,10 +1187,13 @@ function(qt_internal_collect_module_headers out_var target)
|
||||
get_target_property(target_type ${target} TYPE)
|
||||
if(target_type STREQUAL "INTERFACE_LIBRARY")
|
||||
set(source_dir "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(binary_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
else()
|
||||
get_target_property(source_dir ${target} SOURCE_DIR)
|
||||
get_target_property(binary_dir ${target} BINARY_DIR)
|
||||
endif()
|
||||
get_filename_component(source_dir "${source_dir}" ABSOLUTE)
|
||||
get_filename_component(binary_dir "${binary_dir}" ABSOLUTE)
|
||||
|
||||
get_target_property(is_3rdparty_library ${target} _qt_module_is_3rdparty_header_library)
|
||||
|
||||
@ -1232,7 +1236,14 @@ function(qt_internal_collect_module_headers out_var target)
|
||||
"\nCondition:\n ${condition_string}")
|
||||
endif()
|
||||
|
||||
if(file_path MATCHES "3rdparty/.+" AND NOT is_3rdparty_library)
|
||||
if(is_outside_module_source_dir)
|
||||
set(base_dir "${binary_dir}")
|
||||
else()
|
||||
set(base_dir "${source_dir}")
|
||||
endif()
|
||||
|
||||
file(RELATIVE_PATH file_path_rel "${base_dir}" "${file_path}")
|
||||
if(file_path_rel MATCHES "3rdparty/.+" AND NOT is_3rdparty_library)
|
||||
set(is_3rdparty_header TRUE)
|
||||
else()
|
||||
set(is_3rdparty_header FALSE)
|
||||
|
@ -51,6 +51,17 @@ function(qt_internal_generate_pkg_config_file module)
|
||||
list(TRANSFORM loose_include_dirs REPLACE "${INSTALL_INCLUDEDIR}" "\${includedir}")
|
||||
list(TRANSFORM loose_include_dirs REPLACE "${INSTALL_MKSPECSDIR}" "\${mkspecsdir}")
|
||||
|
||||
# Remove genex wrapping around gc_sections flag because we can't evaluate genexes like
|
||||
# $<CXX_COMPILER_ID> in file(GENERATE). And given that .pc files don't support dynamic
|
||||
# evaluation like the $<CXX_COMPILER_ID> genex, distros will be expected to patch the .pc
|
||||
# files according to which compiler they intend to be used with.
|
||||
get_property(gc_sections_with_genex GLOBAL PROPERTY _qt_internal_gc_sections_with_genex)
|
||||
get_property(gc_sections_without_genex GLOBAL PROPERTY _qt_internal_gc_sections_without_genex)
|
||||
if(loose_link_options AND gc_sections_with_genex AND gc_sections_without_genex)
|
||||
string(REPLACE "${gc_sections_with_genex}" "${gc_sections_without_genex}"
|
||||
loose_link_options "${loose_link_options}")
|
||||
endif()
|
||||
|
||||
qt_internal_set_pkg_config_cpp_flags(link_options "${loose_link_options}" "")
|
||||
qt_internal_set_pkg_config_cpp_flags(compile_defs "${loose_compile_defs}" -D)
|
||||
qt_internal_set_pkg_config_cpp_flags(include_dirs "${loose_include_dirs}" -I)
|
||||
|
@ -336,6 +336,8 @@ function(qt_internal_add_plugin target)
|
||||
qt_internal_extend_target("${target}"
|
||||
${arg_NO_UNITY_BUILD}
|
||||
SOURCES ${arg_SOURCES}
|
||||
NO_PCH_SOURCES
|
||||
${arg_NO_PCH_SOURCES}
|
||||
NO_UNITY_BUILD_SOURCES
|
||||
${arg_NO_UNITY_BUILD_SOURCES}
|
||||
INCLUDE_DIRECTORIES
|
||||
|
@ -26,9 +26,14 @@ function(qt_generate_qmake_libraries_pri_content module_name output_root_dir out
|
||||
set(lib_incdir "")
|
||||
set(lib_libdir "")
|
||||
set(lib_libs "")
|
||||
set(seen_targets "")
|
||||
while(lib_targets)
|
||||
list(POP_BACK lib_targets lib_target)
|
||||
if(TARGET ${lib_target})
|
||||
if(${lib_target} IN_LIST seen_targets)
|
||||
continue()
|
||||
endif()
|
||||
list(APPEND seen_targets ${lib_target})
|
||||
get_target_property(lib_target_type ${lib_target} TYPE)
|
||||
if(lib_target_type STREQUAL "INTERFACE_LIBRARY")
|
||||
get_target_property(iface_libs ${lib_target} INTERFACE_LINK_LIBRARIES)
|
||||
|
@ -55,7 +55,10 @@ if("${MODULE_ROOT}" STREQUAL "")
|
||||
set(qtbase_or_top_level_build TRUE)
|
||||
else()
|
||||
# If MODULE_ROOT is passed without drive letter, we try to add it to the path.
|
||||
get_filename_component(MODULE_ROOT "." REALPATH BASE_DIR "${MODULE_ROOT}")
|
||||
# The check is necessary; otherwise, `get_filename_component` returns an empty string.
|
||||
if(NOT MODULE_ROOT STREQUAL ".")
|
||||
get_filename_component(MODULE_ROOT "." REALPATH BASE_DIR "${MODULE_ROOT}")
|
||||
endif()
|
||||
set(qtbase_or_top_level_build FALSE)
|
||||
endif()
|
||||
set(configure_filename "configure.cmake")
|
||||
@ -136,13 +139,6 @@ while(NOT "${configure_args}" STREQUAL "")
|
||||
list(POP_FRONT configure_args version)
|
||||
is_valid_qt_hex_version("${arg}" "${version}")
|
||||
push("-DQT_DISABLE_DEPRECATED_UP_TO=${version}")
|
||||
elseif(arg STREQUAL "-unity-build")
|
||||
push("-DQT_UNITY_BUILD=ON")
|
||||
# QT_UNITY_BUILD_BATCH_SIZE will be set to 8, CMake's default.
|
||||
elseif(arg STREQUAL "-unity-build-batch-size")
|
||||
list(POP_FRONT configure_args unity_build_batch_size)
|
||||
is_non_empty_valid_arg("${arg}" "${unity_build_batch_size}")
|
||||
push("-DQT_UNITY_BUILD_BATCH_SIZE=${unity_build_batch_size}")
|
||||
elseif(arg STREQUAL "--")
|
||||
# Everything after this argument will be passed to CMake verbatim.
|
||||
list(APPEND cmake_args "${configure_args}")
|
||||
@ -827,6 +823,8 @@ endfunction()
|
||||
drop_input(commercial)
|
||||
drop_input(confirm-license)
|
||||
translate_boolean_input(precompile_header BUILD_WITH_PCH)
|
||||
translate_boolean_input(unity_build QT_UNITY_BUILD)
|
||||
translate_string_input(unity_build_batch_size QT_UNITY_BUILD_BATCH_SIZE)
|
||||
translate_boolean_input(ccache QT_USE_CCACHE)
|
||||
translate_boolean_input(shared BUILD_SHARED_LIBS)
|
||||
translate_boolean_input(warnings_are_errors WARNINGS_ARE_ERRORS)
|
||||
|
@ -221,7 +221,7 @@ function(_qt_internal_find_ios_development_team_id out_var)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(_qt_internal_get_ios_bundle_identifier_prefix out_var)
|
||||
function(_qt_internal_get_apple_bundle_identifier_prefix out_var)
|
||||
get_property(prefix GLOBAL PROPERTY _qt_internal_ios_bundle_identifier_prefix)
|
||||
get_property(prefix_computed GLOBAL PROPERTY
|
||||
_qt_internal_ios_bundle_identifier_prefix_computed)
|
||||
@ -269,8 +269,8 @@ function(_qt_internal_escape_rfc_1034_identifier value out_var)
|
||||
set("${out_var}" "${value}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(_qt_internal_get_default_ios_bundle_identifier out_var)
|
||||
_qt_internal_get_ios_bundle_identifier_prefix(prefix)
|
||||
function(_qt_internal_get_default_apple_bundle_identifier target out_var)
|
||||
_qt_internal_get_apple_bundle_identifier_prefix(prefix)
|
||||
if(NOT prefix)
|
||||
set(prefix "com.yourcompany")
|
||||
|
||||
@ -281,14 +281,16 @@ function(_qt_internal_get_default_ios_bundle_identifier out_var)
|
||||
string(SHA1 hash "${team_id}")
|
||||
string(SUBSTRING "${hash}" 0 8 infix)
|
||||
string(APPEND prefix ".${infix}")
|
||||
else()
|
||||
endif()
|
||||
|
||||
if(CMAKE_GENERATOR STREQUAL "Xcode")
|
||||
message(WARNING
|
||||
"No organization bundle identifier prefix could be retrieved from Xcode "
|
||||
"preferences. This can lead to code signing issues due to a non-unique bundle "
|
||||
"identifier. Please set up an organization prefix by creating a new project within "
|
||||
"Xcode, or consider providing a custom bundle identifier by specifying the "
|
||||
"XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER property."
|
||||
)
|
||||
"No organization bundle identifier prefix could be retrieved from Xcode preferences. \
|
||||
This can lead to code signing issues due to a non-unique bundle \
|
||||
identifier. Please set up an organization prefix by creating a new project within \
|
||||
Xcode, or consider providing a custom bundle identifier by specifying the \
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER or XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER property."
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -299,7 +301,12 @@ function(_qt_internal_get_default_ios_bundle_identifier out_var)
|
||||
# that the identifier is invalid.
|
||||
_qt_internal_escape_rfc_1034_identifier("${prefix}" prefix)
|
||||
|
||||
set(identifier "${prefix}.\${PRODUCT_NAME:rfc1034identifier}")
|
||||
if(CMAKE_GENERATOR STREQUAL "Xcode")
|
||||
set(identifier "${prefix}.$(PRODUCT_NAME:rfc1034identifier)")
|
||||
else()
|
||||
set(identifier "${prefix}.${target}")
|
||||
endif()
|
||||
|
||||
set("${out_var}" "${identifier}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
@ -384,56 +391,72 @@ function(_qt_internal_set_xcode_development_team_id target)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(_qt_internal_set_xcode_bundle_identifier target)
|
||||
function(_qt_internal_set_apple_bundle_identifier target)
|
||||
# Skip all logic if requested.
|
||||
if(QT_NO_SET_XCODE_BUNDLE_IDENTIFIER)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# There are two fields to consider: the CFBundleIdentifier key (CFBI) to be written to
|
||||
# Info.plist
|
||||
# and the PRODUCT_BUNDLE_IDENTIFIER (PBI) property to set in the Xcode project.
|
||||
# The following logic enables the best out-of-the-box experience combined with maximum
|
||||
# customization.
|
||||
# 1) If values for both fields are not provided, assign ${PRODUCT_BUNDLE_IDENTIFIER} to CFBI
|
||||
# (which is expanded by xcodebuild at build time and will use the value of PBI) and
|
||||
# auto-compute a default PBI from Xcode's ${PRODUCT_NAME}.
|
||||
# 2) If CFBI is set and PBI isn't, use given CFBI and keep PBI empty.
|
||||
# 3) If PBI is set and CFBI isn't, assign ${PRODUCT_BUNDLE_IDENTIFIER} to CFBI and use
|
||||
# the given PBI.
|
||||
# 4) If both are set, use both given values.
|
||||
# TLDR:
|
||||
# cfbi pbi -> result_cfbi result_pbi
|
||||
# unset unset computed computed
|
||||
# set unset given_val unset
|
||||
# unset set computed given_val
|
||||
# set set given_val given_val
|
||||
# There are two fields to consider: the CFBundleIdentifier key (ie., cmake_bundle_identifier)
|
||||
# to be written to Info.plist and the PRODUCT_BUNDLE_IDENTIFIER (ie., xcode_bundle_identifier)
|
||||
# property to set in the Xcode project. The `cmake_bundle_identifier` set by
|
||||
# MACOSX_BUNDLE_GUI_IDENTIFIER applies to both Xcode, and other generators, while
|
||||
# `xcode_bundle_identifier` set by XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER is
|
||||
# Xcode specific.
|
||||
#
|
||||
# If Ninja is the generator, we set the value of `MACOSX_BUNDLE_GUI_IDENTIFIER`
|
||||
# and don't touch the `XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER`.
|
||||
# If Xcode is the generator, we set the value of `XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER`,
|
||||
# and additionally, to silence a Xcode's warning, we set the `MACOSX_BUNDLE_GUI_IDENTIFIER` to
|
||||
# `${PRODUCT_BUNDLE_IDENTIFIER}` so that Xcode could sort it out.
|
||||
|
||||
get_target_property(existing_cfbi "${target}" MACOSX_BUNDLE_GUI_IDENTIFIER)
|
||||
if(NOT MACOSX_BUNDLE_GUI_IDENTIFIER AND NOT existing_cfbi)
|
||||
set(is_cfbi_given FALSE)
|
||||
else()
|
||||
set(is_cfbi_given TRUE)
|
||||
get_target_property(existing_cmake_bundle_identifier "${target}"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER)
|
||||
get_target_property(existing_xcode_bundle_identifier "${target}"
|
||||
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER)
|
||||
|
||||
set(is_cmake_bundle_identifier_given FALSE)
|
||||
if(existing_cmake_bundle_identifier)
|
||||
set(is_cmake_bundle_identifier_given TRUE)
|
||||
elseif(MACOSX_BUNDLE_GUI_IDENTIFIER)
|
||||
set(is_cmake_bundle_identifier_given TRUE)
|
||||
set(existing_cmake_bundle_identifier ${MACOSX_BUNDLE_GUI_IDENTIFIER})
|
||||
endif()
|
||||
|
||||
if(NOT is_cfbi_given)
|
||||
set(is_xcode_bundle_identifier_given FALSE)
|
||||
if(existing_xcode_bundle_identifier)
|
||||
set(is_xcode_bundle_identifier_given TRUE)
|
||||
elseif(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER)
|
||||
set(is_xcode_bundle_identifier_given TRUE)
|
||||
set(existing_xcode_bundle_identifier ${CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER})
|
||||
endif()
|
||||
|
||||
if(is_cmake_bundle_identifier_given
|
||||
AND is_xcode_bundle_identifier_given
|
||||
AND NOT existing_cmake_bundle_identifier STREQUAL existing_xcode_bundle_identifier)
|
||||
message(WARNING
|
||||
"MACOSX_BUNDLE_GUI_IDENTIFIER and XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "
|
||||
"are set to different values. You only need to set one of them. ")
|
||||
endif()
|
||||
|
||||
if(NOT is_xcode_bundle_identifier_given
|
||||
AND NOT is_cmake_bundle_identifier_given)
|
||||
_qt_internal_get_default_apple_bundle_identifier("${target}" bundle_id)
|
||||
elseif(is_cmake_bundle_identifier_given)
|
||||
set(bundle_id ${existing_cmake_bundle_identifier})
|
||||
elseif(is_xcode_bundle_identifier_given)
|
||||
set(bundle_id ${existing_xcode_bundle_identifier})
|
||||
endif()
|
||||
|
||||
if(CMAKE_GENERATOR STREQUAL "Xcode")
|
||||
set_target_properties("${target}"
|
||||
PROPERTIES
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "\${PRODUCT_BUNDLE_IDENTIFIER}")
|
||||
endif()
|
||||
|
||||
get_target_property(existing_pbi "${target}" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER)
|
||||
if(NOT CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER AND NOT existing_pbi)
|
||||
set(is_pbi_given FALSE)
|
||||
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${bundle_id}"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "$(PRODUCT_BUNDLE_IDENTIFIER)")
|
||||
else()
|
||||
set(is_pbi_given TRUE)
|
||||
endif()
|
||||
|
||||
if(NOT is_pbi_given AND NOT is_cfbi_given)
|
||||
_qt_internal_get_default_ios_bundle_identifier(bundle_id)
|
||||
set_target_properties("${target}"
|
||||
PROPERTIES
|
||||
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${bundle_id}")
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "${bundle_id}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
@ -503,7 +526,7 @@ function(_qt_internal_set_xcode_bundle_name target)
|
||||
if(CMAKE_GENERATOR STREQUAL Xcode)
|
||||
set_target_properties("${target}"
|
||||
PROPERTIES
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "\${PRODUCT_NAME}")
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "$(PRODUCT_NAME)")
|
||||
else()
|
||||
set_target_properties("${target}"
|
||||
PROPERTIES
|
||||
@ -603,12 +626,13 @@ function(_qt_internal_finalize_apple_app target)
|
||||
# This affects things like the version number or application name as reported by Qt API.
|
||||
if(CMAKE_GENERATOR STREQUAL "Xcode")
|
||||
_qt_internal_set_xcode_development_team_id("${target}")
|
||||
_qt_internal_set_xcode_bundle_identifier("${target}")
|
||||
_qt_internal_set_xcode_code_sign_style("${target}")
|
||||
_qt_internal_set_xcode_bundle_display_name("${target}")
|
||||
_qt_internal_set_xcode_install_path("${target}")
|
||||
endif()
|
||||
|
||||
_qt_internal_set_xcode_bundle_name("${target}")
|
||||
_qt_internal_set_apple_bundle_identifier("${target}")
|
||||
_qt_internal_set_placeholder_apple_bundle_version("${target}")
|
||||
endfunction()
|
||||
|
||||
|
@ -307,7 +307,17 @@ function(_qt_internal_set_up_static_runtime_library target)
|
||||
set_property(TARGET ${target} PROPERTY
|
||||
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
elseif(MINGW)
|
||||
target_link_options(${target} INTERFACE "LINKER:-Bstatic")
|
||||
get_target_property(target_type ${target} TYPE)
|
||||
if(target_type STREQUAL "EXECUTABLE")
|
||||
set(link_option PRIVATE)
|
||||
else()
|
||||
set(link_option INTERFACE)
|
||||
endif()
|
||||
if(CLANG)
|
||||
target_link_options(${target} ${link_option} "LINKER:-Bstatic")
|
||||
else()
|
||||
target_link_options(${target} ${link_option} "-static")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
@ -6,7 +6,7 @@
|
||||
function(qt_internal_get_relative_rpath_base_token out_var)
|
||||
if(APPLE)
|
||||
set(rpath_rel_base "@loader_path")
|
||||
elseif(LINUX OR SOLARIS OR FREEBSD OR HURD)
|
||||
elseif(LINUX OR SOLARIS OR FREEBSD OR HURD OR OPENBSD)
|
||||
set(rpath_rel_base "$ORIGIN")
|
||||
else()
|
||||
set(rpath_rel_base "NO_KNOWN_RPATH_REL_BASE")
|
||||
|
@ -201,7 +201,11 @@ endfunction()
|
||||
# Enable separate debug information for the given target
|
||||
function(qt_enable_separate_debug_info target installDestination)
|
||||
set(flags QT_EXECUTABLE)
|
||||
set(options)
|
||||
if(APPLE)
|
||||
set(options DSYM_OUTPUT_DIR)
|
||||
else()
|
||||
set(options)
|
||||
endif()
|
||||
set(multiopts ADDITIONAL_INSTALL_ARGS)
|
||||
cmake_parse_arguments(arg "${flags}" "${options}" "${multiopts}" ${ARGN})
|
||||
|
||||
@ -248,12 +252,20 @@ function(qt_enable_separate_debug_info target installDestination)
|
||||
get_target_property(is_framework ${target} FRAMEWORK)
|
||||
if(is_framework)
|
||||
qt_internal_get_framework_info(fw ${target})
|
||||
set(debug_info_bundle_dir "$<TARGET_BUNDLE_DIR:${target}>.${debug_info_suffix}")
|
||||
set(BUNDLE_ID ${fw_name})
|
||||
else()
|
||||
set(debug_info_bundle_dir "$<TARGET_FILE:${target}>.${debug_info_suffix}")
|
||||
set(BUNDLE_ID ${target})
|
||||
endif()
|
||||
|
||||
if (NOT "x${arg_DSYM_OUTPUT_DIR}" STREQUAL "x")
|
||||
set(debug_info_bundle_dir "${arg_DSYM_OUTPUT_DIR}/${target}")
|
||||
elseif(is_framework)
|
||||
set(debug_info_bundle_dir "$<TARGET_BUNDLE_DIR:${target}>")
|
||||
else()
|
||||
set(debug_info_bundle_dir "$<TARGET_FILE:${target}>")
|
||||
endif()
|
||||
set(debug_info_bundle_dir "${debug_info_bundle_dir}.${debug_info_suffix}")
|
||||
|
||||
set(debug_info_contents_dir "${debug_info_bundle_dir}/Contents")
|
||||
set(debug_info_target_dir "${debug_info_contents_dir}/Resources/DWARF")
|
||||
configure_file(
|
||||
|
@ -5,8 +5,8 @@
|
||||
|
||||
# Set the QT_IS_BUILDING_QT variable so we can verify whether we are building
|
||||
# Qt from source
|
||||
set(QT_BUILDING_QT TRUE CACHE
|
||||
TYPE STRING "When this is present and set to true, it signals that we are building Qt from source.")
|
||||
set(QT_BUILDING_QT TRUE CACHE BOOL
|
||||
"When this is present and set to true, it signals that we are building Qt from source.")
|
||||
|
||||
# Pre-calculate the developer_build feature if it's set by the user via INPUT_developer_build
|
||||
if(NOT FEATURE_developer_build AND INPUT_developer_build
|
||||
@ -352,6 +352,8 @@ if(QT_UNITY_BUILD)
|
||||
set(CMAKE_UNITY_BUILD_BATCH_SIZE "${QT_UNITY_BUILD_BATCH_SIZE}")
|
||||
endif()
|
||||
|
||||
option(QT_ALLOW_SYMLINK_IN_PATHS "Allows symlinks in paths." OFF)
|
||||
|
||||
# We need to clean up QT_FEATURE_*, but only once per configuration cycle
|
||||
get_property(qt_feature_clean GLOBAL PROPERTY _qt_feature_clean)
|
||||
if(NOT qt_feature_clean)
|
||||
|
@ -139,7 +139,6 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge
|
||||
|
||||
set(syncqt_args "${common_syncqt_arguments}")
|
||||
list(APPEND syncqt_args
|
||||
${common_syncqt_arguments}
|
||||
-headers ${module_headers}
|
||||
-stagingDir "${syncqt_staging_dir}"
|
||||
-knownModules ${known_modules}
|
||||
@ -150,6 +149,21 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge
|
||||
set(syncqt_args_rsp "${binary_dir_real}/${target}_syncqt_args")
|
||||
qt_configure_file(OUTPUT "${syncqt_args_rsp}" CONTENT "${syncqt_args_string}")
|
||||
|
||||
get_target_property(external_headers_dir ${target} _qt_external_headers_dir)
|
||||
if(external_headers_dir)
|
||||
if(NOT IS_ABSOLUTE "${external_headers_dir}")
|
||||
get_filename_component(external_headers_dir "${external_headers_dir}" ABSOLUTE)
|
||||
endif()
|
||||
if(EXISTS "${external_headers_dir}")
|
||||
set(external_headers_dir_copy_cmd
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-E copy_directory
|
||||
"${external_headers_dir}"
|
||||
"${module_build_interface_include_dir}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${syncqt_outputs}
|
||||
@ -157,6 +171,7 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge
|
||||
${QT_CMAKE_EXPORT_NAMESPACE}::syncqt
|
||||
"@${syncqt_args_rsp}"
|
||||
${build_time_syncqt_arguments}
|
||||
${external_headers_dir_copy_cmd}
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E touch "${syncqt_timestamp}"
|
||||
DEPENDS
|
||||
@ -167,12 +182,22 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge
|
||||
"Running syncqt.cpp for module: ${module}"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
set(add_sync_headers_to_all "")
|
||||
if(is_interface_lib)
|
||||
set(add_sync_headers_to_all ALL)
|
||||
endif()
|
||||
|
||||
add_custom_target(${target}_sync_headers
|
||||
${add_sync_headers_to_all}
|
||||
DEPENDS
|
||||
${syncqt_outputs}
|
||||
)
|
||||
add_dependencies(sync_headers ${target}_sync_headers)
|
||||
|
||||
if(is_3rd_party_library)
|
||||
add_dependencies(thirdparty_sync_headers ${target}_sync_headers)
|
||||
endif()
|
||||
# This target is required when building docs, to make all header files and their aliases
|
||||
# available for qdoc.
|
||||
# ${target}_sync_headers is added as dependency to make sure that
|
||||
@ -185,6 +210,7 @@ function(qt_internal_target_sync_headers target module_headers module_headers_ge
|
||||
COMMAND
|
||||
${QT_CMAKE_EXPORT_NAMESPACE}::syncqt
|
||||
"@${syncqt_all_args_rsp}"
|
||||
${external_headers_dir_copy_cmd}
|
||||
DEPENDS
|
||||
${module_headers}
|
||||
${syncqt_all_args_rsp}
|
||||
|
@ -14,6 +14,8 @@
|
||||
# module, these files will raise a warning at configure time if the condition is not met.
|
||||
# COMPILE_FLAGS
|
||||
# Custom compilation flags.
|
||||
# EXTRA_LINKER_SCRIPT_CONTENT
|
||||
# Extra content that should be appended to a target linker script. Applicable for ld only.
|
||||
# NO_PCH_SOURCES
|
||||
# Skip the specified source files by PRECOMPILE_HEADERS feature.
|
||||
function(qt_internal_extend_target target)
|
||||
@ -36,6 +38,7 @@ function(qt_internal_extend_target target)
|
||||
)
|
||||
set(single_args
|
||||
PRECOMPILED_HEADER
|
||||
EXTRA_LINKER_SCRIPT_CONTENT
|
||||
)
|
||||
set(multi_args
|
||||
${__default_public_args}
|
||||
@ -44,7 +47,6 @@ function(qt_internal_extend_target target)
|
||||
CONDITION
|
||||
CONDITION_INDEPENDENT_SOURCES
|
||||
COMPILE_FLAGS
|
||||
NO_PCH_SOURCES
|
||||
)
|
||||
|
||||
cmake_parse_arguments(PARSE_ARGV 1 arg
|
||||
@ -237,6 +239,10 @@ function(qt_internal_extend_target target)
|
||||
${sources_property} "${arg_CONDITION_INDEPENDENT_SOURCES}")
|
||||
endif()
|
||||
|
||||
if(arg_EXTRA_LINKER_SCRIPT_CONTENT)
|
||||
set_target_properties(${target} PROPERTIES
|
||||
_qt_extra_linker_script_content "${arg_EXTRA_LINKER_SCRIPT_CONTENT}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(qt_is_imported_target target out_var)
|
||||
@ -1001,6 +1007,15 @@ endfunction()
|
||||
# Needed to allow selectively applying certain flags via PlatformXInternal targets.
|
||||
function(qt_internal_mark_as_internal_library target)
|
||||
set_target_properties(${target} PROPERTIES _qt_is_internal_library TRUE)
|
||||
qt_internal_mark_as_internal_target(${target})
|
||||
endfunction()
|
||||
|
||||
# Marks a target with a property that it was built using the internal Qt API (qt_internal_*) as
|
||||
# opposed to it being a user project library or executable(qt_add_*, etc).
|
||||
#
|
||||
# Needed to allow selectively applying certain flags via PlatformXInternal targets.
|
||||
function(qt_internal_mark_as_internal_target target)
|
||||
set_target_properties(${target} PROPERTIES _qt_is_internal_target TRUE)
|
||||
endfunction()
|
||||
|
||||
function(qt_internal_link_internal_platform_for_object_library target)
|
||||
|
@ -214,6 +214,7 @@ function(qt_internal_get_test_arg_definitions optional_args single_value_args mu
|
||||
MANUAL
|
||||
NO_BATCH
|
||||
NO_INSTALL
|
||||
BUNDLE_ANDROID_OPENSSL_LIBS
|
||||
PARENT_SCOPE
|
||||
)
|
||||
set(${single_value_args}
|
||||
@ -526,6 +527,21 @@ function(qt_internal_add_test name)
|
||||
endif()
|
||||
|
||||
if (ANDROID)
|
||||
if(arg_BUNDLE_ANDROID_OPENSSL_LIBS)
|
||||
if(NOT OPENSSL_ROOT_DIR)
|
||||
message(WARNING "The argument BUNDLE_ANDROID_OPENSSL_LIBS is set "
|
||||
"but OPENSSL_ROOT_DIR parameter is not set.")
|
||||
else()
|
||||
if(EXISTS "${OPENSSL_ROOT_DIR}/${CMAKE_ANDROID_ARCH_ABI}/libcrypto_3.so")
|
||||
set_property(TARGET ${name} APPEND PROPERTY QT_ANDROID_EXTRA_LIBS
|
||||
"${OPENSSL_ROOT_DIR}/${CMAKE_ANDROID_ARCH_ABI}/libcrypto_3.so"
|
||||
"${OPENSSL_ROOT_DIR}/${CMAKE_ANDROID_ARCH_ABI}/libssl_3.so")
|
||||
else()
|
||||
message(STATUS "Test should bundle OpenSSL libraries but they are not found."
|
||||
" This is fine if OpenSSL was built statically.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
qt_internal_android_test_arguments("${name}" test_executable extra_test_args)
|
||||
set(test_working_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
elseif(QNX)
|
||||
|
@ -15,6 +15,13 @@
|
||||
# INSTALL_VERSIONED_LINK
|
||||
# Prefix build only. On installation, create a versioned hard-link of the installed file.
|
||||
# E.g. create a link of "bin/qmake6" to "bin/qmake".
|
||||
# TRY_RUN
|
||||
# On Windows, it creates a helper batch script that tests whether the tool can be executed
|
||||
# successfully or not. If not, build halts and an error will be show, with tips on what
|
||||
# might be cause, and how to fix it. TRY_RUN is disabled when cross-compiling.
|
||||
# TRY_RUN_FLAGS
|
||||
# Command line flags that are going to be passed to the tool for testing its correctness.
|
||||
# If no flags were given, we default to `-v`.
|
||||
#
|
||||
# One-value Arguments:
|
||||
# EXTRA_CMAKE_FILES
|
||||
@ -42,11 +49,13 @@ function(qt_internal_add_tool target_name)
|
||||
USER_FACING
|
||||
INSTALL_VERSIONED_LINK
|
||||
EXCEPTIONS
|
||||
NO_UNITY_BUILD)
|
||||
NO_UNITY_BUILD
|
||||
TRY_RUN)
|
||||
set(one_value_keywords
|
||||
TOOLS_TARGET
|
||||
INSTALL_DIR
|
||||
CORE_LIBRARY
|
||||
TRY_RUN_FLAGS
|
||||
${__default_target_info_args})
|
||||
set(multi_value_keywords
|
||||
EXTRA_CMAKE_FILES
|
||||
@ -105,6 +114,7 @@ function(qt_internal_add_tool target_name)
|
||||
NO_INSTALL
|
||||
${arg_NO_UNITY_BUILD}
|
||||
SOURCES ${arg_SOURCES}
|
||||
NO_PCH_SOURCES ${arg_NO_PCH_SOURCES}
|
||||
NO_UNITY_BUILD_SOURCES ${arg_NO_UNITY_BUILD_SOURCES}
|
||||
INCLUDE_DIRECTORIES
|
||||
${arg_INCLUDE_DIRECTORIES}
|
||||
@ -224,10 +234,62 @@ function(qt_internal_add_tool target_name)
|
||||
qt_internal_apply_staging_prefix_build_rpath_workaround()
|
||||
endif()
|
||||
|
||||
if(arg_TRY_RUN AND WIN32 AND NOT CMAKE_CROSSCOMPILING)
|
||||
if(NOT arg_TRY_RUN_FLAGS)
|
||||
set(arg_TRY_RUN_FLAGS "-v")
|
||||
endif()
|
||||
_qt_internal_add_try_run_post_build("${target_name}" "${arg_TRY_RUN_FLAGS}")
|
||||
endif()
|
||||
|
||||
qt_enable_separate_debug_info(${target_name} "${install_dir}" QT_EXECUTABLE)
|
||||
qt_internal_install_pdb_files(${target_name} "${install_dir}")
|
||||
endfunction()
|
||||
|
||||
function(_qt_internal_add_try_run_post_build target try_run_flags)
|
||||
qt_internal_get_upper_case_main_cmake_configuration(main_cmake_configuration)
|
||||
get_target_property(target_out_dir ${target}
|
||||
RUNTIME_OUTPUT_DIRECTORY_${main_cmake_configuration})
|
||||
get_target_property(target_bin_dir ${target}
|
||||
BINARY_DIR)
|
||||
|
||||
set(try_run_scripts_path "${target_bin_dir}/${target}_try_run.bat")
|
||||
# The only reason -h is passed is because some of the tools, e.g., moc
|
||||
# wait for an input without any arguments.
|
||||
|
||||
qt_configure_file(OUTPUT "${try_run_scripts_path}"
|
||||
CONTENT "@echo off
|
||||
|
||||
${target_out_dir}/${target}.exe ${try_run_flags} > nul 2>&1
|
||||
|
||||
if \"%errorlevel%\" == \"-1073741515\" (
|
||||
echo
|
||||
echo '${target}' is built successfully, but some of the libraries
|
||||
echo necessary for running it are missing. If you are building Qt with
|
||||
echo 3rdparty libraries, make sure that you add their directory to the
|
||||
echo PATH environment variable.
|
||||
echo
|
||||
exit /b %errorlevel%
|
||||
)
|
||||
echo. > ${target_bin_dir}/${target}_try_run_passed"
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${target_bin_dir}/${target}_try_run_passed
|
||||
DEPENDS
|
||||
${target}
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E env QT_COMMAND_LINE_PARSER_NO_GUI_MESSAGE_BOXES=1
|
||||
${try_run_scripts_path}
|
||||
COMMENT
|
||||
"Testing ${target} by trying to run it."
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(${target}_try_run ALL
|
||||
DEPENDS ${target_bin_dir}/${target}_try_run_passed)
|
||||
endfunction()
|
||||
|
||||
function(qt_export_tools module_name)
|
||||
# Bail out when not building tools.
|
||||
if(NOT QT_WILL_BUILD_TOOLS)
|
||||
@ -287,7 +349,7 @@ function(qt_export_tools module_name)
|
||||
string(REGEX REPLACE "_native$" "" tool_name ${tool_name})
|
||||
endif()
|
||||
set(extra_cmake_statements "${extra_cmake_statements}
|
||||
if (NOT QT_NO_CREATE_TARGETS)
|
||||
if(NOT QT_NO_CREATE_TARGETS AND ${INSTALL_CMAKE_NAMESPACE}${target}_FOUND)
|
||||
__qt_internal_promote_target_to_global(${INSTALL_CMAKE_NAMESPACE}::${tool_name})
|
||||
endif()
|
||||
")
|
||||
|
@ -31,6 +31,14 @@ set(__qt_chainload_toolchain_file \"\${__qt_initially_configured_toolchain_file}
|
||||
list(APPEND init_platform "set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING \"\")")
|
||||
endif()
|
||||
|
||||
if(QT_QMAKE_TARGET_MKSPEC)
|
||||
list(APPEND init_platform
|
||||
"if(NOT QT_QMAKE_TARGET_MKSPEC)"
|
||||
" set(QT_QMAKE_TARGET_MKSPEC ${QT_QMAKE_TARGET_MKSPEC} CACHE STRING \"\")"
|
||||
"endif()"
|
||||
)
|
||||
endif()
|
||||
|
||||
if("${QT_QMAKE_TARGET_MKSPEC}" STREQUAL "linux-g++-32" AND NOT QT_NO_AUTO_DETECT_LINUX_X86)
|
||||
set(__qt_toolchain_common_flags_init "-m32")
|
||||
|
||||
@ -121,14 +129,14 @@ set(__qt_chainload_toolchain_file \"\${__qt_initially_configured_toolchain_file}
|
||||
endif()
|
||||
if(__qt_embed_toolchain_compilers)
|
||||
list(APPEND init_platform "
|
||||
set(__qt_initial_c_compiler \"${CMAKE_C_COMPILER}\")
|
||||
set(__qt_initial_cxx_compiler \"${CMAKE_CXX_COMPILER}\")
|
||||
if(NOT DEFINED CMAKE_C_COMPILER AND EXISTS \"\${__qt_initial_c_compiler}\")
|
||||
set(CMAKE_C_COMPILER \"\${__qt_initial_c_compiler}\" CACHE STRING \"\")
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_CXX_COMPILER AND EXISTS \"\${__qt_initial_cxx_compiler}\")
|
||||
set(CMAKE_CXX_COMPILER \"\${__qt_initial_cxx_compiler}\" CACHE STRING \"\")
|
||||
endif()")
|
||||
set(__qt_initial_c_compiler \"${CMAKE_C_COMPILER}\")
|
||||
set(__qt_initial_cxx_compiler \"${CMAKE_CXX_COMPILER}\")
|
||||
if(NOT DEFINED CMAKE_C_COMPILER AND EXISTS \"\${__qt_initial_c_compiler}\")
|
||||
set(CMAKE_C_COMPILER \"\${__qt_initial_c_compiler}\" CACHE STRING \"\")
|
||||
endif()
|
||||
if(NOT DEFINED CMAKE_CXX_COMPILER AND EXISTS \"\${__qt_initial_cxx_compiler}\")
|
||||
set(CMAKE_CXX_COMPILER \"\${__qt_initial_cxx_compiler}\" CACHE STRING \"\")
|
||||
endif()")
|
||||
endif()
|
||||
|
||||
unset(init_additional_used_variables)
|
||||
|
@ -6,17 +6,74 @@
|
||||
# This is used for writing the config.opt file.
|
||||
#
|
||||
# This script takes the following arguments:
|
||||
# IN_FILE: The input file. The whole command line as one string.
|
||||
# IN_FILE: The input file. The whole command line as one string, or one argument per line.
|
||||
# REDO_FILE: A file containing extra commands to be joined with IN_FILE.
|
||||
# OUT_FILE: The output file. One argument per line.
|
||||
# SKIP_ARGS: Number of arguments to skip from the front of the arguments list.
|
||||
# IGNORE_ARGS: List of arguments to be ignored, i.e. that are not written.
|
||||
#
|
||||
# If the REDO_FILE is given, its parameters will be merged with IN_FILE parameters
|
||||
# and be written into the OUT_FILE.
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
# Read arguments from IN_FILE and separate them.
|
||||
file(READ "${IN_FILE}" raw_args)
|
||||
# To catch cases where the path ends with an `\`, e.g., `-prefix "C:\Path\"`
|
||||
string(REPLACE "\\\"" "\"" raw_args "${raw_args}")
|
||||
string(REPLACE ";" "[[;]]" raw_args "${raw_args}")
|
||||
|
||||
separate_arguments(args NATIVE_COMMAND "${raw_args}")
|
||||
|
||||
string(REPLACE "\;" ";" args "${args}")
|
||||
string(REPLACE "[[;]]" "\;" args "${args}")
|
||||
|
||||
if(DEFINED REDO_FILE)
|
||||
file(READ "${REDO_FILE}" raw_redo_args)
|
||||
separate_arguments(redo_args NATIVE_COMMAND "${raw_redo_args}")
|
||||
|
||||
if(args)
|
||||
list(FIND args "--" args_ddash_loc)
|
||||
list(FIND redo_args "--" redo_ddash_loc)
|
||||
if("${redo_ddash_loc}" STREQUAL "-1")
|
||||
if("${args_ddash_loc}" STREQUAL "-1")
|
||||
list(LENGTH args args_ddash_loc)
|
||||
endif()
|
||||
# Avoid adding an empty line for an empty -redo
|
||||
if(NOT "${redo_args}" STREQUAL "")
|
||||
list(INSERT args ${args_ddash_loc} "${redo_args}")
|
||||
endif()
|
||||
else()
|
||||
# Handling redo's configure options
|
||||
list(SUBLIST redo_args 0 ${redo_ddash_loc} redo_config_args)
|
||||
if(redo_config_args)
|
||||
if("${args_ddash_loc}" STREQUAL "-1")
|
||||
list(APPEND args "${redo_config_args}")
|
||||
else()
|
||||
list(INSERT args ${args_ddash_loc} "${redo_config_args}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Handling redo's CMake options
|
||||
list(LENGTH redo_args redo_args_len)
|
||||
math(EXPR redo_ddash_loc "${redo_ddash_loc} + 1")
|
||||
# Catch an unlikely case of -redo being called with an empty --, ie., `-redo --`
|
||||
if(NOT ${redo_ddash_loc} STREQUAL ${redo_args_len})
|
||||
list(SUBLIST redo_args ${redo_ddash_loc} -1 redo_cmake_args)
|
||||
endif()
|
||||
|
||||
if(DEFINED redo_cmake_args)
|
||||
if("${args_ddash_loc}" STREQUAL "-1")
|
||||
list(APPEND args "--")
|
||||
endif()
|
||||
list(APPEND args "${redo_cmake_args}")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
list(APPEND args "${redo_args}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Skip arguments if requested
|
||||
if(DEFINED SKIP_ARGS)
|
||||
foreach(i RANGE 1 ${SKIP_ARGS})
|
||||
|
@ -17,22 +17,22 @@
|
||||
#endif
|
||||
|
||||
#if !defined(QT_BUILD_@module_define_infix@_LIB) && !defined(QT_STATIC)
|
||||
/* outside library → inline decl + defi */
|
||||
/* outside library -> inline decl + defi */
|
||||
/* static builds treat everything as part of the library, so they never inline */
|
||||
# define QT_@module_define_infix@_INLINE_SINCE(major, minor) inline
|
||||
# define QT_@module_define_infix@_INLINE_IMPL_SINCE(major, minor) 1
|
||||
#elif defined(QT_@module_define_infix@_BUILD_REMOVED_API)
|
||||
/* inside library, inside removed_api.cpp:
|
||||
* keep deprecated API → non-inline decl;
|
||||
* remove deprecated API → inline decl;
|
||||
* keep deprecated API -> non-inline decl;
|
||||
* remove deprecated API -> inline decl;
|
||||
* definition is always available */
|
||||
# define QT_@module_define_infix@_INLINE_SINCE(major, minor) \
|
||||
QT_IF_DEPRECATED_SINCE(major, minor, inline, /* not inline */)
|
||||
# define QT_@module_define_infix@_INLINE_IMPL_SINCE(major, minor) 1
|
||||
#else
|
||||
/* inside library, outside removed_api.cpp:
|
||||
* keep deprecated API → non-inline decl, no defi;
|
||||
* remove deprecated API → inline decl, defi */
|
||||
* keep deprecated API -> non-inline decl, no defi;
|
||||
* remove deprecated API -> inline decl, defi */
|
||||
# define QT_@module_define_infix@_INLINE_SINCE(major, minor) \
|
||||
QT_IF_DEPRECATED_SINCE(major, minor, inline, /* not inline */)
|
||||
# define QT_@module_define_infix@_INLINE_IMPL_SINCE(major, minor) \
|
||||
|
Reference in New Issue
Block a user