Escape coverage target dependencies
Output file paths are used as a suffix in the name of custom accessory
targets. The target name must not contain slashes so they are being
replaced by dashes.
Change-Id: I2cf7acc61e7a5691733db47d508c3d10602e05e1
Signed-off-by: Imre Kis <imre.kis@arm.com>
diff --git a/cmake/Coverage.cmake b/cmake/Coverage.cmake
index efdba3b..0c93f85 100644
--- a/cmake/Coverage.cmake
+++ b/cmake/Coverage.cmake
@@ -39,6 +39,23 @@
add_custom_target(coverage)
add_custom_target(coverage_report)
+# Adds a file to the dependency list of the target by inserting an accessory
+# custom target. The name of the custom target is properly escaped.
+function(add_coverage_dependency)
+ set(_OPTIONS_ARGS)
+ set(_ONE_VALUE_ARGS TARGET DEPENDS)
+ set(_MULTI_VALUE_ARGS)
+ cmake_parse_arguments(_MY_PARAMS "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN})
+
+ set(TARGET ${_MY_PARAMS_TARGET})
+ set(DEPENDS ${_MY_PARAMS_DEPENDS})
+
+ string(REGEX REPLACE "\\/" "_" CUSTOM_TARGET_SUFFIX ${DEPENDS})
+
+ add_custom_target(${TARGET}_target_${CUSTOM_TARGET_SUFFIX} DEPENDS ${DEPENDS})
+ add_dependencies(${TARGET} ${TARGET}_target_${CUSTOM_TARGET_SUFFIX})
+endfunction()
+
# Generates LCOV coverage info file by processing the .gcda and .gcno files.
# The function also maps coverage of the c-picker generated files to the original source lines
# Global dependencies:
@@ -50,7 +67,7 @@
cmake_parse_arguments(_MY_PARAMS "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN})
set(TEST_NAME ${_MY_PARAMS_NAME})
- set(TEMP_FILE temp_${_MY_PARAMS_OUTPUT_FILE})
+ set(TEMP_FILE ${_MY_PARAMS_OUTPUT_FILE}_temp)
set(OUTPUT_FILE ${_MY_PARAMS_OUTPUT_FILE})
# Collecting information from .gcda and .gcno files into an lcov .info file
@@ -68,6 +85,11 @@
--output ${OUTPUT_FILE}
--mapping-path ${CPICKER_CACHE_PATH}
)
+
+ add_coverage_dependency(
+ TARGET coverage
+ DEPENDS ${OUTPUT_FILE}
+ )
endfunction()
# Filters coverage info of files from the matching directory
@@ -77,20 +99,26 @@
set(_MULTI_VALUE_ARGS)
cmake_parse_arguments(_MY_PARAMS "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN})
+ set(INPUT_FILE ${_MY_PARAMS_INPUT_FILE})
+ set(OUTPUT_FILE ${_MY_PARAMS_OUTPUT_FILE})
+ set(INCLUDE_DIRECTORY ${_MY_PARAMS_INCLUDE_DIRECTORY})
+
# The pattern must be an absolute path ending with an asterisk
- get_filename_component(INCLUDE_DIRECTORY_ABSPATH "${_MY_PARAMS_INCLUDE_DIRECTORY}" ABSOLUTE)
+ get_filename_component(INCLUDE_DIRECTORY_ABSPATH "${INCLUDE_DIRECTORY}" ABSOLUTE)
set(INCLUDE_DIRECTORY_ABSPATH "${INCLUDE_DIRECTORY_ABSPATH}/*")
add_custom_command(
- OUTPUT ${_MY_PARAMS_OUTPUT_FILE}
+ OUTPUT ${OUTPUT_FILE}
COMMAND ${LCOV_COMMAND}
- --extract ${_MY_PARAMS_INPUT_FILE} \"${INCLUDE_DIRECTORY_ABSPATH}\"
- --output-file ${_MY_PARAMS_OUTPUT_FILE}
- DEPENDS ${_MY_PARAMS_INPUT_FILE}
+ --extract ${INPUT_FILE} \"${INCLUDE_DIRECTORY_ABSPATH}\"
+ --output-file ${OUTPUT_FILE}
+ DEPENDS ${INPUT_FILE}
)
- add_custom_target(coverage_target_${_MY_PARAMS_OUTPUT_FILE} DEPENDS ${_MY_PARAMS_OUTPUT_FILE})
- add_dependencies(coverage coverage_target_${_MY_PARAMS_OUTPUT_FILE})
+ add_coverage_dependency(
+ TARGET coverage
+ DEPENDS ${OUTPUT_FILE}
+ )
endfunction()
# Generated an HTML report from the LCOV info file
@@ -100,14 +128,19 @@
set(_MULTI_VALUE_ARGS)
cmake_parse_arguments(_MY_PARAMS "${_OPTIONS_ARGS}" "${_ONE_VALUE_ARGS}" "${_MULTI_VALUE_ARGS}" ${ARGN})
+ set(INPUT_FILE ${_MY_PARAMS_INPUT_FILE})
+ set(OUTPUT_DIRECTORY ${_MY_PARAMS_OUTPUT_DIRECTORY})
+
add_custom_command(
- OUTPUT ${_MY_PARAMS_OUTPUT_DIRECTORY}
- COMMAND genhtml ${_MY_PARAMS_INPUT_FILE}
+ OUTPUT ${OUTPUT_DIRECTORY}
+ COMMAND genhtml ${INPUT_FILE}
--show-details
- --output-directory ${_MY_PARAMS_OUTPUT_DIRECTORY}
- DEPENDS ${_MY_PARAMS_INPUT_FILE}
+ --output-directory ${OUTPUT_DIRECTORY}
+ DEPENDS ${INPUT_FILE}
)
- add_custom_target(coverage_report_target_${_MY_PARAMS_INPUT_FILE} DEPENDS ${_MY_PARAMS_OUTPUT_DIRECTORY})
- add_dependencies(coverage_report coverage_report_target_${_MY_PARAMS_INPUT_FILE})
+ add_coverage_dependency(
+ TARGET coverage_report
+ DEPENDS ${OUTPUT_DIRECTORY}
+ )
endfunction()