From 2c7389db76ad8d59b4522251f07225a8af5f3e80 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco Claraco Date: Mon, 10 Jun 2019 18:08:05 +0200 Subject: [PATCH 1/3] add command `make check_valgrind` --- cmake/GtsamTesting.cmake | 57 ++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/cmake/GtsamTesting.cmake b/cmake/GtsamTesting.cmake index e4c515d1f..9ce5981e5 100644 --- a/cmake/GtsamTesting.cmake +++ b/cmake/GtsamTesting.cmake @@ -8,7 +8,7 @@ # Macro: # # gtsamAddTestsGlob(groupName globPatterns excludedFiles linkLibraries) -# +# # Add a group of unit tests. A list of unit test .cpp files or glob patterns specifies the # tests to create. Tests are assigned into a group name so they can easily by run # independently with a make target. Running 'make check' builds and runs all tests. @@ -35,7 +35,7 @@ endmacro() # Macro: # # gtsamAddExamplesGlob(globPatterns excludedFiles linkLibraries) -# +# # Add scripts that will serve as examples of how to use the library. A list of files or # glob patterns is specified, and one executable will be created for each matching .cpp # file. These executables will not be installed. They are built with 'make all' if @@ -60,7 +60,7 @@ endmacro() # Macro: # # gtsamAddTimingGlob(globPatterns excludedFiles linkLibraries) -# +# # Add scripts that time aspects of the library. A list of files or # glob patterns is specified, and one executable will be created for each matching .cpp # file. These executables will not be installed. They are not built with 'make all', @@ -101,7 +101,14 @@ mark_as_advanced(GTSAM_SINGLE_TEST_EXE) # Enable make check (http://www.cmake.org/Wiki/CMakeEmulateMakeCheck) if(GTSAM_BUILD_TESTS) add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} -C $ --output-on-failure) - + # Also add alternative checks using valgrind. + # We don't look for valgrind being installed in the system, since these + # targets are not invoked unless directly instructed by the user. + if (UNIX) + # Run all tests using valgrind: + add_custom_target(check_valgrind) + endif() + # Add target to build tests without running add_custom_target(all.tests) endif() @@ -122,7 +129,7 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) add_custom_target(check.${groupName} COMMAND ${CMAKE_CTEST_COMMAND} -C $ --output-on-failure) set_property(TARGET check.${groupName} PROPERTY FOLDER "Unit tests") endif() - + # Get all script files file(GLOB script_files ${globPatterns}) @@ -135,7 +142,7 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) list(REMOVE_ITEM script_files ${excludedFilePaths}) endif() endif() - + # Separate into source files and headers (allows for adding headers to show up in # MSVC and Xcode projects). set(script_srcs "") @@ -148,7 +155,7 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) list(APPEND script_srcs ${script_file}) endif() endforeach() - + # Don't put test files in folders in MSVC and Xcode because they're already grouped source_group("" FILES ${script_srcs} ${script_headers}) @@ -157,26 +164,38 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) foreach(script_src IN ITEMS ${script_srcs}) # Get test base name get_filename_component(script_name ${script_src} NAME_WE) - + # Add executable add_executable(${script_name} ${script_src} ${script_headers}) target_link_libraries(${script_name} CppUnitLite ${linkLibraries}) - + # Add target dependencies add_test(NAME ${script_name} COMMAND ${script_name}) add_dependencies(check.${groupName} ${script_name}) add_dependencies(check ${script_name}) add_dependencies(all.tests ${script_name}) if(NOT MSVC AND NOT XCODE_VERSION) - add_custom_target(${script_name}.run ${EXECUTABLE_OUTPUT_PATH}${script_name} DEPENDS ${script_name}) + # Regular test run: + add_custom_target(${script_name}.run + COMMAND ${EXECUTABLE_OUTPUT_PATH}${script_name} + DEPENDS ${script_name} + ) + + # Run with valgrind: + set(GENERATED_EXE "$") + add_custom_target(${script_name}.run.valgrind + COMMAND "valgrind" "--error-exitcode=1" ${GENERATED_EXE} + DEPENDS ${script_name} + ) + add_dependencies(check_valgrind ${script_name}.run.valgrind) endif() - + # Add TOPSRCDIR set_property(SOURCE ${script_src} APPEND PROPERTY COMPILE_DEFINITIONS "TOPSRCDIR=\"${PROJECT_SOURCE_DIR}\"") - + # Exclude from 'make all' and 'make install' set_target_properties(${script_name} PROPERTIES EXCLUDE_FROM_ALL ON) - + # Configure target folder (for MSVC and Xcode) set_property(TARGET ${script_name} PROPERTY FOLDER "Unit tests/${groupName}") endforeach() @@ -189,7 +208,7 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) # Default on MSVC and XCode - combine test group into a single exectuable set(target_name check_${groupName}_program) - + # Add executable add_executable(${target_name} "${script_srcs}" ${script_headers}) target_link_libraries(${target_name} CppUnitLite ${linkLibraries}) @@ -200,7 +219,7 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) set(rest_script_srcs ${script_srcs}) list(REMOVE_AT rest_script_srcs 0) set_property(SOURCE ${rest_script_srcs} APPEND PROPERTY COMPILE_DEFINITIONS "main=inline no_main") - + # Add target dependencies add_test(NAME ${target_name} COMMAND ${target_name}) add_dependencies(check.${groupName} ${target_name}) @@ -208,10 +227,10 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) if(NOT XCODE_VERSION) add_dependencies(all.tests ${target_name}) endif() - + # Add TOPSRCDIR set_property(SOURCE ${script_srcs} APPEND PROPERTY COMPILE_DEFINITIONS "TOPSRCDIR=\"${PROJECT_SOURCE_DIR}\"") - + # Exclude from 'make all' and 'make install' set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL ON) @@ -260,7 +279,7 @@ macro(gtsamAddExesGlob_impl globPatterns excludedFiles linkLibraries groupName b # Add executable add_executable(${script_name} ${script_src} ${script_headers}) target_link_libraries(${script_name} ${linkLibraries}) - + # Add target dependencies add_dependencies(${groupName} ${script_name}) if(NOT MSVC AND NOT XCODE_VERSION) @@ -270,7 +289,7 @@ macro(gtsamAddExesGlob_impl globPatterns excludedFiles linkLibraries groupName b # Add TOPSRCDIR set_property(SOURCE ${script_src} APPEND PROPERTY COMPILE_DEFINITIONS "TOPSRCDIR=\"${PROJECT_SOURCE_DIR}\"") - # Exclude from all or not - note weird variable assignment because we're in a macro + # Exclude from all or not - note weird variable assignment because we're in a macro set(buildWithAll_on ${buildWithAll}) if(NOT buildWithAll_on) # Exclude from 'make all' and 'make install' From 2d67ade5f232fc91c0063393e509bda23ccc267e Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco Claraco Date: Tue, 11 Jun 2019 07:19:26 +0200 Subject: [PATCH 2/3] targets renamed: xxx.valgrind --- cmake/GtsamTesting.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/GtsamTesting.cmake b/cmake/GtsamTesting.cmake index 9ce5981e5..567c29e23 100644 --- a/cmake/GtsamTesting.cmake +++ b/cmake/GtsamTesting.cmake @@ -183,11 +183,11 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) # Run with valgrind: set(GENERATED_EXE "$") - add_custom_target(${script_name}.run.valgrind + add_custom_target(${script_name}.valgrind COMMAND "valgrind" "--error-exitcode=1" ${GENERATED_EXE} DEPENDS ${script_name} ) - add_dependencies(check_valgrind ${script_name}.run.valgrind) + add_dependencies(check_valgrind ${script_name}.valgrind) endif() # Add TOPSRCDIR From 05e8fbcb146ed7c4dae13abeb14b03717fba89e2 Mon Sep 17 00:00:00 2001 From: Jose Luis Blanco Claraco Date: Tue, 11 Jun 2019 07:21:10 +0200 Subject: [PATCH 3/3] re-indent: script had an inconsistent mix of tabs and spaces --- cmake/GtsamTesting.cmake | 86 ++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/cmake/GtsamTesting.cmake b/cmake/GtsamTesting.cmake index 567c29e23..d115f395a 100644 --- a/cmake/GtsamTesting.cmake +++ b/cmake/GtsamTesting.cmake @@ -88,36 +88,36 @@ enable_testing() option(GTSAM_BUILD_TESTS "Enable/Disable building of tests" ON) option(GTSAM_BUILD_EXAMPLES_ALWAYS "Build examples with 'make all' (build with 'make examples' if not)" ON) -option(GTSAM_BUILD_TIMING_ALWAYS "Build timing scripts with 'make all' (build with 'make timing' if not" OFF) + option(GTSAM_BUILD_TIMING_ALWAYS "Build timing scripts with 'make all' (build with 'make timing' if not" OFF) -# Add option for combining unit tests -if(MSVC OR XCODE_VERSION) - option(GTSAM_SINGLE_TEST_EXE "Combine unit tests into single executable (faster compile)" ON) -else() - option(GTSAM_SINGLE_TEST_EXE "Combine unit tests into single executable (faster compile)" OFF) -endif() -mark_as_advanced(GTSAM_SINGLE_TEST_EXE) + # Add option for combining unit tests + if(MSVC OR XCODE_VERSION) + option(GTSAM_SINGLE_TEST_EXE "Combine unit tests into single executable (faster compile)" ON) + else() + option(GTSAM_SINGLE_TEST_EXE "Combine unit tests into single executable (faster compile)" OFF) + endif() + mark_as_advanced(GTSAM_SINGLE_TEST_EXE) -# Enable make check (http://www.cmake.org/Wiki/CMakeEmulateMakeCheck) -if(GTSAM_BUILD_TESTS) - add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} -C $ --output-on-failure) - # Also add alternative checks using valgrind. - # We don't look for valgrind being installed in the system, since these - # targets are not invoked unless directly instructed by the user. - if (UNIX) - # Run all tests using valgrind: - add_custom_target(check_valgrind) + # Enable make check (http://www.cmake.org/Wiki/CMakeEmulateMakeCheck) + if(GTSAM_BUILD_TESTS) + add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} -C $ --output-on-failure) + # Also add alternative checks using valgrind. + # We don't look for valgrind being installed in the system, since these + # targets are not invoked unless directly instructed by the user. + if (UNIX) + # Run all tests using valgrind: + add_custom_target(check_valgrind) + endif() + + # Add target to build tests without running + add_custom_target(all.tests) endif() - # Add target to build tests without running - add_custom_target(all.tests) -endif() + # Add examples target + add_custom_target(examples) -# Add examples target -add_custom_target(examples) - -# Add timing target -add_custom_target(timing) + # Add timing target + add_custom_target(timing) # Implementations of this file's macros: @@ -125,23 +125,23 @@ add_custom_target(timing) macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) if(GTSAM_BUILD_TESTS) # Add group target if it doesn't already exist - if(NOT TARGET check.${groupName}) + if(NOT TARGET check.${groupName}) add_custom_target(check.${groupName} COMMAND ${CMAKE_CTEST_COMMAND} -C $ --output-on-failure) set_property(TARGET check.${groupName} PROPERTY FOLDER "Unit tests") endif() - # Get all script files - file(GLOB script_files ${globPatterns}) + # Get all script files + file(GLOB script_files ${globPatterns}) - # Remove excluded scripts from the list - if(NOT "${excludedFiles}" STREQUAL "") + # Remove excluded scripts from the list + if(NOT "${excludedFiles}" STREQUAL "") file(GLOB excludedFilePaths ${excludedFiles}) if("${excludedFilePaths}" STREQUAL "") message(WARNING "The pattern '${excludedFiles}' for excluding tests from group ${groupName} did not match any files") else() - list(REMOVE_ITEM script_files ${excludedFilePaths}) + list(REMOVE_ITEM script_files ${excludedFilePaths}) endif() - endif() + endif() # Separate into source files and headers (allows for adding headers to show up in # MSVC and Xcode projects). @@ -173,10 +173,10 @@ macro(gtsamAddTestsGlob_impl groupName globPatterns excludedFiles linkLibraries) add_test(NAME ${script_name} COMMAND ${script_name}) add_dependencies(check.${groupName} ${script_name}) add_dependencies(check ${script_name}) - add_dependencies(all.tests ${script_name}) + add_dependencies(all.tests ${script_name}) if(NOT MSVC AND NOT XCODE_VERSION) # Regular test run: - add_custom_target(${script_name}.run + add_custom_target(${script_name}.run COMMAND ${EXECUTABLE_OUTPUT_PATH}${script_name} DEPENDS ${script_name} ) @@ -242,18 +242,18 @@ endmacro() macro(gtsamAddExesGlob_impl globPatterns excludedFiles linkLibraries groupName buildWithAll) - # Get all script files - file(GLOB script_files ${globPatterns}) + # Get all script files + file(GLOB script_files ${globPatterns}) - # Remove excluded scripts from the list - if(NOT "${excludedFiles}" STREQUAL "") + # Remove excluded scripts from the list + if(NOT "${excludedFiles}" STREQUAL "") file(GLOB excludedFilePaths ${excludedFiles}) if("${excludedFilePaths}" STREQUAL "") message(WARNING "The script exclusion pattern '${excludedFiles}' did not match any files") else() - list(REMOVE_ITEM script_files ${excludedFilePaths}) + list(REMOVE_ITEM script_files ${excludedFilePaths}) endif() - endif() + endif() # Separate into source files and headers (allows for adding headers to show up in # MSVC and Xcode projects). @@ -283,14 +283,14 @@ macro(gtsamAddExesGlob_impl globPatterns excludedFiles linkLibraries groupName b # Add target dependencies add_dependencies(${groupName} ${script_name}) if(NOT MSVC AND NOT XCODE_VERSION) - add_custom_target(${script_name}.run ${EXECUTABLE_OUTPUT_PATH}${script_name} DEPENDS ${script_name}) + add_custom_target(${script_name}.run ${EXECUTABLE_OUTPUT_PATH}${script_name} DEPENDS ${script_name}) endif() # Add TOPSRCDIR set_property(SOURCE ${script_src} APPEND PROPERTY COMPILE_DEFINITIONS "TOPSRCDIR=\"${PROJECT_SOURCE_DIR}\"") - # Exclude from all or not - note weird variable assignment because we're in a macro - set(buildWithAll_on ${buildWithAll}) + # Exclude from all or not - note weird variable assignment because we're in a macro + set(buildWithAll_on ${buildWithAll}) if(NOT buildWithAll_on) # Exclude from 'make all' and 'make install' set_target_properties("${script_name}" PROPERTIES EXCLUDE_FROM_ALL ON)