FetchContent: Add support for DOWNLOAD_NO_EXTRACT

Fixes: #20526
This commit is contained in:
Craig Scott
2020-04-01 23:50:36 +11:00
parent f4e4b41a19
commit 0331092ce6
5 changed files with 35 additions and 0 deletions

View File

@@ -796,6 +796,8 @@ function(__FetchContent_directPopulate contentName)
SUBBUILD_DIR
SOURCE_DIR
BINARY_DIR
# We need special processing if DOWNLOAD_NO_EXTRACT is true
DOWNLOAD_NO_EXTRACT
# Prevent the following from being passed through
CONFIGURE_COMMAND
BUILD_COMMAND
@@ -846,6 +848,26 @@ function(__FetchContent_directPopulate contentName)
set(ARG_EXTRA "${ARG_EXTRA} \"${arg}\"")
endforeach()
if(ARG_DOWNLOAD_NO_EXTRACT)
set(ARG_EXTRA "${ARG_EXTRA} DOWNLOAD_NO_EXTRACT YES")
set(__FETCHCONTENT_COPY_FILE
"
ExternalProject_Get_Property(${contentName}-populate DOWNLOADED_FILE)
get_filename_component(dlFileName \"\${DOWNLOADED_FILE}\" NAME)
ExternalProject_Add_Step(${contentName}-populate copyfile
COMMAND \"${CMAKE_COMMAND}\" -E copy_if_different
\"<DOWNLOADED_FILE>\" \"${ARG_SOURCE_DIR}\"
DEPENDEES patch
DEPENDERS configure
BYPRODUCTS \"${ARG_SOURCE_DIR}/\${dlFileName}\"
COMMENT \"Copying file to SOURCE_DIR\"
)
")
else()
unset(__FETCHCONTENT_COPY_FILE)
endif()
# Hide output if requested, but save it to a variable in case there's an
# error so we can show the output upon failure. When not quiet, don't
# capture the output to a variable because the user may want to see the

View File

@@ -21,3 +21,5 @@ ExternalProject_Add(${contentName}-populate
USES_TERMINAL_DOWNLOAD YES
USES_TERMINAL_UPDATE YES
)
@__FETCHCONTENT_COPY_FILE@

View File

@@ -0,0 +1,9 @@
include(FetchContent)
FetchContent_Declare(
t1
URL ${CMAKE_CURRENT_LIST_DIR}/dummyFile.txt
DOWNLOAD_NO_EXTRACT YES
)
FetchContent_Populate(t1)

View File

@@ -6,6 +6,7 @@ run_cmake(MissingDetails)
run_cmake(DirectIgnoresDetails)
run_cmake(FirstDetailsWin)
run_cmake(DownloadTwice)
run_cmake(DownloadFile)
run_cmake(SameGenerator)
run_cmake(VarDefinitions)
run_cmake(GetProperties)

View File

@@ -0,0 +1 @@
# This file is used to verify fetching a single file directly