Skip to content
Snippets Groups Projects
Commit cdf288b7 authored by Martin Christoph Hierholzer's avatar Martin Christoph Hierholzer
Browse files

Merge remote-tracking branch 'project-template/master'

parents 5b59ee76 134a3816
No related branches found
No related tags found
No related merge requests found
include(CMakeParseArguments)
#
# usage:
# register_tests(SOURCES
# ${list_of_source_files}
# "test_src.cc"
# ${concatenated_string_of_source_files}
# NAMESPACE
# "test_namespace"
# LINK_LIBRARIES
# ${list_of_targets}
# INCLUDE_DIRECTORIES
# ${list_of_include_directories}
# COMPILE_OPTIONS
# ${list_of_compile_options}
# WORKING_DIRECTORY
# ${ctest_working_directory})
#
# Function registers tests defined as a list of souce files. Test
# defined by file source_name.cc in the SOURCES list is registered under
# the name
# test_namespace.source_name
#
# If provided, test executables will use ${ctest_working_directory}
# as the working directory
#
# Provided list of dependent link targets and include directories are
# used as PRIVATE dependencies during compilation of test executable.
#
# Function implicitly adds a dependency on the boost unit test framework
# to each generated test executable.
function(register_tests)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
list(APPEND single_parmeter_keywords NAMESPACE WORKING_DIRECTORY)
list(APPEND multi_parmeter_keywords SOURCES
LINK_LIBRARIES
INCLUDE_DIRECTORIES
COMPILE_OPTIONS)
cmake_parse_arguments("arg" "" "${single_parmeter_keywords}"
"${multi_parmeter_keywords}" "${ARGN}")
register_exe(SOURCES "${arg_SOURCES}"
NAMESPACE "${arg_NAMESPACE}"
WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}")
get_test_targets(list_of_targets "${arg_SOURCES}")
add_target_includes_private(TARGETS "${list_of_targets}"
LINK_LIBRARIES "${arg_INCLUDE_DIRECTORIES}"
"${Boost_INCLUDE_DIR}")
add_target_link_libraries_private(TARGETS "${list_of_targets}"
LINK_LIBRARIES "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}"
"${arg_LINK_LIBRARIES}")
add_target_compile_options_private(TARGETS "${list_of_targets}"
COMPILE_OPTIONS "${arg_COMPILE_OPTIONS}")
endfunction()
#
# Private functions: Do not use directly
######################################################################
function(add_target_compile_options_private)
list(APPEND list_of_multivalue_keywords TARGETS COMPILE_OPTIONS)
cmake_parse_arguments("arg" "" "" "${list_of_multivalue_keywords}" "${ARGN}")
foreach( target IN LISTS arg_TARGETS)
target_compile_options(${target}
PRIVATE
${arg_COMPILE_OPTIONS})
endforeach()
endfunction()
function(add_target_includes_private)
list(APPEND multi_value_keywords TARGETS LINK_LIBRARIES)
cmake_parse_arguments("arg" "" "" "${multi_value_keywords}" "${ARGN}")
foreach(target_name IN LISTS arg_TARGETS)
target_include_directories("${target_name}"
PRIVATE
"${arg_LINK_LIBRARIES}")
endforeach()
endfunction()
######################################
function(add_target_link_libraries_private)
list(APPEND multi_value_keywords TARGETS LINK_LIBRARIES)
cmake_parse_arguments("arg" "" "" "${multi_value_keywords}" "${ARGN}")
foreach(target_name IN LISTS arg_TARGETS)
target_link_libraries("${target_name}"
PRIVATE
"${arg_LINK_LIBRARIES}")
endforeach()
endfunction()
######################################
function(register_exe)
list(APPEND single_value_keywords NAMESPACE WORKING_DIRECTORY)
list(APPEND multi_value_keywords SOURCES)
cmake_parse_arguments("arg" "" "${single_value_keywords}"
"${multi_value_keywords}" "${ARGN}")
foreach(source_name IN LISTS arg_SOURCES)
get_filename_component(target_name ${source_name} NAME_WE)
add_executable(${target_name} ${source_name})
# Fixme: The thing below doesnt work for some reason
#add_test(NAME ${test_namespace}.${target_name}
# COMMAND ${target_name}
# WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/tests)
#
add_test(NAME
${arg_NAMESPACE}.${target_name}
COMMAND
${target_name}
WORKING_DIRECTORY
${arg_WORKING_DIRECTORY})
endforeach()
endfunction()
######################################
function(get_test_targets list_of_targets list_of_source_files )
foreach(source_name IN LISTS list_of_source_files)
get_filename_component(target_name ${source_name} NAME_WE)
list(APPEND list_of_targets_ ${target_name})
endforeach()
set(${list_of_targets} ${list_of_targets_} PARENT_SCOPE)
endfunction()
######################################################################
......@@ -5,7 +5,7 @@
# project-template!
#
# The macro is called "add_dependency" and takes 3 arguments:
# - name of the dependency project as passed to FIND_PACKAGE (e.g. "mtca4u-deviceaccess")
# - name of the dependency project as passed to FIND_PACKAGE (e.g. "ChimeraTK-DeviceAccess")
# - required version as passed to FIND_PACKAGE
# - a list of components used by this project including the REQUIRED keyword etc.
#
......
......@@ -44,9 +44,11 @@ endforeach()
string(REPLACE " " ";" LIST "${PROJECT_NAME} ${${PROJECT_NAME}_LIBRARIES}")
foreach(LIBRARY ${LIST})
if(LIBRARY MATCHES "/") # library name contains slashes: link against the a file path name
if(LIBRARY MATCHES "/") # library name contains slashes: link against the a file path name
set(${PROJECT_NAME}_LINKER_FLAGS_MAKEFILE "${${PROJECT_NAME}_LINKER_FLAGS_MAKEFILE} ${LIBRARY}")
else() # library name does not contain slashes: link against library with -l option
elseif(LIBRARY MATCHES "^-l") # library name does not contain slashes but already the -l option: directly quote it
set(${PROJECT_NAME}_LINKER_FLAGS_MAKEFILE "${${PROJECT_NAME}_LINKER_FLAGS_MAKEFILE} ${LIBRARY}")
else() # link against library with -l option
set(${PROJECT_NAME}_LINKER_FLAGS_MAKEFILE "${${PROJECT_NAME}_LINKER_FLAGS_MAKEFILE} -l${LIBRARY}")
endif()
endforeach()
......
......@@ -25,7 +25,7 @@
rm -f `find . -name "*\.gcda"`
make test
lcov --capture --directory . --output-file coverage_all.info
lcov --capture --directory . --output-file coverage_all.info --ignore-errors gcov
#lcov capture also includes external stuff like glibc, boost etc.
#only extract the reports for this project
......
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment