@@ -31,263 +31,194 @@ target_link_libraries(ActsPluginFpeMonitoring PUBLIC Acts::Core)
3131
3232acts_compile_headers (PluginFpeMonitoring GLOB include /**/*.hpp )
3333
34- # FPE compile definitions
35- set (_fpe_definitions "" )
34+ # Fpe flags
35+ set (_fpe_options "" )
3636
3737# In case we're going to run clang-tidy, let's unconditionally turn off backtrace
3838if (ACTS_RUN_CLANG_TIDY)
39- list (APPEND _fpe_definitions BOOST_STACKTRACE_USE_NOOP=1 )
39+ list (APPEND _fpe_options "-DBOOST_STACKTRACE_USE_NOOP=1" )
4040else ()
41+ include (CheckCXXSourceCompiles )
42+
43+ find_library (dl_LIBRARY dl )
4144 find_package (Backtrace )
4245 find_program (addr2line_EXECUTABLE addr2line )
4346 if (APPLE )
44- list (APPEND _fpe_definitions _GNU_SOURCE)
45- elseif (CMAKE_DL_LIBS )
46- target_link_libraries (ActsPluginFpeMonitoring PUBLIC ${CMAKE_DL_LIBS} )
47-
48- set (_backtrace_setup_complete FALSE )
49- set (_backtrace_src
50- "${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/CMakeTmp/backtrace.cpp"
51- )
52- file (MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/CMakeTmp" )
53-
54- find_path (
55- boost_stacktrace_include
56- NAMES "boost/stacktrace.hpp"
57- REQUIRED
58- PATHS ${Boost_INCLUDE_DIRS}
59- )
60-
61- file (
62- WRITE "${_backtrace_src} "
63- "#include <boost/stacktrace.hpp>\n "
64- "#include <iostream>\n "
65- "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
66- )
67-
68- message (
69- CHECK_START
70- "Does backtrace work without libbacktrace linker flag"
71- )
72- try_compile (
73- _backtrace_nolink
74- "${CMAKE_CURRENT_BINARY_DIR} "
75- "${_backtrace_src} "
76- LINK_LIBRARIES ${CMAKE_DL_LIBS}
77- CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
78- COMPILE_DEFINITIONS BOOST_STACKTRACE_USE_BACKTRACE
79- OUTPUT_VARIABLE __OUTPUT
80- )
81-
82- if (_backtrace_nolink)
83- message (CHECK_PASS "yes" )
84- list (APPEND _fpe_definitions BOOST_STACKTRACE_USE_BACKTRACE)
85- set (_backtrace_setup_complete TRUE )
86- else ()
87- message (CHECK_FAIL "no" )
88-
89- message (CHECK_START "Does backtrace work with linker flag" )
90- try_compile (
91- _backtrace_link_default
92- "${CMAKE_CURRENT_BINARY_DIR} "
93- "${_backtrace_src} "
94- LINK_LIBRARIES backtrace ${CMAKE_DL_LIBS}
95- CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
96- COMPILE_DEFINITIONS BOOST_STACKTRACE_USE_BACKTRACE
97- OUTPUT_VARIABLE __OUTPUT
47+ list (APPEND _fpe_options -D_GNU_SOURCE)
48+ else ()
49+ if (dl_LIBRARY)
50+ target_link_libraries (ActsPluginFpeMonitoring PUBLIC ${dl_LIBRARY} )
51+
52+ set (_backtrace_setup_complete FALSE )
53+
54+ find_path (
55+ boost_stacktrace_include
56+ NAMES "boost/stacktrace.hpp"
57+ REQUIRED
58+ PATHS ${Boost_INCLUDE_DIRS}
9859 )
60+ if (Backtrace_FOUND)
61+ # check if we need to link against bracktrace or not
62+ set (backtrace_include "" )
63+
64+ file (
65+ WRITE
66+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp"
67+ "
68+ #include <boost/stacktrace.hpp>
69+ int main() {}
70+ "
71+ )
9972
100- if (_backtrace_link_default)
101- message (CHECK_PASS "yes" )
102- list (APPEND _fpe_definitions BOOST_STACKTRACE_USE_BACKTRACE)
103- target_link_libraries (ActsPluginFpeMonitoring PUBLIC backtrace )
104- set (_backtrace_setup_complete TRUE )
105- else ()
106- message (CHECK_FAIL "no" )
107- endif ()
73+ message (
74+ CHECK_START
75+ "Does backtrace work with the default include"
76+ )
10877
109- if (NOT _backtrace_setup_complete)
110- file (GLOB hints "/usr/lib/gcc/*/*/include" )
111- find_file (backtrace_header NAMES "backtrace.h" HINTS ${hints} )
78+ try_compile (
79+ _backtrace_default_header
80+ "${CMAKE_BINARY_DIR} "
81+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp"
82+ LINK_LIBRARIES ${dl_LIBRARY}
83+ CMAKE_FLAGS
84+ "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
85+ COMPILE_DEFINITIONS -DBOOST_STACKTRACE_USE_BACKTRACE
86+ OUTPUT_VARIABLE __OUTPUT
87+ )
11288
113- if (backtrace_header STREQUAL "backtrace_header-NOTFOUND" )
114- message (STATUS "Could not find backtrace header file " )
89+ if (_backtrace_default_header )
90+ message (CHECK_PASS "yes " )
11591 else ()
116- message (
117- CHECK_START
118- "Does backtrace work with explicit include"
119- )
120- file (
121- WRITE "${_backtrace_src} "
122- "#include <boost/stacktrace.hpp>\n "
123- "#include <iostream>\n "
124- "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
125- )
126- try_compile (
127- _backtrace_explicit
128- "${CMAKE_CURRENT_BINARY_DIR} "
129- "${_backtrace_src} "
130- LINK_LIBRARIES ${CMAKE_DL_LIBS}
131- CMAKE_FLAGS
132- "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
133- COMPILE_DEFINITIONS BOOST_STACKTRACE_USE_BACKTRACE
134- OUTPUT_VARIABLE __OUTPUT
92+ message (CHECK_FAIL "no" )
93+
94+ file (GLOB hints "/usr/lib/gcc/*/*/include" )
95+ find_file (
96+ backtrace_header
97+ NAMES "backtrace.h"
98+ HINTS ${hints}
13599 )
136100
137- if (_backtrace_explicit)
138- message (CHECK_PASS "yes" )
139- list (
140- APPEND _fpe_definitions
141- BOOST_STACKTRACE_USE_BACKTRACE
142- )
143- set (_backtrace_setup_complete TRUE )
101+ if (${backtrace_header} STREQUAL "backtrace_header-NOTFOUND" )
102+ message (STATUS "Could not find backtrace header file" )
144103 else ()
145- message (CHECK_FAIL "no" )
146-
147- set (_backtrace_include_def
148- "BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE=\" ${backtrace_header} \" "
104+ set (backtrace_include
105+ "-DBOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE=\" ${backtrace_header} \" "
149106 )
150107
151108 file (
152- WRITE "${_backtrace_src} "
153- "#include <boost/stacktrace.hpp>\n "
154- "int main() {}\n "
109+ WRITE
110+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp"
111+ "
112+ #include <boost/stacktrace.hpp>
113+ int main() {}
114+ "
155115 )
156116
157117 message (
158118 CHECK_START
159119 "Does backtrace work with explicit include"
160120 )
121+
161122 try_compile (
162123 _backtrace_explicit_header
163- "${CMAKE_CURRENT_BINARY_DIR } "
164- "${_backtrace_src} "
165- LINK_LIBRARIES ${CMAKE_DL_LIBS }
124+ "${CMAKE_BINARY_DIR } "
125+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp "
126+ LINK_LIBRARIES ${dl_LIBRARY }
166127 CMAKE_FLAGS
167128 "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
168129 COMPILE_DEFINITIONS
169- BOOST_STACKTRACE_USE_BACKTRACE
170- ${_backtrace_include_def }
130+ -DBOOST_STACKTRACE_USE_BACKTRACE
131+ ${backtrace_include }
171132 OUTPUT_VARIABLE __OUTPUT
172133 )
173134
174135 if (_backtrace_explicit_header)
175136 message (CHECK_PASS "yes" )
176- list (
177- APPEND _fpe_definitions
178- BOOST_STACKTRACE_USE_BACKTRACE
179- ${_backtrace_include_def}
180- )
181- set (_backtrace_setup_complete TRUE )
137+ list (APPEND _fpe_options "${backtrace_include} " )
182138 else ()
183139 message (CHECK_FAIL "no" )
140+ endif ()
141+ endif ()
142+ endif ()
184143
185- file (
186- WRITE "${_backtrace_src} "
187- "#include <boost/stacktrace.hpp>\n "
188- "#include <iostream>\n "
189- "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
190- )
144+ file (
145+ WRITE
146+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp"
147+ "#include <boost/stacktrace.hpp>\n "
148+ "#include <iostream>\n "
149+ "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
150+ )
191151
192- message (
193- CHECK_START
194- "Does backtrace work without linker flag"
195- )
196- try_compile (
197- _backtrace_nolink
198- "${CMAKE_CURRENT_BINARY_DIR} "
199- "${_backtrace_src} "
200- LINK_LIBRARIES ${CMAKE_DL_LIBS}
201- CMAKE_FLAGS
202- "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
203- COMPILE_DEFINITIONS
204- BOOST_STACKTRACE_USE_BACKTRACE
205- ${_backtrace_include_def}
206- OUTPUT_VARIABLE __OUTPUT
207- )
152+ message (CHECK_START "Does backtrace work without linker flag" )
153+ try_compile (
154+ _backtrace_nolink
155+ "${CMAKE_BINARY_DIR} "
156+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp"
157+ LINK_LIBRARIES ${dl_LIBRARY}
158+ CMAKE_FLAGS
159+ "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
160+ COMPILE_DEFINITIONS
161+ -DBOOST_STACKTRACE_USE_BACKTRACE
162+ ${backtrace_include}
163+ OUTPUT_VARIABLE __OUTPUT
164+ )
208165
209- if (_backtrace_nolink)
210- message (CHECK_PASS "yes" )
211- list (
212- APPEND _fpe_definitions
213- BOOST_STACKTRACE_USE_BACKTRACE
214- ${_backtrace_include_def}
215- )
216- set (_backtrace_setup_complete TRUE )
217- else ()
218- message (CHECK_FAIL "no" )
166+ if (_backtrace_nolink)
167+ message (CHECK_PASS "yes" )
168+ set (_backtrace_setup_complete TRUE )
169+ else ()
170+ message (CHECK_FAIL "no" )
219171
220- file (
221- WRITE "${_backtrace_src} "
222- "#include <boost/stacktrace.hpp>\n "
223- "#include <iostream>\n "
224- "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
225- )
172+ file (
173+ WRITE
174+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp"
175+ "#include <boost/stacktrace.hpp>\n "
176+ "#include <iostream>\n "
177+ "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
178+ )
226179
227- message (
228- CHECK_START
229- "Does backtrace work with linker flag"
230- )
231- try_compile (
232- _backtrace_link
233- "${CMAKE_CURRENT_BINARY_DIR} "
234- "${_backtrace_src} "
235- LINK_LIBRARIES backtrace ${CMAKE_DL_LIBS}
236- CMAKE_FLAGS
237- "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
238- COMPILE_DEFINITIONS
239- BOOST_STACKTRACE_USE_BACKTRACE
240- ${_backtrace_include_def}
241- OUTPUT_VARIABLE __OUTPUT
242- )
180+ message (CHECK_START "Does backtrace work with linker flag" )
181+ try_compile (
182+ _backtrace_link
183+ "${CMAKE_BINARY_DIR} "
184+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/backtrace.cpp"
185+ LINK_LIBRARIES backtrace ${dl_LIBRARY}
186+ CMAKE_FLAGS
187+ "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
188+ COMPILE_DEFINITIONS
189+ -DBOOST_STACKTRACE_USE_BACKTRACE
190+ ${backtrace_include}
191+ OUTPUT_VARIABLE __OUTPUT
192+ )
243193
244- if (_backtrace_link)
245- message (CHECK_PASS "yes" )
246- list (
247- APPEND _fpe_definitions
248- BOOST_STACKTRACE_USE_BACKTRACE
249- ${_backtrace_include_def}
250- )
251- target_link_libraries (
252- ActsPluginFpeMonitoring
253- PUBLIC backtrace
254- )
194+ if (_backtrace_link)
195+ message (CHECK_PASS "yes" )
196+ list (
197+ APPEND _fpe_options
198+ -DBOOST_STACKTRACE_USE_BACKTRACE
199+ )
200+ target_link_libraries (
201+ ActsPluginFpeMonitoring
202+ PUBLIC backtrace
203+ )
255204
256- set (_backtrace_setup_complete TRUE )
257- else ()
258- message (CHECK_FAIL "no" )
259- endif ()
260- endif ()
261- endif ()
205+ set (_backtrace_setup_complete TRUE )
206+ else ()
207+ message (CHECK_FAIL "no" )
262208 endif ()
263209 endif ()
264210 endif ()
265211 endif ()
266212
267213 if (NOT _backtrace_setup_complete)
268- if (addr2line_EXECUTABLE)
269- message (
270- STATUS
271- "Backtrace backend probe failed; using boost::stacktrace addr2line backend"
272- )
273- list (
274- APPEND _fpe_definitions
275- BOOST_STACKTRACE_USE_ADDR2LINE
276- "BOOST_STACKTRACE_ADDR2LINE_LOCATION=\" ${addr2line_EXECUTABLE} \" "
277- )
214+ if (NOT ${dl_LIBRARY} STREQUAL "dl_LIBRARY-NOTFOUND" )
215+ message (STATUS "ld lib available: use boost basic fallback" )
278216 else ()
279- message (
280- STATUS
281- "libdl available but backtrace backend probe failed: use boost basic fallback"
282- )
217+ message (STATUS "Unable to set up stacktraces: use noop" )
218+ list (APPEND _fpe_options -DBOOST_STACKTRACE_USE_NOOP)
283219 endif ()
284220 endif ()
285221 endif ()
286222endif ()
287223
288- if (_fpe_definitions)
289- target_compile_definitions (
290- ActsPluginFpeMonitoring
291- PUBLIC ${_fpe_definitions}
292- )
293- endif ()
224+ target_compile_options (ActsPluginFpeMonitoring PUBLIC "${_fpe_options} " )
0 commit comments