summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
authorCraig Scott <craig.scott@crascit.com>2020-05-15 08:21:42 +1000
committerCraig Scott <craig.scott@crascit.com>2020-05-23 23:41:53 +1000
commitcbf2daeed08c21fc79cbcfa938a506a06b30e787 (patch)
tree24028bc84c635d8714543f1272a251ab7dbbfcd8 /Modules
parent62816ff88c6d1bd8d1c00de5ed448ee915d69e00 (diff)
downloadcmake-cbf2daeed08c21fc79cbcfa938a506a06b30e787.tar.gz
ExternalProject: Preserve empty string arguments
Diffstat (limited to 'Modules')
-rw-r--r--Modules/ExternalProject.cmake192
1 files changed, 122 insertions, 70 deletions
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index f9f7a4f3d1..3740fc0383 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -1908,7 +1908,11 @@ function(_ep_get_build_command name step cmd_var)
get_target_property(args ${name} _EP_${step}_ARGS)
endif()
- list(APPEND cmd ${args})
+ if(NOT "${args}" STREQUAL "")
+ # args could have empty items, so we must quote it to prevent them
+ # from being silently removed
+ list(APPEND cmd "${args}")
+ endif()
set(${cmd_var} "${cmd}" PARENT_SCOPE)
endfunction()
@@ -2224,17 +2228,23 @@ function(ExternalProject_Add_Step name step)
set(command ${CMAKE_COMMAND} -E echo_append)
endif()
- add_custom_command(
- OUTPUT ${stamp_file}
- BYPRODUCTS ${byproducts}
- COMMENT ${comment}
- COMMAND ${command}
- COMMAND ${touch}
- DEPENDS ${depends}
- WORKING_DIRECTORY ${work_dir}
- VERBATIM
- ${uses_terminal}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS command)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ add_custom_command(
+ OUTPUT \${stamp_file}
+ BYPRODUCTS \${byproducts}
+ COMMENT \${comment}
+ COMMAND ${__cmdQuoted}
+ COMMAND \${touch}
+ DEPENDS \${depends}
+ WORKING_DIRECTORY \${work_dir}
+ VERBATIM
+ ${uses_terminal}
+ )"
+ )
set_property(TARGET ${name} APPEND PROPERTY _EP_STEPS ${step})
# Add custom "step target"?
@@ -2689,15 +2699,21 @@ function(_ep_add_download_command name)
set(uses_terminal "")
endif()
- ExternalProject_Add_Step(${name} download
- COMMENT ${comment}
- COMMAND ${cmd}
- WORKING_DIRECTORY ${work_dir}
- DEPENDS ${depends}
- DEPENDEES mkdir
- ${log}
- ${uses_terminal}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS cmd)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ ExternalProject_Add_Step(\${name} download
+ COMMENT \${comment}
+ COMMAND ${__cmdQuoted}
+ WORKING_DIRECTORY \${work_dir}
+ DEPENDS \${depends}
+ DEPENDEES mkdir
+ ${log}
+ ${uses_terminal}
+ )"
+ )
endfunction()
function(_ep_get_update_disconnected var name)
@@ -2834,16 +2850,22 @@ Update to Mercurial >= 2.1.1.
set(uses_terminal "")
endif()
- ExternalProject_Add_Step(${name} update
- COMMENT ${comment}
- COMMAND ${cmd}
- ALWAYS ${always}
- EXCLUDE_FROM_MAIN ${update_disconnected}
- WORKING_DIRECTORY ${work_dir}
- DEPENDEES download
- ${log}
- ${uses_terminal}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS cmd)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ ExternalProject_Add_Step(${name} update
+ COMMENT \${comment}
+ COMMAND ${__cmdQuoted}
+ ALWAYS \${always}
+ EXCLUDE_FROM_MAIN \${update_disconnected}
+ WORKING_DIRECTORY \${work_dir}
+ DEPENDEES download
+ ${log}
+ ${uses_terminal}
+ )"
+ )
if(update_disconnected)
_ep_get_step_stampfile(${name} skip-update skip-update_stamp_file)
@@ -2889,12 +2911,18 @@ function(_ep_add_patch_command name)
set(update_dep update)
endif()
- ExternalProject_Add_Step(${name} patch
- COMMAND ${cmd}
- WORKING_DIRECTORY ${work_dir}
- DEPENDEES download ${update_dep}
- ${log}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS cmd)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ ExternalProject_Add_Step(${name} patch
+ COMMAND ${__cmdQuoted}
+ WORKING_DIRECTORY \${work_dir}
+ DEPENDEES download \${update_dep}
+ ${log}
+ )"
+ )
endfunction()
@@ -3054,14 +3082,20 @@ function(_ep_add_configure_command name)
set(update_dep update)
endif()
- ExternalProject_Add_Step(${name} configure
- COMMAND ${cmd}
- WORKING_DIRECTORY ${binary_dir}
- DEPENDEES ${update_dep} patch
- DEPENDS ${file_deps}
- ${log}
- ${uses_terminal}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS cmd)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ ExternalProject_Add_Step(${name} configure
+ COMMAND ${__cmdQuoted}
+ WORKING_DIRECTORY \${binary_dir}
+ DEPENDEES \${update_dep} patch
+ DEPENDS \${file_deps}
+ ${log}
+ ${uses_terminal}
+ )"
+ )
endfunction()
@@ -3099,15 +3133,21 @@ function(_ep_add_build_command name)
get_property(build_byproducts TARGET ${name} PROPERTY _EP_BUILD_BYPRODUCTS)
- ExternalProject_Add_Step(${name} build
- COMMAND ${cmd}
- BYPRODUCTS ${build_byproducts}
- WORKING_DIRECTORY ${binary_dir}
- DEPENDEES configure
- ALWAYS ${always}
- ${log}
- ${uses_terminal}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS cmd)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ ExternalProject_Add_Step(${name} build
+ COMMAND ${__cmdQuoted}
+ BYPRODUCTS \${build_byproducts}
+ WORKING_DIRECTORY \${binary_dir}
+ DEPENDEES configure
+ ALWAYS \${always}
+ ${log}
+ ${uses_terminal}
+ )"
+ )
endfunction()
@@ -3136,13 +3176,19 @@ function(_ep_add_install_command name)
set(uses_terminal "")
endif()
- ExternalProject_Add_Step(${name} install
- COMMAND ${cmd}
- WORKING_DIRECTORY ${binary_dir}
- DEPENDEES build
- ${log}
- ${uses_terminal}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS cmd)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ ExternalProject_Add_Step(${name} install
+ COMMAND ${__cmdQuoted}
+ WORKING_DIRECTORY \${binary_dir}
+ DEPENDEES build
+ ${log}
+ ${uses_terminal}
+ )"
+ )
endfunction()
@@ -3197,15 +3243,21 @@ function(_ep_add_test_command name)
set(uses_terminal "")
endif()
- ExternalProject_Add_Step(${name} test
- COMMAND ${cmd}
- WORKING_DIRECTORY ${binary_dir}
- ${dependees_args}
- ${dependers_args}
- ${exclude_args}
- ${log}
- ${uses_terminal}
- )
+ set(__cmdQuoted)
+ foreach(__item IN LISTS cmd)
+ string(APPEND __cmdQuoted " [==[${__item}]==]")
+ endforeach()
+ cmake_language(EVAL CODE "
+ ExternalProject_Add_Step(${name} test
+ COMMAND ${__cmdQuoted}
+ WORKING_DIRECTORY \${binary_dir}
+ ${dependees_args}
+ ${dependers_args}
+ ${exclude_args}
+ ${log}
+ ${uses_terminal}
+ )"
+ )
endif()
endfunction()