diff options
Diffstat (limited to 'src/boost/libs/serialization/CMake')
-rw-r--r-- | src/boost/libs/serialization/CMake/CMakeLists.txt | 464 |
1 files changed, 464 insertions, 0 deletions
diff --git a/src/boost/libs/serialization/CMake/CMakeLists.txt b/src/boost/libs/serialization/CMake/CMakeLists.txt new file mode 100644 index 000000000..00868f853 --- /dev/null +++ b/src/boost/libs/serialization/CMake/CMakeLists.txt @@ -0,0 +1,464 @@ +# CMake build control file for Serialization Library tests + +cmake_minimum_required(VERSION 3.0) + +if (POLICY CMP0054) + cmake_policy (SET CMP0054 NEW) +endif (POLICY CMP0054) + +if (POLICY CMP0063) + cmake_policy (SET CMP0063 NEW) +endif (POLICY CMP0063) + +if(Boost_USE_STATIC_LIBS) + project("Serialization-Static") +else() + project("Serialization-Shared") +endif() + +# +# Compiler settings +# + +message(STATUS "compiler is ${CMAKE_CXX_COMPILER_ID}" ) +add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) + +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") + set(COMPILER_SUPPORTS_CXX11 FALSE) +elseif( CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" ) + add_definitions( /wd4996 ) + message(STATUS "compiler is MSVC") + 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 "${CMAKE_CXX_FLAGS} -std=c++03") + #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") + set(COMPILER_SUPPORTS_CXX11 FALSE) +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 +############################ + +# +# IDE settings +# + +set(Boost_DEBUG true) +set(Boost_ADDRESS_MODEL 64 CACHE STRING "32/64 bits") +set(Boost_USE_STATIC_LIBS TRUE CACHE BOOL "Use static libraries") +set(Boost_USE_MULTITHREADED ON) +set(Boost_DETAILED_FAILURE_MSG true) + +get_filename_component(BOOST_ROOT "../../.." ABSOLUTE) +string(CONCAT boost_headers ${BOOST_ROOT} "/boost") +if(NOT IS_DIRECTORY ${boost_headers}) + message(FATAL_ERROR "BOOST_ROOT not found") +else() + message(STATUS "BOOST_ROOT is ${BOOST_ROOT}") +endif() + +if(Boost_USE_STATIC_LIBS) + message(STATUS "Link to Boost static libraries") + set(BUILD_SHARED_LIBS NO) + string(CONCAT boost_stage ${BOOST_ROOT} "/stage/Debug/static") +else() + message(STATUS "Link to Boost shared libraries") + set(BUILD_SHARED_LIBS YES) + add_definitions( "-DBOOST_ALL_DYN_LINK=1") + add_definitions( "-DBOOST_ALL_NO_LIB=1") + add_definitions( "-DBOOST_LIB_DIAGNOSTICS=1") + set(CMAKE_CXX_VISIBILITY_PRESET hidden) + set(VISIBILITY_INLINES_HIDDEN YES) + string(CONCAT boost_stage ${BOOST_ROOT} "/stage/Debug/shared") +endif() + +include(CheckIncludeFileCXX) + +message(STATUS "Boost directories found at ${boost_headers}") +message(STATUS "Boost libraries found at ${boost_stage}") +set(CMAKE_LIBRARY_PATH ${boost_stage}) + +# 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 text_archive) + +# list of tests generated by each function call +set(test_list) + +include_directories(BEFORE ${BOOST_ROOT}) + +########################### +# 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_no_rtti.cpp + ../src/extended_type_info_typeid.cpp + ../src/extended_type_info.cpp + ../src/polymorphic_iarchive.cpp + ../src/polymorphic_oarchive.cpp + ../src/polymorphic_text_iarchive.cpp + ../src/polymorphic_text_oarchive.cpp + ../src/stl_port.cpp + ../src/text_iarchive.cpp + ../src/text_oarchive.cpp + ../src/void_cast.cpp + ../src/xml_archive_exception.cpp + ../src/xml_iarchive.cpp + ../src/xml_oarchive.cpp + ../src/xml_grammar.cpp + ../src/utf8_codecvt_facet.cpp + ../src/basic_xml_grammar.ipp # doesn't show up in "Source Files" in Xcode"' +) + +add_library(wserialization + ../src/codecvt_null.cpp + ../src/basic_text_wiprimitive.cpp + ../src/basic_text_woprimitive.cpp + ../src/text_wiarchive.cpp + ../src/text_woarchive.cpp + ../src/xml_wiarchive.cpp + ../src/xml_woarchive.cpp + ../src/xml_wgrammar.cpp + ../src/basic_xml_grammar.ipp # doesn't show up in "Source Files" in Xcode"' +) + +set_property(TARGET wserialization PROPERTY LINK_LIBRARIES serialization) + +# end library build +########################### + +add_library(filesystem SHARED IMPORTED GLOBAL ) # or STATIC instead of SHARED +set_target_properties(filesystem PROPERTIES + IMPORTED_LOCATION "${CMAKE_LIBRARY_PATH}/libboost_filesystem-clang-darwin-mt-d-x64-1_69.dylib" +) +get_property(loc TARGET filesystem PROPERTY LOCATION) +message(STATUS "filesystem library located at:${loc}") + +########################### +# 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 filesystem) + add_test( ${test_name} ${test_name} ) +endfunction(serialization_test) + +function(archive_test test_name) + set(test_list) + 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 + ) + message(STATUS ${amended_test_name} " " ${arglist} " " ${archive-name}) + target_link_libraries(${amended_test_name} serialization wserialization filesystem) + add_test(${amended_test_name} ${amended_test_name}) + set(test_list ${test_list} ${amended_test_name} PARENT_SCOPE) + endforeach() +endfunction(archive_test) + +function(polymorphic_archive_test test_name) + set(test_list) + 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_link_libraries(${amended_test_name} serialization wserialization filesystem) + add_test(${amended_test_name} ${amended_test_name}) + set(test_list ${test_list} ${amended_test_name} PARENT_SCOPE) + endforeach() +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) +serialization_test(test_dll_simple) +target_link_libraries(test_dll_simple 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) + +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 ../src/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) +archive_test(test_forward_list A) +archive_test(test_forward_list_ptrs A) +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_map_boost_unordered A) +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_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) +else() + message(STATUS "slist header NOT found") +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) +archive_test(test_set A) +archive_test(test_set_boost_unordered A) +if(COMPILER_SUPPORTS_CXX11) + archive_test(test_set_unordered A) +else() + CHECK_INCLUDE_FILE_CXX(hash_set HASH_SET_FOUND) + if(HASH_SET_FOUND) + archive_test(test_set_hashed A) + endif() +endif() +if(COMPILER_SUPPORTS_CXX11) + archive_test(test_map_unordered A) +else() + CHECK_INCLUDE_FILE_CXX(hash_map HASH_MAP_FOUND) + if(HASH_MAP_FOUND) + archive_test(test_map_hashed A) + endif() +endif() + +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) + message(STATUS " " target_link_libraries " " dll_polymorphic_derived2 " " dll_polymorphic_base) +endforeach() + +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 +##################### |