Skip to content

Commit 43f9f96

Browse files
Preserving forwarding of empty string arguments
Also: - Support cmake-format on Windows - Auto fixes some whitespace - `CPMFindPackage` not updated
1 parent a02a960 commit 43f9f96

File tree

2 files changed

+36
-12
lines changed

2 files changed

+36
-12
lines changed

.cmake-format

+1
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

+35-12
Original file line numberDiff line numberDiff line change
@@ -506,16 +506,34 @@ 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+
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

@@ -647,7 +664,7 @@ function(CPMAddPackage)
647664
cpm_check_if_package_already_added(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}")
648665
return()
649666
endif()
650-
667+
651668
if(NOT CPM_ARGS_FORCE)
652669
if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY)
653670
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)
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} )")
921944
endfunction()
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

Comments
 (0)