diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..96bd59f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.5) + +include(cmake/BoostVersion.cmake) +set(BOOST_PROJECT_NAME system) + +project(boost_${BOOST_PROJECT_NAME} VERSION ${BOOST_VERSION} LANGUAGES CXX) + +include(cmake/default.cmake) diff --git a/cmake/BoostVersion.cmake b/cmake/BoostVersion.cmake new file mode 100644 index 0000000..eaf4884 --- /dev/null +++ b/cmake/BoostVersion.cmake @@ -0,0 +1 @@ +set(BOOST_VERSION 1.65.0) \ No newline at end of file diff --git a/cmake/Jamfile b/cmake/Jamfile new file mode 100644 index 0000000..3fed797 --- /dev/null +++ b/cmake/Jamfile @@ -0,0 +1,4 @@ +# Update cmake files + +install BoostVersion_ : ../../../BoostVersion.cmake : . ; +install default_ : ../../../cmake/default.cmake : . ; diff --git a/cmake/default.cmake b/cmake/default.cmake new file mode 100644 index 0000000..04b5106 --- /dev/null +++ b/cmake/default.cmake @@ -0,0 +1,103 @@ +# +# Default CMakeLists.txt contents for a Boost library +# + +# sources.cmake defines ${PROJECT_NAME}_SOURCES +include(cmake/sources.cmake) + +if("${${PROJECT_NAME}_SOURCES}" STREQUAL "") + + # if no sources, this is a header-only library + add_library(boost_${BOOST_PROJECT_NAME} INTERFACE) + + # include directory + target_include_directories(${PROJECT_NAME} INTERFACE + $ + $ + ) + +else() + + # a library that requires building + add_library(${PROJECT_NAME} ${${PROJECT_NAME}_SOURCES}) + + # include directory + target_include_directories(${PROJECT_NAME} PUBLIC + $ + $ + ) + +endif() + +# add namespaced alias +add_library(boost::${BOOST_PROJECT_NAME} ALIAS ${PROJECT_NAME}) + +# set imported target name to the unqualified name, it will be namespaced +set_property(TARGET ${PROJECT_NAME} PROPERTY EXPORT_NAME ${BOOST_PROJECT_NAME}) + +# link to dependencies +include(CMakeFindDependencyMacro) + +function(boost_declare_dependency package type target) + + target_link_libraries(${PROJECT_NAME} ${type} ${target}) + + if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) + + find_dependency(${package} ${PROJECT_VERSION} EXACT) + + endif() + +endfunction() + +include(cmake/dependencies.cmake) + +# target installation +install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}-targets + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + INCLUDES DESTINATION include +) + +# header installation +install(DIRECTORY include/ DESTINATION include) + +# export target info to ${PROJECT_NAME}-targets.cmake, used by -config.cmake +install(EXPORT ${PROJECT_NAME}-targets + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE boost:: + DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION} +) + +# install -dependencies.cmake, used by -config.cmake + +install(FILES cmake/dependencies.cmake + DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION} + RENAME ${PROJECT_NAME}-dependencies.cmake +) + +# write ${PROJECT_NAME}-config.cmake +file(WRITE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" " +include(\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}-targets.cmake) +include(CMakeFindDependencyMacro) +function(boost_declare_dependency package type target) + find_dependency(\${package} ${PROJECT_VERSION} EXACT) +endfunction() +include(\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}-dependencies.cmake) +") + +include(CMakePackageConfigHelpers) + +# write ${PROJECT_NAME}-config-version.cmake +write_basic_package_version_file("${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion +) + +# install -config, -config-version +install(FILES + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" + DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION} +) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake new file mode 100644 index 0000000..69d442b --- /dev/null +++ b/cmake/dependencies.cmake @@ -0,0 +1,5 @@ +boost_declare_dependency(boost_assert PUBLIC boost::assert) +boost_declare_dependency(boost_config PUBLIC boost::config) +boost_declare_dependency(boost_core PUBLIC boost::core) +boost_declare_dependency(boost_predef PUBLIC boost::predef) +boost_declare_dependency(boost_winapi PUBLIC boost::winapi) diff --git a/cmake/sources.cmake b/cmake/sources.cmake new file mode 100644 index 0000000..4088aca --- /dev/null +++ b/cmake/sources.cmake @@ -0,0 +1,3 @@ +set(${PROJECT_NAME}_SOURCES + src/error_code.cpp +)