libabigail/tests/data/test-diff-pkg
Dodji Seketeli e19bf5627a Make abi{pkg}diff filter out changes about private types
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>
2016-05-24 10:32:08 +02:00
..
dirpkg-0-dir1 Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-0-dir2 Make abipkgdiff compare directories containing binaries 2015-08-22 12:19:27 +02:00
dirpkg-1-dir1 Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-1-dir2 Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-2-dir1 Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-2-dir2 Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-3-dir1 Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-3-dir2 Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
symlink-dir-test1 Bug 19867 - abipkgdiff skips symbolic links 2016-03-25 13:52:02 +01:00
dbus-glib-0.80-3.fc12.x86_64.rpm Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
dbus-glib-0.104-3.fc23.x86_64.rpm Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
dirpkg-0-report-0.txt Make abipkgdiff compare directories containing binaries 2015-08-22 12:19:27 +02:00
dirpkg-1-report-0.txt Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-1-report-1.txt Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-2-report-0.txt Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-2-report-1.txt Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-3-report-0.txt Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-3-report-1.txt Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
dirpkg-3-report-2.txt Add the option of printing the file, line and column information about a type being reported. 2015-12-15 12:32:55 +01:00
dirpkg-3.suppr Bug 19082 - Recognize suppression spec files 2015-10-13 09:19:47 +02:00
empty-pkg-libvirt-0.9.11.3-1.el7.ppc64.rpm Do not abort when there is no binary to compare in a package 2015-11-26 11:59:42 +01:00
empty-pkg-libvirt-1.2.17-13.el7_2.2.ppc64.rpm Do not abort when there is no binary to compare in a package 2015-11-26 11:59:42 +01:00
empty-pkg-report-0.txt Do not abort when there is no binary to compare in a package 2015-11-26 11:59:42 +01:00
gtk2-debuginfo-2.24.22-5.el7.i686.rpm Bug 19844 - Cannot try to canonicalize a type that is being constructed 2016-03-18 18:15:29 +01:00
gtk2-debuginfo-2.24.28-8.el7.i686.rpm Bug 19844 - Cannot try to canonicalize a type that is being constructed 2016-03-18 18:15:29 +01:00
gtk2-immodule-xim-2.24.22-5.el7.i686--gtk2-immodule-xim-2.24.28-8.el7.i686-report-0.txt Bug 19844 - Cannot try to canonicalize a type that is being constructed 2016-03-18 18:15:29 +01:00
gtk2-immodule-xim-2.24.22-5.el7.i686.rpm Bug 19844 - Cannot try to canonicalize a type that is being constructed 2016-03-18 18:15:29 +01:00
gtk2-immodule-xim-2.24.28-8.el7.i686.rpm Bug 19844 - Cannot try to canonicalize a type that is being constructed 2016-03-18 18:15:29 +01:00
libICE-1.0.6-1.el6.x86_64.rpm Bug 19778 - diff_has_ancestor_filtered_out() loops forever 2016-03-07 12:30:13 +01:00
libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt Bug 19778 - diff_has_ancestor_filtered_out() loops forever 2016-03-07 12:30:13 +01:00
libICE-1.0.9-2.el7.x86_64.rpm Bug 19778 - diff_has_ancestor_filtered_out() loops forever 2016-03-07 12:30:13 +01:00
libICE-debuginfo-1.0.6-1.el6.x86_64.rpm Bug 19778 - diff_has_ancestor_filtered_out() loops forever 2016-03-07 12:30:13 +01:00
libICE-debuginfo-1.0.9-2.el7.x86_64.rpm Bug 19778 - diff_has_ancestor_filtered_out() loops forever 2016-03-07 12:30:13 +01:00
libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt Canonicalize all types that got scheduled for late canonicalization 2015-08-20 11:44:45 +02:00
libsigc++-2.0-0c2a_2.4.0-1_amd64.deb Add support for .deb files to abipkgdiff 2015-08-14 13:36:23 +02:00
libsigc++-2.0-0c2a-dbgsym_2.4.0-1_amd64.ddeb Add support for .deb files to abipkgdiff 2015-08-14 13:36:23 +02:00
libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64.deb Add support for .deb files to abipkgdiff 2015-08-14 13:36:23 +02:00
libsigc++-2.0-0v5-dbgsym_2.4.1-1ubuntu2_amd64.ddeb Add support for .deb files to abipkgdiff 2015-08-14 13:36:23 +02:00
qemu-img-rhev-2.3.0-7.el7.ppc64--qemu-img-rhev-2.3.0-20.el7.ppc64-report-0.txt Correctly handle fn DIE with abstract_origin in alt debug info 2015-11-12 16:53:36 +01:00
qemu-img-rhev-2.3.0-7.el7.ppc64.rpm Correctly handle fn DIE with abstract_origin in alt debug info 2015-11-12 16:53:36 +01:00
qemu-img-rhev-2.3.0-20.el7.ppc64.rpm Correctly handle fn DIE with abstract_origin in alt debug info 2015-11-12 16:53:36 +01:00
qemu-kvm-rhev-debuginfo-2.3.0-7.el7.ppc64.rpm Correctly handle fn DIE with abstract_origin in alt debug info 2015-11-12 16:53:36 +01:00
qemu-kvm-rhev-debuginfo-2.3.0-20.el7.ppc64.rpm Correctly handle fn DIE with abstract_origin in alt debug info 2015-11-12 16:53:36 +01:00
symlink-dir-test1-report0.txt Bug 19867 - abipkgdiff skips symbolic links 2016-03-25 13:52:02 +01:00
tarpkg-0-dir1.ta Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-dir1.tar Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-dir1.tar.bz2 Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-dir1.tar.gz Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-dir2.ta Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-dir2.tar Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-dir2.tar.bz2 Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-dir2.tar.gz Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-0-report-0.txt Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
tarpkg-1-dir1.tar.gz Bug 19961 - Distinguish between PI executable and shared library 2016-04-20 17:05:16 +02:00
tarpkg-1-dir2.tar.gz Bug 19961 - Distinguish between PI executable and shared library 2016-04-20 17:05:16 +02:00
tarpkg-1-report-0.txt Bug 19961 - Distinguish between PI executable and shared library 2016-04-20 17:05:16 +02:00
tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt Bug 19658 - Type canonicalization slow for the 2nd binary loaded 2016-02-18 16:06:13 +01:00
tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt Make abi{pkg}diff filter out changes about private types 2016-05-24 10:32:08 +02:00
tbb-4.1-9.20130314.fc22.x86_64.rpm Fix regression on the support for alternate debug info files 2016-01-06 19:50:28 +01:00
tbb-4.3-3.20141204.fc23.x86_64.rpm Fix regression on the support for alternate debug info files 2016-01-06 19:50:28 +01:00
tbb-debuginfo-4.1-9.20130314.fc22.x86_64.rpm Fix regression on the support for alternate debug info files 2016-01-06 19:50:28 +01:00
tbb-debuginfo-4.3-3.20141204.fc23.x86_64.rpm Fix regression on the support for alternate debug info files 2016-01-06 19:50:28 +01:00
tbb-devel-4.1-9.20130314.fc22.x86_64.rpm Make abi{pkg}diff filter out changes about private types 2016-05-24 10:32:08 +02:00
tbb-devel-4.3-3.20141204.fc23.x86_64.rpm Make abi{pkg}diff filter out changes about private types 2016-05-24 10:32:08 +02:00
test-rpm-report-0.txt Show linkage names in abipkgdiff output 2015-07-21 16:09:53 +02:00
test-rpm-report-1.txt Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
test-rpm-report-2.txt Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
test-rpm-report-3.txt Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
test-rpm-report-4.txt Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
test-rpm-report-5.txt Add --no-added-syms to abipkgdiff 2015-08-06 15:22:38 +02:00