• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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