From 4ec651c864792a87793f5c6cfb5a14ed0cafbbb7 Mon Sep 17 00:00:00 2001 From: memsharded Date: Fri, 4 Oct 2024 23:40:24 +0200 Subject: [PATCH 1/3] proposal for loading conan_cmakedeps_paths.cmake --- conan_provider.cmake | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/conan_provider.cmake b/conan_provider.cmake index 0d2be00..b06285c 100644 --- a/conan_provider.cmake +++ b/conan_provider.cmake @@ -488,7 +488,6 @@ function(conan_install) # TODO: this can be made more robust if Conan can provide this in the json output string(JSON conan_generators_folder GET "${conan_stdout}" graph nodes 0 generators_folder) cmake_path(CONVERT ${conan_generators_folder} TO_CMAKE_PATH_LIST conan_generators_folder) - message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${conan_generators_folder}") set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${conan_generators_folder}") # reconfigure on conanfile changes @@ -594,6 +593,9 @@ macro(conan_provide_dependency method package_name) conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) endif() + get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + message(STATUS "CMake-Conan: Loading conan_cmakedeps_paths.cmake file") + include(${_conan_generators_folder}/conan_cmakedeps_paths.cmake) unset(_host_profile_flags) unset(_build_profile_flags) unset(_multiconfig_generator) @@ -604,7 +606,6 @@ macro(conan_provide_dependency method package_name) endif() get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - # Ensure that we consider Conan-provided packages ahead of any other, # irrespective of other settings that modify the search order or search paths # This follows the guidelines from the find_package documentation @@ -616,7 +617,7 @@ macro(conan_provide_dependency method package_name) set(_find_args_${package_name} "${ARGN}") list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") if(NOT "MODULE" IN_LIST _find_args_${package_name}) - find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER) unset(_find_args_${package_name}) endif() From 534515d1773c21877dada8de89031b9cf1f10b84 Mon Sep 17 00:00:00 2001 From: memsharded Date: Fri, 10 Jan 2025 13:33:12 +0100 Subject: [PATCH 2/3] using conan_cmakedeps_paths.cmake --- example/CMakeUserPresets.json | 9 +++++++++ example/new_cmakedeps_profile | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 example/CMakeUserPresets.json create mode 100644 example/new_cmakedeps_profile diff --git a/example/CMakeUserPresets.json b/example/CMakeUserPresets.json new file mode 100644 index 0000000..b7ef56e --- /dev/null +++ b/example/CMakeUserPresets.json @@ -0,0 +1,9 @@ +{ + "version": 4, + "vendor": { + "conan": {} + }, + "include": [ + "build\\build\\generators\\CMakePresets.json" + ] +} \ No newline at end of file diff --git a/example/new_cmakedeps_profile b/example/new_cmakedeps_profile new file mode 100644 index 0000000..75293ef --- /dev/null +++ b/example/new_cmakedeps_profile @@ -0,0 +1,8 @@ +# To test the new incubating CMakeDeps + cmake-conan +# cmake -B build -S . -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=../conan_provider.cmake -DCONAN_HOST_PROFILE="auto-cmake;../new_cmakedeps_profile" + +[options] +*:shared=True + +[conf] +tools.cmake.cmakedeps:new=will_break_next From 7263759cf419c9bf1423b1dbb8919110af6d2e02 Mon Sep 17 00:00:00 2001 From: memsharded Date: Fri, 10 Jan 2025 13:34:11 +0100 Subject: [PATCH 3/3] wip --- conan_provider.cmake | 10 +++++++--- example/CMakeUserPresets.json | 9 --------- 2 files changed, 7 insertions(+), 12 deletions(-) delete mode 100644 example/CMakeUserPresets.json diff --git a/conan_provider.cmake b/conan_provider.cmake index b06285c..3dbd078 100644 --- a/conan_provider.cmake +++ b/conan_provider.cmake @@ -488,6 +488,7 @@ function(conan_install) # TODO: this can be made more robust if Conan can provide this in the json output string(JSON conan_generators_folder GET "${conan_stdout}" graph nodes 0 generators_folder) cmake_path(CONVERT ${conan_generators_folder} TO_CMAKE_PATH_LIST conan_generators_folder) + message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${conan_generators_folder}") set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${conan_generators_folder}") # reconfigure on conanfile changes @@ -594,8 +595,10 @@ macro(conan_provide_dependency method package_name) conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) endif() get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - message(STATUS "CMake-Conan: Loading conan_cmakedeps_paths.cmake file") - include(${_conan_generators_folder}/conan_cmakedeps_paths.cmake) + if(EXISTS "${_conan_generators_folder}/conan_cmakedeps_paths.cmake") + message(STATUS "CMake-Conan: Loading conan_cmakedeps_paths.cmake file") + include(${_conan_generators_folder}/conan_cmakedeps_paths.cmake) + endif() unset(_host_profile_flags) unset(_build_profile_flags) unset(_multiconfig_generator) @@ -606,6 +609,7 @@ macro(conan_provide_dependency method package_name) endif() get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + # Ensure that we consider Conan-provided packages ahead of any other, # irrespective of other settings that modify the search order or search paths # This follows the guidelines from the find_package documentation @@ -617,7 +621,7 @@ macro(conan_provide_dependency method package_name) set(_find_args_${package_name} "${ARGN}") list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") if(NOT "MODULE" IN_LIST _find_args_${package_name}) - find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER) + find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) unset(_find_args_${package_name}) endif() diff --git a/example/CMakeUserPresets.json b/example/CMakeUserPresets.json deleted file mode 100644 index b7ef56e..0000000 --- a/example/CMakeUserPresets.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": 4, - "vendor": { - "conan": {} - }, - "include": [ - "build\\build\\generators\\CMakePresets.json" - ] -} \ No newline at end of file