aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorEvgeny Grin <k2k@narod.ru>2021-02-02 20:39:10 +0300
committerEvgeny Grin <k2k@narod.ru>2021-02-02 20:39:10 +0300
commitf0fead24fbfd68c1364948714dde18f01715f97d (patch)
tree4d79420861e224145102e31b5094cb7a700b9860 /cmake
parent0d82d29f59dd7844f25c74fed9dd2eaf0012b947 (diff)
[win32] Fixed CMake out-of-source build on Windows
CMake is smart enough to detect symlink on Windows, but at the same time is not smart enough to copy symlink itself or linked content on Windows. Currently it fails to copy 'freebsd.xml' which is symlink to 'linux.xml'. Suggested workaround uses CMake internal command and avoids copy of unchanged file.
Diffstat (limited to 'cmake')
-rw-r--r--cmake/scripts/common/Macros.cmake16
1 files changed, 12 insertions, 4 deletions
diff --git a/cmake/scripts/common/Macros.cmake b/cmake/scripts/common/Macros.cmake
index d896651ffd..757d3eebbb 100644
--- a/cmake/scripts/common/Macros.cmake
+++ b/cmake/scripts/common/Macros.cmake
@@ -221,11 +221,19 @@ function(copy_file_to_buildtree file)
endif()
if(NOT file STREQUAL ${CMAKE_BINARY_DIR}/${outfile})
- if(VERBOSE)
- message(STATUS "copy_file_to_buildtree - copying file: ${file} -> ${CMAKE_BINARY_DIR}/${outfile}")
+ if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows" OR NOT IS_SYMLINK "${file}")
+ if(VERBOSE)
+ message(STATUS "copy_file_to_buildtree - copying file: ${file} -> ${CMAKE_BINARY_DIR}/${outfile}")
+ endif()
+ file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ExportFiles.cmake
+ "file(COPY \"${file}\" DESTINATION \"${CMAKE_BINARY_DIR}/${outdir}\")\n" )
+ else()
+ if(VERBOSE)
+ message(STATUS "copy_file_to_buildtree - copying symlinked file: ${file} -> ${CMAKE_BINARY_DIR}/${outfile}")
+ endif()
+ file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ExportFiles.cmake
+ "execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy_if_different \"${file}\" \"${CMAKE_BINARY_DIR}/${outfile}\")\n")
endif()
- file(APPEND ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ExportFiles.cmake
- "file(COPY \"${file}\" DESTINATION \"${CMAKE_BINARY_DIR}/${outdir}\")\n")
endif()
if(NOT arg_NO_INSTALL)