Commit | Line | Data |
---|---|---|
91ba8aa1 MJ |
1 | #!/bin/bash |
2 | # | |
3 | # Copyright (C) 2021 Michael Jeanson <mjeanson@efficios.com> | |
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU General Public License as published by | |
7 | # the Free Software Foundation, either version 3 of the License, or | |
8 | # (at your option) any later version. | |
9 | # | |
10 | # This program is distributed in the hope that it will be useful, | |
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | # GNU General Public License for more details. | |
14 | # | |
15 | # You should have received a copy of the GNU General Public License | |
16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | ||
18 | set -exu | |
19 | ||
20 | failed_configure() { | |
21 | # Assume we are in the configured build directory | |
22 | echo "#################### BEGIN config.log ####################" | |
23 | cat config.log | |
24 | echo "#################### END config.log ####################" | |
25 | exit 1 | |
26 | } | |
27 | ||
28 | sum2junit() { | |
29 | local infile="$1" | |
30 | local outfile="$2" | |
31 | ||
bcd0bdf1 SM |
32 | cat <<EOF > sum2junit.py |
33 | import sys | |
34 | from datetime import datetime | |
35 | import re | |
36 | from xml.etree.ElementTree import ElementTree, Element, SubElement | |
37 | ||
38 | line_re = re.compile( | |
39 | r"^(PASS|XPASS|FAIL|XFAIL|KFAIL|DUPLICATE|UNTESTED|UNSUPPORTED|UNRESOLVED): (.*?\.exp): (.*)" | |
40 | ) | |
41 | ||
42 | pass_count = 0 | |
43 | fail_count = 0 | |
44 | skip_count = 0 | |
45 | error_count = 0 | |
46 | now = datetime.now().isoformat(timespec="seconds") | |
47 | ||
48 | testsuites = Element( | |
49 | "testsuites", | |
50 | { | |
51 | "xmlns": "https://raw.githubusercontent.com/windyroad/JUnit-Schema/master/JUnit.xsd" | |
52 | }, | |
53 | ) | |
54 | testsuite = SubElement( | |
55 | testsuites, | |
56 | "testsuite", | |
57 | { | |
58 | "name": "GDB", | |
59 | "package": "package", | |
60 | "id": "0", | |
61 | "time": "1", | |
62 | "timestamp": now, | |
63 | "hostname": "hostname", | |
64 | }, | |
65 | ) | |
66 | SubElement(testsuite, "properties") | |
67 | ||
68 | for line in sys.stdin: | |
69 | m = line_re.match(line) | |
70 | if not m: | |
71 | continue | |
72 | ||
73 | state, exp_filename, test_name = m.groups() | |
74 | ||
75 | testcase_name = "{} - {}".format(exp_filename, test_name) | |
76 | ||
77 | testcase = SubElement( | |
78 | testsuite, | |
79 | "testcase", | |
80 | {"name": testcase_name, "classname": "classname", "time": "0"}, | |
81 | ) | |
82 | ||
83 | if state in ("PASS", "XFAIL", "KFAIL"): | |
84 | pass_count += 1 | |
85 | elif state in ("FAIL", "XPASS"): | |
86 | fail_count += 1 | |
87 | SubElement(testcase, "failure", {"type": state}) | |
88 | elif state in ("UNRESOLVED", "DUPLICATE"): | |
89 | error_count += 1 | |
90 | SubElement(testcase, "error", {"type": state}) | |
91 | elif state in ("UNTESTED", "UNSUPPORTED"): | |
92 | skip_count += 1 | |
93 | SubElement(testcase, "skipped") | |
94 | else: | |
95 | assert False | |
96 | ||
97 | testsuite.attrib["tests"] = str(pass_count + fail_count + skip_count) | |
98 | testsuite.attrib["failures"] = str(fail_count) | |
99 | testsuite.attrib["skipped"] = str(skip_count) | |
100 | testsuite.attrib["errors"] = str(error_count) | |
101 | ||
102 | SubElement(testsuite, "system-out") | |
103 | SubElement(testsuite, "system-err") | |
104 | ||
105 | et = ElementTree(testsuites) | |
106 | et.write(sys.stdout, encoding="unicode") | |
107 | ||
108 | sys.exit(1 if fail_count > 0 or error_count > 0 else 0) | |
91ba8aa1 MJ |
109 | EOF |
110 | ||
bcd0bdf1 | 111 | python3 sum2junit.py < "$infile" > "$outfile" |
91ba8aa1 MJ |
112 | } |
113 | ||
114 | # Required variables | |
115 | WORKSPACE=${WORKSPACE:-} | |
116 | ||
117 | arch=${arch:-} | |
118 | conf=${conf:-} | |
119 | build=${build:-} | |
120 | cc=${cc:-} | |
121 | ||
122 | ||
123 | SRCDIR="$WORKSPACE/src/binutils-gdb" | |
124 | TMPDIR="$WORKSPACE/tmp" | |
125 | PREFIX="/build" | |
126 | ||
127 | # Create tmp directory | |
128 | rm -rf "$TMPDIR" | |
129 | mkdir -p "$TMPDIR" | |
130 | ||
131 | export TMPDIR | |
132 | export CFLAGS="-O2 -fsanitize=address" | |
133 | export CXXFLAGS="-O2 -fsanitize=address -D_GLIBCXX_DEBUG=1" | |
134 | export LDFLAGS="-fsanitize=address" | |
135 | ||
136 | # Set platform variables | |
137 | case "$arch" in | |
138 | *) | |
139 | export MAKE=make | |
140 | export TAR=tar | |
141 | export NPROC=nproc | |
142 | ;; | |
143 | esac | |
144 | ||
145 | # Print build env details | |
146 | print_os || true | |
147 | print_tooling || true | |
148 | ||
149 | # Enter the source directory | |
150 | cd "$SRCDIR" | |
151 | ||
152 | # Run bootstrap in the source directory prior to configure | |
153 | #./bootstrap | |
154 | ||
155 | # Get source version from configure script | |
156 | #eval "$(grep '^PACKAGE_VERSION=' ./configure)" | |
157 | #PACKAGE_VERSION=${PACKAGE_VERSION//\-pre*/} | |
158 | ||
159 | # Set configure options and environment variables for each build | |
160 | # configuration. | |
161 | CONF_OPTS=("--prefix=$PREFIX") | |
162 | ||
163 | case "$conf" in | |
164 | *) | |
165 | echo "Standard configuration" | |
166 | ||
167 | # Use system tools | |
168 | CONF_OPTS+=("--disable-binutils" "--disable-ld" "--disable-gold" "--disable-gas" "--disable-sim" "--disable-gprof") | |
169 | ||
170 | # Use system libs | |
171 | CONF_OPTS+=("--with-system-readline" "--with-system-zlib") | |
172 | ||
173 | # Enable optional features | |
174 | CONF_OPTS+=("--enable-targets=all" "--with-expat=yes" "--with-python=python3" "--with-guile=guile-2.2" "--enable-libctf") | |
175 | ||
176 | CONF_OPTS+=("--enable-build-warnings" "--enable-gdb-build-warnings" "--enable-unit-tests") | |
177 | ||
178 | ;; | |
179 | esac | |
180 | ||
181 | # Build type | |
182 | # oot : out-of-tree build | |
183 | # dist : build via make dist | |
184 | # oot-dist: build via make dist out-of-tree | |
185 | # * : normal tree build | |
186 | # | |
187 | # Make sure to move to the build directory and run configure | |
188 | # before continuing. | |
189 | case "$build" in | |
190 | *) | |
191 | echo "Out of tree build" | |
192 | ||
193 | # Create and enter a temporary build directory | |
194 | builddir=$(mktemp -d) | |
195 | cd "$builddir" | |
196 | ||
197 | "$SRCDIR/configure" "${CONF_OPTS[@]}" || failed_configure | |
198 | ;; | |
199 | esac | |
200 | ||
201 | # We are now inside a configured build directory | |
202 | ||
203 | # BUILD! | |
204 | $MAKE -j "$($NPROC)" V=1 MAKEINFO=/bin/true | |
205 | ||
206 | # Install in the workspace | |
207 | $MAKE install DESTDIR="$WORKSPACE" | |
208 | ||
bcd0bdf1 SM |
209 | # Run tests, don't fail now, we know that "make check" is going to fail, |
210 | # since some tests don't pass. | |
adb01414 SM |
211 | # |
212 | # Disable ASan leaks reporting, it might break some tests since it adds | |
213 | # unexpected output when GDB exits. | |
bcd0bdf1 | 214 | ASAN_OPTIONS=detect_leaks=0 $MAKE -C gdb --keep-going check -j "$($NPROC)" || true |
91ba8aa1 MJ |
215 | |
216 | # Copy the dejagnu test results for archiving before cleaning the build dir | |
217 | mkdir "${WORKSPACE}/results" | |
f5dbc8e5 | 218 | cp gdb/testsuite/gdb.log "${WORKSPACE}/results/" |
91ba8aa1 | 219 | cp gdb/testsuite/gdb.sum "${WORKSPACE}/results/" |
bcd0bdf1 | 220 | |
795db243 SM |
221 | # Filter out some known failures. |
222 | cat <<'EOF' > known-failures | |
223 | DUPLICATE: gdb.base/attach-pie-misread.exp: copy ld-2.27.so to ld-linux-x86-64.so.2 | |
224 | DUPLICATE: gdb.base/attach-pie-misread.exp: copy libc-2.27.so to libc.so.6 | |
225 | DUPLICATE: gdb.base/attach-pie-misread.exp: ldd attach-pie-misread | |
226 | DUPLICATE: gdb.base/attach-pie-misread.exp: ldd attach-pie-misread output contains libs | |
227 | DUPLICATE: gdb.base/call-signal-resume.exp: dummy stack frame number | |
228 | DUPLICATE: gdb.base/call-signal-resume.exp: return | |
229 | DUPLICATE: gdb.base/call-signal-resume.exp: set confirm off | |
230 | DUPLICATE: gdb.base/catch-signal.exp: 1: continue | |
231 | DUPLICATE: gdb.base/catch-signal.exp: SIGHUP: continue | |
232 | DUPLICATE: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue | |
233 | DUPLICATE: gdb.base/checkpoint.exp: restart 0 one | |
234 | DUPLICATE: gdb.base/checkpoint.exp: verify lines 5 two | |
235 | DUPLICATE: gdb.base/checkpoint-ns.exp: restart 0 one | |
236 | DUPLICATE: gdb.base/checkpoint-ns.exp: verify lines 5 two | |
237 | DUPLICATE: gdb.base/complete-empty.exp: empty-input-line: cmd complete "" | |
238 | DUPLICATE: gdb.base/corefile-buildid.exp: could not generate core file | |
239 | DUPLICATE: gdb.base/decl-before-def.exp: p a | |
240 | DUPLICATE: gdb.base/define-prefix.exp: define user command: ghi-prefix-cmd | |
241 | DUPLICATE: gdb.base/del.exp: info break after removing break on main | |
242 | DUPLICATE: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df | |
243 | DUPLICATE: gdb.base/dfp-test.exp: 1.23E45A is an invalid number | |
244 | DUPLICATE: gdb.base/dfp-test.exp: 1.23E is an invalid number | |
245 | DUPLICATE: gdb.base/exprs.exp: \$[0-9]* = red (setup) | |
246 | DUPLICATE: gdb.base/funcargs.exp: run to call2a | |
247 | DUPLICATE: gdb.base/interp.exp: interpreter-exec mi "-var-update *" | |
248 | DUPLICATE: gdb.base/miscexprs.exp: print value of !ibig.i[100] | |
249 | DUPLICATE: gdb.base/nested-subp2.exp: continue to the STOP marker | |
250 | DUPLICATE: gdb.base/nested-subp2.exp: print c | |
251 | DUPLICATE: gdb.base/nested-subp2.exp: print count | |
252 | DUPLICATE: gdb.base/pending.exp: disable other breakpoints | |
253 | DUPLICATE: gdb.base/pie-fork.exp: test_no_detach_on_fork: continue | |
254 | DUPLICATE: gdb.base/pointers.exp: pointer assignment | |
255 | DUPLICATE: gdb.base/pretty-array.exp: print nums | |
256 | DUPLICATE: gdb.base/ptype.exp: list charfoo | |
257 | DUPLICATE: gdb.base/ptype.exp: list intfoo | |
258 | DUPLICATE: gdb.base/ptype.exp: ptype the_highest | |
259 | DUPLICATE: gdb.base/readline.exp: Simple operate-and-get-next - final prompt | |
260 | DUPLICATE: gdb.base/realname-expand.exp: set basenames-may-differ on | |
261 | DUPLICATE: gdb.base/set-cwd.exp: test_cwd_reset: continue to breakpoint: break-here | |
262 | DUPLICATE: gdb.base/shlib-call.exp: continue until exit | |
263 | DUPLICATE: gdb.base/shlib-call.exp: print g | |
264 | DUPLICATE: gdb.base/shlib-call.exp: set print address off | |
265 | DUPLICATE: gdb.base/shlib-call.exp: set print sevenbit-strings | |
266 | DUPLICATE: gdb.base/shlib-call.exp: set width 0 | |
267 | DUPLICATE: gdb.base/solib-display.exp: IN: break 25 | |
268 | DUPLICATE: gdb.base/solib-display.exp: IN: continue | |
269 | DUPLICATE: gdb.base/solib-display.exp: NO: break 25 | |
270 | DUPLICATE: gdb.base/solib-display.exp: NO: continue | |
271 | DUPLICATE: gdb.base/solib-display.exp: SEP: break 25 | |
272 | DUPLICATE: gdb.base/solib-display.exp: SEP: continue | |
273 | DUPLICATE: gdb.base/stack-checking.exp: bt | |
274 | DUPLICATE: gdb.base/subst.exp: unset substitute-path from, no rule entered yet | |
275 | DUPLICATE: gdb.base/ui-redirect.exp: redirect while already logging: set logging redirect off | |
276 | DUPLICATE: gdb.base/unload.exp: continuing to unloaded libfile | |
277 | DUPLICATE: gdb.base/watchpoints.exp: watchpoint hit, first time | |
278 | DUPLICATE: gdb.mi/mi2-amd64-entry-value.exp: breakpoint at main | |
279 | DUPLICATE: gdb.mi/mi2-amd64-entry-value.exp: mi runto main | |
280 | DUPLICATE: gdb.mi/mi2-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr | |
281 | DUPLICATE: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr | |
282 | DUPLICATE: gdb.mi/mi2-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr | |
283 | DUPLICATE: gdb.mi/mi2-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr | |
284 | DUPLICATE: gdb.mi/mi-catch-cpp-exceptions.exp: breakpoint at main | |
285 | DUPLICATE: gdb.mi/mi-catch-cpp-exceptions.exp: mi runto main | |
286 | DUPLICATE: gdb.mi/mi-catch-load.exp: breakpoint at main | |
287 | DUPLICATE: gdb.mi/mi-catch-load.exp: mi runto main | |
288 | DUPLICATE: gdb.mi/mi-language.exp: set lang ada | |
289 | DUPLICATE: gdb.mi/mi-nonstop-exit.exp: breakpoint at main | |
290 | DUPLICATE: gdb.mi/mi-nonstop-exit.exp: mi runto main | |
291 | DUPLICATE: gdb.mi/mi-nonstop.exp: check varobj, w1, 1 | |
292 | DUPLICATE: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread | |
293 | DUPLICATE: gdb.mi/mi-nsthrexec.exp: breakpoint at main | |
294 | DUPLICATE: gdb.mi/mi-syn-frame.exp: finished exec continue | |
295 | DUPLICATE: gdb.mi/mi-syn-frame.exp: list stack frames | |
296 | DUPLICATE: gdb.mi/mi-var-child.exp: get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr | |
297 | DUPLICATE: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr | |
298 | DUPLICATE: gdb.mi/mi-var-child.exp: get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr | |
299 | DUPLICATE: gdb.mi/mi-var-child.exp: get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr | |
300 | DUPLICATE: gdb.mi/mi-var-cp.exp: create varobj for s | |
301 | DUPLICATE: gdb.mi/mi-var-rtti.exp: list children of ptr.Base.public (with RTTI) in use_rtti_with_multiple_inheritence | |
302 | DUPLICATE: gdb.mi/mi-var-rtti.exp: list children of ptr.public (without RTTI) in skip_type_update_when_not_use_rtti | |
303 | DUPLICATE: gdb.mi/mi-var-rtti.exp: list children of ptr (without RTTI) in skip_type_update_when_not_use_rtti | |
304 | DUPLICATE: gdb.mi/mi-var-rtti.exp: list children of s.ptr.public (without RTTI) in skip_type_update_when_not_use_rtti | |
305 | DUPLICATE: gdb.mi/mi-var-rtti.exp: list children of s.ptr (without RTTI) in skip_type_update_when_not_use_rtti | |
306 | DUPLICATE: gdb.mi/mi-watch.exp: mi-mode=main: wp-type=hw: watchpoint trigger | |
307 | DUPLICATE: gdb.mi/mi-watch.exp: mi-mode=main: wp-type=sw: watchpoint trigger | |
308 | DUPLICATE: gdb.mi/mi-watch.exp: mi-mode=separate: wp-type=hw: watchpoint trigger | |
309 | DUPLICATE: gdb.mi/mi-watch.exp: mi-mode=separate: wp-type=sw: watchpoint trigger | |
310 | FAIL: gdb.ada/interface.exp: print s | |
311 | FAIL: gdb.ada/iwide.exp: print d_access.all | |
312 | FAIL: gdb.ada/iwide.exp: print dp_access.all | |
313 | FAIL: gdb.ada/iwide.exp: print My_Drawable | |
314 | FAIL: gdb.ada/iwide.exp: print s_access.all | |
315 | FAIL: gdb.ada/iwide.exp: print sp_access.all | |
316 | FAIL: gdb.ada/mi_interface.exp: create ggg1 varobj (unexpected output) | |
317 | FAIL: gdb.ada/mi_interface.exp: list ggg1's children (unexpected output) | |
318 | FAIL: gdb.ada/tagged_access.exp: ptype c.all | |
319 | FAIL: gdb.ada/tagged_access.exp: ptype c.menu_name | |
320 | FAIL: gdb.ada/tagged.exp: print obj | |
321 | FAIL: gdb.ada/tagged.exp: ptype obj | |
322 | FAIL: gdb.base/bt-on-fatal-signal.exp: BUS: $saw_bt_end | |
323 | FAIL: gdb.base/bt-on-fatal-signal.exp: BUS: $saw_bt_start | |
324 | FAIL: gdb.base/bt-on-fatal-signal.exp: BUS: $saw_fatal_msg | |
325 | FAIL: gdb.base/bt-on-fatal-signal.exp: BUS: [expr $internal_error_msg_count == 2] | |
326 | FAIL: gdb.base/bt-on-fatal-signal.exp: FPE: $saw_bt_end | |
327 | FAIL: gdb.base/bt-on-fatal-signal.exp: FPE: $saw_bt_start | |
328 | FAIL: gdb.base/bt-on-fatal-signal.exp: FPE: $saw_fatal_msg | |
329 | FAIL: gdb.base/bt-on-fatal-signal.exp: FPE: [expr $internal_error_msg_count == 2] | |
330 | FAIL: gdb.base/bt-on-fatal-signal.exp: SEGV: $saw_bt_end | |
331 | FAIL: gdb.base/bt-on-fatal-signal.exp: SEGV: $saw_bt_start | |
332 | FAIL: gdb.base/bt-on-fatal-signal.exp: SEGV: $saw_fatal_msg | |
333 | FAIL: gdb.base/bt-on-fatal-signal.exp: SEGV: [expr $internal_error_msg_count == 2] | |
334 | FAIL: gdb.base/share-env-with-gdbserver.exp: strange named var: print result of getenv for 'asd =' | |
eb8ae82a | 335 | FAIL: gdb.base/step-over-syscall.exp: clone: displaced=off: single step over clone |
795db243 | 336 | FAIL: gdb.cp/no-dmgl-verbose.exp: setting breakpoint at 'f(std::string)' |
eb8ae82a | 337 | FAIL: gdb.dwarf2/dw2-inline-param.exp: running to *0x608 in runto |
795db243 SM |
338 | FAIL: gdb.gdb/python-interrupts.exp: run until breakpoint at captured_command_loop |
339 | FAIL: gdb.mi/mi-break.exp: mi-mode=main: test_explicit_breakpoints: -break-insert -c "foo == 3" --source basics.c --function main --label label (unexpected output) | |
340 | FAIL: gdb.mi/mi-break.exp: mi-mode=main: test_explicit_breakpoints: -break-insert --source basics.c --function foobar (unexpected output) | |
341 | FAIL: gdb.mi/mi-break.exp: mi-mode=main: test_explicit_breakpoints: -break-insert --source basics.c --function main --label foobar (unexpected output) | |
342 | FAIL: gdb.mi/mi-break.exp: mi-mode=main: test_explicit_breakpoints: -break-insert --source basics.c (unexpected output) | |
343 | FAIL: gdb.mi/mi-break.exp: mi-mode=separate: test_explicit_breakpoints: -break-insert -c "foo == 3" --source basics.c --function main --label label (unexpected output) | |
344 | FAIL: gdb.mi/mi-break.exp: mi-mode=separate: test_explicit_breakpoints: -break-insert --source basics.c --function foobar (unexpected output) | |
345 | FAIL: gdb.mi/mi-break.exp: mi-mode=separate: test_explicit_breakpoints: -break-insert --source basics.c --function main --label foobar (unexpected output) | |
346 | FAIL: gdb.mi/mi-break.exp: mi-mode=separate: test_explicit_breakpoints: -break-insert --source basics.c (unexpected output) | |
347 | FAIL: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: -break-enable count 1 2 (unexpected output) | |
348 | FAIL: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: -break-insert -f pendfunc1 (unexpected output) | |
eb8ae82a | 349 | FAIL: gdb.threads/detach-step-over.exp: breakpoint-condition-evaluation=host: target-non-stop=on: non-stop=on: displaced=off: iter 3: attach (GDB internal error) |
795db243 SM |
350 | UNRESOLVED: gdb.base/libsegfault.exp: gdb emits custom handler warning |
351 | UNRESOLVED: gdb.base/readline-ask.exp: bell for more message | |
352 | UNRESOLVED: gdb.base/symbol-without-target_section.exp: list -q main | |
353 | UNRESOLVED: gdb.dwarf2/dw2-icc-opaque.exp: ptype p_struct | |
eb8ae82a SM |
354 | UNRESOLVED: gdb.opencl/vec_comps.exp: OpenCL support not detected |
355 | UNRESOLVED: gdb.threads/attach-many-short-lived-threads.exp: iter 8: detach | |
795db243 SM |
356 | EOF |
357 | ||
358 | grep --invert-match --fixed-strings --file=known-failures "${WORKSPACE}/results/gdb.sum" > "${WORKSPACE}/results/gdb.filtered.sum" | |
359 | ||
bcd0bdf1 SM |
360 | # Convert results to JUnit format. |
361 | failed_tests=0 | |
795db243 | 362 | sum2junit "${WORKSPACE}/results/gdb.filtered.sum" "${WORKSPACE}/results/gdb.xml" || failed_tests=1 |
91ba8aa1 MJ |
363 | |
364 | # Clean the build directory | |
365 | $MAKE clean | |
366 | ||
367 | # Cleanup rpath in executables and shared libraries | |
368 | #find "$WORKSPACE/$PREFIX/bin" -type f -perm -0500 -exec chrpath --delete {} \; | |
369 | #find "$WORKSPACE/$PREFIX/lib" -name "*.so" -exec chrpath --delete {} \; | |
370 | ||
371 | # Remove libtool .la files | |
372 | find "$WORKSPACE/$PREFIX/lib" -name "*.la" -exec rm -f {} \; | |
373 | ||
374 | # Exit with failure if any of the tests failed | |
375 | exit $failed_tests | |
376 | ||
377 | # EOF |