mirror of
https://github.com/RPCS3/cereal.git
synced 2024-12-04 17:26:44 +00:00
cd7346ff3d
- add install target to install config-module for which creates an INTERFACE library - add unittest to test config-module - add option to skip tests and install only - fix MSVC compatibility problem in CMakeLists.txt
124 lines
3.2 KiB
CMake
124 lines
3.2 KiB
CMake
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()
|