Skip to content

Commit cbe5144

Browse files
Preserving forwarding of empty string arguments
Also: - Support cmake-format on Windows by using auto lione-ending
1 parent b70460a commit cbe5144

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

.cmake-format

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
format:
22
tab_size: 2
33
line_width: 100
4+
line_ending: auto
45
dangle_parens: true
56

67
parse:

cmake/CPM.cmake

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -506,16 +506,37 @@ function(cpm_override_fetchcontent contentName)
506506
endfunction()
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} )")
921948
endfunction()
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

Comments
 (0)