mirror of
https://github.com/microsoft/GSL.git
synced 2024-11-03 17:56:43 -05:00
6418b5f4de
* Added c++17 test configurations for clang5.0 and clang6.0 * Fix #739 correct cppcorecheck warnings for clang-cl * Add clang-cl configurations * Corrections Appveyor; Temporarily disable msvc compilation for faster testing (#741) * Add path to clang-cl.exe (#741) * Escape backslash in path (#741) * Update vcpkg (#741) * Check vcpkg version; try without building vcpkg; use latest clang-cl from path (#741) * Fix blocks in ps script (#741) * Try accessing APPVEYOR_BUILD_FOLDER variable (#471) * Update span size() bug confirmation test for GCC 6.5 (#741) * MSVC flags to Clang-cl; disable c++98-compat and undefined macro warnings (#741) * Suppress clang warning on tests (missing-prototypes) (#741) * Fix clang warning -Wnewline-eof (#741) * Fix clang warning -Wdouble-promotion (#741) * Set linker explicitly * Clean condition statement * For Clang, fallback to the AppVeyor installed version of CMake * Fix clang warning -Wmissing-variable-declarations * Fallback to the MSVC linker until vcpkg has been updated * Revert "Fallback to the MSVC linker until vcpkg has been updated" This reverts commit7263f3289e
. * Fix clang warning -Wunused-member-function * Fix clang warning -Wmissing-noreturn * Fix clang warning -Winvalid-noreturn on Windows * Add macro block end comment on large #if blocks * Workaround: fallback to mscv link.exe * Workaround: get msvc paths into PowerShell through intermediate file * Workaround: fix, remove "PATH=" from text * Workaround: try with full-path; and return user PATH * Workaround: fix, escape backslashes * Revert all since "Workaround: fallback to mscv link.exe" did not work on AppVeyor This reverts the commits:bda3d6a428
97062933ac
0f4fb04bac
1b0c19afd1
a5739ea5f0
* Suppress output of git pull; remove vcpkg from cache * Re-enable AppVeyor builds for all platforms * Correct typo Co-Authored-By: Farwaykorse <Farwaykorse@users.noreply.github.com> * Add Clang-cl 7.0.0 to the supported platforms * Revert "Fix clang warning -Wunused-member-function" This reverts commit6fe1a42035
. * Fix or locally suppress clang warning -Wunused-member-function * format touched code and correct comment * git pull --quiet * fix logic error in workaround * fix missing bracket * Suppress output of mkdir * Replace MSBuild with Ninja * Suppress output of 7z * Add architecture flags for Clang * Drop workaround for lld-link * 7-zip Overwrite and Alternative output suppression without suppressing errors Replaces3c1c0794dd
* AppVeyor setup and CMake before build * reorder compiler configuration * remove unnecessary * remove -fno-strict-aliasing * remove -Wsign-conversion, since before v4.0 part of -Wconversion * -Wctor-dtor-privacy is GCC only * remove -Woverloaded-virtual part of -Wmost, part of -Wall * add -Wmissing-noreturn * remove the pragmas for -Wunused-member-function * Re-add MSBuild generator on AppVeyor * Print CMake commands * Add MSBuild toolset selection * Separate Architecture setting * clang-cl: add -Weverything * clang-cl -Wno-c++98-compat * clang-cl -Wno-c++98-compat-pedantic * clang-cl -Wno-missing-prototypes * clang-cl C++14 -Wno-unused-member-function * clang-cl -Wundef __GNUC__ * clang++: add -Weverything * clang++ -Wno-c++98-compat * clang++ -Wno-c++98-compat-pedantic * clang++ -Wno-missing-prototypes * clang++ -Wno-weak-vtables * clang++ C++14 -Wno-unused-member-function * clang++ fix -Wundef _MSC_VER * clang++ -Wno-padded * clang++ solve -Wdeprecated * Add AppleClang compiler target Since CMake v3.0 use of Clang for both is deprecated * clang++ v5.0 C++17 -Wno-undefined-func-template * Add VS2015 + LLVM/clang-cl to AppVeyor * Do not disable constexpr when compiling with clang-cl on Windows * Clean-up clang-only warnings (now under -Weverything) * Revert "Fix clang warning -Winvalid-noreturn on Windows" This reverts commit2238c4760e
. * Suppress -Winvalid-noreturn for the MS STL noexception workaround * CMake: put preprocessor definition in target_compile_definitions * Solve compiler warning C4668: __GNUC__ not defined
208 lines
5.5 KiB
CMake
208 lines
5.5 KiB
CMake
cmake_minimum_required(VERSION 3.0.2)
|
|
|
|
project(GSLTests CXX)
|
|
|
|
# will make visual studio generated project group files
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
list(APPEND CATCH_CMAKE_ARGS
|
|
"-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/external"
|
|
"-DNO_SELFTEST=true"
|
|
)
|
|
|
|
if(GIT_FOUND)
|
|
# add catch
|
|
ExternalProject_Add(
|
|
catch
|
|
PREFIX ${CMAKE_BINARY_DIR}/catch
|
|
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
|
GIT_TAG v2.0.1
|
|
CMAKE_ARGS ${CATCH_CMAKE_ARGS}
|
|
LOG_DOWNLOAD 1
|
|
UPDATE_DISCONNECTED 1
|
|
)
|
|
else()
|
|
# assume catch is installed in a system directory
|
|
add_custom_target(catch)
|
|
endif()
|
|
|
|
if (MSVC AND (GSL_CXX_STANDARD EQUAL 17))
|
|
set(GSL_CPLUSPLUS_OPT -Zc:__cplusplus -permissive-)
|
|
endif()
|
|
|
|
# this interface adds compile options to how the tests are run
|
|
# please try to keep entries ordered =)
|
|
add_library(gsl_tests_config INTERFACE)
|
|
if(MSVC) # MSVC or simulating MSVC
|
|
target_compile_options(gsl_tests_config INTERFACE
|
|
${GSL_CPLUSPLUS_OPT}
|
|
/EHsc
|
|
/W4
|
|
/WX
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
|
-Weverything
|
|
-Wno-c++98-compat
|
|
-Wno-c++98-compat-pedantic
|
|
-Wno-missing-braces
|
|
-Wno-missing-prototypes
|
|
-Wno-unknown-attributes
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},14>:-Wno-unused-member-function>
|
|
>
|
|
)
|
|
else()
|
|
target_compile_options(gsl_tests_config INTERFACE
|
|
-fno-strict-aliasing
|
|
-Wall
|
|
-Wcast-align
|
|
-Wconversion
|
|
-Wctor-dtor-privacy
|
|
-Werror
|
|
-Wextra
|
|
-Wpedantic
|
|
-Wshadow
|
|
-Wsign-conversion
|
|
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
|
|
-Weverything
|
|
-Wno-c++98-compat
|
|
-Wno-c++98-compat-pedantic
|
|
-Wno-missing-braces
|
|
-Wno-missing-prototypes
|
|
-Wno-padded
|
|
-Wno-unknown-attributes
|
|
$<$<EQUAL:${GSL_CXX_STANDARD},14>:-Wno-unused-member-function>
|
|
-Wno-weak-vtables
|
|
>
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
|
$<$<CXX_COMPILER_VERSION:5.0.2>:-Wno-undefined-func-template>
|
|
>
|
|
)
|
|
endif(MSVC)
|
|
|
|
# for tests to find the catch header
|
|
target_include_directories(gsl_tests_config INTERFACE
|
|
${CMAKE_BINARY_DIR}/external/include
|
|
)
|
|
|
|
# set definitions for tests
|
|
target_compile_definitions(gsl_tests_config INTERFACE
|
|
GSL_THROW_ON_CONTRACT_VIOLATION
|
|
)
|
|
|
|
# create the main executable for each test. this reduces the compile time
|
|
# of each test by pre-compiling catch.
|
|
add_library(test_catch STATIC test.cpp)
|
|
target_link_libraries(test_catch
|
|
GSL
|
|
gsl_tests_config
|
|
)
|
|
add_dependencies(test_catch catch)
|
|
set_property(TARGET test_catch PROPERTY FOLDER "GSL_tests")
|
|
|
|
function(add_gsl_test name)
|
|
add_executable(${name} ${name}.cpp)
|
|
target_link_libraries(${name}
|
|
GSL
|
|
test_catch
|
|
gsl_tests_config
|
|
)
|
|
add_dependencies(${name} catch)
|
|
add_test(
|
|
${name}
|
|
${name}
|
|
)
|
|
# group all tests under GSL_tests
|
|
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests")
|
|
endfunction()
|
|
|
|
add_gsl_test(span_tests)
|
|
add_gsl_test(multi_span_tests)
|
|
add_gsl_test(strided_span_tests)
|
|
add_gsl_test(string_span_tests)
|
|
add_gsl_test(at_tests)
|
|
add_gsl_test(bounds_tests)
|
|
add_gsl_test(notnull_tests)
|
|
add_gsl_test(assertion_tests)
|
|
add_gsl_test(utils_tests)
|
|
add_gsl_test(owner_tests)
|
|
add_gsl_test(byte_tests)
|
|
add_gsl_test(algorithm_tests)
|
|
add_gsl_test(strict_notnull_tests)
|
|
|
|
|
|
# No exception tests
|
|
|
|
foreach(flag_var
|
|
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
|
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
STRING (REGEX REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}")
|
|
endforeach(flag_var)
|
|
|
|
# this interface adds compile options to how the tests are run
|
|
# please try to keep entries ordered =)
|
|
add_library(gsl_tests_config_noexcept INTERFACE)
|
|
if(MSVC) # MSVC or simulating MSVC
|
|
target_compile_definitions(gsl_tests_config_noexcept INTERFACE
|
|
_HAS_EXCEPTIONS=0
|
|
)
|
|
target_compile_options(gsl_tests_config_noexcept INTERFACE
|
|
${GSL_CPLUSPLUS_OPT}
|
|
/W4
|
|
/WX
|
|
$<$<CXX_COMPILER_ID:MSVC>:
|
|
/wd4577
|
|
/wd4702
|
|
>
|
|
$<$<CXX_COMPILER_ID:Clang>:
|
|
-Weverything
|
|
-Wno-c++98-compat
|
|
-Wno-c++98-compat-pedantic
|
|
-Wno-missing-prototypes
|
|
-Wno-unknown-attributes
|
|
>
|
|
)
|
|
else()
|
|
target_compile_options(gsl_tests_config_noexcept INTERFACE
|
|
-fno-exceptions
|
|
-fno-strict-aliasing
|
|
-Wall
|
|
-Wcast-align
|
|
-Wconversion
|
|
-Wctor-dtor-privacy
|
|
-Werror
|
|
-Wextra
|
|
-Wpedantic
|
|
-Wshadow
|
|
-Wsign-conversion
|
|
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
|
|
-Weverything
|
|
-Wno-c++98-compat
|
|
-Wno-c++98-compat-pedantic
|
|
-Wno-missing-prototypes
|
|
-Wno-unknown-attributes
|
|
-Wno-weak-vtables
|
|
>
|
|
)
|
|
endif(MSVC)
|
|
|
|
# set definitions for tests
|
|
target_compile_definitions(gsl_tests_config_noexcept INTERFACE
|
|
GSL_TERMINATE_ON_CONTRACT_VIOLATION
|
|
)
|
|
|
|
function(add_gsl_test_noexcept name)
|
|
add_executable(${name} ${name}.cpp)
|
|
target_link_libraries(${name}
|
|
GSL
|
|
gsl_tests_config_noexcept
|
|
)
|
|
add_test(
|
|
${name}
|
|
${name}
|
|
)
|
|
# group all tests under GSL_tests_noexcept
|
|
set_property(TARGET ${name} PROPERTY FOLDER "GSL_tests_noexcept")
|
|
endfunction()
|
|
|
|
add_gsl_test_noexcept(no_exception_throw_tests)
|
|
add_gsl_test_noexcept(no_exception_ensure_tests)
|