Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add quiet OUTPUT_QUIET ERROR_QUIET to new conan_cmake_install #313

Merged
merged 7 commits into from
Feb 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,9 @@ parameter takes the `all` value, Conan will build everything from source), `ENV`
`SETTINGS`, `SETTINGS_HOST`, `SETTINGS_BUILD`. For more information, check [conan
install](https://docs.conan.io/en/latest/reference/commands/consumer/install.html) documentation.

It will also accept `OUTPUT_QUIET` and `ERROR_QUIET` arguments so that when it runs the `conan install`
command the output is quiet or the error is bypassed (or both).

```cmake
conan_cmake_run(REQUIRES fmt/1.9.4
cgal/5.0.2
Expand Down
30 changes: 17 additions & 13 deletions conan.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -531,13 +531,11 @@ function(conan_cmake_install)
conan_check(REQUIRED)
endif()

set(installOptions UPDATE NO_IMPORTS)
set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET)
set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER)
set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE
PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD)
cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN})
conan_parse_arguments(${ARGV})

foreach(arg ${installOptions})
if(ARGS_${arg})
set(${arg} ${${arg}} ${ARGS_${arg}})
Expand Down Expand Up @@ -612,20 +610,26 @@ function(conan_cmake_install)

string(REPLACE ";" " " _install_args "${install_args}")
message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}")

if(ARGS_OUTPUT_QUIET)
execute_process(COMMAND ${CONAN_CMD} ${install_args}
RESULT_VARIABLE return_code
OUTPUT_VARIABLE conan_output
ERROR_VARIABLE conan_output
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
else()
execute_process(COMMAND ${CONAN_CMD} ${install_args}
RESULT_VARIABLE return_code
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set(OUTPUT_OPT OUTPUT_QUIET)
endif()
if(ARGS_ERROR_QUIET)
set(ERROR_OPT ERROR_QUIET)
endif()

execute_process(COMMAND ${CONAN_CMD} ${install_args}
RESULT_VARIABLE return_code
${OUTPUT_OPT}
${ERROR_OPT}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})

if(NOT "${return_code}" STREQUAL "0")
message(FATAL_ERROR "Conan install failed='${return_code}'")
if (ARGS_ERROR_QUIET)
message(WARNING "Conan install failed='${return_code}'")
else()
message(FATAL_ERROR "Conan install failed='${return_code}'")
endif()
endif()

endfunction()
Expand Down
49 changes: 49 additions & 0 deletions tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,55 @@ def test_conan_cmake_install_find_package(self):
run("cmake .. {} -DCMAKE_BUILD_TYPE=Release".format(generator))
run("cmake --build . --config Release")

def test_conan_cmake_install_quiet(self):
content = textwrap.dedent("""
cmake_minimum_required(VERSION 3.5)
project(FormatOutput CXX)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
add_definitions("-std=c++11")
include(conan.cmake)
conan_cmake_configure(REQUIRES fmt/6.1.2 GENERATORS cmake_find_package)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE .
BUILD missing
REMOTE conan-center
SETTINGS ${settings}
OUTPUT_QUIET ERROR_QUIET)
find_package(fmt)
add_executable(main main.cpp)
target_link_libraries(main fmt::fmt)
""")
save("CMakeLists.txt", content)
os.makedirs("build")
os.chdir("build")
run("cmake .. {} -DCMAKE_BUILD_TYPE=Release > output.txt".format(generator))
with open('output.txt', 'r') as file:
data = file.read()
assert not "conanfile.txt: Installing package" in data

def test_conan_cmake_error_quiet(self):
content = textwrap.dedent("""
cmake_minimum_required(VERSION 3.5)
project(FormatOutput CXX)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
add_definitions("-std=c++11")
include(conan.cmake)
conan_cmake_configure(REQUIRES fmt/6.1.2 GENERATORS cmake_find_package)
conan_cmake_autodetect(settings)
set (CONAN_COMMAND not_existing_conan)
conan_cmake_install(PATH_OR_REFERENCE .
BUILD missing
REMOTE conan-center
SETTINGS ${settings}
ERROR_QUIET)
""")
save("CMakeLists.txt", content)
os.makedirs("build")
os.chdir("build")
run("cmake .. {} -DCMAKE_BUILD_TYPE=Release".format(generator))

def test_conan_add_remote(self):
content = textwrap.dedent("""
cmake_minimum_required(VERSION 2.8)
Expand Down