@@ -86,88 +86,80 @@ else()
8686 else ()
8787 message (CHECK_FAIL "no" )
8888
89- file (GLOB hints "/usr/lib/gcc/*/*/include" )
90- find_file (backtrace_header NAMES "backtrace.h" HINTS ${hints} )
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
98+ )
9199
92- if (backtrace_header STREQUAL "backtrace_header-NOTFOUND" )
93- message (STATUS "Could not find backtrace header file" )
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 )
94105 else ()
95- message (CHECK_START "Does backtrace work with explicit include" )
96- file (
97- WRITE "${_backtrace_src} "
98- "#include <boost/stacktrace.hpp>\n "
99- "#include <iostream>\n "
100- "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
101- )
102- try_compile (
103- _backtrace_explicit
104- "${CMAKE_CURRENT_BINARY_DIR} "
105- "${_backtrace_src} "
106- LINK_LIBRARIES ${CMAKE_DL_LIBS}
107- CMAKE_FLAGS
108- "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
109- COMPILE_DEFINITIONS BOOST_STACKTRACE_USE_BACKTRACE
110- OUTPUT_VARIABLE __OUTPUT
111- )
106+ message (CHECK_FAIL "no" )
107+ endif ()
112108
113- if (_backtrace_explicit)
114- message (CHECK_PASS "yes" )
115- list (APPEND _fpe_definitions BOOST_STACKTRACE_USE_BACKTRACE)
116- set (_backtrace_setup_complete TRUE )
117- else ()
118- message (CHECK_FAIL "no" )
109+ if (NOT _backtrace_setup_complete)
110+ file (GLOB hints "/usr/lib/gcc/*/*/include" )
111+ find_file (backtrace_header NAMES "backtrace.h" HINTS ${hints} )
119112
120- set (_backtrace_include_def
121- "BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE=\" ${backtrace_header} \" "
113+ if (backtrace_header STREQUAL "backtrace_header-NOTFOUND" )
114+ message (STATUS "Could not find backtrace header file" )
115+ else ()
116+ message (
117+ CHECK_START
118+ "Does backtrace work with explicit include"
122119 )
123-
124120 file (
125121 WRITE "${_backtrace_src} "
126122 "#include <boost/stacktrace.hpp>\n "
127- "int main() {}\n "
128- )
129-
130- message (
131- CHECK_START
132- "Does backtrace work with explicit include"
123+ "#include <iostream>\n "
124+ "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
133125 )
134126 try_compile (
135- _backtrace_explicit_header
127+ _backtrace_explicit
136128 "${CMAKE_CURRENT_BINARY_DIR} "
137129 "${_backtrace_src} "
138130 LINK_LIBRARIES ${CMAKE_DL_LIBS}
139131 CMAKE_FLAGS
140132 "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
141- COMPILE_DEFINITIONS
142- BOOST_STACKTRACE_USE_BACKTRACE
143- ${_backtrace_include_def}
133+ COMPILE_DEFINITIONS BOOST_STACKTRACE_USE_BACKTRACE
144134 OUTPUT_VARIABLE __OUTPUT
145135 )
146136
147- if (_backtrace_explicit_header )
137+ if (_backtrace_explicit )
148138 message (CHECK_PASS "yes" )
149139 list (
150140 APPEND _fpe_definitions
151141 BOOST_STACKTRACE_USE_BACKTRACE
152- ${_backtrace_include_def}
153142 )
154143 set (_backtrace_setup_complete TRUE )
155144 else ()
156145 message (CHECK_FAIL "no" )
157146
147+ set (_backtrace_include_def
148+ "BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE=\" ${backtrace_header} \" "
149+ )
150+
158151 file (
159152 WRITE "${_backtrace_src} "
160153 "#include <boost/stacktrace.hpp>\n "
161- "#include <iostream>\n "
162- "int main() { std::cout << boost::stacktrace::stacktrace(); }\n "
154+ "int main() {}\n "
163155 )
164156
165157 message (
166158 CHECK_START
167- "Does backtrace work without linker flag "
159+ "Does backtrace work with explicit include "
168160 )
169161 try_compile (
170- _backtrace_nolink
162+ _backtrace_explicit_header
171163 "${CMAKE_CURRENT_BINARY_DIR} "
172164 "${_backtrace_src} "
173165 LINK_LIBRARIES ${CMAKE_DL_LIBS}
@@ -179,7 +171,7 @@ else()
179171 OUTPUT_VARIABLE __OUTPUT
180172 )
181173
182- if (_backtrace_nolink )
174+ if (_backtrace_explicit_header )
183175 message (CHECK_PASS "yes" )
184176 list (
185177 APPEND _fpe_definitions
@@ -199,13 +191,13 @@ else()
199191
200192 message (
201193 CHECK_START
202- "Does backtrace work with linker flag"
194+ "Does backtrace work without linker flag"
203195 )
204196 try_compile (
205- _backtrace_link
197+ _backtrace_nolink
206198 "${CMAKE_CURRENT_BINARY_DIR} "
207199 "${_backtrace_src} "
208- LINK_LIBRARIES backtrace ${CMAKE_DL_LIBS}
200+ LINK_LIBRARIES ${CMAKE_DL_LIBS}
209201 CMAKE_FLAGS
210202 "-DINCLUDE_DIRECTORIES=${boost_stacktrace_include} "
211203 COMPILE_DEFINITIONS
@@ -214,21 +206,57 @@ else()
214206 OUTPUT_VARIABLE __OUTPUT
215207 )
216208
217- if (_backtrace_link )
209+ if (_backtrace_nolink )
218210 message (CHECK_PASS "yes" )
219211 list (
220212 APPEND _fpe_definitions
221213 BOOST_STACKTRACE_USE_BACKTRACE
222214 ${_backtrace_include_def}
223215 )
224- target_link_libraries (
225- ActsPluginFpeMonitoring
226- PUBLIC backtrace
227- )
228-
229216 set (_backtrace_setup_complete TRUE )
230217 else ()
231218 message (CHECK_FAIL "no" )
219+
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+ )
226+
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+ )
243+
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+ )
255+
256+ set (_backtrace_setup_complete TRUE )
257+ else ()
258+ message (CHECK_FAIL "no" )
259+ endif ()
232260 endif ()
233261 endif ()
234262 endif ()
@@ -237,10 +265,22 @@ else()
237265 endif ()
238266
239267 if (NOT _backtrace_setup_complete)
240- message (
241- STATUS
242- "libdl available but backtrace backend probe failed: use boost basic fallback"
243- )
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+ )
278+ else ()
279+ message (
280+ STATUS
281+ "libdl available but backtrace backend probe failed: use boost basic fallback"
282+ )
283+ endif ()
244284 endif ()
245285 endif ()
246286endif ()
0 commit comments