2017-10-18 23:07:17 +02:00
cmake_minimum_required ( VERSION 3.1.0 FATAL_ERROR )
2019-07-20 18:07:57 +02:00
# set metadata
project ( reflective_rapidjson )
2020-01-31 19:27:15 +01:00
set ( META_PROJECT_NAME reflective_rapidjson )
2017-10-18 23:07:17 +02:00
set ( META_APP_NAME "Reflection for RapidJSON" )
set ( META_APP_AUTHOR "Martchus" )
2020-01-02 20:31:09 +01:00
set ( META_APP_URL "https://github.com/${META_APP_AUTHOR}/reflective-rapidjson" )
2017-10-18 23:07:17 +02:00
set ( META_APP_DESCRIPTION "Reflection for serializing/deserializing with RapidJSON" )
set ( META_APP_CATEGORIES "Utility;" )
set ( META_GUI_OPTIONAL false )
set ( META_VERSION_MAJOR 0 )
set ( META_VERSION_MINOR 0 )
2020-01-11 14:54:14 +01:00
set ( META_VERSION_PATCH 12 )
2017-10-18 23:07:17 +02:00
set ( META_APP_VERSION ${ META_VERSION_MAJOR } . ${ META_VERSION_MINOR } . ${ META_VERSION_PATCH } )
2018-06-26 00:07:59 +02:00
set ( META_CXX_STANDARD 17 )
2019-01-13 22:27:35 +01:00
set ( META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON )
2017-10-18 23:07:17 +02:00
2017-10-28 18:24:12 +02:00
# ensure testing is enabled at this level (and not only for particular sub directories)
enable_testing ( )
2017-10-18 23:07:17 +02:00
# allow bundling c++utilities
2017-10-28 18:24:12 +02:00
set ( BUNDLED_CPP_UTILITIES_PATH OFF CACHE PATH "specifies the (relative) path to the c++utilities sources for building it together with ${META_PROJECT_NAME}" )
2017-10-18 23:07:17 +02:00
if ( NOT BUNDLED_CPP_UTILITIES_PATH )
message ( STATUS "Using system c++utilities" )
else ( )
2017-11-17 21:21:34 +01:00
# check whether bundled c++utilities actually exists
if ( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${BUNDLED_CPP_UTILITIES_PATH}" )
# treat the specified path as relative to the current source dir
set ( c++utilities_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${BUNDLED_CPP_UTILITIES_PATH}" )
elseif ( IS_DIRECTORY "${BUNDLED_CPP_UTILITIES_PATH}" )
# treat the specified path as absolute
set ( c++utilities_DIR "${BUNDLED_CPP_UTILITIES_PATH}" )
else ( )
# consider the specified path invalid
set ( c++utilities_DIR "" )
endif ( )
if ( c++utilities_DIR )
add_subdirectory ( "${BUNDLED_CPP_UTILITIES_PATH}" c++utilities )
list ( APPEND CMAKE_MODULE_PATH "${CPP_UTILITIES_SOURCE_DIR}/cmake/modules" )
else ( )
message ( FATAL_ERROR "Specified directory for c++utilities sources \" ${ BUNDLED_CPP_UTILITIES_PATH } \" does not exist. " )
endif ( )
endif ( )
# find c++utilities
2019-03-13 19:10:29 +01:00
set ( CONFIGURATION_PACKAGE_SUFFIX "" CACHE STRING "sets the suffix for find_package() calls to packages configured via c++utilities" )
find_package ( c++utilities ${ CONFIGURATION_PACKAGE_SUFFIX } 5.0.0 REQUIRED )
2017-11-17 21:21:34 +01:00
2017-11-17 22:04:01 +01:00
# find RapidJSON
find_package ( RapidJSON )
if ( NOT RapidJSON_FOUND )
message ( FATAL_ERROR "Unable to find RapidJSON. Since this is the only supported reflection application at this time, it makes no sense to continue." )
endif ( )
2017-10-28 16:23:39 +02:00
# add header-only library containing JsonSerializable and helper for using RapidJSON
2017-10-18 23:07:17 +02:00
add_subdirectory ( lib )
2017-10-24 01:00:40 +02:00
# allow inclusion of CMake modules from that lib in other parts of the project
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/cmake/modules" "${CMAKE_MODULE_PATH}" )
2017-10-18 23:07:17 +02:00
# add code generator
2017-11-13 08:51:33 +01:00
option ( NO_GENERATOR "disables building the generator (useful for cross-compiling)" OFF )
if ( NOT NO_GENERATOR )
add_subdirectory ( generator )
endif ( )
2017-11-16 00:33:28 +01:00
# propagate binary and source directory of library to parent scope
get_directory_property ( HAS_PARENT PARENT_DIRECTORY )
if ( HAS_PARENT )
set ( REFLECTIVE_RAPIDJSON_BINARY_DIR "${REFLECTIVE_RAPIDJSON_BINARY_DIR}" PARENT_SCOPE )
set ( REFLECTIVE_RAPIDJSON_SOURCE_DIR "${REFLECTIVE_RAPIDJSON_SOURCE_DIR}" PARENT_SCOPE )
set ( reflective_rapidjson_DIR "${REFLECTIVE_RAPIDJSON_BINARY_DIR}" PARENT_SCOPE )
endif ( )