From 21527a7b367a7aa3cef8cdb83d4870e772fbfa7d Mon Sep 17 00:00:00 2001 From: Arniiiii Date: Mon, 19 Aug 2024 16:08:00 +0000 Subject: [PATCH 1/4] if CPM_LOCAL_PACKAGES_ONLY, emit FATAL_ERROR --- cmake/CPM.cmake | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 6e260791..046865d5 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -719,15 +719,20 @@ function(CPMAddPackage) if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY) cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}) + string(REPLACE " " ";" EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS "${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}") + if(CPM_PACKAGE_FOUND) cpm_export_variables(${CPM_ARGS_NAME}) return() - endif() - - if(CPM_LOCAL_PACKAGES_ONLY) + elseif(CPM_USE_LOCAL_PACKAGES) + message( + WARNING + "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS})" + ) + else() message( - SEND_ERROR - "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION})" + FATAL_ERROR + "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS})" ) endif() endif() From 011d3ddd1770e077d8cc8d5c0ebbcb6c00d006e8 Mon Sep 17 00:00:00 2001 From: Arniiiii Date: Mon, 19 Aug 2024 16:49:10 +0000 Subject: [PATCH 2/4] if CPM_LOCAL_PACKAGES_ONLY, make `find_package` fail. --- cmake/CPM.cmake | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 046865d5..1c32b128 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -533,7 +533,7 @@ endfunction() # method to overwrite internal FetchContent properties, to allow using CPM.cmake to overload # FetchContent calls. As these are internal cmake properties, this method should be used carefully # and may need modification in future CMake versions. Source: -# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake#L1152 +# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake #L1152 function(cpm_override_fetchcontent contentName) cmake_parse_arguments(PARSE_ARGV 1 arg "" "SOURCE_DIR;BINARY_DIR" "") if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "") @@ -716,26 +716,30 @@ function(CPMAddPackage) endif() if(NOT CPM_ARGS_FORCE) - if(CPM_USE_LOCAL_PACKAGES OR CPM_LOCAL_PACKAGES_ONLY) + if(CPM_USE_LOCAL_PACKAGES) cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}) - string(REPLACE " " ";" EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS "${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}") - if(CPM_PACKAGE_FOUND) cpm_export_variables(${CPM_ARGS_NAME}) return() - elseif(CPM_USE_LOCAL_PACKAGES) - message( - WARNING - "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS})" - ) else() + string(REPLACE " " ";" EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS + "${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}" + ) message( - FATAL_ERROR + WARNING "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS})" ) endif() endif() + if(CPM_LOCAL_PACKAGES_ONLY) + cpm_find_package( + ${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" REQUIRED ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS} + ) + + cpm_export_variables(${CPM_ARGS_NAME}) + return() + endif() endif() CPMRegisterPackage("${CPM_ARGS_NAME}" "${CPM_ARGS_VERSION}") @@ -1070,7 +1074,7 @@ function( list(APPEND addSubdirectoryExtraArgs EXCLUDE_FROM_ALL) endif() if("${SYSTEM}" AND "${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.25") - # https://cmake.org/cmake/help/latest/prop_dir/SYSTEM.html#prop_dir:SYSTEM + # https://cmake.org/cmake/help/latest/prop_dir/SYSTEM.html #prop_dir:SYSTEM list(APPEND addSubdirectoryExtraArgs SYSTEM) endif() if(OPTIONS) From 8505423245972c6f4dc5d35881301c6d54bf7780 Mon Sep 17 00:00:00 2001 From: Arniiiii Date: Tue, 20 Aug 2024 01:07:25 +0000 Subject: [PATCH 3/4] make warning more verbose --- cmake/CPM.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 1c32b128..68efa135 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -728,7 +728,7 @@ function(CPMAddPackage) ) message( WARNING - "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS})" + "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS}). The warning emitted bacause CPM_USE_LOCAL_PACKAGES is set to \"${CPM_USE_LOCAL_PACKAGES}\" . Falling back to downloading the package." ) endif() endif() From 635d1d66f3dba6cf8f2cf33f5fcbe35d8b5cd029 Mon Sep 17 00:00:00 2001 From: Arniiiii Date: Tue, 20 Aug 2024 01:20:59 +0000 Subject: [PATCH 4/4] Also fix it for CPMFindPackage --- cmake/CPM.cmake | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 68efa135..9a53ccc2 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -300,11 +300,31 @@ function(CPMFindPackage) return() endif() - cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}) + if(${CPM_USE_LOCAL_PACKAGES}) + cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}) - if(NOT CPM_PACKAGE_FOUND) - CPMAddPackage(${ARGN}) + if(CPM_PACKAGE_FOUND) + cpm_export_variables(${CPM_ARGS_NAME}) + return() + else() + string(replace " " ";" EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS + "${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}" + ) + message( + warning + "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS}). The warning emitted bacause cpm_use_local_packages is set to \"${CPM_USE_LOCAL_PACKAGES}\" . Falling back to downloading the package." + ) + CPMAddPackage(${ARGN}) + cpm_export_variables(${CPM_ARGS_NAME}) + endif() + endif() + + if(${CPM_LOCAL_PACKAGES_ONLY}) + cpm_find_package( + ${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" REQUIRED ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS} + ) cpm_export_variables(${CPM_ARGS_NAME}) + return() endif() endfunction() @@ -533,7 +553,8 @@ endfunction() # method to overwrite internal FetchContent properties, to allow using CPM.cmake to overload # FetchContent calls. As these are internal cmake properties, this method should be used carefully # and may need modification in future CMake versions. Source: -# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake #L1152 +# https://github.com/Kitware/CMake/blob/dc3d0b5a0a7d26d43d6cfeb511e224533b5d188f/Modules/FetchContent.cmake +# #L1152 function(cpm_override_fetchcontent contentName) cmake_parse_arguments(PARSE_ARGV 1 arg "" "SOURCE_DIR;BINARY_DIR" "") if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "") @@ -716,23 +737,23 @@ function(CPMAddPackage) endif() if(NOT CPM_ARGS_FORCE) - if(CPM_USE_LOCAL_PACKAGES) + if(${CPM_USE_LOCAL_PACKAGES}) cpm_find_package(${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}) if(CPM_PACKAGE_FOUND) cpm_export_variables(${CPM_ARGS_NAME}) return() else() - string(REPLACE " " ";" EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS + string(replace " " ";" EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS "${CPM_ARGS_FIND_PACKAGE_ARGUMENTS}" ) message( - WARNING + warning "${CPM_INDENT} ${CPM_ARGS_NAME} not found via find_package(${CPM_ARGS_NAME} ${CPM_ARGS_VERSION} ${EDITED_CPM_ARGS_FIND_PACKAGE_ARGUMENTS}). The warning emitted bacause CPM_USE_LOCAL_PACKAGES is set to \"${CPM_USE_LOCAL_PACKAGES}\" . Falling back to downloading the package." ) endif() endif() - if(CPM_LOCAL_PACKAGES_ONLY) + if(${CPM_LOCAL_PACKAGES_ONLY}) cpm_find_package( ${CPM_ARGS_NAME} "${CPM_ARGS_VERSION}" REQUIRED ${CPM_ARGS_FIND_PACKAGE_ARGUMENTS} )