mirror of
https://github.com/RPCS3/cereal.git
synced 2025-03-04 13:37:05 +00:00
Merge branch 'develop' of https://github.com/adasworks/cereal into adasworks-develop
This commit is contained in:
commit
f6d0308a0b
1
.gitignore
vendored
1
.gitignore
vendored
@ -42,3 +42,4 @@ out.xml
|
||||
cereal_version.out
|
||||
xml_ordering.out
|
||||
build
|
||||
/out/
|
||||
|
@ -2,8 +2,38 @@ cmake_minimum_required (VERSION 2.6.2)
|
||||
project (cereal)
|
||||
|
||||
option(SKIP_PORTABILITY_TEST "Skip portability tests" OFF)
|
||||
if(NOT CMAKE_VERSION VERSION_LESS 3.0) # installing cereal requires INTERFACE lib
|
||||
option(JUST_INSTALL_CEREAL "Don't do anything besides installing the library" OFF)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Werror -g -Wextra -Wshadow -pedantic ${CMAKE_CXX_FLAGS}")
|
||||
if(NOT MSVC)
|
||||
set(CMAKE_CXX_FLAGS "-Wall -Werror -g -Wextra -Wshadow -pedantic ${CMAKE_CXX_FLAGS}")
|
||||
if(CMAKE_VERSION VERSION_LESS 3.1)
|
||||
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
|
||||
else()
|
||||
if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD STREQUAL "98")
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_VERSION VERSION_LESS 3.0)
|
||||
add_library(cereal INTERFACE)
|
||||
target_include_directories(cereal INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
install(TARGETS cereal EXPORT cereal
|
||||
DESTINATION lib) # ignored
|
||||
install(EXPORT cereal FILE cereal-config.cmake
|
||||
DESTINATION share/cmake/cereal)
|
||||
install(DIRECTORY include/cereal DESTINATION include)
|
||||
endif()
|
||||
|
||||
if(JUST_INSTALL_CEREAL)
|
||||
return()
|
||||
endif()
|
||||
|
||||
include_directories(./include)
|
||||
|
||||
|
@ -35,7 +35,7 @@ foreach(TEST_SOURCE ${TESTS})
|
||||
## If we are on a 64-bit machine, create an extra 32-bit version of the test
|
||||
#if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
||||
# add_executable(${TEST_TARGET}_32 ${TEST_SOURCE})
|
||||
# set_target_properties(${TEST_TARGET}_32 PROPERTIES
|
||||
# set_target_properties(${TEST_TARGET}_32 PROPERTIES
|
||||
# COMPILE_DEFINITIONS "BOOST_TEST_DYN_LINK;BOOST_TEST_MODULE=${TEST_TARGET}"
|
||||
# COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
|
||||
# target_link_libraries(${TEST_TARGET}_32 ${Boost_LIBRARIES})
|
||||
@ -66,7 +66,7 @@ foreach(TEST_SOURCE ${TESTS})
|
||||
|
||||
if(IS_SPECIAL_TEST EQUAL -1)
|
||||
add_dependencies(coverage ${COVERAGE_TARGET})
|
||||
|
||||
|
||||
add_executable(${COVERAGE_TARGET} EXCLUDE_FROM_ALL ${TEST_SOURCE})
|
||||
set_target_properties(${COVERAGE_TARGET} PROPERTIES COMPILE_DEFINITIONS "BOOST_TEST_DYN_LINK;BOOST_TEST_MODULE=${COVERAGE_TARGET}")
|
||||
set_target_properties(${COVERAGE_TARGET} PROPERTIES COMPILE_FLAGS "-coverage")
|
||||
@ -75,3 +75,7 @@ foreach(TEST_SOURCE ${TESTS})
|
||||
target_link_libraries(${COVERAGE_TARGET} ${Boost_LIBRARIES})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT CMAKE_VERSION VERSION_LESS 3.0)
|
||||
add_test(test_cmake_config_module ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake-config-module.cmake)
|
||||
endif()
|
||||
|
123
unittests/cmake-config-module.cmake
Normal file
123
unittests/cmake-config-module.cmake
Normal file
@ -0,0 +1,123 @@
|
||||
if(CMAKE_VERSION LESS 3.0)
|
||||
message(FATAL_ERROR "Cereal can't be installed with CMake < 3.0")
|
||||
endif()
|
||||
|
||||
get_filename_component(BINARY_DIR ${CMAKE_CURRENT_LIST_DIR}/../build ABSOLUTE)
|
||||
get_filename_component(INSTALL_DIR ${CMAKE_CURRENT_LIST_DIR}/../out ABSOLUTE)
|
||||
|
||||
# cmake configure step for cereal
|
||||
file(MAKE_DIRECTORY ${BINARY_DIR}/cereal)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DJUST_INSTALL_CEREAL=1
|
||||
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
|
||||
${CMAKE_CURRENT_LIST_DIR}/..
|
||||
WORKING_DIRECTORY ${BINARY_DIR}/cereal
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "Cereal cmake configure-step failed")
|
||||
endif()
|
||||
|
||||
# cmake install cereal
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
--build ${BINARY_DIR}/cereal
|
||||
--target install
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "Cereal cmake install-step failed")
|
||||
endif()
|
||||
|
||||
# create test project sources
|
||||
file(WRITE ${BINARY_DIR}/test_source/CMakeLists.txt "
|
||||
cmake_minimum_required(VERSION ${CMAKE_VERSION})
|
||||
project(cereal-test-config-module)
|
||||
if(NOT MSVC)
|
||||
if(CMAKE_VERSION VERSION_LESS 3.1)
|
||||
set(CMAKE_CXX_FLAGS \"-std=c++11 \${CMAKE_CXX_FLAGS}\")
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
endif()
|
||||
endif()
|
||||
find_package(cereal REQUIRED)
|
||||
add_executable(cereal-test-config-module main.cpp)
|
||||
target_link_libraries(cereal-test-config-module cereal)
|
||||
enable_testing()
|
||||
add_test(test-cereal-test-config-module cereal-test-config-module)
|
||||
")
|
||||
file(WRITE ${BINARY_DIR}/test_source/main.cpp "
|
||||
#include <cereal/archives/binary.hpp>
|
||||
#include <sstream>
|
||||
#include <cstdlib>
|
||||
struct MyData
|
||||
{
|
||||
int x = 0, y = 0, z = 0;
|
||||
void set() { x = 1; y = 2; z = 3; }
|
||||
bool is_set() const { return x == 1 && y == 2 && z == 3; }
|
||||
|
||||
// This method lets cereal know which data members to serialize
|
||||
template<class Archive>
|
||||
void serialize(Archive & archive)
|
||||
{
|
||||
archive( x, y, z ); // serialize things by passing them to the archive
|
||||
}
|
||||
};
|
||||
int main()
|
||||
{
|
||||
std::stringstream ss; // any stream can be used
|
||||
|
||||
{
|
||||
cereal::BinaryOutputArchive oarchive(ss); // Create an output archive
|
||||
|
||||
MyData m1, m2, m3;
|
||||
m1.set();
|
||||
m2.set();
|
||||
m3.set();
|
||||
oarchive(m1, m2, m3); // Write the data to the archive
|
||||
}
|
||||
|
||||
{
|
||||
cereal::BinaryInputArchive iarchive(ss); // Create an input archive
|
||||
|
||||
MyData m1, m2, m3;
|
||||
iarchive(m1, m2, m3); // Read the data from the archive
|
||||
|
||||
return (m1.is_set() && m2.is_set() && m3.is_set())
|
||||
? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
||||
}"
|
||||
)
|
||||
file(MAKE_DIRECTORY ${BINARY_DIR}/test)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DCMAKE_PREFIX_PATH=${INSTALL_DIR}
|
||||
${BINARY_DIR}/test_source
|
||||
WORKING_DIRECTORY ${BINARY_DIR}/test
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "Test cmake configure-step failed")
|
||||
endif()
|
||||
|
||||
# cmake install cereal
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
--build ${BINARY_DIR}/test
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "Test cmake build-step failed")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_CTEST_COMMAND}
|
||||
WORKING_DIRECTORY ${BINARY_DIR}/test
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
|
||||
if(result)
|
||||
message(FATAL_ERROR "Test run failed")
|
||||
endif()
|
Loading…
x
Reference in New Issue
Block a user