mirror of
git://sourceware.org/git/libabigail.git
synced 2025-01-26 11:13:06 +00:00
58488c5f31
This patch replaces license headers with SPDX identifiers in all files containing license headers. For each file, the SPDX identifier formally represents its current license. Note that the list of SPDX identifiers is available on the SPDX web site at https://spdx.org/licenses. For autoconf-archive/ax_prog_python_version.m4 however, there is a little catch. Dodji Seketeli wrote this ax_check_python_modules.m4. Just like the other autoconf-archive macros, it makes sense to have it under the FSF All Permissive license. Actually, the terms of that license was already in the file but then the license header was wrongly set to GPLv2 with autoconf exception. So I fixed that in this commit by setting the SPDX identifier to FSFAP. * abigail.m4: Replace the license header with the SPDX identifier GPL-3.0-or-later WITH GCC-exception-3.1 * autoconf-archive/ax_check_python_modules.m4: Correctly set the SPDX identifier to FSFAP. * autoconf-archive/ax_compare_version.m4: Replace the license header with the SPDX identifier FSFAP. * autoconf-archive/ax_prog_python_version.m4: Likewise. header with the SPDX identifier FSFAP. * autoconf-archive/ax_valgrind_check.m4: Likewise. * gen-changelog.py: Replace the license header with the SPDX identifier LGPL-2.0-or-later. * include/abg-comp-filter.h: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * include/abg-comparison.h: Likewise. * include/abg-config.h: Likewise. * include/abg-corpus.h: Likewise. * include/abg-cxx-compat.h: Replace the license header with the SPDX identifier LGPL-2.0-or-later. * include/abg-diff-utils.h: Replace the license header with the SPDX identifier LGPL-3.0-or-later * include/abg-dwarf-reader.h: Likewise. * include/abg-fwd.h: Likewise. * include/abg-hash.h: Likewise. * include/abg-ini.h: Likewise. * include/abg-interned-str.h: Likewise. * include/abg-ir.h: Likewise. * include/abg-libxml-utils.h: Likewise. * include/abg-libzip-utils.h: Likewise. * include/abg-reader.h: Likewise. * include/abg-regex.h: Likewise. * include/abg-reporter.h: Likewise. * include/abg-sptr-utils.h: Likewise. * include/abg-suppression.h: Likewise. * include/abg-tools-utils.h: Likewise. * include/abg-traverse.h: Likewise. * include/abg-viz-common.h: Likewise. * include/abg-viz-dot.h: Likewise. * include/abg-viz-svg.h: Likewise. * include/abg-workers.h: Likewise. * include/abg-writer.h: Likewise. * install-sh: Replace the license header with the SPDX identifier MIT. * ltmain.sh: Replace the license header with the SPDX identifier GPL-2.0-or-later. Note that this file has the libtool special exception which allows us to redistribute it under the general license of the project. * src/abg-comp-filter.cc: Replace the license header with the SPDX * src/abg-comparison-priv.h: Likewise. * src/abg-comparison.cc: Likewise. * src/abg-config.cc: Likewise. * src/abg-corpus-priv.h: Likewise. * src/abg-corpus.cc: Likewise. * src/abg-default-reporter.cc: Likewise. * src/abg-diff-utils.cc: Likewise. * src/abg-dwarf-reader.cc: Likewise. * src/abg-elf-helpers.cc: Likewise. * src/abg-elf-helpers.h: Likewise. * src/abg-regex.cc: Likewise. * src/abg-hash.cc: Likewise. * src/abg-ini.cc: Likewise. * src/abg-internal.h: Likewise. * src/abg-ir-priv.h: Likewise. * src/abg-ir.cc: Likewise. * src/abg-leaf-reporter.cc: Likewise. * src/abg-libxml-utils.cc: Likewise. * src/abg-libzip-utils.cc: Likewise. * src/abg-reader.cc: Likewise. * src/abg-reporter-priv.cc: Likewise. * src/abg-reporter-priv.h: Likewise. * src/abg-sptr-utils.cc: Likewise. * src/abg-suppression-priv.h: Likewise. * src/abg-suppression.cc: Likewise. * src/abg-tools-utils.cc: Likewise. * src/abg-traverse.cc: Likewise. * src/abg-viz-common.cc: Likewise. * src/abg-viz-dot.cc: Likewise. * src/abg-viz-svg.cc: Likewise. * src/abg-workers.cc: Likewise. * src/abg-writer.cc: Likewise. * tests/lib/catch.cc: Likewise. * tests/lib/catch.hpp: Add an SPDX identifier BSL-1.0. * tests/mockfedabipkgdiff.in: Replace the license header with the SPDX identifier GPL-3.0-or-later. * tests/print-diff-tree.cc: Likewise. * tests/runtestfedabipkgdiff.py.in: Replaace the license header with the SPDW identifier GPL-3.0-or-later. * tests/test-abicompat.cc: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * tests/test-abidiff-exit.cc: Likewise. * tests/test-abidiff.cc: Likewise. * tests/test-alt-dwarf-file.cc: Likewise. * tests/test-annotate.cc: Likewise. * tests/test-cxx-compat.cc: Likewise. * tests/test-core-diff.cc: Likewise. * tests/test-diff-dwarf-abixml.cc: Likewise. * tests/test-diff-dwarf.cc: Likewise. * tests/test-diff-filter.cc: Likewise. * tests/test-diff-pkg.cc: Likewise. * tests/test-diff-suppr.cc: Likewise. * tests/test-diff2.cc: Likewise. * tests/test-dot.cc: Replace the license header with the SPDX identifier GPL-3.0-with-GCC-exception. * tests/test-elf-helpers.cc: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * tests/test-ini.cc: Likewise. * tests/test-ir-walker.cc: Likewise. * tests/test-kmi-whitelist.cc: Likewise. * tests/test-lookup-syms.cc: Likewise. * tests/test-read-dwarf.cc: Likewise. * tests/test-read-write.cc: Likewise. * tests/test-svg.cc: Replace the license header with the SPDX identifier GPL-3.0-with-GCC-exception. * tests/test-symtab.cc: Replace the license header with the SPDX identifier LGPL-3.0-or-later. * tests/test-tools-utils.cc: Likewise. * tests/test-types-stability.cc: Likewise. * tests/test-utils.cc: Likewise. * tests/test-utils.h: Likewise. * tests/test-write-read-archive.cc: Likewise. * tools/abiar.cc: Likewise. * tools/abicompat.cc: Likewise. * tools/abidiff.cc: Likewise. * tools/abidw.cc: Likewise. * tools/abilint.cc: Likewise. * tools/abipkgdiff.cc: Likewise. * tools/abisym.cc: Likewise. * tools/binilint.cc: Likewise. * tools/fedabipkgdiff: Replace the license header with the SPDX identifier GPL-3.0-or-later. * tools/kmidiff.cc: Likewise. Signed-off-by: Benjamin De Kosnik <bkoz@gnu.org> Signed-off-by: Ben Woodard <woodard@redhat.com> Signed-off-by: Chenxiong Qi <cqi@redhat.com> Signed-off-by: Dodji Seketeli <dodji@redhat.com> Signed-off-by: Giuliano Procida <gprocida@google.com> Signed-off-by: Jan Engelhardt <jengelh@inai.de> Signed-off-by: Jessica Yu <jeyu@kernel.org> Signed-off-by: Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Mark Wielaard <mark@klomp.org> Signed-off-by: Matthias Klose <doko@ubuntu.com> Signed-off-by: Matthias Maennich <maennich@google.com> Signed-off-by: Ondrej Oprala <ondrej.oprala@gmail.com> Signed-off-by: Roland McGrath <roland@hack.frob.com> Signed-off-by: Sinny Kumari <ksinny@gmail.com> Signed-off-by: Slava Barinov <v.barinov@samsung.com>
455 lines
14 KiB
C++
455 lines
14 KiB
C++
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
// -*- Mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2016-2020 Red Hat, Inc.
|
|
//
|
|
// Author: Dodji Seketeli
|
|
|
|
/// @file
|
|
///
|
|
/// This program runs abidiff between input files and checks that
|
|
/// the exit code of the abidiff is the one we expect.
|
|
///
|
|
/// The set of input files and reference reports to consider should be
|
|
/// present in the source distribution.
|
|
|
|
/// This is an aggregate that specifies where a test shall get its
|
|
/// input from and where it shall write its ouput to.
|
|
|
|
#include <sys/wait.h>
|
|
#include <cstring>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <cstdlib>
|
|
#include "abg-tools-utils.h"
|
|
#include "test-utils.h"
|
|
|
|
using abigail::tools_utils::abidiff_status;
|
|
|
|
struct InOutSpec
|
|
{
|
|
const char* in_elfv0_path;
|
|
const char* in_elfv1_path;
|
|
const char* in_suppr_path;
|
|
const char* in_elfv0_headers_dirs;
|
|
const char* in_elfv1_headers_dirs;
|
|
const char* abidiff_options;
|
|
abidiff_status status;
|
|
const char* in_report_path;
|
|
const char* out_report_path;
|
|
};// end struct InOutSpec;
|
|
|
|
InOutSpec in_out_specs[] =
|
|
{
|
|
{
|
|
"data/test-abidiff-exit/test1-voffset-change-v0.o",
|
|
"data/test-abidiff-exit/test1-voffset-change-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE
|
|
| abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
|
|
"data/test-abidiff-exit/test1-voffset-change-report0.txt",
|
|
"output/test-abidiff-exit/test1-voffset-change-report0.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test1-voffset-change-v0.o",
|
|
"data/test-abidiff-exit/test1-voffset-change-v1.o",
|
|
"data/test-abidiff-exit/test1-voffset-change.abignore",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs",
|
|
abigail::tools_utils::ABIDIFF_OK,
|
|
"data/test-abidiff-exit/test1-voffset-change-report1.txt",
|
|
"output/test-abidiff-exit/test1-voffset-change-report1.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test2-filtered-removed-fns-v0.o",
|
|
"data/test-abidiff-exit/test2-filtered-removed-fns-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE
|
|
| abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
|
|
"data/test-abidiff-exit/test2-filtered-removed-fns-report0.txt",
|
|
"output/test-abidiff-exit/test2-filtered-removed-fns-report0.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test2-filtered-removed-fns-v0.o",
|
|
"data/test-abidiff-exit/test2-filtered-removed-fns-v1.o",
|
|
"data/test-abidiff-exit/test2-filtered-removed-fns.abignore",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs",
|
|
abigail::tools_utils::ABIDIFF_OK,
|
|
"data/test-abidiff-exit/test2-filtered-removed-fns-report1.txt",
|
|
"output/test-abidiff-exit/test2-filtered-removed-fns-report1.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-loc-v0.bi",
|
|
"data/test-abidiff-exit/test-loc-v1.bi",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-loc-with-locs-report.txt",
|
|
"output/test-abidiff-exit/test-loc-with-locs-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-loc-v0.bi",
|
|
"data/test-abidiff-exit/test-loc-v1.bi",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-show-locs",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-loc-without-locs-report.txt",
|
|
"output/test-abidiff-exit/test-loc-without-locs-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-no-stray-comma-v0.o",
|
|
"data/test-abidiff-exit/test-no-stray-comma-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-no-stray-comma-report.txt",
|
|
"output/test-abidiff-exit/test-no-stray-comma-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-leaf-stats-v0.o",
|
|
"data/test-abidiff-exit/test-leaf-stats-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-show-locs --leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-leaf-stats-report.txt",
|
|
"output/test-abidiff-exit/test-leaf-stats-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-leaf-more-v0.o",
|
|
"data/test-abidiff-exit/test-leaf-more-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-show-locs --leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE
|
|
| abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
|
|
"data/test-abidiff-exit/test-leaf-more-report.txt",
|
|
"output/test-abidiff-exit/test-leaf-more-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-leaf-fun-type-v0.o",
|
|
"data/test-abidiff-exit/test-leaf-fun-type-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-show-locs --leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-leaf-fun-type-report.txt",
|
|
"output/test-abidiff-exit/test-leaf-fun-type-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-leaf-redundant-v0.o",
|
|
"data/test-abidiff-exit/test-leaf-redundant-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-leaf-redundant-report.txt",
|
|
"output/test-abidiff-exit/test-leaf-redundant-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-leaf-peeling-v0.o",
|
|
"data/test-abidiff-exit/test-leaf-peeling-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-leaf-peeling-report.txt",
|
|
"output/test-abidiff-exit/test-leaf-peeling-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-leaf-cxx-members-v0.o",
|
|
"data/test-abidiff-exit/test-leaf-cxx-members-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE
|
|
| abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
|
|
"data/test-abidiff-exit/test-leaf-cxx-members-report.txt",
|
|
"output/test-abidiff-exit/test-leaf-cxx-members-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-member-size-v0.o",
|
|
"data/test-abidiff-exit/test-member-size-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-member-size-report0.txt",
|
|
"output/test-abidiff-exit/test-member-size-report0.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-member-size-v0.o",
|
|
"data/test-abidiff-exit/test-member-size-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-member-size-report1.txt",
|
|
"output/test-abidiff-exit/test-member-size-report1.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-decl-struct-v0.o",
|
|
"data/test-abidiff-exit/test-decl-struct-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--harmless",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-decl-struct-report.txt",
|
|
"output/test-abidiff-exit/test-decl-struct-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-fun-param-v0.abi",
|
|
"data/test-abidiff-exit/test-fun-param-v1.abi",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-fun-param-report.txt",
|
|
"output/test-abidiff-exit/test-fun-param-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-decl-enum-v0.o",
|
|
"data/test-abidiff-exit/test-decl-enum-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--harmless",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-decl-enum-report.txt",
|
|
"output/test-abidiff-exit/test-decl-enum-report.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-decl-enum-v0.o",
|
|
"data/test-abidiff-exit/test-decl-enum-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
abigail::tools_utils::ABIDIFF_OK,
|
|
"data/test-abidiff-exit/test-decl-enum-report-2.txt",
|
|
"output/test-abidiff-exit/test-decl-enum-report-2.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-decl-enum-v0.o",
|
|
"data/test-abidiff-exit/test-decl-enum-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_OK,
|
|
"data/test-abidiff-exit/test-decl-enum-report-3.txt",
|
|
"output/test-abidiff-exit/test-decl-enum-report-3.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-net-change-v0.o",
|
|
"data/test-abidiff-exit/test-net-change-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE
|
|
| abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
|
|
"data/test-abidiff-exit/test-net-change-report0.txt",
|
|
"output/test-abidiff-exit/test-net-change-report0.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-net-change-v0.o",
|
|
"data/test-abidiff-exit/test-net-change-v1.o",
|
|
"data/test-abidiff-exit/test-net-change.abignore",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs",
|
|
abigail::tools_utils::ABIDIFF_OK,
|
|
"data/test-abidiff-exit/test-net-change-report1.txt",
|
|
"output/test-abidiff-exit/test-net-change-report1.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-net-change-v0.o",
|
|
"data/test-abidiff-exit/test-net-change-v1.o",
|
|
"",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs --leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE
|
|
| abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
|
|
"data/test-abidiff-exit/test-net-change-report2.txt",
|
|
"output/test-abidiff-exit/test-net-change-report2.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-net-change-v0.o",
|
|
"data/test-abidiff-exit/test-net-change-v1.o",
|
|
"data/test-abidiff-exit/test-net-change.abignore",
|
|
"",
|
|
"",
|
|
"--no-default-suppression --no-show-locs --leaf-changes-only",
|
|
abigail::tools_utils::ABIDIFF_OK,
|
|
"data/test-abidiff-exit/test-net-change-report3.txt",
|
|
"output/test-abidiff-exit/test-net-change-report3.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v0.o",
|
|
"data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v1.o",
|
|
"",
|
|
"data/test-abidiff-exit/test-headers-dirs/headers-a",
|
|
"data/test-abidiff-exit/test-headers-dirs/headers-a",
|
|
"--no-default-suppression",
|
|
abigail::tools_utils::ABIDIFF_OK,
|
|
"data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-1.txt",
|
|
"output/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-1.txt"
|
|
},
|
|
{
|
|
"data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v0.o",
|
|
"data/test-abidiff-exit/test-headers-dirs/test-headers-dir-v1.o",
|
|
"",
|
|
"data/test-abidiff-exit/test-headers-dirs/headers-a, "
|
|
"data/test-abidiff-exit/test-headers-dirs/headers-b",
|
|
"data/test-abidiff-exit/test-headers-dirs/headers-a, "
|
|
"data/test-abidiff-exit/test-headers-dirs/headers-b",
|
|
"--no-default-suppression",
|
|
abigail::tools_utils::ABIDIFF_ABI_CHANGE,
|
|
"data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-2.txt",
|
|
"output/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-2.txt"
|
|
},
|
|
{0, 0, 0 ,0, 0, 0, abigail::tools_utils::ABIDIFF_OK, 0, 0}
|
|
};
|
|
|
|
/// Prefix the strings in a vector of string.
|
|
///
|
|
/// @param strings the strings to prefix.
|
|
///
|
|
/// @param prefix the prefix to use.
|
|
static void
|
|
do_prefix_strings(std::vector<std::string> &strings,
|
|
const std::string& prefix)
|
|
{
|
|
for (std::vector<std::string>::size_type i = 0; i < strings.size(); ++i)
|
|
strings[i] = prefix + strings[i];
|
|
}
|
|
|
|
int
|
|
main()
|
|
{
|
|
using std::string;
|
|
using std::vector;
|
|
using std::cerr;
|
|
using abigail::tests::get_src_dir;
|
|
using abigail::tests::get_build_dir;
|
|
using abigail::tools_utils::ensure_parent_dir_created;
|
|
using abigail::tools_utils::split_string;
|
|
using abigail::tools_utils::abidiff_status;
|
|
|
|
bool is_ok = true;
|
|
string in_elfv0_path, in_elfv1_path,
|
|
in_suppression_path, abidiff_options, abidiff, cmd,
|
|
ref_diff_report_path, out_diff_report_path;
|
|
vector<string> in_elfv0_headers_dirs, in_elfv1_headers_dirs;
|
|
string source_dir_prefix = string(get_src_dir()) + "/tests/";
|
|
string build_dir_prefix = string(get_build_dir()) + "/tests/";
|
|
|
|
for (InOutSpec* s = in_out_specs; s->in_elfv0_path; ++s)
|
|
{
|
|
in_elfv0_path = source_dir_prefix + s->in_elfv0_path;
|
|
in_elfv1_path = source_dir_prefix + s->in_elfv1_path;
|
|
split_string(s->in_elfv0_headers_dirs, ",", in_elfv0_headers_dirs);
|
|
split_string(s->in_elfv1_headers_dirs, ",", in_elfv1_headers_dirs);
|
|
do_prefix_strings(in_elfv0_headers_dirs, source_dir_prefix);
|
|
do_prefix_strings(in_elfv1_headers_dirs, source_dir_prefix);
|
|
|
|
if (s->in_suppr_path && strcmp(s->in_suppr_path, ""))
|
|
in_suppression_path = source_dir_prefix + s->in_suppr_path;
|
|
else
|
|
in_suppression_path.clear();
|
|
|
|
abidiff_options = s->abidiff_options;
|
|
ref_diff_report_path = source_dir_prefix + s->in_report_path;
|
|
out_diff_report_path = build_dir_prefix + s->out_report_path;
|
|
|
|
if (!ensure_parent_dir_created(out_diff_report_path))
|
|
{
|
|
cerr << "could not create parent directory for "
|
|
<< out_diff_report_path;
|
|
is_ok = false;
|
|
continue;
|
|
}
|
|
|
|
abidiff = string(get_build_dir()) + "/tools/abidiff";
|
|
if (!abidiff_options.empty())
|
|
abidiff += " " + abidiff_options;
|
|
|
|
if (!in_elfv0_headers_dirs.empty())
|
|
for (vector<string>::const_iterator s = in_elfv0_headers_dirs.begin();
|
|
s != in_elfv0_headers_dirs.end();
|
|
++s)
|
|
abidiff += " --headers-dir1 " + *s;
|
|
|
|
if (!in_elfv1_headers_dirs.empty())
|
|
for (vector<string>::const_iterator s = in_elfv1_headers_dirs.begin();
|
|
s != in_elfv1_headers_dirs.end();
|
|
++s)
|
|
abidiff += " --headers-dir2 " + *s;
|
|
|
|
if (!in_suppression_path.empty())
|
|
abidiff += " --suppressions " + in_suppression_path;
|
|
|
|
cmd = abidiff + " " + in_elfv0_path + " " + in_elfv1_path;
|
|
cmd += " > " + out_diff_report_path;
|
|
|
|
bool abidiff_ok = true;
|
|
int code = system(cmd.c_str());
|
|
if (!WIFEXITED(code))
|
|
abidiff_ok = false;
|
|
else
|
|
{
|
|
abigail::tools_utils::abidiff_status status =
|
|
static_cast<abidiff_status>(WEXITSTATUS(code));
|
|
if (status != s->status)
|
|
{
|
|
cerr << "for command '"
|
|
<< cmd
|
|
<< "', expected abidiff status to be " << s->status
|
|
<< " but instead, got " << status << "\n";
|
|
abidiff_ok = false;
|
|
}
|
|
}
|
|
|
|
if (abidiff_ok)
|
|
{
|
|
cmd = "diff -u " + ref_diff_report_path
|
|
+ " " + out_diff_report_path;
|
|
if (system(cmd.c_str()))
|
|
is_ok = false;
|
|
}
|
|
else
|
|
is_ok = false;
|
|
}
|
|
|
|
return !is_ok;
|
|
}
|