@@ -257,6 +257,7 @@ function(CPMAddPackage)
257257 FIND_PACKAGE_ARGUMENTS
258258 NO_CACHE
259259 GIT_SHALLOW
260+ EXCLUDE_FROM_ALL
260261 )
261262
262263 set (multiValueArgs OPTIONS )
@@ -387,7 +388,9 @@ function(CPMAddPackage)
387388 set (${CPM_ARGS_NAME} _ADDED YES )
388389 set (${CPM_ARGS_NAME} _SOURCE_DIR ${download_directory} )
389390 if (NOT CPM_ARGS_DOWNLOAD_ONLY AND EXISTS ${download_directory} /CMakeLists.txt)
390- add_subdirectory (${download_directory} ${${CPM_ARGS_NAME} _BINARY_DIR})
391+ cpm_add_subdirectory(
392+ ${download_directory} ${${CPM_ARGS_NAME} _BINARY_DIR} "${CPM_ARGS_EXCLUDE_FROM_ALL} "
393+ )
391394 endif ()
392395 set (CPM_SKIP_FETCH TRUE )
393396 set (PACKAGE_INFO "${PACKAGE_INFO} at ${download_directory} " )
@@ -427,7 +430,7 @@ function(CPMAddPackage)
427430 cpm_declare_fetch(
428431 "${CPM_ARGS_NAME} " "${CPM_ARGS_VERSION} " "${PACKAGE_INFO} " "${CPM_ARGS_UNPARSED_ARGUMENTS} "
429432 )
430- cpm_fetch_package("${CPM_ARGS_NAME} " "${DOWNLOAD_ONLY} " )
433+ cpm_fetch_package("${CPM_ARGS_NAME} " "${DOWNLOAD_ONLY} " " ${CPM_ARGS_EXCLUDE_FROM_ALL} " )
431434 cpm_get_fetch_properties("${CPM_ARGS_NAME} " )
432435 endif ()
433436
@@ -550,23 +553,35 @@ function(cpm_get_fetch_properties PACKAGE)
550553 )
551554endfunction ()
552555
556+ function (cpm_add_subdirectory SOURCE_DIR BINARY_DIR EXCLUDE )
557+ if (EXCLUDE )
558+ set (addSubdirectoryExtraArgs EXCLUDE_FROM_ALL )
559+ else ()
560+ set (addSubdirectoryExtraArgs "" )
561+ endif ()
562+ add_subdirectory (${SOURCE_DIR} ${BINARY_DIR} ${addSubdirectoryExtraArgs} )
563+ endfunction ()
564+
553565# downloads a previously declared package via FetchContent
554- function (cpm_fetch_package PACKAGE DOWNLOAD_ONLY)
566+ function (cpm_fetch_package PACKAGE DOWNLOAD_ONLY EXCLUDE )
555567 if (${CPM_DRY_RUN} )
556568 message (STATUS "${CPM_INDENT} package ${PACKAGE} not fetched (dry run)" )
557569 return ()
558570 endif ()
559571
560- if (DOWNLOAD_ONLY)
561- FetchContent_GetProperties(${PACKAGE} )
562- if (NOT ${PACKAGE} _POPULATED)
563- FetchContent_Populate(${PACKAGE} )
572+ FetchContent_GetProperties(${PACKAGE} )
573+ string (TOLOWER "${PACKAGE} " lower_case_name)
574+
575+ if (NOT ${lower_case_name} _POPULATED)
576+ FetchContent_Populate(${PACKAGE} )
577+ if (NOT DOWNLOAD_ONLY AND EXISTS ${${lower_case_name} _SOURCE_DIR}/CMakeLists.txt)
578+ set (CPM_OLD_INDENT "${CPM_INDENT} " )
579+ set (CPM_INDENT "${CPM_INDENT} ${PACKAGE} :" )
580+ cpm_add_subdirectory(
581+ ${${lower_case_name} _SOURCE_DIR} ${${lower_case_name} _BINARY_DIR} "${EXCLUDE} "
582+ )
583+ set (CPM_INDENT "${CPM_OLD_INDENT} " )
564584 endif ()
565- else ()
566- set (CPM_OLD_INDENT "${CPM_INDENT} " )
567- set (CPM_INDENT "${CPM_INDENT} ${PACKAGE} :" )
568- FetchContent_MakeAvailable(${PACKAGE} )
569- set (CPM_INDENT "${CPM_OLD_INDENT} " )
570585 endif ()
571586endfunction ()
572587
0 commit comments