mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-30 05:42:05 +00:00
e19bf5627a
This is to address the following enhancement requests: #19588 - Add a --headers-dir1 and --headers-dir2 option to abidiff #19948 - Add --devel-pkg1 and --devel-pkg2 options to abipkgdiff When the user specifies where to find header files for two binaries (or packages) being compared, this patch generates a type suppression specification that filters out change reports about types that are defined in files that are not in the set of header files specified. The type suppression specification also suppresses change reports about changed/added/removed virtual member functions which enclosing class type matches the type suppression specification. There is a corner case that the patch handles too, and that is exhibited by the accompanying test case for abidiff. There can be a class defined by DWARF as having no source location and as being a pure declaration. This can be a class declaration that has inline virtual members only, and one or several non-defined virtual methods too. When that declaration is included in a source file, GCC generates debug info that describes that class as being a declaration-only class with no source declaration. This patch considers such a class as being non defined; you know, like a true opaque type. So it's considered being not defined in any public header file. Changes to this kind of class are thus filtered out. * include/abg-comp-filter.h: Update copyright year. * src/abg-comp-filter.cc (has_virtual_mem_fn_change): Make this static function become exported. (has_virtual_mem_fn_change): Declare new function. * include/abg-suppression.h (suppression_base::{get,set}_is_artificial): Declare new accessors. (type_suppression::get_source_locations_to_keep): Return an unordered set of strings, not a vector. Add a non-const overload. (type_suppression::set_source_locations_to_keep): Set an unordered set of strings, not a vector. * src/abg-suppression.cc (suppression_base::priv::is_artificial_): New data member. (suppression_base::priv::priv): Initialize the new data member. (suppression_base::{get,set}_is_artificial): Define new accessors. (type_suppression::priv::source_locations_to_keep_): Change the vector of strings representing source file names into unordered set of string. (type_suppression::get_source_locations_to_keep): Return an unordered set of strings, not a vector. Define a non-const overload. (type_suppression::set_source_locations_to_keep): Set an unordered set of strings, not a vector. (type_suppression::suppresses_diff): Make this suppress virtual member function diffs if the enclosing type of the changed virtual member is suppressed by the current type_suppression. (read_type_suppression): Adjust to use the fact that the source locations are not stored in an unordered set, not in a vector anymore. Otherwise, using a vector here make things too slow. (type_suppression::suppresses_type): Likewise. Also, If the type we are looking at has no location because it's a true opaque type and if the current suppression is an artificial suppression that is meant to suppress change reports about non-public types, then suppress the type. * include/abg-tools-utils.h (gen_suppr_spec_from_headers): Declare new public function. * src/abg-tools-utils.cc (PRIVATE_TYPES_SUPPR_SPEC_NAME): Define a new constant variable. (handle_fts_entry): Define new static function. (gen_suppr_spec_from_headers): Define new public function. * src/abg-comparison.cc (corpus_diff::priv::apply_suppressions_to_added_removed_fns_vars): If a type suppression suppresses a given class C, make it change added/removed virtual functions whose enclosing type is C. * tools/abidiff.cc (options::{headers_dir1, headers_dir2}): New data members. (display_usage): Add help strings for --headers-dir1 and --headers-dir2. (parse_command_line): Parse the new --headers-dir1 and --headers-dir2 options. (set_diff_context_from_opts): Generate suppression specifications to filter out changes on private types, if --headers-dir1 or --headers-dir2 is given. * tools/abipkgdiff.cc (options::{devel_package1, devel_package2}): New data members. (typedef package_sptr): New typedef. (enum package::kind): New enum. (package::kind_): New data member. This replaces ... (package::is_debug_info_): ... this data member. (package::{devel_package_, private_types_suppressions_}): New data members. (package::package): Adjust. (package::get_kind): Define new member function. This replaces ... (package::is_debug_info): ... this member function overload. (package::set_kind): Define new member functin. It replaces ... (package::is_debug_info): ... this member function overload. (package::{devel_package, private_types_suppressions}): Define new accessors. (package::erase_extraction_directies): Erase the sub-directory where development packages are extracted to. (compare_args::private_types_suppr{1,2}): New data members. (compare_args::compare_args): Adjust. (display_usage): Add help strings for --devel-pkg1/--devel-pkg2. (compare): Make the overload that compares elf files take private types suppressions. Add the private types suppressions to the diff context. (pthread_routine_compare): Adjust the call to compare. (maybe_create_private_types_suppressions): Define new static function. (pthread_routine_extract_pkg_and_map_its_content): If a devel package was specified for the main package then extract it in parallel with the other package extraction. When the extraction is done, create private types suppressions by visiting the directories that contain the header files. (compare): In the overload that compares packages by scheduling comparison of individual elf files that are in the packages, pass in the private type suppressions too. (parse_command_line): Parse the new --devel-pkg{1,2} command line options. (main): Associate the devel package to the main package, if the --devel-pkg{1,2}. * doc/manuals/abidiff.rst: Add documentation about the new --headers-dir1 and --headers-dir2 options. * doc/manuals/abipkgdiff.rst: Likewise, add documentation about the new --devel-pkg1 and --devel-pkg2 libraries. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: New test reference output. * tests/data/test-diff-pkg/tbb-devel-4.1-9.20130314.fc22.x86_64.rpm: New test input package. * tests/data/test-diff-pkg/tbb-devel-4.3-3.20141204.fc23.x86_64.rpm: Likewise. * tests/test-diff-pkg.cc b/tests/test-diff-pkg.cc (InOutSpec::{first,second}_in_devel_package_path): New data members. (in_out_specs): Adjust. Also, add a new entry describing the new test inputs above. (test_task::perform): When the new test entry contains devel packages, pass them to abipkgdiff using the --devel1 and --devel2 options. * tests/data/test-diff-suppr/test30-include-dir-v0/test30-pub-lib-v0.h: A new test input source code. * tests/data/test-diff-suppr/test30-include-dir-v1/test30-pub-lib-v1.h: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v0.cc: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v0.h: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v1.cc: Likewise. * tests/data/test-diff-suppr/test30-priv-lib-v1.h: Likewise. * tests/data/test-diff-suppr/test30-pub-lib-v0.cc: Likewise. * tests/data/test-diff-suppr/test30-pub-lib-v0.so: Add new test binary input. * tests/data/test-diff-suppr/test30-pub-lib-v1.cc: Add new test input source code. * tests/data/test-diff-suppr/test30-pub-lib-v1.so: Add new test binary input. * tests/data/test-diff-suppr/test30-report-0.txt: Add new test reference output. * tests/data/test-diff-suppr/test30-report-1.txt: Add new test reference output. * tests/test-diff-suppr.cc (InOutSpec::headers_dir{1,2}): New data members. (InOutSpec::abidiff_options): Renamed the bidiff_options data member into this. (in_out_specs): Adjust. Also, added the new test input above to this. (main): Adjust to invoke abidiff with the new --hd1 and --hd2 options if the input specs for the tests has the new InOutSpec::headers_dir{1,2} data member set. Renamed bidiff into abidiff. * tests/data/Makefile.am: Add the new test inputs to the source distribution. Signed-off-by: Dodji Seketeli <dodji@redhat.com> |
||
---|---|---|
.. | ||
dirpkg-0-dir1 | ||
dirpkg-0-dir2 | ||
dirpkg-1-dir1 | ||
dirpkg-1-dir2 | ||
dirpkg-2-dir1 | ||
dirpkg-2-dir2 | ||
dirpkg-3-dir1 | ||
dirpkg-3-dir2 | ||
symlink-dir-test1 | ||
dbus-glib-0.80-3.fc12.x86_64.rpm | ||
dbus-glib-0.104-3.fc23.x86_64.rpm | ||
dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm | ||
dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm | ||
dirpkg-0-report-0.txt | ||
dirpkg-1-report-0.txt | ||
dirpkg-1-report-1.txt | ||
dirpkg-2-report-0.txt | ||
dirpkg-2-report-1.txt | ||
dirpkg-3-report-0.txt | ||
dirpkg-3-report-1.txt | ||
dirpkg-3-report-2.txt | ||
dirpkg-3.suppr | ||
empty-pkg-libvirt-0.9.11.3-1.el7.ppc64.rpm | ||
empty-pkg-libvirt-1.2.17-13.el7_2.2.ppc64.rpm | ||
empty-pkg-report-0.txt | ||
gtk2-debuginfo-2.24.22-5.el7.i686.rpm | ||
gtk2-debuginfo-2.24.28-8.el7.i686.rpm | ||
gtk2-immodule-xim-2.24.22-5.el7.i686--gtk2-immodule-xim-2.24.28-8.el7.i686-report-0.txt | ||
gtk2-immodule-xim-2.24.22-5.el7.i686.rpm | ||
gtk2-immodule-xim-2.24.28-8.el7.i686.rpm | ||
libICE-1.0.6-1.el6.x86_64.rpm | ||
libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt | ||
libICE-1.0.9-2.el7.x86_64.rpm | ||
libICE-debuginfo-1.0.6-1.el6.x86_64.rpm | ||
libICE-debuginfo-1.0.9-2.el7.x86_64.rpm | ||
libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt | ||
libsigc++-2.0-0c2a_2.4.0-1_amd64.deb | ||
libsigc++-2.0-0c2a-dbgsym_2.4.0-1_amd64.ddeb | ||
libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64.deb | ||
libsigc++-2.0-0v5-dbgsym_2.4.1-1ubuntu2_amd64.ddeb | ||
qemu-img-rhev-2.3.0-7.el7.ppc64--qemu-img-rhev-2.3.0-20.el7.ppc64-report-0.txt | ||
qemu-img-rhev-2.3.0-7.el7.ppc64.rpm | ||
qemu-img-rhev-2.3.0-20.el7.ppc64.rpm | ||
qemu-kvm-rhev-debuginfo-2.3.0-7.el7.ppc64.rpm | ||
qemu-kvm-rhev-debuginfo-2.3.0-20.el7.ppc64.rpm | ||
symlink-dir-test1-report0.txt | ||
tarpkg-0-dir1.ta | ||
tarpkg-0-dir1.tar | ||
tarpkg-0-dir1.tar.bz2 | ||
tarpkg-0-dir1.tar.gz | ||
tarpkg-0-dir2.ta | ||
tarpkg-0-dir2.tar | ||
tarpkg-0-dir2.tar.bz2 | ||
tarpkg-0-dir2.tar.gz | ||
tarpkg-0-report-0.txt | ||
tarpkg-1-dir1.tar.gz | ||
tarpkg-1-dir2.tar.gz | ||
tarpkg-1-report-0.txt | ||
tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt | ||
tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt | ||
tbb-4.1-9.20130314.fc22.x86_64.rpm | ||
tbb-4.3-3.20141204.fc23.x86_64.rpm | ||
tbb-debuginfo-4.1-9.20130314.fc22.x86_64.rpm | ||
tbb-debuginfo-4.3-3.20141204.fc23.x86_64.rpm | ||
tbb-devel-4.1-9.20130314.fc22.x86_64.rpm | ||
tbb-devel-4.3-3.20141204.fc23.x86_64.rpm | ||
test-rpm-report-0.txt | ||
test-rpm-report-1.txt | ||
test-rpm-report-2.txt | ||
test-rpm-report-3.txt | ||
test-rpm-report-4.txt | ||
test-rpm-report-5.txt |