diff --git a/rapids-cmake/export/export.cmake b/rapids-cmake/export/export.cmake index 401c47111..6148f0c82 100644 --- a/rapids-cmake/export/export.cmake +++ b/rapids-cmake/export/export.cmake @@ -1,5 +1,5 @@ #============================================================================= -# Copyright (c) 2021-2024, NVIDIA CORPORATION. +# Copyright (c) 2021-2025, NVIDIA CORPORATION. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -213,7 +213,10 @@ function(rapids_export type project_name) unset(_RAPIDS_VERSION) # unset this so we don't export a version value of `OFF` elseif(NOT DEFINED _RAPIDS_VERSION AND NOT DEFINED PROJECT_VERSION) set(rapids_version_set OFF) - elseif(DEFINED PROJECT_VERSION AND NOT DEFINED _RAPIDS_VERSION) + elseif(DEFINED PROJECT_VERSION AND NOT PROJECT_VERSION) + # PROJECT_VERSION is defined as a empty string / false value + set(rapids_version_set OFF) + elseif(DEFINED PROJECT_VERSION AND PROJECT_VERSION AND NOT DEFINED _RAPIDS_VERSION) # Choose the project version when an explicit version isn't provided set(_RAPIDS_VERSION "${PROJECT_VERSION}") endif() diff --git a/rapids-cmake/export/template/build_package.cmake.in b/rapids-cmake/export/template/build_package.cmake.in index e3121c5bf..5c1ecfa79 100644 --- a/rapids-cmake/export/template/build_package.cmake.in +++ b/rapids-cmake/export/template/build_package.cmake.in @@ -1,5 +1,5 @@ #============================================================================= -# find_dependency Search for @name@ +# __find_dependency_no_return Search for @name@ # # Make sure we search for a build-dir config module for the project set(possible_package_dir "@possible_dir@") @@ -7,7 +7,15 @@ if(possible_package_dir AND NOT DEFINED @name@_DIR) set(@name@_DIR "${possible_package_dir}") endif() -find_dependency(@name@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + __find_dependency_no_return(@name@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else() + find_dependency(@name@) +endif() if(possible_package_dir) unset(possible_package_dir) diff --git a/rapids-cmake/export/template/build_package_components.cmake.in b/rapids-cmake/export/template/build_package_components.cmake.in index 9faac7b29..6cb795620 100644 --- a/rapids-cmake/export/template/build_package_components.cmake.in +++ b/rapids-cmake/export/template/build_package_components.cmake.in @@ -1,5 +1,5 @@ #============================================================================= -# find_dependency Search for @name@ +# __find_dependency_no_return Search for @name@ # # Make sure we search for a build-dir config module for the project set(possible_package_dir "@possible_dir@") @@ -7,7 +7,17 @@ if(possible_package_dir AND NOT DEFINED @name@_DIR) set(@name@_DIR "${possible_package_dir}") endif() -find_dependency(@name@ COMPONENTS @components@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + __find_dependency_no_return(@name@ COMPONENTS @components@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else() + find_dependency(@name@ COMPONENTS @components@) +endif() + + if(possible_package_dir) unset(possible_package_dir) diff --git a/rapids-cmake/export/template/build_package_components_versioned.cmake.in b/rapids-cmake/export/template/build_package_components_versioned.cmake.in index da5dc9406..9b8fd37d9 100644 --- a/rapids-cmake/export/template/build_package_components_versioned.cmake.in +++ b/rapids-cmake/export/template/build_package_components_versioned.cmake.in @@ -1,5 +1,5 @@ #============================================================================= -# find_dependency Search for @name@ +# __find_dependency_no_return Search for @name@ # # Make sure we search for a build-dir config module for the project set(possible_package_dir "@possible_dir@") @@ -7,8 +7,18 @@ if(possible_package_dir AND NOT DEFINED @name@_DIR) set(@name@_DIR "${possible_package_dir}") endif() -find_package(@name@ @version@ QUIET COMPONENTS @components@) -find_dependency(@name@ COMPONENTS @components@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + find_package(@name@ @version@ QUIET UNWIND_INCLUDE COMPONENTS @components@) + __find_dependency_no_return(@name@ COMPONENTS @components@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else() + find_package(@name@ @version@ QUIET COMPONENTS @components@) + find_dependency(@name@ COMPONENTS @components@) +endif() + if(possible_package_dir) unset(possible_package_dir) diff --git a/rapids-cmake/export/template/build_package_versioned.cmake.in b/rapids-cmake/export/template/build_package_versioned.cmake.in index f28e8e55b..e7ba31232 100644 --- a/rapids-cmake/export/template/build_package_versioned.cmake.in +++ b/rapids-cmake/export/template/build_package_versioned.cmake.in @@ -1,5 +1,5 @@ #============================================================================= -# find_dependency Search for @name@ +# __find_dependency_no_return Search for @name@ # # Make sure we search for a build-dir config module for the project set(possible_package_dir "@possible_dir@") @@ -7,8 +7,17 @@ if(possible_package_dir AND NOT DEFINED @name@_DIR) set(@name@_DIR "${possible_package_dir}") endif() -find_package(@name@ @version@ QUIET) -find_dependency(@name@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + find_package(@name@ @version@ QUIET UNWIND_INCLUDE) + __find_dependency_no_return(@name@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else() + find_package(@name@ @version@ QUIET) + find_dependency(@name@) +endif() if(possible_package_dir) unset(possible_package_dir) diff --git a/rapids-cmake/export/template/install_package.cmake.in b/rapids-cmake/export/template/install_package.cmake.in index 39fd5fd37..893fd12c9 100644 --- a/rapids-cmake/export/template/install_package.cmake.in +++ b/rapids-cmake/export/template/install_package.cmake.in @@ -1 +1,9 @@ -find_dependency(@name@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + __find_dependency_no_return(@name@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else + find_dependency(@name@) +endif() diff --git a/rapids-cmake/export/template/install_package_components.cmake.in b/rapids-cmake/export/template/install_package_components.cmake.in index 1aca3ee28..40144ef1e 100644 --- a/rapids-cmake/export/template/install_package_components.cmake.in +++ b/rapids-cmake/export/template/install_package_components.cmake.in @@ -1 +1,9 @@ -find_dependency(@name@ COMPONENTS @components@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + __find_dependency_no_return(@name@ COMPONENTS @components@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else + find_dependency(@name@) +endif() diff --git a/rapids-cmake/export/template/install_package_components_versioned.cmake.in b/rapids-cmake/export/template/install_package_components_versioned.cmake.in index 1f07e44f2..403e5fcb2 100644 --- a/rapids-cmake/export/template/install_package_components_versioned.cmake.in +++ b/rapids-cmake/export/template/install_package_components_versioned.cmake.in @@ -1,2 +1,11 @@ -find_package(@name@ @version@ QUIET COMPONENTS @components@) -find_dependency(@name@ COMPONENTS @components@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + find_package(@name@ @version@ QUIET UNWIND_INCLUDE COMPONENTS @components@) + __find_dependency_no_return(@name@ COMPONENTS @components@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else + find_package(@name@ @version@ QUIET COMPONENTS @components@) + find_dependency(@name@ COMPONENTS @components@) +endif() diff --git a/rapids-cmake/export/template/install_package_versioned.cmake.in b/rapids-cmake/export/template/install_package_versioned.cmake.in index c9189e5ea..152382ef9 100644 --- a/rapids-cmake/export/template/install_package_versioned.cmake.in +++ b/rapids-cmake/export/template/install_package_versioned.cmake.in @@ -1,2 +1,11 @@ -find_package(@name@ @version@ QUIET) -find_dependency(@name@) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + find_package(@name@ @version@ QUIET UNWIND_INCLUDE) + __find_dependency_no_return(@name@) + if(NOT @name@_FOUND) + unset(_cmake_unwind_arg) + return() + endif() +else() + find_package(@name@ @version@ QUIET) + find_dependency(@name@) +endif() diff --git a/testing/cuda/init_arch-all-via-undef/CMakeLists.txt b/testing/cuda/init_arch-all-via-undef/CMakeLists.txt index e48867b5d..28f23b4ea 100644 --- a/testing/cuda/init_arch-all-via-undef/CMakeLists.txt +++ b/testing/cuda/init_arch-all-via-undef/CMakeLists.txt @@ -18,6 +18,7 @@ include(${rapids-cmake-dir}/cuda/init_architectures.cmake) cmake_minimum_required(VERSION 3.30.4) unset(CMAKE_CUDA_ARCHITECTURES) +unset(CMAKE_CUDA_ARCHITECTURES CACHE) unset(ENV{CUDAARCHS}) rapids_cuda_init_architectures(rapids-project) diff --git a/testing/export/export_package-build-with-components-and-version.cmake b/testing/export/export_package-build-with-components-and-version.cmake index e884cdab2..e87885495 100644 --- a/testing/export/export_package-build-with-components-and-version.cmake +++ b/testing/export/export_package-build-with-components-and-version.cmake @@ -25,6 +25,9 @@ endif() # verify that the expected version is in FAKE_PACKAGE.cmake set(to_match_string [=[22.08 QUIET]=]) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + string(APPEND to_match_string [=[ UNWIND_INCLUDE]=]) +endif() file(READ "${path}" contents) string(FIND "${contents}" "${to_match_string}" is_found) if(is_found EQUAL -1) diff --git a/testing/export/export_package-build-with-version.cmake b/testing/export/export_package-build-with-version.cmake index 74d8c29de..efa12dfd6 100644 --- a/testing/export/export_package-build-with-version.cmake +++ b/testing/export/export_package-build-with-version.cmake @@ -24,7 +24,11 @@ if(NOT EXISTS "${path}") endif() # verify that the expected version is in FAKE_PACKAGE.cmake -set(to_match_string [=[22.08 QUIET)]=]) +set(to_match_string [=[22.08 QUIET]=]) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + string(APPEND to_match_string [=[ UNWIND_INCLUDE]=]) +endif() + file(READ "${path}" contents) string(FIND "${contents}" "${to_match_string}" is_found) if(is_found EQUAL -1) diff --git a/testing/export/export_package-install-with-components.cmake b/testing/export/export_package-install-with-components.cmake index 120cc7fe1..56de8715a 100644 --- a/testing/export/export_package-install-with-components.cmake +++ b/testing/export/export_package-install-with-components.cmake @@ -24,7 +24,11 @@ if(NOT EXISTS "${path}") endif() # verify that the expected version exists in FAKE_PACKAGE.cmake -set(to_match_string [=[14.7.2 QUIET)]=]) +set(to_match_string [=[14.7.2 QUIET]=]) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + string(APPEND to_match_string [=[ UNWIND_INCLUDE]=]) +endif() + file(READ "${path}" contents) string(FIND "${contents}" "${to_match_string}" is_found) if(is_found EQUAL -1) diff --git a/testing/export/write_dependencies-duplicate-cpm-and-package.cmake b/testing/export/write_dependencies-duplicate-cpm-and-package.cmake index 7bff35453..01ef52190 100644 --- a/testing/export/write_dependencies-duplicate-cpm-and-package.cmake +++ b/testing/export/write_dependencies-duplicate-cpm-and-package.cmake @@ -31,11 +31,15 @@ rapids_export_write_dependencies(install test_set "${CMAKE_CURRENT_BINARY_DIR}/e file(STRINGS "${CMAKE_CURRENT_BINARY_DIR}/export_set.cmake" text) set(cpm_command_count 0) +set(find_dependency_no_return_command_count 0) set(find_dependency_command_count 0) foreach(line IN LISTS text) # message(STATUS "1. line: ${line}") if(line MATCHES "CPMFindPackage") math(EXPR cpm_command_count "${cpm_command_count} + 1") + elseif(line MATCHES "__find_dependency_no_return") + math(EXPR find_dependency_no_return_command_count + "${find_dependency_no_return_command_count} + 1") elseif(line MATCHES "find_dependency") math(EXPR find_dependency_command_count "${find_dependency_command_count} + 1") endif() @@ -46,6 +50,11 @@ if(NOT cpm_command_count EQUAL 1) ) endif() +if(NOT find_dependency_no_return_command_count EQUAL 2) + message(FATAL_ERROR "Incorrect number of find_dependency entries found. Expected 2, counted ${find_dependency_no_return_command_count}" + ) +endif() + if(NOT find_dependency_command_count EQUAL 2) message(FATAL_ERROR "Incorrect number of find_dependency entries found. Expected 2, counted ${find_dependency_command_count}" ) diff --git a/testing/find/find_package-components/CMakeLists.txt b/testing/find/find_package-components/CMakeLists.txt index c6aad147f..fb8f9fa77 100644 --- a/testing/find/find_package-components/CMakeLists.txt +++ b/testing/find/find_package-components/CMakeLists.txt @@ -29,7 +29,11 @@ if(NOT (DEFINED FakeDependency_A_FOUND AND DEFINED FakeDependency_B_FOUND AND DE message(FATAL_ERROR "rapids_find_package() failed to propagate COMPONENT A B C") endif() -set(to_match_string "find_package(FakeDependency 11 QUIET COMPONENTS A;B;C)") +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + set(to_match_string "find_package(FakeDependency 11 QUIET UNWIND_INCLUDE COMPONENTS A;B;C)") +else() + set(to_match_string "find_package(FakeDependency 11 QUIET COMPONENTS A;B;C)") +endif() set(path "${CMAKE_BINARY_DIR}/rapids-cmake/test_export_set/build/package_FakeDependency.cmake") file(READ "${path}" contents) diff --git a/testing/find/find_package-version-explicit.cmake b/testing/find/find_package-version-explicit.cmake index a22f266e1..166589723 100644 --- a/testing/find/find_package-version-explicit.cmake +++ b/testing/find/find_package-version-explicit.cmake @@ -33,7 +33,11 @@ include(${rapids-cmake-dir}/find/package.cmake) rapids_find_package(CUDAToolkit 11 REQUIRED INSTALL_EXPORT_SET test_export_set BUILD_EXPORT_SET test_export_set) -set(to_match_string "find_package(CUDAToolkit 11 QUIET)") +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + set(to_match_string "find_package(CUDAToolkit 11 QUIET UNWIND_INCLUDE)") +else() + set(to_match_string "find_package(CUDAToolkit 11 QUIET)") +endif() set(path "${CMAKE_BINARY_DIR}/rapids-cmake/test_export_set/build/package_CUDAToolkit.cmake") file(READ "${path}" contents) diff --git a/testing/find/find_package-version-none.cmake b/testing/find/find_package-version-none.cmake index c50c42fa3..f9004e846 100644 --- a/testing/find/find_package-version-none.cmake +++ b/testing/find/find_package-version-none.cmake @@ -35,7 +35,11 @@ rapids_find_package(CUDAToolkit REQUIRED INSTALL_EXPORT_SET test_export_set # no version specified at find time, verify none recorded If we record the found version we break # things like CUDA backwards runtime compat -set(to_match_string "find_dependency(CUDAToolkit)") +if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.2.0) + set(to_match_string "__find_dependency_no_return(CUDAToolkit)") +else() + set(to_match_string "find_dependency(CUDAToolkit)") +endif() set(path "${CMAKE_BINARY_DIR}/rapids-cmake/test_export_set/build/package_CUDAToolkit.cmake") file(READ "${path}" contents)