@@ -506,16 +506,34 @@ function(cpm_override_fetchcontent contentName)
506506endfunction ()
507507
508508# Download and add a package from source
509- function (CPMAddPackage)
509+ macro (CPMAddPackage)
510+ set (__ARGN "${ARGN} " )
511+ list (LENGTH __ARGN __ARGN_Length)
512+ if (__ARGN_Length EQUAL 1)
513+ cpm_add_package_single_arg(${ARGN} )
514+ else ()
515+ # Forward preserving empty string arguments
516+ # (https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4729)
517+ set (__ARGN_Quoted)
518+ foreach (__ARG IN LISTS __ARGN)
519+ string (APPEND __ARGN_Quoted " [==[${__ARG} ]==]" )
520+ endforeach ()
521+ cmake_language(EVAL CODE "cpm_add_package_multi_arg( ${__ARGN_Quoted} )" )
522+ endif ()
523+ endmacro ()
524+
525+ function (cpm_add_package_single_arg arg)
510526 cpm_set_policies()
527+ cpm_parse_add_package_single_arg("${arg} " ARGN)
511528
512- list (LENGTH ARGN argnLength)
513- if (argnLength EQUAL 1)
514- cpm_parse_add_package_single_arg("${ARGN} " ARGN)
529+ # The shorthand syntax implies EXCLUDE_FROM_ALL
530+ list (APPEND ARGN EXCLUDE_FROM_ALL YES )
515531
516- # The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM
517- set (ARGN "${ARGN} ;EXCLUDE_FROM_ALL;YES;SYSTEM;YES;" )
518- endif ()
532+ cpm_add_package_multi_arg(${ARGN} ) # Forward function arguments to CPMAddPackage()
533+ endfunction ()
534+
535+ function (cpm_add_package_multi_arg)
536+ cpm_set_policies()
519537
520538 set (oneValueArgs
521539 NAME
@@ -531,15 +549,14 @@ function(CPMAddPackage)
531549 DOWNLOAD_COMMAND
532550 FIND_PACKAGE_ARGUMENTS
533551 NO_CACHE
534- SYSTEM
535552 GIT_SHALLOW
536553 EXCLUDE_FROM_ALL
537554 SOURCE_SUBDIR
538555 )
539556
540557 set (multiValueArgs URL OPTIONS )
541558
542- cmake_parse_arguments (CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " " ${ARGN } " )
559+ cmake_parse_arguments (PARSE_ARGV 0 CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " )
543560
544561 # Set default values for arguments
545562
@@ -917,7 +934,13 @@ function(cpm_declare_fetch PACKAGE VERSION INFO)
917934 return ()
918935 endif ()
919936
920- FetchContent_Declare(${PACKAGE} ${ARGN} )
937+ # Forward preserving empty string arguments
938+ # (https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4729)
939+ set (__argsQuoted)
940+ foreach (__item IN LISTS ARGN)
941+ string (APPEND __argsQuoted " [==[${__item} ]==]" )
942+ endforeach ()
943+ cmake_language(EVAL CODE "FetchContent_Declare(${PACKAGE} ${__argsQuoted} )" )
921944endfunction ()
922945
923946# returns properties for a package previously defined by cpm_declare_fetch
@@ -1105,7 +1128,7 @@ function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT)
11051128 GIT_SHALLOW
11061129 )
11071130 set (multiValueArgs OPTIONS )
1108- cmake_parse_arguments (CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
1131+ cmake_parse_arguments (PARSE_ARGV 0 CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " )
11091132
11101133 foreach (oneArgName ${oneValueArgs} )
11111134 if (DEFINED CPM_ARGS_${oneArgName} )
0 commit comments