1 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2 // -*- Mode: C++ -*-
3 //
4 // Copyright (C) 2016-2023 Red Hat, Inc.
5 //
6 // Author: Dodji Seketeli
7
8 /// @file
9 ///
10 /// This program runs abidiff between input files and checks that
11 /// the exit code of the abidiff is the one we expect.
12 ///
13 /// The set of input files and reference reports to consider should be
14 /// present in the source distribution.
15
16 /// This is an aggregate that specifies where a test shall get its
17 /// input from and where it shall write its ouput to.
18
19 #include <sys/wait.h>
20 #include <cstring>
21 #include <string>
22 #include <vector>
23 #include <fstream>
24 #include <iostream>
25 #include <cstdlib>
26 #include "abg-tools-utils.h"
27 #include "test-utils.h"
28
29 using abigail::tools_utils::abidiff_status;
30 using abigail::tests::emit_test_status_and_update_counters;
31 using abigail::tests::emit_test_summary;
32
33 struct InOutSpec
34 {
35 const char* in_elfv0_path;
36 const char* in_elfv1_path;
37 const char* in_suppr_path;
38 const char* in_elfv0_headers_dirs;
39 const char* in_elfv1_headers_dirs;
40 const char* in_elfv0_debug_dir;
41 const char* in_elfv1_debug_dir;
42 const char* in_elfv0_added_bins_dir;
43 const char* in_elfv1_added_bins_dir;
44 const char* abidiff_options;
45 abidiff_status status;
46 const char* in_report_path;
47 const char* out_report_path;
48 };// end struct InOutSpec;
49
50 InOutSpec in_out_specs[] =
51 {
52 {
53 "data/test-abidiff-exit/test1-voffset-change-v0.o",
54 "data/test-abidiff-exit/test1-voffset-change-v1.o",
55 "",
56 "",
57 "",
58 "",
59 "",
60 "",
61 "",
62 "--no-default-suppression --no-show-locs",
63 abigail::tools_utils::ABIDIFF_ABI_CHANGE
64 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
65 "data/test-abidiff-exit/test1-voffset-change-report0.txt",
66 "output/test-abidiff-exit/test1-voffset-change-report0.txt"
67 },
68 {
69 "data/test-abidiff-exit/test1-voffset-change-v0.o",
70 "data/test-abidiff-exit/test1-voffset-change-v1.o",
71 "data/test-abidiff-exit/test1-voffset-change.abignore",
72 "",
73 "",
74 "",
75 "",
76 "",
77 "",
78 "--no-default-suppression --no-show-locs",
79 abigail::tools_utils::ABIDIFF_OK,
80 "data/test-abidiff-exit/test1-voffset-change-report1.txt",
81 "output/test-abidiff-exit/test1-voffset-change-report1.txt"
82 },
83 {
84 "data/test-abidiff-exit/test2-filtered-removed-fns-v0.o",
85 "data/test-abidiff-exit/test2-filtered-removed-fns-v1.o",
86 "",
87 "",
88 "",
89 "",
90 "",
91 "",
92 "",
93 "--no-default-suppression --no-show-locs",
94 abigail::tools_utils::ABIDIFF_ABI_CHANGE
95 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
96 "data/test-abidiff-exit/test2-filtered-removed-fns-report0.txt",
97 "output/test-abidiff-exit/test2-filtered-removed-fns-report0.txt"
98 },
99 {
100 "data/test-abidiff-exit/test2-filtered-removed-fns-v0.o",
101 "data/test-abidiff-exit/test2-filtered-removed-fns-v1.o",
102 "data/test-abidiff-exit/test2-filtered-removed-fns.abignore",
103 "",
104 "",
105 "",
106 "",
107 "",
108 "",
109 "--no-default-suppression --no-show-locs",
110 abigail::tools_utils::ABIDIFF_OK,
111 "data/test-abidiff-exit/test2-filtered-removed-fns-report1.txt",
112 "output/test-abidiff-exit/test2-filtered-removed-fns-report1.txt"
113 },
114 {
115 "data/test-abidiff-exit/test-loc-v0.bi",
116 "data/test-abidiff-exit/test-loc-v1.bi",
117 "",
118 "",
119 "",
120 "",
121 "",
122 "",
123 "",
124 "",
125 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
126 "data/test-abidiff-exit/test-loc-with-locs-report.txt",
127 "output/test-abidiff-exit/test-loc-with-locs-report.txt"
128 },
129 {
130 "data/test-abidiff-exit/test-loc-v0.bi",
131 "data/test-abidiff-exit/test-loc-v1.bi",
132 "",
133 "",
134 "",
135 "",
136 "",
137 "",
138 "",
139 "--no-show-locs",
140 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
141 "data/test-abidiff-exit/test-loc-without-locs-report.txt",
142 "output/test-abidiff-exit/test-loc-without-locs-report.txt"
143 },
144 {
145 "data/test-abidiff-exit/test-no-stray-comma-v0.o",
146 "data/test-abidiff-exit/test-no-stray-comma-v1.o",
147 "",
148 "",
149 "",
150 "",
151 "",
152 "",
153 "",
154 "--leaf-changes-only",
155 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
156 "data/test-abidiff-exit/test-no-stray-comma-report.txt",
157 "output/test-abidiff-exit/test-no-stray-comma-report.txt"
158 },
159 {
160 "data/test-abidiff-exit/test-leaf-stats-v0.o",
161 "data/test-abidiff-exit/test-leaf-stats-v1.o",
162 "",
163 "",
164 "",
165 "",
166 "",
167 "",
168 "",
169 "--no-show-locs --leaf-changes-only",
170 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
171 "data/test-abidiff-exit/test-leaf-stats-report.txt",
172 "output/test-abidiff-exit/test-leaf-stats-report.txt"
173 },
174 {
175 "data/test-abidiff-exit/test-leaf-more-v0.o",
176 "data/test-abidiff-exit/test-leaf-more-v1.o",
177 "",
178 "",
179 "",
180 "",
181 "",
182 "",
183 "",
184 "--no-show-locs --leaf-changes-only",
185 abigail::tools_utils::ABIDIFF_ABI_CHANGE
186 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
187 "data/test-abidiff-exit/test-leaf-more-report.txt",
188 "output/test-abidiff-exit/test-leaf-more-report.txt"
189 },
190 {
191 "data/test-abidiff-exit/test-leaf-fun-type-v0.o",
192 "data/test-abidiff-exit/test-leaf-fun-type-v1.o",
193 "",
194 "",
195 "",
196 "",
197 "",
198 "",
199 "",
200 "--no-show-locs --leaf-changes-only",
201 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
202 "data/test-abidiff-exit/test-leaf-fun-type-report.txt",
203 "output/test-abidiff-exit/test-leaf-fun-type-report.txt"
204 },
205 {
206 "data/test-abidiff-exit/test-leaf-redundant-v0.o",
207 "data/test-abidiff-exit/test-leaf-redundant-v1.o",
208 "",
209 "",
210 "",
211 "",
212 "",
213 "",
214 "",
215 "--leaf-changes-only",
216 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
217 "data/test-abidiff-exit/test-leaf-redundant-report.txt",
218 "output/test-abidiff-exit/test-leaf-redundant-report.txt"
219 },
220 {
221 "data/test-abidiff-exit/test-leaf-peeling-v0.o",
222 "data/test-abidiff-exit/test-leaf-peeling-v1.o",
223 "",
224 "",
225 "",
226 "",
227 "",
228 "",
229 "",
230 "--leaf-changes-only",
231 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
232 "data/test-abidiff-exit/test-leaf-peeling-report.txt",
233 "output/test-abidiff-exit/test-leaf-peeling-report.txt"
234 },
235 {
236 "data/test-abidiff-exit/test-leaf-cxx-members-v0.o",
237 "data/test-abidiff-exit/test-leaf-cxx-members-v1.o",
238 "",
239 "",
240 "",
241 "",
242 "",
243 "",
244 "",
245 "--leaf-changes-only",
246 abigail::tools_utils::ABIDIFF_ABI_CHANGE
247 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
248 "data/test-abidiff-exit/test-leaf-cxx-members-report.txt",
249 "output/test-abidiff-exit/test-leaf-cxx-members-report.txt"
250 },
251 {
252 "data/test-abidiff-exit/test-member-size-v0.o",
253 "data/test-abidiff-exit/test-member-size-v1.o",
254 "",
255 "",
256 "",
257 "",
258 "",
259 "",
260 "",
261 "",
262 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
263 "data/test-abidiff-exit/test-member-size-report0.txt",
264 "output/test-abidiff-exit/test-member-size-report0.txt"
265 },
266 {
267 "data/test-abidiff-exit/test-member-size-v0.o",
268 "data/test-abidiff-exit/test-member-size-v1.o",
269 "",
270 "",
271 "",
272 "",
273 "",
274 "",
275 "",
276 "--leaf-changes-only",
277 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
278 "data/test-abidiff-exit/test-member-size-report1.txt",
279 "output/test-abidiff-exit/test-member-size-report1.txt"
280 },
281 {
282 "data/test-abidiff-exit/test-decl-struct-v0.o",
283 "data/test-abidiff-exit/test-decl-struct-v1.o",
284 "",
285 "",
286 "",
287 "",
288 "",
289 "",
290 "",
291 "--harmless",
292 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
293 "data/test-abidiff-exit/test-decl-struct-report.txt",
294 "output/test-abidiff-exit/test-decl-struct-report.txt"
295 },
296 {
297 "data/test-abidiff-exit/test-fun-param-v0.abi",
298 "data/test-abidiff-exit/test-fun-param-v1.abi",
299 "",
300 "",
301 "",
302 "",
303 "",
304 "",
305 "",
306 "",
307 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
308 "data/test-abidiff-exit/test-fun-param-report.txt",
309 "output/test-abidiff-exit/test-fun-param-report.txt"
310 },
311 {
312 "data/test-abidiff-exit/test-decl-enum-v0.o",
313 "data/test-abidiff-exit/test-decl-enum-v1.o",
314 "",
315 "",
316 "",
317 "",
318 "",
319 "",
320 "",
321 "--harmless",
322 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
323 "data/test-abidiff-exit/test-decl-enum-report.txt",
324 "output/test-abidiff-exit/test-decl-enum-report.txt"
325 },
326 {
327 "data/test-abidiff-exit/test-decl-enum-v0.o",
328 "data/test-abidiff-exit/test-decl-enum-v1.o",
329 "",
330 "",
331 "",
332 "",
333 "",
334 "",
335 "",
336 "",
337 abigail::tools_utils::ABIDIFF_OK,
338 "data/test-abidiff-exit/test-decl-enum-report-2.txt",
339 "output/test-abidiff-exit/test-decl-enum-report-2.txt"
340 },
341 {
342 "data/test-abidiff-exit/test-decl-enum-v0.o",
343 "data/test-abidiff-exit/test-decl-enum-v1.o",
344 "",
345 "",
346 "",
347 "",
348 "",
349 "",
350 "",
351 "--leaf-changes-only",
352 abigail::tools_utils::ABIDIFF_OK,
353 "data/test-abidiff-exit/test-decl-enum-report-3.txt",
354 "output/test-abidiff-exit/test-decl-enum-report-3.txt"
355 },
356 {
357 "data/test-abidiff-exit/test-net-change-v0.o",
358 "data/test-abidiff-exit/test-net-change-v1.o",
359 "",
360 "",
361 "",
362 "",
363 "",
364 "",
365 "",
366 "--no-default-suppression --no-show-locs",
367 abigail::tools_utils::ABIDIFF_ABI_CHANGE
368 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
369 "data/test-abidiff-exit/test-net-change-report0.txt",
370 "output/test-abidiff-exit/test-net-change-report0.txt"
371 },
372 {
373 "data/test-abidiff-exit/test-net-change-v0.o",
374 "data/test-abidiff-exit/test-net-change-v1.o",
375 "data/test-abidiff-exit/test-net-change.abignore",
376 "",
377 "",
378 "",
379 "",
380 "",
381 "",
382 "--no-default-suppression --no-show-locs",
383 abigail::tools_utils::ABIDIFF_OK,
384 "data/test-abidiff-exit/test-net-change-report1.txt",
385 "output/test-abidiff-exit/test-net-change-report1.txt"
386 },
387 {
388 "data/test-abidiff-exit/test-net-change-v0.o",
389 "data/test-abidiff-exit/test-net-change-v1.o",
390 "",
391 "",
392 "",
393 "",
394 "",
395 "",
396 "",
397 "--no-default-suppression --no-show-locs --leaf-changes-only",
398 abigail::tools_utils::ABIDIFF_ABI_CHANGE
399 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
400 "data/test-abidiff-exit/test-net-change-report2.txt",
401 "output/test-abidiff-exit/test-net-change-report2.txt"
402 },
403 {
404 "data/test-abidiff-exit/test-net-change-v0.o",
405 "data/test-abidiff-exit/test-net-change-v1.o",
406 "data/test-abidiff-exit/test-net-change.abignore",
407 "",
408 "",
409 "",
410 "",
411 "",
412 "",
413 "--no-default-suppression --no-show-locs --leaf-changes-only",
414 abigail::tools_utils::ABIDIFF_OK,
415 "data/test-abidiff-exit/test-net-change-report3.txt",
416 "output/test-abidiff-exit/test-net-change-report3.txt"
417 },
418 {
419 "data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v0.o",
420 "data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v1.o",
421 "",
422 "data/test-abidiff-exit/test-headers-dirs/headers-a",
423 "data/test-abidiff-exit/test-headers-dirs/headers-a",
424 "",
425 "",
426 "",
427 "",
428 "--no-default-suppression",
429 abigail::tools_utils::ABIDIFF_OK,
430 "data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-1.txt",
431 "output/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-1.txt"
432 },
433 {
434 "data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v0.o",
435 "data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v1.o",
436 "",
437 "data/test-abidiff-exit/test-headers-dirs/headers-a, "
438 "data/test-abidiff-exit/test-headers-dirs/headers-b",
439 "data/test-abidiff-exit/test-headers-dirs/headers-a, "
440 "data/test-abidiff-exit/test-headers-dirs/headers-b",
441 "",
442 "",
443 "",
444 "",
445 "--no-default-suppression",
446 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
447 "data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-2.txt",
448 "output/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-2.txt"
449 },
450 {
451 "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
452 "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
453 "",
454 "",
455 "",
456 "",
457 "",
458 "",
459 "",
460 "",
461 abigail::tools_utils::ABIDIFF_OK,
462 "data/test-abidiff-exit/qualifier-typedef-array-report-0.txt",
463 "output/test-abidiff-exit/qualifier-typedef-array-report-0.txt"
464 },
465 {
466 "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
467 "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
468 "",
469 "",
470 "",
471 "",
472 "",
473 "",
474 "",
475 "--harmless",
476 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
477 "data/test-abidiff-exit/qualifier-typedef-array-report-1.txt",
478 "output/test-abidiff-exit/qualifier-typedef-array-report-1.txt"
479 },
480 {
481 "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
482 "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
483 "",
484 "",
485 "",
486 "",
487 "",
488 "",
489 "",
490 "--leaf-changes-only",
491 abigail::tools_utils::ABIDIFF_OK,
492 "data/test-abidiff-exit/qualifier-typedef-array-report-2.txt",
493 "output/test-abidiff-exit/qualifier-typedef-array-report-2.txt"
494 },
495 {
496 "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
497 "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
498 "",
499 "",
500 "",
501 "",
502 "",
503 "",
504 "",
505 "--harmless --leaf-changes-only",
506 abigail::tools_utils::ABIDIFF_OK,
507 "data/test-abidiff-exit/qualifier-typedef-array-report-3.txt",
508 "output/test-abidiff-exit/qualifier-typedef-array-report-3.txt"
509 },
510 {
511 "data/test-abidiff-exit/test-non-leaf-array-v0.o",
512 "data/test-abidiff-exit/test-non-leaf-array-v1.o",
513 "",
514 "",
515 "",
516 "",
517 "",
518 "",
519 "",
520 "--leaf-changes-only",
521 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
522 "data/test-abidiff-exit/test-non-leaf-array-report.txt",
523 "output/test-abidiff-exit/test-non-leaf-array-report.txt"
524 },
525 {
526 "data/test-abidiff-exit/test-crc-v0.abi",
527 "data/test-abidiff-exit/test-crc-v1.abi",
528 "",
529 "",
530 "",
531 "",
532 "",
533 "",
534 "",
535 "",
536 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
537 "data/test-abidiff-exit/test-crc-report.txt",
538 "output/test-abidiff-exit/test-crc-report.txt"
539 },
540 {
541 "data/test-abidiff-exit/test-missing-alias.abi",
542 "data/test-abidiff-exit/test-missing-alias.abi",
543 "data/test-abidiff-exit/test-missing-alias.suppr",
544 "",
545 "",
546 "",
547 "",
548 "",
549 "",
550 "",
551 abigail::tools_utils::ABIDIFF_OK,
552 "data/test-abidiff-exit/test-missing-alias-report.txt",
553 "output/test-abidiff-exit/test-missing-alias-report.txt"
554 },
555 {
556 "data/test-abidiff-exit/test-PR28316-v0.o",
557 "data/test-abidiff-exit/test-PR28316-v1.o",
558 "",
559 "",
560 "",
561 "",
562 "",
563 "",
564 "",
565 "--no-default-suppression --harmless",
566 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
567 "data/test-abidiff-exit/test-PR28316-report.txt",
568 "output/test-abidiff-exit/test-PR28316-report.txt"
569 },
570 {
571 "data/test-abidiff-exit/test-PR29144-v0.o",
572 "data/test-abidiff-exit/test-PR29144-v1.o",
573 "",
574 "",
575 "",
576 "",
577 "",
578 "",
579 "",
580 "--no-default-suppression --harmless",
581 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
582 "data/test-abidiff-exit/test-PR29144-report.txt",
583 "output/test-abidiff-exit/test-PR29144-report.txt"
584 },
585 {
586 "data/test-abidiff-exit/test-PR29144-v0.o",
587 "data/test-abidiff-exit/test-PR29144-v1.o",
588 "",
589 "",
590 "",
591 "",
592 "",
593 "",
594 "",
595 "--leaf-changes-only --no-default-suppression --harmless",
596 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
597 "data/test-abidiff-exit/test-PR29144-report-2.txt",
598 "output/test-abidiff-exit/test-PR29144-report-2.txt"
599 },
600 {
601 "data/test-abidiff-exit/ld-2.28-210.so",
602 "data/test-abidiff-exit/ld-2.28-211.so",
603 "",
604 "",
605 "",
606 "",
607 "",
608 "",
609 "",
610 "--no-default-suppression",
611 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
612 "data/test-abidiff-exit/test-ld-2.28-210.so--ld-2.28-211.so.txt",
613 "output/test-abidiff-exit/test-ld-2.28-210.so--ld-2.28-211.so.txt"
614 },
615 {
616 "data/test-abidiff-exit/test-rhbz2114909-v0.o",
617 "data/test-abidiff-exit/test-rhbz2114909-v1.o",
618 "",
619 "",
620 "",
621 "",
622 "",
623 "",
624 "",
625 "--no-default-suppression",
626 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
627 "data/test-abidiff-exit/test-rhbz2114909-report-1.txt",
628 "output/test-abidiff-exit/test-rhbz2114909-report-1.txt"
629 },
630 {
631 "data/test-abidiff-exit/PR30048-test-v0.o",
632 "data/test-abidiff-exit/PR30048-test-v1.o",
633 "",
634 "",
635 "",
636 "",
637 "",
638 "",
639 "",
640 "--no-default-suppression",
641 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
642 "data/test-abidiff-exit/PR30048-test-report-0.txt",
643 "output/test-abidiff-exit/PR30048-test-report-0.txt"
644 },
645 {
646 "data/test-abidiff-exit/PR30048-test-2-v0.o",
647 "data/test-abidiff-exit/PR30048-test-2-v1.o",
648 "",
649 "",
650 "",
651 "",
652 "",
653 "",
654 "",
655 "--no-default-suppression",
656 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
657 "data/test-abidiff-exit/PR30048-test-2-report-1.txt",
658 "output/test-abidiff-exit/PR30048-test-2-report-1.txt"
659 },
660 {
661 "data/test-abidiff-exit/test-allow-type-array-v0.o",
662 "data/test-abidiff-exit/test-allow-type-array-v1.o",
663 "",
664 "",
665 "",
666 "",
667 "",
668 "",
669 "",
670 "--no-default-suppression",
671 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
672 "data/test-abidiff-exit/test-allow-type-array-v0--v1-report-1.txt",
673 "output/test-abidiff-exit/test-allow-type-array-v0--v1-report-1.txt"
674 },
675 {
676 "data/test-abidiff-exit/test-allow-type-array-v0.o",
677 "data/test-abidiff-exit/test-allow-type-array-v1.o",
678 "data/test-abidiff-exit/test-allow-type-array-suppr.txt",
679 "",
680 "",
681 "",
682 "",
683 "",
684 "",
685 "--no-default-suppression",
686 abigail::tools_utils::ABIDIFF_OK,
687 "data/test-abidiff-exit/test-allow-type-array-v0--v1-report-2.txt",
688 "output/test-abidiff-exit/test-allow-type-array-v0--v1-report-2.txt"
689 },
690 {
691 "data/test-abidiff-exit/test-allow-type-array-v0.o",
692 "data/test-abidiff-exit/test-allow-type-array-v2.o",
693 "",
694 "",
695 "",
696 "",
697 "",
698 "",
699 "",
700 "--no-default-suppression",
701 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
702 "data/test-abidiff-exit/test-allow-type-array-v0--v2-report-1.txt",
703 "output/test-abidiff-exit/test-allow-type-array-v0--v2-report-1.txt"
704 },
705 {
706 "data/test-abidiff-exit/test-allow-type-array-v0.o",
707 "data/test-abidiff-exit/test-allow-type-array-v2.o",
708 "data/test-abidiff-exit/test-allow-type-array-suppr.txt",
709 "",
710 "",
711 "",
712 "",
713 "",
714 "",
715 "--no-default-suppression",
716 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
717 "data/test-abidiff-exit/test-allow-type-array-v0--v2-report-2.txt",
718 "output/test-abidiff-exit/test-allow-type-array-v0--v2-report-2.txt"
719 },
720 {
721 "data/test-abidiff-exit/test-allow-type-array-v0.o",
722 "data/test-abidiff-exit/test-allow-type-array-v3.o",
723 "",
724 "",
725 "",
726 "",
727 "",
728 "",
729 "",
730 "--no-default-suppression",
731 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
732 "data/test-abidiff-exit/test-allow-type-array-v0--v3-report-1.txt",
733 "output/test-abidiff-exit/test-allow-type-array-v0--v3-report-1.txt"
734 },
735 {
736 "data/test-abidiff-exit/test-allow-type-array-v0.o",
737 "data/test-abidiff-exit/test-allow-type-array-v3.o",
738 "data/test-abidiff-exit/test-allow-type-array-suppr.txt",
739 "",
740 "",
741 "",
742 "",
743 "",
744 "",
745 "--no-default-suppression",
746 abigail::tools_utils::ABIDIFF_OK,
747 "data/test-abidiff-exit/test-allow-type-array-v0--v3-report-2.txt",
748 "output/test-abidiff-exit/test-allow-type-array-v0--v3-report-2.txt"
749 },
750 {
751 "data/test-abidiff-exit/test-allow-type-region-v0.o",
752 "data/test-abidiff-exit/test-allow-type-region-v1.o",
753 "",
754 "",
755 "",
756 "",
757 "",
758 "",
759 "",
760 "--no-default-suppression",
761 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
762 "data/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt",
763 "output/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt"
764 },
765 {
766 "data/test-abidiff-exit/test-allow-type-region-v0.o",
767 "data/test-abidiff-exit/test-allow-type-region-v1.o",
768 "data/test-abidiff-exit/test-allow-type-region-suppr.txt",
769 "",
770 "",
771 "",
772 "",
773 "",
774 "",
775 "--no-default-suppression",
776 abigail::tools_utils::ABIDIFF_OK,
777 "data/test-abidiff-exit/test-allow-type-region-v0--v1-report-2.txt",
778 "output/test-abidiff-exit/test-allow-type-region-v0--v1-report-2.txt"
779 },
780 {
781 "data/test-abidiff-exit/test-allow-type-region-v0.o",
782 "data/test-abidiff-exit/test-allow-type-region-v2.o",
783 "",
784 "",
785 "",
786 "",
787 "",
788 "",
789 "",
790 "--no-default-suppression",
791 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
792 "data/test-abidiff-exit/test-allow-type-region-v0--v2-report-1.txt",
793 "output/test-abidiff-exit/test-allow-type-region-v0--v2-report-1.txt"
794 },
795 {
796 "data/test-abidiff-exit/test-allow-type-region-v0.o",
797 "data/test-abidiff-exit/test-allow-type-region-v2.o",
798 "",
799 "",
800 "",
801 "",
802 "",
803 "",
804 "",
805 "--no-default-suppression",
806 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
807 "data/test-abidiff-exit/test-allow-type-region-v0--v2-report-1.txt",
808 "output/test-abidiff-exit/test-allow-type-region-v0--v2-report-1.txt"
809 },
810 {
811 "data/test-abidiff-exit/test-allow-type-region-v0.o",
812 "data/test-abidiff-exit/test-allow-type-region-v2.o",
813 "data/test-abidiff-exit/test-allow-type-region-suppr.txt",
814 "",
815 "",
816 "",
817 "",
818 "",
819 "",
820 "--no-default-suppression",
821 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
822 "data/test-abidiff-exit/test-allow-type-region-v0--v2-report-2.txt",
823 "output/test-abidiff-exit/test-allow-type-region-v0--v2-report-2.txt"
824 },
825 {
826 "data/test-abidiff-exit/test-allow-type-region-v0.o",
827 "data/test-abidiff-exit/test-allow-type-region-v3.o",
828 "",
829 "",
830 "",
831 "",
832 "",
833 "",
834 "",
835 "--no-default-suppression",
836 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
837 "data/test-abidiff-exit/test-allow-type-region-v0--v3-report-1.txt",
838 "output/test-abidiff-exit/test-allow-type-region-v0--v3-report-1.txt"
839 },
840 {
841 "data/test-abidiff-exit/test-allow-type-region-v0.o",
842 "data/test-abidiff-exit/test-allow-type-region-v3.o",
843 "data/test-abidiff-exit/test-allow-type-region-suppr.txt",
844 "",
845 "",
846 "",
847 "",
848 "",
849 "",
850 "--no-default-suppression",
851 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
852 "data/test-abidiff-exit/test-allow-type-region-v0--v3-report-2.txt",
853 "output/test-abidiff-exit/test-allow-type-region-v0--v3-report-2.txt"
854 },
855 {
856 "data/test-abidiff-exit/test-allow-type-region-v0.o",
857 "data/test-abidiff-exit/test-allow-type-region-v4.o",
858 "",
859 "",
860 "",
861 "",
862 "",
863 "",
864 "",
865 "--no-default-suppression",
866 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
867 "data/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt",
868 "output/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt"
869 },
870 {
871 "data/test-abidiff-exit/test-allow-type-region-v0.o",
872 "data/test-abidiff-exit/test-allow-type-region-v4.o",
873 "data/test-abidiff-exit/test-allow-type-region-suppr.txt",
874 "",
875 "",
876 "",
877 "",
878 "",
879 "",
880 "--no-default-suppression",
881 abigail::tools_utils::ABIDIFF_OK,
882 "data/test-abidiff-exit/test-allow-type-region-v0--v4-report-2.txt",
883 "output/test-abidiff-exit/test-allow-type-region-v0--v4-report-2.txt"
884 },
885 {
886 "data/test-abidiff-exit/test-allow-type-region-v0.o",
887 "data/test-abidiff-exit/test-allow-type-region-v5.o",
888 "",
889 "",
890 "",
891 "",
892 "",
893 "",
894 "",
895 "--no-default-suppression",
896 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
897 "data/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt",
898 "output/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt"
899 },
900 {
901 "data/test-abidiff-exit/test-allow-type-region-v0.o",
902 "data/test-abidiff-exit/test-allow-type-region-v5.o",
903 "data/test-abidiff-exit/test-allow-type-region-suppr.txt",
904 "",
905 "",
906 "",
907 "",
908 "",
909 "",
910 "--no-default-suppression",
911 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
912 "data/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt",
913 "output/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt"
914 },
915 {
916 "data/test-abidiff-exit/ada-subrange/test1-ada-subrange/v0/test1.o",
917 "data/test-abidiff-exit/ada-subrange/test1-ada-subrange/v1/test1.o",
918 "",
919 "",
920 "",
921 "",
922 "",
923 "",
924 "",
925 "--no-default-suppression",
926 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
927 "data/test-abidiff-exit/ada-subrange/test1-ada-subrange/test1-ada-subrange-report-1.txt",
928 "output/test-abidiff-exit/ada-subrange/test1-ada-subrange/test1-ada-subrange-report-1.txt"
929 },
930 {
931 "data/test-abidiff-exit/ada-subrange/test1-ada-subrange/v0/test1.o",
932 "data/test-abidiff-exit/ada-subrange/test1-ada-subrange/v1/test1.o",
933 "",
934 "",
935 "",
936 "",
937 "",
938 "",
939 "",
940 "--no-default-suppression --leaf-changes-only",
941 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
942 "data/test-abidiff-exit/ada-subrange/test1-ada-subrange/test1-ada-subrange-report-2.txt",
943 "output/test-abidiff-exit/ada-subrange/test1-ada-subrange/test1-ada-subrange-report-2.txt"
944 },
945 {
946 "data/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/v0/test.o",
947 "data/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/v1/test.o",
948 "",
949 "",
950 "",
951 "",
952 "",
953 "",
954 "",
955 "--no-default-suppression",
956 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
957 "data/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/test2-ada-subrange-redundant-report-1.txt",
958 "output/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/test2-ada-subrange-redundant-report-1.txt"
959 },
960 {
961 "data/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/v0/test.o",
962 "data/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/v1/test.o",
963 "",
964 "",
965 "",
966 "",
967 "",
968 "",
969 "",
970 "--no-default-suppression --leaf-changes-only",
971 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
972 "data/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/test2-ada-subrange-redundant-report-2.txt",
973 "output/test-abidiff-exit/ada-subrange/test2-ada-subrange-redundant/test2-ada-subrange-redundant-report-2.txt"
974 },
975 {
976 "data/test-abidiff-exit/PR30329/old-image/usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6",
977 "data/test-abidiff-exit/PR30329/new-image/usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6",
978 "",
979 "",
980 "",
981 "data/test-abidiff-exit/PR30329/old-image/usr/lib/debug",
982 "data/test-abidiff-exit/PR30329/new-image/usr/lib/debug",
983 "",
984 "",
985 "--no-default-suppression",
986 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
987 "data/test-abidiff-exit/PR30329/PR30329-report-1.txt",
988 "output/test-abidiff-exit/PR30329/PR30329-report-1.txt"
989 },
990 {
991 "data/test-abidiff-exit/PR30503/libsdl/1.2.60/lib64/libSDL-1.2.so.1.2.60",
992 "data/test-abidiff-exit/PR30503/libsdl/1.2.64/lib64/libSDL-1.2.so.1.2.64",
993 "",
994 "",
995 "",
996 "",
997 "",
998 "",
999 "",
1000 "--no-default-suppression",
1001 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1002 "data/test-abidiff-exit/PR30503/libsdl/libsdl-1.2.60-1.2.64-report.txt",
1003 "output/test-abidiff-exit/PR30503/libsdl/libsdl-1.2.60-1.2.64-report.txt"
1004 },
1005 {
1006 "data/test-abidiff-exit/test-PR30034/reference/lib64/librte_eal.so.23.1",
1007 "data/test-abidiff-exit/test-PR30034/split/lib64/librte_eal.so.23.2",
1008 "data/test-abidiff-exit/test-PR30034/libabigail.abignore",
1009 "data/test-abidiff-exit/test-PR30034/reference/include",
1010 "data/test-abidiff-exit/test-PR30034/split/include",
1011 "",
1012 "",
1013 "data/test-abidiff-exit/test-PR30034/reference/lib64",
1014 "data/test-abidiff-exit/test-PR30034/split/lib64",
1015 "--no-default-suppression --no-added-syms --follow-dependencies",
1016 abigail::tools_utils::ABIDIFF_OK,
1017 "data/test-abidiff-exit/test-PR30034/test-PR30034-report-1.txt",
1018 "output/test-abidiff-exit/test-PR30034/test-PR30034-report-1.txt"
1019 },
1020 {
1021 "data/test-abidiff-exit/test-enumerator-changes1-v0.o",
1022 "data/test-abidiff-exit/test-enumerator-changes1-v1.o",
1023 "",
1024 "",
1025 "",
1026 "",
1027 "",
1028 "",
1029 "",
1030 "--no-default-suppression --non-reachable-types --harmless",
1031 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1032 "data/test-abidiff-exit/test-enumerator-changes1-report-1.txt",
1033 "output/test-abidiff-exit/test-enumerator-changes1-report-1.txt"
1034 },
1035 {
1036 "data/test-abidiff-exit/test-anonymous-enums-change-v0.o",
1037 "data/test-abidiff-exit/test-anonymous-enums-change-v1.o",
1038 "",
1039 "",
1040 "",
1041 "",
1042 "",
1043 "",
1044 "",
1045 "--no-default-suppression --non-reachable-types",
1046 abigail::tools_utils::ABIDIFF_ABI_CHANGE
1047 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
1048 "data/test-abidiff-exit/test-anonymous-enums-change-report-v0.txt",
1049 "output/test-abidiff-exit/test-anonymous-enums-change-report-v0.txt"
1050 },
1051 {
1052 "data/test-abidiff-exit/test-anonymous-enums-change-v0.o",
1053 "data/test-abidiff-exit/test-anonymous-enums-change-v1.o",
1054 "",
1055 "",
1056 "",
1057 "",
1058 "",
1059 "",
1060 "",
1061 "--no-default-suppression --harmless --non-reachable-types",
1062 abigail::tools_utils::ABIDIFF_ABI_CHANGE
1063 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
1064 "data/test-abidiff-exit/test-anonymous-enums-change-report-v1.txt",
1065 "output/test-abidiff-exit/test-anonymous-enums-change-report-v1.txt"
1066 },
1067 {
1068 "data/test-abidiff-exit/test-anon-types-v0.o",
1069 "data/test-abidiff-exit/test-anon-types-v1.o",
1070 "",
1071 "",
1072 "",
1073 "",
1074 "",
1075 "",
1076 "",
1077 "--no-default-suppression --harmless --non-reachable-types",
1078 abigail::tools_utils::ABIDIFF_ABI_CHANGE
1079 | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
1080 "data/test-abidiff-exit/test-anon-types-report-1.txt",
1081 "output/test-abidiff-exit/test-anon-types-report-1.txt"
1082 },
1083 {
1084 "data/test-abidiff-exit/test-fam1-v0.o",
1085 "data/test-abidiff-exit/test-fam1-v1.o",
1086 "",
1087 "",
1088 "",
1089 "",
1090 "",
1091 "",
1092 "",
1093 "--no-default-suppression",
1094 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1095 "data/test-abidiff-exit/test-fam1-report-1.txt",
1096 "output/test-abidiff-exit/test-fam1-report-1.txt"
1097 },
1098 {
1099 "data/test-abidiff-exit/test-fam1-v0.o",
1100 "data/test-abidiff-exit/test-fam1-v1.o",
1101 "data/test-abidiff-exit/test-fam1-suppr-1.abignore",
1102 "",
1103 "",
1104 "",
1105 "",
1106 "",
1107 "",
1108 "--no-default-suppression",
1109 abigail::tools_utils::ABIDIFF_OK,
1110 "data/test-abidiff-exit/test-fam1-report-2.txt",
1111 "output/test-abidiff-exit/test-fam1-report-2.txt"
1112 },
1113 {
1114 "data/test-abidiff-exit/test-fam1-v0.o",
1115 "data/test-abidiff-exit/test-fam1-v1.o",
1116 "data/test-abidiff-exit/test-fam1-suppr-2.abignore",
1117 "",
1118 "",
1119 "",
1120 "",
1121 "",
1122 "",
1123 "--no-default-suppression",
1124 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1125 "data/test-abidiff-exit/test-fam1-report-3.txt",
1126 "output/test-abidiff-exit/test-fam1-report-3.txt"
1127 },
1128 {
1129 "data/test-abidiff-exit/test-fam1-v0.o",
1130 "data/test-abidiff-exit/test-fam1-v1.o",
1131 "data/test-abidiff-exit/test-fam1-suppr-3.abignore",
1132 "",
1133 "",
1134 "",
1135 "",
1136 "",
1137 "",
1138 "--no-default-suppression",
1139 abigail::tools_utils::ABIDIFF_OK,
1140 "data/test-abidiff-exit/test-fam1-report-4.txt",
1141 "output/test-abidiff-exit/test-fam1-report-4.txt"
1142 },
1143 {
1144 "data/test-abidiff-exit/test-fam1-v0.o",
1145 "data/test-abidiff-exit/test-fam1-v1.o",
1146 "data/test-abidiff-exit/test-fam1-suppr-4.abignore",
1147 "",
1148 "",
1149 "",
1150 "",
1151 "",
1152 "",
1153 "--no-default-suppression",
1154 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1155 "data/test-abidiff-exit/test-fam1-report-5.txt",
1156 "output/test-abidiff-exit/test-fam1-report-5.txt"
1157 },
1158 {
1159 "data/test-abidiff-exit/test-fam2-v0.o",
1160 "data/test-abidiff-exit/test-fam2-v1.o",
1161 "data/test-abidiff-exit/test-fam1-suppr-1.abignore",
1162 "",
1163 "",
1164 "",
1165 "",
1166 "",
1167 "",
1168 "--no-default-suppression",
1169 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1170 "data/test-abidiff-exit/test-fam2-report-1.txt",
1171 "output/test-abidiff-exit/test-fam2-report-1.txt"
1172 },
1173 {
1174 "data/test-abidiff-exit/test-fam2-v0.o",
1175 "data/test-abidiff-exit/test-fam2-v1.o",
1176 "data/test-abidiff-exit/test-fam1-suppr-3.abignore",
1177 "",
1178 "",
1179 "",
1180 "",
1181 "",
1182 "",
1183 "--no-default-suppression",
1184 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1185 "data/test-abidiff-exit/test-fam2-report-1.txt",
1186 "output/test-abidiff-exit/test-fam2-report-1.txt"
1187 },
1188 #ifdef WITH_BTF
1189 {
1190 "data/test-abidiff-exit/btf/test0-v0.o",
1191 "data/test-abidiff-exit/btf/test0-v1.o",
1192 "",
1193 "",
1194 "",
1195 "",
1196 "",
1197 "",
1198 "",
1199 "--no-default-suppression --btf",
1200 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1201 "data/test-abidiff-exit/btf/test0-report-1.txt",
1202 "output/test-abidiff-exit/btf/test0-report-1.txt"
1203 },
1204 {
1205 "data/test-abidiff-exit/btf/test0-v0.o",
1206 "data/test-abidiff-exit/btf/test0-v1.o",
1207 "",
1208 "",
1209 "",
1210 "",
1211 "",
1212 "",
1213 "",
1214 "--no-default-suppression --harmless --btf",
1215 abigail::tools_utils::ABIDIFF_ABI_CHANGE,
1216 "data/test-abidiff-exit/btf/test0-report-2.txt",
1217 "output/test-abidiff-exit/btf/test0-report-2.txt"
1218 },
1219 #endif
1220 {0, 0, 0 ,0, 0, 0, 0, 0, 0, 0, abigail::tools_utils::ABIDIFF_OK, 0, 0}
1221 };
1222
1223 /// Prefix the strings in a vector of string.
1224 ///
1225 /// @param strings the strings to prefix.
1226 ///
1227 /// @param prefix the prefix to use.
1228 static void
do_prefix_strings(std::vector<std::string> & strings,const std::string & prefix)1229 do_prefix_strings(std::vector<std::string> &strings,
1230 const std::string& prefix)
1231 {
1232 for (std::vector<std::string>::size_type i = 0; i < strings.size(); ++i)
1233 strings[i] = prefix + strings[i];
1234 }
1235
1236 int
main()1237 main()
1238 {
1239 using std::string;
1240 using std::vector;
1241 using std::cerr;
1242 using abigail::tests::get_src_dir;
1243 using abigail::tests::get_build_dir;
1244 using abigail::tools_utils::ensure_parent_dir_created;
1245 using abigail::tools_utils::split_string;
1246 using abigail::tools_utils::abidiff_status;
1247
1248 unsigned int total_count = 0, passed_count = 0, failed_count = 0;
1249
1250 string in_elfv0_path, in_elfv1_path,
1251 in_suppression_path, abidiff_options, abidiff, cmd, diff_cmd,
1252 ref_diff_report_path, out_diff_report_path, in_elfv0_debug_dir,
1253 in_elfv1_debug_dir, in_elfv0_added_bins_dir, in_elfv1_added_bins_dir;
1254 vector<string> in_elfv0_headers_dirs, in_elfv1_headers_dirs;
1255 string source_dir_prefix = string(get_src_dir()) + "/tests/";
1256 string build_dir_prefix = string(get_build_dir()) + "/tests/";
1257
1258 for (InOutSpec* s = in_out_specs; s->in_elfv0_path; ++s)
1259 {
1260 bool is_ok = true;
1261 in_elfv0_path = source_dir_prefix + s->in_elfv0_path;
1262 in_elfv1_path = source_dir_prefix + s->in_elfv1_path;
1263 in_elfv0_debug_dir.clear();
1264 in_elfv1_debug_dir.clear();
1265 if (s->in_elfv0_debug_dir && strcmp(s->in_elfv0_debug_dir, ""))
1266 in_elfv0_debug_dir = source_dir_prefix + s->in_elfv0_debug_dir;
1267 if (s->in_elfv1_debug_dir && strcmp(s->in_elfv1_debug_dir, ""))
1268 in_elfv1_debug_dir = source_dir_prefix + s->in_elfv1_debug_dir;
1269 in_elfv0_headers_dirs.clear();
1270 in_elfv1_headers_dirs.clear();
1271 in_elfv0_added_bins_dir.clear();
1272 in_elfv1_added_bins_dir.clear();
1273
1274 if (s->in_elfv0_headers_dirs && strcmp(s->in_elfv0_headers_dirs, ""))
1275 {
1276 split_string(s->in_elfv0_headers_dirs, ",", in_elfv0_headers_dirs);
1277 do_prefix_strings(in_elfv0_headers_dirs, source_dir_prefix);
1278 }
1279
1280 if (s->in_elfv1_headers_dirs && strcmp(s->in_elfv1_headers_dirs, ""))
1281 {
1282 split_string(s->in_elfv1_headers_dirs, ",", in_elfv1_headers_dirs);
1283 do_prefix_strings(in_elfv1_headers_dirs, source_dir_prefix);
1284 }
1285
1286 if (s->in_suppr_path && strcmp(s->in_suppr_path, ""))
1287 in_suppression_path = source_dir_prefix + s->in_suppr_path;
1288 else
1289 in_suppression_path.clear();
1290
1291 if (s->in_elfv0_added_bins_dir
1292 && strcmp(s->in_elfv0_added_bins_dir, ""))
1293 in_elfv0_added_bins_dir =
1294 source_dir_prefix + s->in_elfv0_added_bins_dir;
1295
1296 if (s->in_elfv1_added_bins_dir
1297 && strcmp(s->in_elfv1_added_bins_dir, ""))
1298 in_elfv1_added_bins_dir =
1299 source_dir_prefix + s->in_elfv1_added_bins_dir;
1300
1301 abidiff_options = s->abidiff_options;
1302 ref_diff_report_path = source_dir_prefix + s->in_report_path;
1303 out_diff_report_path = build_dir_prefix + s->out_report_path;
1304
1305 if (!ensure_parent_dir_created(out_diff_report_path))
1306 {
1307 cerr << "could not create parent directory for "
1308 << out_diff_report_path
1309 << "\n";
1310 is_ok = false;
1311 continue;
1312 }
1313
1314 abidiff = string(get_build_dir()) + "/tools/abidiff";
1315 if (!abidiff_options.empty())
1316 abidiff += " " + abidiff_options;
1317
1318 if (!in_elfv0_added_bins_dir.empty())
1319 abidiff += " --added-binaries-dir1 " + in_elfv0_added_bins_dir;
1320
1321 if (!in_elfv1_added_bins_dir.empty())
1322 abidiff += " --added-binaries-dir2 " + in_elfv1_added_bins_dir;
1323
1324 if (!in_elfv0_debug_dir.empty())
1325 abidiff += " --debug-info-dir1 " + in_elfv0_debug_dir;
1326
1327 if (!in_elfv1_debug_dir.empty())
1328 abidiff += " --debug-info-dir2 " + in_elfv1_debug_dir;
1329
1330 if (!in_elfv0_headers_dirs.empty())
1331 for (vector<string>::const_iterator s = in_elfv0_headers_dirs.begin();
1332 s != in_elfv0_headers_dirs.end();
1333 ++s)
1334 abidiff += " --headers-dir1 " + *s;
1335
1336 if (!in_elfv1_headers_dirs.empty())
1337 for (vector<string>::const_iterator s = in_elfv1_headers_dirs.begin();
1338 s != in_elfv1_headers_dirs.end();
1339 ++s)
1340 abidiff += " --headers-dir2 " + *s;
1341
1342 if (!in_suppression_path.empty())
1343 abidiff += " --suppressions " + in_suppression_path;
1344
1345 cmd = abidiff + " " + in_elfv0_path + " " + in_elfv1_path;
1346 cmd += " > " + out_diff_report_path;
1347
1348 bool abidiff_ok = true;
1349 int code = system(cmd.c_str());
1350 if (!WIFEXITED(code))
1351 abidiff_ok = false;
1352 else
1353 {
1354 abigail::tools_utils::abidiff_status status =
1355 static_cast<abidiff_status>(WEXITSTATUS(code));
1356 if (status != s->status)
1357 {
1358 cerr << "for command '"
1359 << cmd
1360 << "', expected abidiff status to be " << s->status
1361 << " but instead, got " << status << "\n";
1362 abidiff_ok = false;
1363 }
1364 }
1365
1366 if (abidiff_ok)
1367 {
1368 diff_cmd = "diff -u " + ref_diff_report_path
1369 + " " + out_diff_report_path;
1370 if (system(diff_cmd.c_str()))
1371 is_ok = false;
1372 }
1373 else
1374 is_ok = false;
1375
1376 emit_test_status_and_update_counters(is_ok,
1377 cmd,
1378 passed_count,
1379 failed_count,
1380 total_count);
1381 }
1382
1383 emit_test_summary(total_count, passed_count, failed_count);
1384
1385
1386 return failed_count;
1387 }
1388