| # CMake build control file for Serialization Library tests |
| |
| cmake_minimum_required(VERSION 3.0) |
| |
| |
| if(Boost_USE_STATIC_LIBS) |
| project("Serialization-Static") |
| else() |
| project("Serialization-Shared") |
| endif() |
| |
| # |
| # Compiler settings |
| # |
| |
| message(STATUS "compiler is ${CMAKE_CXX_COMPILER_ID}" ) |
| |
| if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" ) |
| add_definitions( -ftemplate-depth=300 ) |
| # we use gcc to test for C++03 compatibility |
| add_definitions( std=c++03 ) |
| message(STATUS "compiler is g++ c++03") |
| elseif( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" ) |
| add_definitions( /wd4996 ) |
| message(STATUS "compiler is MSVC") |
| elseif( CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" ) |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=300") |
| #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98") |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") |
| 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") |
| endif() |
| |
| # |
| # IDE settings |
| # |
| |
| if( CMAKE_HOST_APPLE ) |
| # note: it seems that bjam builds both address models in any case |
| # so we can defer this decision to the IDE just as we do for debug/release |
| # so we'll not use this now |
| # set(Boost_ADDRESS_MODEL 64 CACHE INTEGER "32/64 bits") |
| set(Boost_USE_STATIC_LIBS ON CACHE BOOL "Link to Boost static libraries") |
| set(Boost_USE_MULTITHREADED ON) |
| else() |
| set(Boost_ADDRESS_MODEL 64 CACHE INTEGER "32/64 bits") |
| set(Boost_USE_STATIC_LIBS ON CACHE BOOL "Link to Boost static libraries") |
| set(Boost_USE_MULTITHREADED ON) |
| endif() |
| |
| # |
| # Locate Project Prerequisites |
| # |
| |
| # Boost |
| |
| # note: we're assuming that boost has been built with: |
| # ./b2 —-layout=versioned toolset=clang-darwin link=static,shared variant=debug,release stage |
| |
| ########################### |
| # special notes for Xcode. |
| |
| # these three should result in CMake setting the variables |
| # Boost_SERIALIZATION_LIBRARY_DEBUG … to the correct values. |
| |
| # But my current version of CMake doesn't automatically set the library names |
| # to point to the the libraries to be used. The variables are created |
| # but they are not initialized. So be prepared to set these variables by hand. |
| # If you want to use the static libraries - point to the boost libraries ending |
| # in ".a". If you want to use the shared boost libraries - point to the libraries |
| # ending in ".dylib". |
| |
| # But wait - there's more. |
| # if both lib.a and lib.dylib both exist in the library directory, Xcode will |
| # automatically chose the *.dylib one - and there's nothing you can do to fix this. |
| # So my recommendation is |
| # a) to place the compiled libraries in two different directories |
| # - e.g. stage/lib-static/*.a and stage/lib-shared/*.dylib |
| # and set the CMake variable Boost_LIBRARY_DIR to point to one or the other |
| # b) create two different CMake build directories - build-static and build-shared |
| # and switch between projects as desired. I like to test both since |
| # there are things like dead code elimination and visibility which vary |
| # between the two environments. |
| # |
| # caveat - as I write this, I've been unable to get the tests on the shared |
| # library to function. Problem is that one needs to either put the shared |
| # libraries in a special known place or set an environmental |
| # variable which points to the shared library directory. I prefer the latter |
| # but I've been unable to figure out how to get Xcode to do on a global basis |
| # and it's not practical to do this for 247 test targets one at a time. |
| |
| # c) The targets in the project will by default be built as universal 32/64 binaries |
| # I have yet to experiment with these yet so I just set the target to 64 bit. |
| |
| # end special note for Xcode |
| ############################ |
| |
| find_package(Boost REQUIRED COMPONENTS system filesystem) |
| |
| if(Boost_FOUND) |
| message(STATUS "Boost is ${BOOST_ROOT}") |
| message(STATUS "Boost directories found at ${Boost_INCLUDE_DIRS}") |
| message(STATUS "Boost libraries found at ${Boost_LIBRARY_DIRS}") |
| message(STATUS "Boost component libraries to be linked are ${Boost_LIBRARIES}") |
| message(STATUS "Boost version found is ${Boost_VERSION}") |
| include_directories("../include" "${Boost_INCLUDE_DIRS}") |
| link_directories("${Boost_LIBRARY_DIRS}") |
| elseif() |
| message("Boost NOT Found!") |
| endif() |
| |
| if(Boost_USE_STATIC_LIBS) |
| set(BUILD_SHARED_LIBRARIES OFF) |
| else() |
| set(BUILD_SHARED_LIBRARIES ON) |
| endif() |
| |
| ########################### |
| # 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/codecvt_null.cpp |
| ../src/extended_type_info_no_rtti.cpp |
| ../src/extended_type_info_typeid.cpp |
| ../src/extended_type_info.cpp |
| ../src/polymorphic_iarchive.cpp |
| ../src/polymorphic_oarchive.cpp |
| ../src/stl_port.cpp |
| ../src/text_iarchive.cpp |
| ../src/text_oarchive.cpp |
| ../src/text_wiarchive.cpp |
| ../src/text_woarchive.cpp |
| ../src/utf8_codecvt_facet.cpp |
| ../src/void_cast.cpp |
| ../src/xml_archive_exception.cpp |
| ../src/xml_iarchive.cpp |
| ../src/xml_oarchive.cpp |
| ../src/xml_grammar.cpp |
| # ../src/basic_xml_grammar.ipp # doesn't show up in "Source Files" in Xcode"' |
| ) |
| |
| add_library(wserialization |
| ../src/basic_text_wiprimitive.cpp |
| ../src/basic_text_woprimitive.cpp |
| ../src/text_wiarchive.cpp |
| ../src/text_woarchive.cpp |
| ../src/utf8_codecvt_facet.cpp |
| ../src/xml_wiarchive.cpp |
| ../src/xml_woarchive.cpp |
| ../src/codecvt_null.cpp |
| ../src/xml_wgrammar.cpp |
| ) |
| |
| # 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_link_libraries(${test_name} serialization wserialization ${Boost_LIBRARIES}) |
| add_test( ${test_name} ${test_name} ) |
| endfunction(serialization_test) |
| |
| function(archive_test test_name) |
| set(arglist) |
| foreach(a IN ITEMS ${ARGN} ) |
| set(arglist ${arglist} ../test/${a}.cpp) |
| endforeach() |
| foreach( |
| archive-name |
| IN ITEMS text_archive text_warchive binary_archive xml_archive xml_warchive |
| ) |
| set(amended_test_name ${test_name}_${archive-name}) |
| message(STATUS ${amended_test_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_link_libraries(${amended_test_name} serialization wserialization ${Boost_LIBRARIES}) |
| add_test(${amended_test_name} ${amended_test_name}) |
| endforeach() |
| endfunction(archive_test) |
| |
| function(polymorphic_archive_test test_name) |
| set(arglist) |
| foreach(a IN ITEMS ${ARGN} ) |
| set(arglist ${arglist} ../test/${a}.cpp) |
| endforeach() |
| foreach( |
| archive-name |
| IN ITEMS text_archive text_warchive binary_archive xml_archive xml_warchive |
| ) |
| set(amended_test_name ${test_name}_polymorphic_${archive-name}) |
| message(STATUS ${amended_test_name}) |
| add_executable(${amended_test_name} ../test/${test_name}.cpp ${arglist}) |
| set_property( |
| TARGET ${amended_test_name} |
| PROPERTY COMPILE_DEFINITIONS BOOST_ARCHIVE_TEST=polymorphic_${archive-name}.hpp |
| ) |
| target_link_libraries(${amended_test_name} serialization wserialization ${Boost_LIBRARIES}) |
| add_test(${amended_test_name} ${amended_test_name}) |
| endforeach() |
| endfunction(polymorphic_archive_test) |
| |
| enable_testing() |
| |
| # serialization(test_dll_exported dll_polymorphic_derived2_lib) |
| # serialization(test_dll_simple dll_a_lib) |
| # 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) |
| |
| 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_smart_cast) |
| serialization_test(test_utf8_codecvt ../src/utf8_codecvt_facet) |
| serialization_test(test_codecvt_null ../src/codecvt_null) |
| |
| archive_test(test_array A) |
| 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) |
| archive_test(test_exported polymorphic_base) |
| 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) |
| archive_test(test_mi) |
| archive_test(test_multiple_ptrs A) |
| archive_test(test_multiple_inheritance) |
| archive_test(test_no_rtti polymorphic_base polymorphic_derived1) |
| 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_queue A) |
| archive_test(test_recursion A) |
| archive_test(test_registered) |
| archive_test(test_set A) |
| 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) |
| 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) |
| |
| polymorphic_archive_test(test_polymorphic test_polymorphic_A A ) |
| polymorphic_archive_test(test_polymorphic2 test_polymorphic2imp) |
| |
| # end test targets |
| #################### |
| |
| #################### |
| # add headers in IDE |
| |
| # for serialisation |
| |
| 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} "${CMAKE_CURRENT_SOURCE_DIR}/../include/boost/archive/codecvt_null.hpp") |
| 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 |
| ##################### |