From 4b501676b773d634adfc8bf84dc804c91ca4b324 Mon Sep 17 00:00:00 2001 From: portersky <24420859+portersky@users.noreply.github.com> Date: Mon, 15 Jun 2026 00:53:50 +0200 Subject: [PATCH] feat: support cmock_config.yml in cmock_generate_mock --- README.md | 24 ++++++++++++++++++++++++ tests/CMakeLists.txt | 11 +++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 64c1347..f02633b 100644 --- a/README.md +++ b/README.md @@ -166,3 +166,27 @@ void test_something_logs(void) { The `_Expect` call records the expected argument. CMock verifies the actual argument matches at call time using string comparison, and `Mocklogger_Verify` confirms the expected number of calls were made. + +## Configuring CMock + +Pass a config file as the third argument to `cmock_generate_mock`: + +```cmake +cmock_generate_mock(test_mymodule "${CMAKE_SOURCE_DIR}/ctdd/logger.h" + "cmock_config.yml") +``` + +The file is loaded by the CMock Ruby generator with `-o`. A typical +`tests/cmock_config.yml` enables plugins: + +```yaml +:cmock: + :plugins: + - :ignore + - :ignore_arg + - :return_thru_ptr +``` + +Use `:ignore` to skip certain mocks, `:ignore_arg` to stop checking +particular parameters, or `:return_thru_ptr` to have CMock write +through pointer return values automatically. diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 19af94e..ceb46b0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,9 +5,11 @@ set(MOCK_GEN_DIR "${CMAKE_CURRENT_BINARY_DIR}/mocks") file(MAKE_DIRECTORY "${MOCK_GEN_DIR}") # Generate a CMock mock from a header and attach it to a target. -# Usage: cmock_generate_mock( ) +# Usage: cmock_generate_mock( [config.yml]) # CMock names generated files Mock.h/.c (capital M, no separator) +# If a config file is given it is passed to the Ruby generator with `-o`. function(cmock_generate_mock target header) + cmake_parse_arguments(ARG "" "" "CONFIG" ${ARGN}) if (NOT RUBY_EXECUTABLE) message(FATAL_ERROR "Ruby is required for CMock generation") endif() @@ -15,12 +17,17 @@ function(cmock_generate_mock target header) get_filename_component(header_dir "${header}" DIRECTORY) set(mock_src "${MOCK_GEN_DIR}/Mock${name}.c") set(mock_hdr "${MOCK_GEN_DIR}/Mock${name}.h") + if (ARG_CONFIG) + set(CMOCK_CONFIG_FLAG "-o${ARG_CONFIG}") + set(CMOCK_CONFIG_DEPENDS "${ARG_CONFIG}") + endif() add_custom_command( OUTPUT "${mock_src}" "${mock_hdr}" COMMAND "${RUBY_EXECUTABLE}" "${CMOCK_SCRIPT}" + ${CMOCK_CONFIG_FLAG} "--mock_path=${MOCK_GEN_DIR}" "${header}" - DEPENDS "${header}" + DEPENDS "${header}" ${CMOCK_CONFIG_DEPENDS} COMMENT "CMock: generating Mock${name}" VERBATIM )