1# Copyright 2019 - 2020 Alexander Grund 2# Distributed under the Boost Software License, Version 1.0. 3# (See accompanying file LICENSE or copy at http://boost.org/LICENSE_1_0.txt) 4 5include(CheckCXXCompilerFlag) 6check_cxx_compiler_flag(-Wsuggest-override _BOOST_NOWIDE_SUGGEST_OVERRIDE_SUPPORTED) 7 8function(boost_nowide_add_test name) 9 cmake_parse_arguments(PARSE_ARGV 1 ARG "COMPILE_ONLY" "SRC" "LIBRARIES;DEFINITIONS;ARGS") 10 if(NOT ARG_SRC) 11 set(ARG_SRC ${name}.cpp) 12 endif() 13 set(name ${PROJECT_NAME}-${name}) 14 15 add_executable(${name} ${ARG_SRC}) 16 target_link_libraries(${name} PRIVATE Boost::nowide ${ARG_LIBRARIES}) 17 boost_add_warnings(${name} pedantic ${Boost_NOWIDE_WERROR}) 18 if(_BOOST_NOWIDE_SUGGEST_OVERRIDE_SUPPORTED) 19 target_compile_options(${name} PRIVATE -Wsuggest-override -Wno-error=suggest-override) 20 endif() 21 target_compile_definitions(${name} PRIVATE BOOST_ALL_NO_LIB ${ARG_DEFINITIONS}) 22 if(NOT ARG_COMPILE_ONLY) 23 add_test(NAME ${name} COMMAND ${name} ${ARG_ARGS}) 24 endif() 25endfunction() 26 27boost_nowide_add_test(test_codecvt) 28boost_nowide_add_test(test_convert) 29boost_nowide_add_test(test_env) 30boost_nowide_add_test(test_env_win SRC test_env.cpp DEFINITIONS BOOST_NOWIDE_TEST_INCLUDE_WINDOWS) 31boost_nowide_add_test(test_fstream) 32boost_nowide_add_test(test_fstream_cxx11) 33boost_nowide_add_test(test_iostream) 34if(MSVC AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) 35 set_target_properties(${PROJECT_NAME}-test_iostream PROPERTIES VS_DEBUGGER_COMMAND_ARGUMENTS -i) 36endif() 37boost_nowide_add_test(test_stackstring) 38boost_nowide_add_test(test_stat) 39boost_nowide_add_test(test_stdio) 40boost_nowide_add_test(test_system_n SRC test_system.cpp DEFINITIONS BOOST_NOWIDE_TEST_USE_NARROW=1) 41if(WIN32) 42 boost_nowide_add_test(test_system_w SRC test_system.cpp DEFINITIONS BOOST_NOWIDE_TEST_USE_NARROW=0) 43else() 44 boost_nowide_add_test(test_internal_fstream SRC test_fstream.cpp DEFINITIONS BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT=1) 45 boost_nowide_add_test(test_internal_fstream_cxx11 SRC test_fstream_cxx11.cpp DEFINITIONS BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT=1) 46endif() 47 48if(NOT BOOST_SUPERPROJECT_SOURCE_DIR) 49 # Default boost libs are static on windows and dynamic on linux 50 if(WIN32 AND NOT DEFINED Boost_USE_STATIC_LIBS) 51 set(Boost_USE_STATIC_LIBS ON) 52 endif() 53 find_package(Boost 1.56 REQUIRED COMPONENTS filesystem system) 54endif() 55boost_nowide_add_test(test_fs LIBRARIES Boost::filesystem) 56boost_nowide_add_test(benchmark_fstream COMPILE_ONLY DEFINITIONS BOOST_NOWIDE_USE_FILEBUF_REPLACEMENT=1) 57