@@ -506,16 +506,34 @@ function(cpm_override_fetchcontent contentName)
506
506
endfunction ()
507
507
508
508
# 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)
510
526
cpm_set_policies()
527
+ cpm_parse_add_package_single_arg("${arg} " ARGN)
511
528
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 )
515
531
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()
519
537
520
538
set (oneValueArgs
521
539
NAME
@@ -531,15 +549,14 @@ function(CPMAddPackage)
531
549
DOWNLOAD_COMMAND
532
550
FIND_PACKAGE_ARGUMENTS
533
551
NO_CACHE
534
- SYSTEM
535
552
GIT_SHALLOW
536
553
EXCLUDE_FROM_ALL
537
554
SOURCE_SUBDIR
538
555
)
539
556
540
557
set (multiValueArgs URL OPTIONS )
541
558
542
- cmake_parse_arguments (CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " " ${ARGN } " )
559
+ cmake_parse_arguments (PARSE_ARGV 0 CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " )
543
560
544
561
# Set default values for arguments
545
562
@@ -647,7 +664,7 @@ function(CPMAddPackage)
647
664
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION} " )
648
665
return ()
649
666
endif ()
650
-
667
+
651
668
if (NOT CPM_ARGS_FORCE)
652
669
if (CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY)
653
670
cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION} " ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS} )
@@ -917,7 +934,13 @@ function(cpm_declare_fetch PACKAGE VERSION INFO)
917
934
return ()
918
935
endif ()
919
936
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} )" )
921
944
endfunction ()
922
945
923
946
# 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)
1105
1128
GIT_SHALLOW
1106
1129
)
1107
1130
set (multiValueArgs OPTIONS )
1108
- cmake_parse_arguments (CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
1131
+ cmake_parse_arguments (PARSE_ARGV 0 CPM_ARGS "" "${oneValueArgs} " "${multiValueArgs} " )
1109
1132
1110
1133
foreach (oneArgName ${oneValueArgs} )
1111
1134
if (DEFINED CPM_ARGS_${oneArgName} )
0 commit comments