diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index c6710e1..2d2c15c 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -619,10 +619,11 @@ function(CPMAddPackage) get_filename_component(download_directory ${download_directory} ABSOLUTE) list(APPEND CPM_ARGS_UNPARSED_ARGUMENTS SOURCE_DIR ${download_directory}) if(EXISTS ${download_directory}) - # avoid FetchContent modules to improve performance - set(${CPM_ARGS_NAME}_BINARY_DIR ${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build) - set(${CPM_ARGS_NAME}_ADDED YES) - set(${CPM_ARGS_NAME}_SOURCE_DIR ${download_directory}) + cpm_store_fetch_properties( + ${CPM_ARGS_NAME} "${download_directory}" + "${CPM_FETCHCONTENT_BASE_DIR}/${lower_case_name}-build" + ) + cpm_get_fetch_properties("${CPM_ARGS_NAME}") if(DEFINED CPM_ARGS_GIT_TAG) # warn if cache has been changed since checkout @@ -793,18 +794,32 @@ function(cpm_get_fetch_properties PACKAGE) if(${CPM_DRY_RUN}) return() endif() - FetchContent_GetProperties(${PACKAGE}) - string(TOLOWER ${PACKAGE} lpackage) + set(${PACKAGE}_SOURCE_DIR - "${${lpackage}_SOURCE_DIR}" + "${CPM_PACKAGE_${PACKAGE}_SOURCE_DIR}" PARENT_SCOPE ) set(${PACKAGE}_BINARY_DIR - "${${lpackage}_BINARY_DIR}" + "${CPM_PACKAGE_${PACKAGE}_BINARY_DIR}" PARENT_SCOPE ) endfunction() +function(cpm_store_fetch_properties PACKAGE source_dir binary_dir) + if(${CPM_DRY_RUN}) + return() + endif() + + set(CPM_PACKAGE_${PACKAGE}_SOURCE_DIR + "${source_dir}" + CACHE INTERNAL "" + ) + set(CPM_PACKAGE_${PACKAGE}_BINARY_DIR + "${binary_dir}" + CACHE INTERNAL "" + ) +endfunction() + # adds a package as a subdirectory if viable, according to provided options function( cpm_add_subdirectory @@ -862,6 +877,10 @@ function(cpm_fetch_package PACKAGE populated) ) endif() + cpm_store_fetch_properties( + ${CPM_ARGS_NAME} ${${lower_case_name}_SOURCE_DIR} ${${lower_case_name}_BINARY_DIR} + ) + set(${PACKAGE}_SOURCE_DIR ${${lower_case_name}_SOURCE_DIR} PARENT_SCOPE