Skip to content

Commit d7fb26e

Browse files
committed
add one more fallback case
1 parent 34ffd56 commit d7fb26e

File tree

1 file changed

+100
-60
lines changed

1 file changed

+100
-60
lines changed

Plugins/FpeMonitoring/CMakeLists.txt

Lines changed: 100 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -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()
246286
endif()

0 commit comments

Comments
 (0)