1- # Generated by `boostdep --cmake openmethod`
2- # Copyright 2020, 2021 Peter Dimov
3- # Distributed under the Boost Software License, Version 1.0.
4- # https://www.boost.org/LICENSE_1_0.txt
1+ #
2+ # Copyright (c) 2019 Vinnie Falco ([email protected] ) 3+ # Copyright (c) 2021 DMitry Arkhipov ([email protected] ) 4+ # Copyright (c) 2022 Alan de Freitas ([email protected] ) 5+ #
6+ # Distributed under the Boost Software License, Version 1.0. (See accompanying
7+ # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8+ #
9+ # Official repository: https://github.com/boostorg/openmethod
10+ #
511
6- cmake_minimum_required (VERSION 3.5...3.20)
12+ #-------------------------------------------------
13+ #
14+ # Project
15+ #
16+ #-------------------------------------------------
717
8- project (boost_openmethod VERSION " ${BOOST_SUPERPROJECT_VERSION} " LANGUAGES CXX )
18+ cmake_minimum_required ( VERSION 3.8...3.20 )
919
10- set (BOOST_OPENMETHOD_IS_ROOT OFF )
11- if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
12- set (BOOST_OPENMETHOD_IS_ROOT ON )
13- endif ()
20+ set (BOOST_OPENMETHOD_VERSION 1)
1421
15- if (BOOST_OPENMETHOD_IS_ROOT)
16- include (CTest)
17- endif ()
18- if (NOT BOOST_SUPERPROJECT_VERSION)
19- option (BOOST_OPENMETHOD_INSTALL "Install boost::openmethod files" ON )
20- option (BOOST_OPENMETHOD_BUILD_TESTS "Build boost::openmethod tests" ${BUILD_TESTING} )
21- option (BOOST_OPENMETHOD_BUILD_EXAMPLES "Build boost::openmethod examples" ${BOOST_OPENMETHOD_IS_ROOT} )
22- else ()
23- set (BOOST_OPENMETHOD_BUILD_TESTS ${BUILD_TESTING} )
24- endif ()
22+ if (BOOST_SUPERPROJECT_VERSION)
23+ set (BOOST_OPENMETHOD_VERSION ${BOOST_SUPERPROJECT_VERSION} )
24+ endif ()
2525
26- if (BOOST_OPENMETHOD_IS_ROOT)
27- #
28- # Building inside Boost tree, but as a separate project e.g. on Travis or
29- # other CI, or when producing Visual Studio Solution and Projects.
26+ project (boost_openmethod VERSION "${BOOST_OPENMETHOD_VERSION} " LANGUAGES CXX)
3027
31- set (BOOST_INCLUDE_LIBRARIES openmethod)
32- set (BOOST_EXCLUDE_LIBRARIES openmethod)
33- list (APPEND BOOST_INCLUDE_LIBRARIES test )
34- if (BOOST_OPENMETHOD_BUILD_EXAMPLES)
35- # list(APPEND BOOST_INCLUDE_LIBRARIES optional)
36- endif ()
28+ set (BOOST_OPENMETHOD_IS_ROOT OFF )
3729
38- set (CMAKE_FOLDER _deps )
39- add_subdirectory (../.. _deps/boost EXCLUDE_FROM_ALL )
40- unset (CMAKE_FOLDER )
41- endif ( )
30+ if ( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
31+ set (BOOST_OPENMETHOD_IS_ROOT ON )
32+ endif ( )
33+ set (__ignore__ ${CMAKE_C_COMPILER} )
4234
43- add_library (boost_openmethod INTERFACE )
44- add_library (Boost::openmethod ALIAS boost_openmethod)
35+ #-------------------------------------------------
36+ #
37+ # Options
38+ #
39+ #-------------------------------------------------
40+ option (BOOST_OPENMETHOD_BUILD_TESTS "Build boost::openmethod tests even if BUILD_TESTING is OFF" OFF )
41+ option (BOOST_OPENMETHOD_BUILD_EXAMPLES "Build boost::openmethod examples" ${BOOST_OPENMETHOD_IS_ROOT} )
42+ option (BOOST_OPENMETHOD_MRDOCS_BUILD "Build the target for MrDocs: see mrdocs.yml" OFF )
43+ option (BOOST_OPENMETHOD_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF )
4544
46- target_compile_features (boost_openmethod INTERFACE cxx_std_17)
45+ # Check if environment variable BOOST_SRC_DIR is set
46+ if (NOT DEFINED BOOST_SRC_DIR AND DEFINED ENV{BOOST_SRC_DIR})
47+ set (DEFAULT_BOOST_SRC_DIR "$ENV{BOOST_SRC_DIR} " )
48+ else ()
49+ set (DEFAULT_BOOST_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR} /../.." )
50+ endif ()
51+ set (BOOST_SRC_DIR ${DEFAULT_BOOST_SRC_DIR} CACHE STRING "Boost source dir to use when running CMake from this directory" )
4752
48- target_include_directories (boost_openmethod INTERFACE include )
53+ #-------------------------------------------------
54+ #
55+ # Boost modules
56+ #
57+ #-------------------------------------------------
58+ # The boost super-project requires one explicit dependency per-line.
4959
50- target_link_libraries (
51- boost_openmethod
52- INTERFACE
60+ set (
61+ BOOST_OPENMETHOD_DEPENDENCIES
5362 Boost::assert
5463 Boost::config
5564 Boost::core
@@ -58,11 +67,119 @@ target_link_libraries(
5867 Boost::preprocessor
5968)
6069
61- if (BOOST_OPENMETHOD_BUILD_TESTS)
62- enable_testing ()
63- add_subdirectory (test )
70+
71+ foreach (BOOST_OPENMETHOD_DEPENDENCY ${BOOST_OPENMETHOD_DEPENDENCIES} )
72+ if (BOOST_OPENMETHOD_DEPENDENCY MATCHES "^[ ]*Boost::([A-Za-z0-9_]+)[ ]*$" )
73+ list (APPEND BOOST_OPENMETHOD_INCLUDE_LIBRARIES ${CMAKE_MATCH_1} )
74+ endif ()
75+ endforeach ()
76+ # Conditional dependencies
77+ if (NOT BOOST_OPENMETHOD_MRDOCS_BUILD)
78+ if (BUILD_TESTING OR BOOST_OPENMETHOD_BUILD_TESTS)
79+ set (BOOST_OPENMETHOD_UNIT_TEST_LIBRARIES test )
80+ endif ()
81+ if (BOOST_OPENMETHOD_BUILD_EXAMPLES)
82+ #set(BOOST_OPENMETHOD_EXAMPLE_LIBRARIES json regex beast)
83+ endif ()
6484endif ()
85+ # Complete dependency list
86+ set (BOOST_INCLUDE_LIBRARIES ${BOOST_OPENMETHOD_INCLUDE_LIBRARIES} ${BOOST_OPENMETHOD_UNIT_TEST_LIBRARIES} ${BOOST_OPENMETHOD_EXAMPLE_LIBRARIES} )
87+ set (BOOST_EXCLUDE_LIBRARIES openmethod)
88+
89+ #-------------------------------------------------
90+ #
91+ # Add Boost Subdirectory
92+ #
93+ #-------------------------------------------------
94+ if (BOOST_OPENMETHOD_IS_ROOT)
95+ set (CMAKE_FOLDER Dependencies)
96+ # Find absolute BOOST_SRC_DIR
97+ if (NOT IS_ABSOLUTE ${BOOST_SRC_DIR} )
98+ set (BOOST_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR} /${BOOST_SRC_DIR} " )
99+ endif ()
100+
101+ # Validate BOOST_SRC_DIR
102+ set (BOOST_SRC_DIR_IS_VALID ON )
103+ foreach (F "CMakeLists.txt" "Jamroot" "boost-build.jam" "bootstrap.sh" "libs" )
104+ if (NOT EXISTS "${BOOST_SRC_DIR} /${F} " )
105+ message (STATUS "${BOOST_SRC_DIR} /${F} does not exist. Fallback to find_package." )
106+ set (BOOST_SRC_DIR_IS_VALID OFF )
107+ break ()
108+ endif ()
109+ endforeach ()
110+
111+ # Create Boost interface targets
112+ if (BOOST_SRC_DIR_IS_VALID)
113+ # From BOOST_SRC_DIR
114+ if (BUILD_SHARED_LIBS )
115+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
116+ endif ()
117+ set (BOOST_EXCLUDE_LIBRARIES ${PROJECT_NAME} )
118+ set (PREV_BUILD_TESTING ${BUILD_TESTING} )
119+ set (BUILD_TESTING OFF CACHE BOOL "Build the tests." FORCE)
120+ add_subdirectory (${BOOST_SRC_DIR} Dependencies/boost EXCLUDE_FROM_ALL )
121+ set (BUILD_TESTING ${PREV_BUILD_TESTING} CACHE BOOL "Build the tests." FORCE)
122+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${BOOST_SRC_DIR} /tools/cmake/include" )
123+ else ()
124+ # From Boost Package
125+ find_package (Boost REQUIRED COMPONENTS container)
126+ foreach (BOOST_INCLUDE_LIBRARY ${BOOST_INCLUDE_LIBRARIES} )
127+ if (NOT TARGET Boost::${BOOST_INCLUDE_LIBRARY} )
128+ add_library (Boost::${BOOST_INCLUDE_LIBRARY} ALIAS Boost::headers)
129+ endif ()
130+ endforeach ()
131+ endif ()
132+ unset (CMAKE_FOLDER)
133+ endif ()
65134
66- if (BOOST_OPENMETHOD_BUILD_EXAMPLES)
67- add_subdirectory (example)
135+ #-------------------------------------------------
136+ #
137+ # Library
138+ #
139+ #-------------------------------------------------
140+ file (GLOB_RECURSE BOOST_OPENMETHOD_HEADERS CONFIGURE_DEPENDS include /boost/*.hpp)
141+ set_property (GLOBAL PROPERTY USE_FOLDERS ON )
142+ source_group (TREE ${CMAKE_CURRENT_SOURCE_DIR} /include /boost PREFIX "" FILES ${BOOST_OPENMETHOD_HEADERS} )
143+ function (boost_openmethod_setup_properties target )
144+ target_link_libraries (${target} INTERFACE ${BOOST_OPENMETHOD_DEPENDENCIES} )
145+ endfunction ()
146+
147+ add_library (boost_openmethod INTERFACE ${BOOST_OPENMETHOD_HEADERS} )
148+ add_library (Boost::openmethod ALIAS boost_openmethod)
149+ target_include_directories (boost_openmethod INTERFACE "${PROJECT_SOURCE_DIR} /include" )
150+ boost_openmethod_setup_properties(boost_openmethod)
151+ target_compile_features (boost_openmethod INTERFACE cxx_std_17)
152+
153+ if (BOOST_OPENMETHOD_MRDOCS_BUILD)
154+ file (WRITE "${CMAKE_CURRENT_BINARY_DIR} /mrdocs.cpp" "#include <boost/openmethod.hpp>\n " )
155+ foreach (HEADER ${BOOST_OPENMETHOD_HEADERS} )
156+ string (REPLACE "${PROJECT_SOURCE_DIR} /include/" "" HEADER "${HEADER} " )
157+ file (APPEND "${CMAKE_CURRENT_BINARY_DIR} /mrdocs.cpp" "#include <${HEADER} >\n " )
158+ endforeach ()
159+ add_library (boost_openmethod_mrdocs "${CMAKE_CURRENT_BINARY_DIR} /mrdocs.cpp" )
160+ target_include_directories (boost_openmethod_mrdocs PUBLIC "${PROJECT_SOURCE_DIR} /include" )
161+ boost_openmethod_setup_properties(boost_openmethod_mrdocs)
162+ target_link_libraries (boost_openmethod_mrdocs PUBLIC Boost::openmethod)
163+ target_compile_definitions (boost_openmethod_mrdocs PUBLIC BOOST_OPENMETHOD_MRDOCS)
164+ return ()
68165endif ()
166+
167+ #-------------------------------------------------
168+ #
169+ # Tests
170+ #
171+ #-------------------------------------------------
172+ if (BUILD_TESTING OR BOOST_OPENMETHOD_BUILD_TESTS)
173+ enable_testing ()
174+ add_subdirectory (test )
175+ endif ()
176+
177+ #-------------------------------------------------
178+ #
179+ # Examples
180+ #
181+ #-------------------------------------------------
182+ if (BOOST_OPENMETHOD_BUILD_EXAMPLES)
183+ enable_testing ()
184+ add_subdirectory (doc /modules/ROOT/examples)
185+ endif ()
0 commit comments