From a33acaa71d78b0e394ff1f4ce8e6b7836afbb91d Mon Sep 17 00:00:00 2001 From: Ashish Sadanandan Date: Thu, 26 Jan 2023 01:44:00 -0700 Subject: [PATCH] CMakeDeps: heed _FIND_QUIETLY (#12967) * CMakeDeps: heed _FIND_QUIETLY Conan packages using the CMakeDeps generator will now stop printing status messages if the QUIET argument is passed to the respective find_package() CMake call. Fixes #9959 Fixes #10857 * add test Co-authored-by: memsharded --- .../tools/cmake/cmakedeps/templates/config.py | 10 ++++- .../cmake/cmakedeps/templates/targets.py | 4 +- .../cmake/cmakedeps/test_cmakedeps.py | 39 +++++++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/conan/tools/cmake/cmakedeps/templates/config.py b/conan/tools/cmake/cmakedeps/templates/config.py index 5892a4160bc..07b44a4a8d7 100644 --- a/conan/tools/cmake/cmakedeps/templates/config.py +++ b/conan/tools/cmake/cmakedeps/templates/config.py @@ -45,6 +45,12 @@ def template(self): message(FATAL_ERROR "The 'CMakeDeps' generator only works with CMake >= 3.15") endif() + if({{ file_name }}_FIND_QUIETLY) + set({{ file_name }}_MESSAGE_MODE VERBOSE) + else() + set({{ file_name }}_MESSAGE_MODE STATUS) + endif() + include(${CMAKE_CURRENT_LIST_DIR}/cmakedeps_macros.cmake) include(${CMAKE_CURRENT_LIST_DIR}/{{ targets_include_file }}) include(CMakeFindDependencyMacro) @@ -66,7 +72,7 @@ def template(self): # Only the first installed configuration is included to avoid the collision foreach(_BUILD_MODULE {{ '${' + pkg_name + '_BUILD_MODULES_PATHS' + config_suffix + '}' }} ) - message(STATUS "Conan: Including build module from '${_BUILD_MODULE}'") + message({% raw %}${{% endraw %}{{ file_name }}_MESSAGE_MODE} "Conan: Including build module from '${_BUILD_MODULE}'") include({{ '${_BUILD_MODULE}' }}) endforeach() @@ -76,7 +82,7 @@ def template(self): if({{ file_name }}_FIND_COMPONENTS) foreach(_FIND_COMPONENT {{ '${'+file_name+'_FIND_COMPONENTS}' }}) if (TARGET ${_FIND_COMPONENT}) - message(STATUS "Conan: Component '${_FIND_COMPONENT}' found in package '{{ pkg_name }}'") + message({% raw %}${{% endraw %}{{ file_name }}_MESSAGE_MODE} "Conan: Component '${_FIND_COMPONENT}' found in package '{{ pkg_name }}'") else() message(FATAL_ERROR "Conan: Component '${_FIND_COMPONENT}' NOT found in package '{{ pkg_name }}'") endif() diff --git a/conan/tools/cmake/cmakedeps/templates/targets.py b/conan/tools/cmake/cmakedeps/templates/targets.py index c3cea116d37..42d8d7f9c66 100644 --- a/conan/tools/cmake/cmakedeps/templates/targets.py +++ b/conan/tools/cmake/cmakedeps/templates/targets.py @@ -66,13 +66,13 @@ def template(self): foreach(_COMPONENT {{ '${' + pkg_name + '_COMPONENT_NAMES' + '}' }} ) if(NOT TARGET ${_COMPONENT}) add_library(${_COMPONENT} INTERFACE IMPORTED) - message(STATUS "Conan: Component target declared '${_COMPONENT}'") + message({% raw %}${{% endraw %}{{ file_name }}_MESSAGE_MODE} "Conan: Component target declared '${_COMPONENT}'") endif() endforeach() if(NOT TARGET {{ root_target_name }}) add_library({{ root_target_name }} INTERFACE IMPORTED) - message(STATUS "Conan: Target declared '{{ root_target_name }}'") + message({% raw %}${{% endraw %}{{ file_name }}_MESSAGE_MODE} "Conan: Target declared '{{ root_target_name }}'") endif() {%- for alias, target in cmake_target_aliases.items() %} diff --git a/conans/test/functional/toolchains/cmake/cmakedeps/test_cmakedeps.py b/conans/test/functional/toolchains/cmake/cmakedeps/test_cmakedeps.py index c1ceb5d3a0e..370b371a5be 100644 --- a/conans/test/functional/toolchains/cmake/cmakedeps/test_cmakedeps.py +++ b/conans/test/functional/toolchains/cmake/cmakedeps/test_cmakedeps.py @@ -657,3 +657,42 @@ def package_info(self): assert "hello/1.0: Hello World Release!" in client.out assert "talk: Release!" in client.out assert "main: Debug!" in client.out + + +@pytest.mark.tool_cmake +def test_quiet(): + conanfile = textwrap.dedent(""" + from conan import ConanFile + + class Test(ConanFile): + name = "test" + version = "0.1" + + def package_info(self): + self.cpp_info.system_libs = ["lib1"] + """) + client = TestClient() + client.save({"conanfile.py": conanfile}) + client.run("create .") + + conanfile = textwrap.dedent(""" + [requires] + test/0.1 + + [generators] + CMakeDeps + """) + cmakelists = textwrap.dedent(""" + cmake_minimum_required(VERSION 3.15) + project(consumer NONE) + set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}) + set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) + find_package(test QUIET) + """) + + client.save({"conanfile.txt": conanfile, + "CMakeLists.txt": cmakelists}, clean_first=True) + client.run("install .") + client.run_command('cmake . -DCMAKE_BUILD_TYPE=Release') + # Because we used QUIET, not in output + assert "Target declared 'test::test'" not in client.out