diff options
author | Alexey Edelev <alexey.edelev@qt.io> | 2021-12-29 18:00:52 +0100 |
---|---|---|
committer | Alexey Edelev <alexey.edelev@qt.io> | 2022-02-10 02:31:05 +0100 |
commit | 2201934efa1b9889d474347e705784bf6925e120 (patch) | |
tree | 450a4b8dbb3777668be075790421de77733337f7 /cmake | |
parent | 06e7b5168e269f913f03ecb9d77fc82db4d9dfd6 (diff) |
Use 'copy' but not 'copy_if_different' on Windows platforms
Use custom script to copy big Android artifacts on Windows platforms.
The script uses 'copy' but not 'copy_if_different' when source file
size is bigger than 2GB. 'cmake -E copy_if_different' only compares
first 2GB of files because of cmake issue, so this step only
workaround the problem.
Pick-to: 6.2 6.3
Task-number: QTBUG-99491
Change-Id: Id076734700e334dfc3330da412462c2b53829b33
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtBaseGlobalTargets.cmake | 2 | ||||
-rw-r--r-- | cmake/QtConfig.cmake.in | 1 | ||||
-rw-r--r-- | cmake/QtCopyFileIfDifferent.cmake | 15 | ||||
-rw-r--r-- | cmake/QtPublicCMakeHelpers.cmake | 20 |
4 files changed, 38 insertions, 0 deletions
diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake index cae5ec8bf6..e9d9370510 100644 --- a/cmake/QtBaseGlobalTargets.cmake +++ b/cmake/QtBaseGlobalTargets.cmake @@ -218,6 +218,7 @@ qt_copy_or_install(FILES cmake/QtCompilerFlags.cmake cmake/QtCompilerOptimization.cmake cmake/QtConfigDependencies.cmake.in + cmake/QtCopyFileIfDifferent.cmake cmake/QtDeferredDependenciesHelpers.cmake cmake/QtDbusHelpers.cmake cmake/QtDocsHelpers.cmake @@ -299,6 +300,7 @@ qt_copy_or_install(DIRECTORY set(__public_cmake_helpers cmake/QtFeature.cmake cmake/QtFeatureCommon.cmake + cmake/QtPublicCMakeHelpers.cmake cmake/QtPublicCMakeVersionHelpers.cmake cmake/QtPublicFinalizerHelpers.cmake cmake/QtPublicPluginHelpers.cmake diff --git a/cmake/QtConfig.cmake.in b/cmake/QtConfig.cmake.in index dd39ff648e..822224d2db 100644 --- a/cmake/QtConfig.cmake.in +++ b/cmake/QtConfig.cmake.in @@ -92,6 +92,7 @@ include("${CMAKE_CURRENT_LIST_DIR}/QtPublicWalkLibsHelpers.cmake") include("${CMAKE_CURRENT_LIST_DIR}/QtPublicFindPackageHelpers.cmake") include("${CMAKE_CURRENT_LIST_DIR}/QtPublicDependencyHelpers.cmake") include("${CMAKE_CURRENT_LIST_DIR}/QtPublicToolHelpers.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/QtPublicCMakeHelpers.cmake") if(NOT DEFINED QT_CMAKE_EXPORT_NAMESPACE) set(QT_CMAKE_EXPORT_NAMESPACE @QT_CMAKE_EXPORT_NAMESPACE@) diff --git a/cmake/QtCopyFileIfDifferent.cmake b/cmake/QtCopyFileIfDifferent.cmake new file mode 100644 index 0000000000..4c64895b53 --- /dev/null +++ b/cmake/QtCopyFileIfDifferent.cmake @@ -0,0 +1,15 @@ +# copy_if_different works incorrect in Windows if file size if bigger than 2GB. +# See https://gitlab.kitware.com/cmake/cmake/-/issues/23052 and QTBUG-99491 for details. + +cmake_minimum_required(VERSION 3.16) + +set(copy_strategy "copy_if_different") +if(CMAKE_HOST_WIN32) + file(SIZE "${SRC_FILE_PATH}" size) + # If file size is bigger than 2GB copy it unconditionally + if(size GREATER_EQUAL 2147483648) + set(copy_strategy "copy") + endif() +endif() + +execute_process(COMMAND ${CMAKE_COMMAND} -E ${copy_strategy} "${SRC_FILE_PATH}" "${DST_FILE_PATH}") diff --git a/cmake/QtPublicCMakeHelpers.cmake b/cmake/QtPublicCMakeHelpers.cmake new file mode 100644 index 0000000000..86b8edacd4 --- /dev/null +++ b/cmake/QtPublicCMakeHelpers.cmake @@ -0,0 +1,20 @@ +# copy_if_different works incorrect in Windows if file size if bigger than 2GB. +# See https://gitlab.kitware.com/cmake/cmake/-/issues/23052 and QTBUG-99491 for details. +function(_qt_internal_copy_file_if_different_command out_var src_file dst_file) + # The CMake version higher than 3.23 doesn't contain the issue + if(CMAKE_HOST_WIN32 AND CMAKE_VERSION VERSION_LESS 3.23) + set(${out_var} "${CMAKE_COMMAND}" + "-DSRC_FILE_PATH=${src_file}" + "-DDST_FILE_PATH=${dst_file}" + -P "${_qt_6_config_cmake_dir}/QtCopyFileIfDifferent.cmake" + PARENT_SCOPE + ) + else() + set(${out_var} "${CMAKE_COMMAND}" + -E copy_if_different + "${src_file}" + "${dst_file}" + PARENT_SCOPE + ) + endif() +endfunction() |