Skip to content

Commit

Permalink
CMakeDeps: heed <PackageName>_FIND_QUIETLY (#12967)
Browse files Browse the repository at this point in the history
* CMakeDeps: heed <PackageName>_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 <james@conan.io>
  • Loading branch information
praetorian20 and memsharded authored Jan 26, 2023
1 parent 36a4935 commit a33acaa
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 4 deletions.
10 changes: 8 additions & 2 deletions conan/tools/cmake/cmakedeps/templates/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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()
Expand All @@ -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()
Expand Down
4 changes: 2 additions & 2 deletions conan/tools/cmake/cmakedeps/templates/targets.py
Original file line number Diff line number Diff line change
Expand Up @@ -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() %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit a33acaa

Please sign in to comment.