Skip to content

Commit

Permalink
Merge branch 'adasworks-develop' into develop
Browse files Browse the repository at this point in the history
see #239
  • Loading branch information
AzothAmmo committed Dec 28, 2015
2 parents 72d7a63 + f6d0308 commit f367de1
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,4 @@ out.xml
cereal_version.out
xml_ordering.out
build
/out/
32 changes: 31 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
8 changes: 6 additions & 2 deletions unittests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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})
Expand Down Expand Up @@ -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")
Expand All @@ -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 changes: 123 additions & 0 deletions unittests/cmake-config-module.cmake
Original file line number Diff line number Diff line change
@@ -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()

0 comments on commit f367de1

Please sign in to comment.