Skip to content

Commit 924544f

Browse files
committed
go back to the original backtrace finding logic
1 parent d7fb26e commit 924544f

File tree

1 file changed

+136
-205
lines changed

1 file changed

+136
-205
lines changed

Plugins/FpeMonitoring/CMakeLists.txt

Lines changed: 136 additions & 205 deletions
Original file line numberDiff line numberDiff line change
@@ -31,263 +31,194 @@ target_link_libraries(ActsPluginFpeMonitoring PUBLIC Acts::Core)
3131

3232
acts_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
3838
if(ACTS_RUN_CLANG_TIDY)
39-
list(APPEND _fpe_definitions BOOST_STACKTRACE_USE_NOOP=1)
39+
list(APPEND _fpe_options "-DBOOST_STACKTRACE_USE_NOOP=1")
4040
else()
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()
286222
endif()
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

Comments
 (0)