@@ -506,16 +506,37 @@ 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+ macro (cpm_add_package_single_arg arg)
510526 cpm_set_policies()
527+ cpm_parse_add_package_single_arg("${arg} " __ARGN_multi)
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_multi
531+ EXCLUDE_FROM_ALL YES
532+ SYSTEM YES
533+ )
515534
516- # The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM
517- set (ARGN "${ARGN} ;EXCLUDE_FROM_ALL;YES;SYSTEM;YES;" )
518- endif ()
535+ cpm_add_package_multi_arg(${__ARGN_multi} ) # Forward function arguments to CPMAddPackage()
536+ endmacro ()
537+
538+ function (cpm_add_package_multi_arg)
539+ cpm_set_policies()
519540
520541 set (oneValueArgs
521542 NAME
@@ -539,7 +560,7 @@ function(CPMAddPackage)
539560
540561 set (multiValueArgs URL OPTIONS )
541562
542- cmake_parse_arguments (CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " " ${ARGN } " )
563+ cmake_parse_arguments (PARSE_ARGV 0 CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " )
543564
544565 # Set default values for arguments
545566
@@ -917,7 +938,13 @@ function(cpm_declare_fetch PACKAGE VERSION INFO)
917938 return ()
918939 endif ()
919940
920- FetchContent_Declare(${PACKAGE} ${ARGN} )
941+ # Forward preserving empty string arguments
942+ # (https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4729)
943+ set (__argsQuoted)
944+ foreach (__item IN LISTS ARGN)
945+ string (APPEND __argsQuoted " [==[${__item} ]==]" )
946+ endforeach ()
947+ cmake_language(EVAL CODE "FetchContent_Declare(${PACKAGE} ${__argsQuoted} )" )
921948endfunction ()
922949
923950# returns properties for a package previously defined by cpm_declare_fetch
@@ -1105,7 +1132,7 @@ function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT)
11051132 GIT_SHALLOW
11061133 )
11071134 set (multiValueArgs OPTIONS )
1108- cmake_parse_arguments (CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
1135+ cmake_parse_arguments (PARSE_ARGV 2 CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " )
11091136
11101137 foreach (oneArgName ${oneValueArgs} )
11111138 if (DEFINED CPM_ARGS_${oneArgName} )
0 commit comments