mirror of
https://github.com/boostorg/serialization.git
synced 2026-01-19 04:42:10 +00:00
414 lines
13 KiB
CMake
414 lines
13 KiB
CMake
# CMake build control file for Serialization Library tests
|
|
|
|
cmake_minimum_required(VERSION 3.5)
|
|
|
|
if (POLICY CMP0054)
|
|
cmake_policy (SET CMP0054 NEW)
|
|
endif (POLICY CMP0054)
|
|
|
|
if (POLICY CMP0063)
|
|
cmake_policy (SET CMP0063 NEW)
|
|
endif (POLICY CMP0063)
|
|
|
|
project("serialization")
|
|
|
|
#
|
|
# Compiler settings
|
|
#
|
|
|
|
message(STATUS "C++ compiler is ${CMAKE_CXX_COMPILER_ID}" )
|
|
add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
|
|
message(STATUS "C compiler is ${CMAKE_C_COMPILER_ID}" )
|
|
|
|
if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
|
|
add_definitions( -ftemplate-depth=255 )
|
|
# we use gcc to test for C++03 compatibility
|
|
set(COMPILER_SUPPORTS_CXX11 FALSE)
|
|
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
|
|
add_definitions( /wd4996 )
|
|
set(COMPILER_SUPPORTS_CXX11 TRUE)
|
|
elseif( CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=300")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0" )
|
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O3" )
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -dead_strip")
|
|
set(COMPILER_SUPPORTS_CXX11 TRUE)
|
|
endif()
|
|
|
|
add_definitions( -std=c++11 )
|
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
|
|
#
|
|
# Locate Project Prerequisites
|
|
#
|
|
|
|
# Boost
|
|
|
|
#
|
|
# Project settings
|
|
#
|
|
option(BUILD_SHARED_LIBS "Build Shared Libraries" true)
|
|
|
|
find_package(Boost 1.82 REQUIRED COMPONENTS system filesystem)
|
|
|
|
if(NOT Boost_FOUND)
|
|
message("Boost NOT Found!")
|
|
else()
|
|
message(STATUS "Boost Found!")
|
|
endif()
|
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
set(VISIBILITY_INLINES_HIDDEN YES)
|
|
|
|
# enable usage of CHECK_INCLUDE_FILE_CXX
|
|
include(CheckIncludeFileCXX)
|
|
|
|
# list of archive names for which tests should be generated
|
|
set(archive_list text_archive text_warchive binary_archive xml_archive xml_warchive)
|
|
# set(archive_list xml_warchive)
|
|
|
|
# list of tests generated by each function call
|
|
set(test_list)
|
|
|
|
###########################
|
|
# library builds
|
|
|
|
add_library(serialization
|
|
../src/archive_exception.cpp
|
|
../src/basic_archive.cpp
|
|
../src/basic_iarchive.cpp
|
|
../src/basic_iserializer.cpp
|
|
../src/basic_oarchive.cpp
|
|
../src/basic_oserializer.cpp
|
|
../src/basic_pointer_iserializer.cpp
|
|
../src/basic_pointer_oserializer.cpp
|
|
../src/basic_serializer_map.cpp
|
|
../src/basic_text_iprimitive.cpp
|
|
../src/basic_text_oprimitive.cpp
|
|
../src/basic_xml_archive.cpp
|
|
../src/binary_iarchive.cpp
|
|
../src/binary_oarchive.cpp
|
|
../src/extended_type_info.cpp
|
|
../src/extended_type_info_typeid.cpp
|
|
../src/extended_type_info_no_rtti.cpp
|
|
../src/stl_port.cpp
|
|
../src/text_iarchive.cpp
|
|
../src/text_oarchive.cpp
|
|
../src/polymorphic_iarchive.cpp
|
|
../src/polymorphic_oarchive.cpp
|
|
../src/polymorphic_text_iarchive.cpp
|
|
../src/polymorphic_text_oarchive.cpp
|
|
../src/polymorphic_binary_iarchive.cpp
|
|
../src/polymorphic_binary_oarchive.cpp
|
|
../src/polymorphic_xml_iarchive.cpp
|
|
../src/polymorphic_xml_oarchive.cpp
|
|
../src/void_cast.cpp
|
|
../src/xml_grammar.cpp
|
|
../src/xml_iarchive.cpp
|
|
../src/xml_oarchive.cpp
|
|
../src/xml_archive_exception.cpp
|
|
../src/codecvt_null.cpp
|
|
../src/utf8_codecvt_facet.cpp
|
|
../src/basic_xml_grammar.ipp # doesn't show up in "Source Files" in Xcode"'
|
|
)
|
|
target_include_directories(serialization PUBLIC ${Boost_INCLUDE_DIR})
|
|
|
|
add_library(wserialization
|
|
../src/basic_text_wiprimitive.cpp
|
|
../src/basic_text_woprimitive.cpp
|
|
../src/text_wiarchive.cpp
|
|
../src/text_woarchive.cpp
|
|
../src/polymorphic_text_wiarchive.cpp
|
|
../src/polymorphic_text_woarchive.cpp
|
|
../src/xml_wiarchive.cpp
|
|
../src/xml_woarchive.cpp
|
|
../src/polymorphic_xml_wiarchive.cpp
|
|
../src/polymorphic_xml_woarchive.cpp
|
|
../src/xml_wgrammar.cpp
|
|
../src/basic_xml_grammar.ipp # doesn't show up in "Source Files" in Xcode"'
|
|
)
|
|
target_include_directories(wserialization PUBLIC ${Boost_INCLUDE_DIR})
|
|
target_link_libraries(wserialization PUBLIC serialization)
|
|
|
|
# end library build
|
|
###########################
|
|
|
|
###########################
|
|
# test targets
|
|
|
|
function( serialization_test test_name)
|
|
set(arglist)
|
|
foreach(a IN ITEMS ${ARGN} )
|
|
set(arglist ${arglist} ../test/${a}.cpp)
|
|
endforeach()
|
|
message(STATUS ${test_name})
|
|
add_executable( ${test_name} ../test/${test_name}.cpp ${arglist} )
|
|
target_include_directories(${test_name} PUBLIC ${Boost_INCLUDE_DIR})
|
|
target_link_libraries(${test_name} serialization wserialization Boost::filesystem)
|
|
add_test( ${test_name} ${test_name} )
|
|
endfunction(serialization_test)
|
|
|
|
function(archive_test test_name)
|
|
set(test_listx)
|
|
set(arglist)
|
|
foreach(a IN ITEMS ${ARGN} )
|
|
set(arglist ${arglist} ../test/${a}.cpp)
|
|
endforeach()
|
|
foreach(
|
|
archive-name
|
|
IN ITEMS ${archive_list}
|
|
)
|
|
set(amended_test_name ${test_name}_${archive-name})
|
|
add_executable(${amended_test_name} ../test/${test_name}.cpp ${arglist})
|
|
set_property(
|
|
TARGET ${amended_test_name}
|
|
PROPERTY COMPILE_DEFINITIONS BOOST_ARCHIVE_TEST=${archive-name}.hpp
|
|
)
|
|
target_include_directories(${amended_test_name} PUBLIC ${Boost_INCLUDE_DIR})
|
|
target_link_libraries(${amended_test_name} serialization wserialization Boost::filesystem)
|
|
add_test(${amended_test_name} ${amended_test_name})
|
|
set(test_listx ${test_listx} ${amended_test_name})
|
|
endforeach()
|
|
set(test_list ${test_listx} PARENT_SCOPE)
|
|
endfunction(archive_test)
|
|
|
|
function(polymorphic_archive_test test_name)
|
|
set(test_listx)
|
|
set(arglist)
|
|
foreach(a IN ITEMS ${ARGN} )
|
|
set(arglist ${arglist} ../test/${a}.cpp)
|
|
endforeach()
|
|
foreach(
|
|
archive-name
|
|
IN ITEMS ${archive_list}
|
|
)
|
|
set(amended_archive_name polymorphic_${archive-name})
|
|
set(amended_test_name ${test_name}_${amended_archive_name})
|
|
add_executable(${amended_test_name} ../test/${test_name}.cpp ${arglist})
|
|
set_property(
|
|
TARGET ${amended_test_name}
|
|
PROPERTY COMPILE_DEFINITIONS BOOST_ARCHIVE_TEST=${amended_archive_name}.hpp
|
|
)
|
|
message(STATUS ${amended_test_name} " " ${arglist} " " ${amended_archive_name})
|
|
target_include_directories(${amended_test_name} PUBLIC ${Boost_INCLUDE_DIR})
|
|
target_link_libraries(${amended_test_name} serialization wserialization Boost::filesystem)
|
|
add_test(${amended_test_name} ${amended_test_name})
|
|
set(test_listx ${test_listx} ${amended_test_name})
|
|
endforeach()
|
|
set(test_list ${test_listx} PARENT_SCOPE)
|
|
endfunction(polymorphic_archive_test)
|
|
|
|
enable_testing()
|
|
|
|
message(STATUS dll_a)
|
|
add_library(dll_a SHARED ../test/dll_a.cpp)
|
|
target_link_libraries(dll_a serialization)
|
|
|
|
message(STATUS dll_polymorphic_base)
|
|
add_library(dll_polymorphic_base SHARED ../test/dll_polymorphic_base.cpp)
|
|
target_link_libraries(dll_polymorphic_base serialization)
|
|
|
|
message(STATUS dll_polymorphic_derived2)
|
|
add_library(dll_polymorphic_derived2 SHARED ../test/dll_polymorphic_derived2.cpp)
|
|
target_link_libraries(dll_polymorphic_derived2 dll_polymorphic_base serialization)
|
|
|
|
# compile test_dll_plugin.cpp
|
|
# Running the following test requires that the test know the directory
|
|
# in which the dll is stored. I don't know how to extract this from bjam
|
|
# serialization(test_dll_plugin : : dll_polymorphic_derived2_lib)
|
|
|
|
if(BUILD_SHARED_LIBS)
|
|
# this test can only be made to work if we're linking with shared
|
|
# libraries. Basically the build systems like to have all shared
|
|
# or all static so if we're building with static C++ libraries
|
|
# then linking with a shared one - we need multiple C++ libraries
|
|
# and things get complex. So just run this test when we're
|
|
# building with shared libraries (dll in windows speak)
|
|
serialization_test(test_dll_simple)
|
|
target_link_libraries(test_dll_simple dll_a serialization)
|
|
endif()
|
|
|
|
serialization_test(test_private_ctor)
|
|
serialization_test(test_reset_object_address A)
|
|
serialization_test(test_void_cast)
|
|
serialization_test(test_mult_archive_types)
|
|
serialization_test(test_iterators)
|
|
serialization_test(test_iterators_base64)
|
|
serialization_test(test_inclusion)
|
|
serialization_test(test_inclusion2)
|
|
serialization_test(test_smart_cast)
|
|
serialization_test(test_codecvt_null)
|
|
serialization_test(test_strong_typedef)
|
|
serialization_test(test_singleton)
|
|
serialization_test(test_singleton_inherited)
|
|
serialization_test(test_singleton_plain)
|
|
|
|
archive_test(test_native_array A)
|
|
archive_test(test_boost_array A)
|
|
if(COMPILER_SUPPORTS_CXX11)
|
|
archive_test(test_array A)
|
|
endif()
|
|
|
|
archive_test(test_binary)
|
|
archive_test(test_bitset)
|
|
archive_test(test_class_info_save)
|
|
archive_test(test_class_info_load)
|
|
archive_test(test_complex)
|
|
archive_test(test_contained_class A)
|
|
archive_test(test_cyclic_ptrs A)
|
|
archive_test(test_delete_pointer)
|
|
archive_test(test_deque A)
|
|
archive_test(test_derived)
|
|
archive_test(test_derived_class A)
|
|
archive_test(test_diamond)
|
|
archive_test(test_diamond_complex)
|
|
CHECK_INCLUDE_FILE_CXX(forward_list FORWARD_LIST_FOUND)
|
|
if(FORWARD_LIST_FOUND)
|
|
message(STATUS "forward_list header found")
|
|
archive_test(test_forward_list A)
|
|
archive_test(test_forward_list_ptrs A)
|
|
else()
|
|
message(STATUS "forward_list header NOT found")
|
|
endif()
|
|
|
|
archive_test(test_helper_support)
|
|
archive_test(test_interrupts)
|
|
archive_test(test_list A)
|
|
archive_test(test_list_ptrs A)
|
|
|
|
archive_test(test_map A)
|
|
CHECK_INCLUDE_FILE_CXX(hash_map HASH_MAP_FOUND)
|
|
if(HASH_MAP_FOUND)
|
|
archive_test(test_map_hashed A)
|
|
endif()
|
|
archive_test(test_mi)
|
|
archive_test(test_multiple_ptrs A)
|
|
archive_test(test_multiple_inheritance)
|
|
archive_test(test_new_operator A)
|
|
archive_test(test_non_intrusive)
|
|
archive_test(test_non_default_ctor)
|
|
archive_test(test_non_default_ctor2)
|
|
archive_test(test_null_ptr)
|
|
archive_test(test_nvp A)
|
|
archive_test(test_object)
|
|
archive_test(test_optional)
|
|
archive_test(test_primitive)
|
|
archive_test(test_priority_queue A)
|
|
archive_test(test_private_base)
|
|
archive_test(test_private_base2)
|
|
archive_test(test_queue A)
|
|
archive_test(test_recursion A)
|
|
archive_test(test_registered)
|
|
|
|
archive_test(test_set A)
|
|
CHECK_INCLUDE_FILE_CXX(hash_set HASH_SET_FOUND)
|
|
if(HASH_SET_FOUND)
|
|
archive_test(test_set_hashed A)
|
|
endif()
|
|
|
|
archive_test(test_shared_ptr)
|
|
archive_test(test_shared_ptr_multi_base)
|
|
archive_test(test_shared_ptr_132)
|
|
archive_test(test_simple_class A)
|
|
archive_test(test_simple_class_ptr A)
|
|
CHECK_INCLUDE_FILE_CXX(slist SLIST_FOUND)
|
|
if(SLIST_FOUND)
|
|
message(STATUS "slist header found")
|
|
archive_test(test_slist A)
|
|
archive_test(test_slist_ptr A)
|
|
endif()
|
|
archive_test(test_stack A)
|
|
archive_test(test_split)
|
|
archive_test(test_tracking)
|
|
archive_test(test_unregistered)
|
|
archive_test(test_unique_ptr)
|
|
archive_test(test_valarray)
|
|
archive_test(test_variant A)
|
|
archive_test(test_vector A)
|
|
|
|
if(BUILD_SHARED_LIBS)
|
|
polymorphic_archive_test(test_dll_exported polymorphic_derived1)
|
|
foreach(test_name IN ITEMS ${test_list} )
|
|
target_link_libraries(${test_name} dll_polymorphic_derived2 dll_polymorphic_base serialization wserialization)
|
|
endforeach()
|
|
endif()
|
|
|
|
polymorphic_archive_test(test_no_rtti polymorphic_base polymorphic_derived1 polymorphic_derived2)
|
|
polymorphic_archive_test(test_exported polymorphic_base polymorphic_derived1 polymorphic_derived2)
|
|
polymorphic_archive_test(test_polymorphic test_polymorphic_A A)
|
|
polymorphic_archive_test(test_polymorphic2 test_polymorphic2imp)
|
|
polymorphic_archive_test(test_p_helper)
|
|
|
|
# end test targets
|
|
####################
|
|
|
|
####################
|
|
# add headers in IDE
|
|
|
|
# for serialization
|
|
|
|
file(GLOB x
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/archive/*.hpp"
|
|
)
|
|
add_custom_target(archive SOURCES ${x})
|
|
set_property(TARGET archive PROPERTY FOLDER "serialization")
|
|
|
|
file(GLOB x
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/archive/detail/*.hpp"
|
|
)
|
|
add_custom_target(archive-detail SOURCES ${x})
|
|
set_property(TARGET archive-detail PROPERTY FOLDER "serialization")
|
|
|
|
file(GLOB x
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/archive/impl/*.ipp"
|
|
)
|
|
add_custom_target(archive-impl SOURCES ${x})
|
|
set_property(TARGET archive-impl PROPERTY FOLDER "serialization")
|
|
|
|
file(GLOB x
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/archive/iterators/*.hpp"
|
|
)
|
|
add_custom_target(archive-iterators SOURCES ${x})
|
|
set_property(TARGET archive-iterators PROPERTY FOLDER "serialization")
|
|
|
|
file(GLOB x
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/serialization/*.hpp"
|
|
)
|
|
add_custom_target(serialization-headers SOURCES ${x})
|
|
set_property(TARGET serialization-headers PROPERTY FOLDER "serialization")
|
|
|
|
file(GLOB x
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/serialization/detail/*.hpp"
|
|
)
|
|
add_custom_target(serialization-detail SOURCES ${x})
|
|
set_property(TARGET serialization-detail PROPERTY FOLDER "serialization")
|
|
|
|
# for wserialization
|
|
|
|
file(GLOB x
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/archive/*_w*.hpp"
|
|
)
|
|
add_custom_target(wserialization_headers SOURCES ${x})
|
|
set_property(TARGET wserialization_headers PROPERTY FOLDER "wserialization")
|
|
|
|
# end headers in IDE
|
|
####################
|
|
|
|
#####################
|
|
# add test project to run misc tests
|
|
|
|
add_executable( test_z ../test/test_z.cpp)
|
|
target_link_libraries(test_z serialization wserialization ${Boost_LIBRARIES})
|
|
|
|
# end test project
|
|
#####################
|