mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-04-16 08:42:50 +00:00
Merge pull request #6188 from N3xed/fix/windows-different-drives-build-error
Copy files instead of hard-linking on Windows
This commit is contained in:
commit
8c2d236117
@ -120,38 +120,33 @@ endif()
|
|||||||
|
|
||||||
# Create a symbolic link from ${base_name} in the binary directory
|
# Create a symbolic link from ${base_name} in the binary directory
|
||||||
# to the corresponding path in the source directory.
|
# to the corresponding path in the source directory.
|
||||||
|
# Note: Copies the file(s) on Windows.
|
||||||
function(link_to_source base_name)
|
function(link_to_source base_name)
|
||||||
# Get OS dependent path to use in `execute_process`
|
set(link "${CMAKE_CURRENT_BINARY_DIR}/${base_name}")
|
||||||
if (CMAKE_HOST_WIN32)
|
set(target "${CMAKE_CURRENT_SOURCE_DIR}/${base_name}")
|
||||||
#mklink is an internal command of cmd.exe it can only work with \
|
|
||||||
string(REPLACE "/" "\\" link "${CMAKE_CURRENT_BINARY_DIR}/${base_name}")
|
|
||||||
string(REPLACE "/" "\\" target "${CMAKE_CURRENT_SOURCE_DIR}/${base_name}")
|
|
||||||
else()
|
|
||||||
set(link "${CMAKE_CURRENT_BINARY_DIR}/${base_name}")
|
|
||||||
set(target "${CMAKE_CURRENT_SOURCE_DIR}/${base_name}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Linking to non-existent file is not desirable. At best you will have a
|
# Linking to non-existent file is not desirable. At best you will have a
|
||||||
# dangling link, but when building in tree, this can create a symbolic link
|
# dangling link, but when building in tree, this can create a symbolic link
|
||||||
# to itself.
|
# to itself.
|
||||||
if (EXISTS ${target} AND NOT EXISTS ${link})
|
if (EXISTS ${target} AND NOT EXISTS ${link})
|
||||||
if (CMAKE_HOST_UNIX)
|
if (CMAKE_HOST_UNIX)
|
||||||
set(command ln -s ${target} ${link})
|
execute_process(COMMAND ln -s ${target} ${link}
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
ERROR_VARIABLE output)
|
||||||
|
|
||||||
|
if (NOT ${result} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Could not create symbolic link for: ${target} --> ${output}")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
if (IS_DIRECTORY ${target})
|
if (IS_DIRECTORY ${target})
|
||||||
set(command cmd.exe /c mklink /j ${link} ${target})
|
file(GLOB_RECURSE files FOLLOW_SYMLINKS LIST_DIRECTORIES false RELATIVE ${target} "${target}/*")
|
||||||
|
foreach(file IN LISTS files)
|
||||||
|
configure_file("${target}/${file}" "${link}/${file}" COPYONLY)
|
||||||
|
endforeach(file)
|
||||||
else()
|
else()
|
||||||
set(command cmd.exe /c mklink /h ${link} ${target})
|
configure_file(${target} ${link} COPYONLY)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
execute_process(COMMAND ${command}
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
ERROR_VARIABLE output)
|
|
||||||
|
|
||||||
if (NOT ${result} EQUAL 0)
|
|
||||||
message(FATAL_ERROR "Could not create symbolic link for: ${target} --> ${output}")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
endfunction(link_to_source)
|
endfunction(link_to_source)
|
||||||
|
|
||||||
|
3
ChangeLog.d/fix_hard_link_across_drives
Normal file
3
ChangeLog.d/fix_hard_link_across_drives
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Bugfix
|
||||||
|
* Fix a build issue on Windows where the source and build directory could not be on
|
||||||
|
different drives (#5751).
|
Loading…
x
Reference in New Issue
Block a user