Merge pull request #5513 from jet47:ctest-extended-support

This commit is contained in:
Alexander Alekhin 2015-10-22 12:37:40 +00:00
commit 031568831c
5 changed files with 73 additions and 15 deletions

View File

@ -85,6 +85,8 @@ if(DEFINED CMAKE_BUILD_TYPE)
set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
endif()
enable_testing()
project(OpenCV CXX C)
if(MSVC)

View File

@ -26,6 +26,7 @@
# To control the setup of the module you could also set:
# the_description - text to be used as current module description
# the_label - label for current module
# OPENCV_MODULE_TYPE - STATIC|SHARED - set to force override global settings for current module
# OPENCV_MODULE_IS_PART_OF_WORLD - ON|OFF (default ON) - should the module be added to the opencv_world?
# BUILD_${the_module}_INIT - ON|OFF (default ON) - initial value for BUILD_${the_module}
@ -191,6 +192,15 @@ macro(ocv_add_module _name)
set(OPENCV_MODULE_${the_module}_IS_PART_OF_WORLD OFF CACHE INTERNAL "")
endif()
if(NOT DEFINED the_label)
if(OPENCV_PROCESSING_EXTRA_MODULES)
set(the_label "Extra")
else()
set(the_label "Main")
endif()
endif()
set(OPENCV_MODULE_${the_module}_LABEL "${the_label};${the_module}" CACHE INTERNAL "")
if(BUILD_${the_module})
set(OPENCV_MODULES_BUILD ${OPENCV_MODULES_BUILD} "${the_module}" CACHE INTERNAL "List of OpenCV modules included into the build")
else()
@ -763,6 +773,10 @@ macro(_ocv_create_module)
unset(sub_links)
unset(cuda_objs)
set_target_properties(${the_module} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};Module")
set_source_files_properties(${OPENCV_MODULE_${the_module}_HEADERS} ${OPENCV_MODULE_${the_module}_SOURCES} ${${the_module}_pch}
PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};Module")
ocv_target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK})
ocv_target_link_libraries(${the_module} LINK_INTERFACE_LIBRARIES ${OPENCV_MODULE_${the_module}_DEPS_TO_LINK})
ocv_target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS_EXT} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${ARGN})
@ -970,6 +984,10 @@ function(ocv_add_perf_tests)
ocv_target_link_libraries(${the_target} ${perf_deps} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS})
add_dependencies(opencv_perf_tests ${the_target})
set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};PerfTest")
set_source_files_properties(${OPENCV_PERF_${the_module}_SOURCES} ${${the_target}_pch}
PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};PerfTest")
# Additional target properties
set_target_properties(${the_target} PROPERTIES
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
@ -990,6 +1008,12 @@ function(ocv_add_perf_tests)
if(NOT BUILD_opencv_world)
_ocv_add_precompiled_headers(${the_target})
endif()
ocv_add_test_from_target("${the_target}" "Performance" "${the_target}")
ocv_add_test_from_target("opencv_sanity_${name}" "Sanity" "${the_target}"
"--perf_min_samples=1"
"--perf_force_samples=1"
"--perf_verify_sanity")
else(OCV_DEPENDENCIES_FOUND)
# TODO: warn about unsatisfied dependencies
endif(OCV_DEPENDENCIES_FOUND)
@ -1036,6 +1060,10 @@ function(ocv_add_accuracy_tests)
ocv_target_link_libraries(${the_target} ${test_deps} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS})
add_dependencies(opencv_tests ${the_target})
set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};AccuracyTest")
set_source_files_properties(${OPENCV_TEST_${the_module}_SOURCES} ${${the_target}_pch}
PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};AccuracyTest")
# Additional target properties
set_target_properties(${the_target} PROPERTIES
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
@ -1046,21 +1074,11 @@ function(ocv_add_accuracy_tests)
set_target_properties(${the_target} PROPERTIES FOLDER "tests accuracy")
endif()
enable_testing()
get_target_property(LOC ${the_target} LOCATION)
add_test(${the_target} "${LOC}")
if(WINRT)
# removing APPCONTAINER from tests to run from console
# look for detailed description inside of ocv_create_module macro above
add_custom_command(TARGET "opencv_test_${name}"
POST_BUILD
COMMAND link.exe /edit /APPCONTAINER:NO $(TargetPath))
endif()
if(NOT BUILD_opencv_world)
_ocv_add_precompiled_headers(${the_target})
endif()
ocv_add_test_from_target("${the_target}" "Accuracy" "${the_target}")
else(OCV_DEPENDENCIES_FOUND)
# TODO: warn about unsatisfied dependencies
endif(OCV_DEPENDENCIES_FOUND)
@ -1093,6 +1111,10 @@ function(ocv_add_samples)
ocv_target_link_libraries(${the_target} ${samples_deps})
set_target_properties(${the_target} PROPERTIES PROJECT_LABEL "(sample) ${name}")
set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};Sample")
set_source_files_properties("${source}"
PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};Sample")
if(ENABLE_SOLUTION_FOLDERS)
set_target_properties(${the_target} PROPERTIES
OUTPUT_NAME "${module_id}-example-${name}"

View File

@ -911,3 +911,32 @@ function(ocv_download)
set(DOWNLOAD_PACKAGE_LOCATION ${DOWNLOAD_TARGET} PARENT_SCOPE)
endfunction()
function(ocv_add_test_from_target test_name test_kind the_target)
if(CMAKE_VERSION VERSION_GREATER "2.8" AND NOT CMAKE_CROSSCOMPILING)
if(NOT "${test_kind}" MATCHES "^(Accuracy|Performance|Sanity)$")
message(FATAL_ERROR "Unknown test kind : ${test_kind}")
endif()
if(NOT TARGET "${the_target}")
message(FATAL_ERROR "${the_target} is not a CMake target")
endif()
string(TOLOWER "${test_kind}" test_kind_lower)
set(test_report_dir "${CMAKE_BINARY_DIR}/test-reports/${test_kind_lower}")
file(MAKE_DIRECTORY "${test_report_dir}")
add_test(NAME "${test_name}"
COMMAND "${the_target}"
"--gtest_output=xml:${the_target}.xml"
${ARGN})
set_tests_properties("${test_name}" PROPERTIES
LABELS "${OPENCV_MODULE_${the_module}_LABEL};${test_kind}"
WORKING_DIRECTORY "${test_report_dir}")
if(OPENCV_TEST_DATA_PATH)
set_tests_properties("${test_name}" PROPERTIES
ENVIRONMENT "OPENCV_TEST_DATA_PATH=${OPENCV_TEST_DATA_PATH}")
endif()
endif()
endfunction()

View File

@ -32,6 +32,10 @@ if(OCV_DEPENDENCIES_FOUND)
ocv_target_link_libraries(${the_target} ${test_deps} ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES})
add_dependencies(opencv_tests ${the_target})
set_target_properties(${the_target} PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL}")
set_source_files_properties(${OPENCV_TEST_${the_module}_SOURCES} ${${the_target}_pch}
PROPERTIES LABELS "${OPENCV_MODULE_${the_module}_LABEL};AccuracyTest")
# Additional target properties
set_target_properties(${the_target} PROPERTIES
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
@ -42,9 +46,7 @@ if(OCV_DEPENDENCIES_FOUND)
set_target_properties(${the_target} PROPERTIES FOLDER "tests accuracy")
endif()
enable_testing()
get_target_property(LOC ${the_target} LOCATION)
add_test(${the_target} "${LOC}")
ocv_add_test_from_target("${the_target}" "Accuracy" "${the_target}")
if(INSTALL_TESTS)
install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)

View File

@ -2951,6 +2951,9 @@ MatComparator::operator()(const char* expr1, const char* expr2,
void printVersionInfo(bool useStdOut)
{
// Tell CTest not to discard any output
if(useStdOut) std::cout << "CTEST_FULL_OUTPUT" << std::endl;
::testing::Test::RecordProperty("cv_version", CV_VERSION);
if(useStdOut) std::cout << "OpenCV version: " << CV_VERSION << std::endl;