diff options
Diffstat (limited to 'external/semver/CMakeLists.txt')
-rw-r--r-- | external/semver/CMakeLists.txt | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/external/semver/CMakeLists.txt b/external/semver/CMakeLists.txt new file mode 100644 index 0000000..2919ee3 --- /dev/null +++ b/external/semver/CMakeLists.txt @@ -0,0 +1,100 @@ +cmake_minimum_required (VERSION 2.8) +project (semver) + +# Includes for this project +include_directories ("${PROJECT_SOURCE_DIR}/src/include") + +# Include testinator and the GSL +include_directories ("${PROJECT_SOURCE_DIR}/contrib/testinator/src/include") +include_directories ("${PROJECT_SOURCE_DIR}/contrib/gsl/include") + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# Default C++ standard: C++14 +if(CXX_STD) +else() + set(CXX_STD 14) +endif() + +# Set up tests +enable_testing() +include(CTest) + +if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + set(MY_CXX_FLAGS_LIST + ) + string(REPLACE ";" " " MY_CXX_FLAGS "${MY_CXX_FLAGS_LIST}") + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_CXX_FLAGS}") +else() + set(MY_CXX_FLAGS_LIST + -ftemplate-backtrace-limit=0 + -ffunction-sections + -Wall -Wextra -Werror -pedantic-errors + -Wcast-align + -Wcast-qual + -Wctor-dtor-privacy + -Wdisabled-optimization + -Wformat=2 + -Winit-self + -Wmissing-include-dirs + # -Wold-style-cast + -Woverloaded-virtual + -Wredundant-decls + # -Wshadow + # -Wsign-conversion + -Wsign-promo + -Wstrict-overflow=2 + -Wswitch-default + -Wundef + ) + string(REPLACE ";" " " MY_CXX_FLAGS "${MY_CXX_FLAGS_LIST}") + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++${CXX_STD} ${MY_CXX_FLAGS}") + + # Debug/Release + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -fno-inline -g3 -fstack-protector-all") + set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -g0 -march=native -mtune=native -DNDEBUG") + set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") +endif() + +# Clang/GCC specifics +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + if(SAN) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined,integer -fno-omit-frame-pointer -fno-sanitize=unsigned-integer-overflow") + endif() +elseif(CMAKE_COMPILER_IS_GNUCXX) +endif() + +# Pipe separate tests into ctest +# Adapted from https://github.com/ChaiScript/ChaiScript/blob/develop/CMakeLists.txt +macro(ADD_INDIVIDUAL_TESTS executable type suffix) + set(test_path $ENV{PATH}) + get_target_property(target_files ${executable} SOURCES) + foreach(source ${target_files}) + string(REGEX MATCH .*cpp source "${source}") + if(source) + file(READ "${source}" contents) + string(REGEX MATCHALL "DEF_${type}[ ]*[(][ ]*[^, ]+[ ]*,[ ]*[^,) ]+[ ]*[),]" found_tests ${contents}) + foreach(hit ${found_tests}) + string(REGEX REPLACE "DEF_${type}[ ]*[(][ ]*([^, ]+)[ ]*,[ ]*[^,) ]+[ ]*[),]" "\\1" tname ${hit}) + string(REGEX REPLACE "DEF_${type}[ ]*[(][ ]*[^, ]+[ ]*,[ ]*([^,) ]+)[ ]*[),]" "\\1" sname ${hit}) + set(test_name ${executable}.${sname}.${tname}${suffix}) + add_test(NAME ${test_name} + COMMAND "${executable}" --testName=${tname}${suffix} --suiteName=${sname}) + set_tests_properties(${test_name} PROPERTIES TIMEOUT 30 ENVIRONMENT "PATH=${test_path}") + endforeach() + endif() + endforeach() +endmacro() + +macro(ADD_TESTINATOR_TESTS executable) + ADD_INDIVIDUAL_TESTS(${executable} "TEST" "") + ADD_INDIVIDUAL_TESTS(${executable} "TIMED_TEST" "") + ADD_INDIVIDUAL_TESTS(${executable} "PROPERTY" "Property") + ADD_INDIVIDUAL_TESTS(${executable} "COMPLEXITY_PROPERTY" "ComplexityProperty") +endmacro() + +add_subdirectory (src/lib) +add_subdirectory (src/test) +add_subdirectory (src/quickcheck) |