diff --git a/.gitignore b/.gitignore index e69de29..e912284 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,28 @@ +/libabigail-1.0-git-164d17e.tar.gz +/libabigail-1.0.rc0.tar.gz +/no-designated-init-for-el6-patch.txt +/enum-val-fix-patch.txt +/libabigail-1.0.rc2.tar.gz +/std-lower-el6-patch.txt +/enum-val-stable-on-32-64-bits-patch.txt +/libabigail-1.0.rc3.tar.gz +/fix-test-diff-pkg-patch.txt +/libabigail-1.0.rc4.tar.gz +/0001-Bug-19961-Distinguish-between-PI-executable-and-shar.patch +/0002-Bug-19964-Cannot-load-function-aliases-on-ppc64.patch +/libabigail-1.0.rc5.tar.gz +/0001-Fix-python-interpreter-patch-for-el6.patch +/libabigail-1.0.rc6.tar.gz +/0001-A-suppressed-diff-node-implies-suppressing-all-equiv.patch +/0001-Bug-20927-Segfault-when-HOME-is-not-set.patch +/0001-Fix-aborting-when-reading-.foo-symbols-from-a-ppc64-.patch +/libabigail-1.0.tar.gz +/libabigail-1.1.tar.gz +/libabigail-1.2.tar.gz +/libabigail-1.3.tar.gz +/libabigail-1.4.tar.gz +/libabigail-1.5.tar.gz +/Support-having-several-debuginfo-search-dirs-for-a-b.patch +/Add-a-fail-no-debug-info-to-abidiff.patch +/libabigail-1.6.tar.gz +/libabigail-1.7.tar.gz diff --git a/enum-val-fix-patch.txt b/enum-val-fix-patch.txt new file mode 100644 index 0000000..e8070cb --- /dev/null +++ b/enum-val-fix-patch.txt @@ -0,0 +1,93 @@ +diff --git a/include/abg-ir.h b/include/abg-ir.h +index daeec5c..cb9169b 100644 +--- a/include/abg-ir.h ++++ b/include/abg-ir.h +@@ -1832,7 +1832,7 @@ public: + void + set_name(const string& n); + +- ssize_t ++ size_t + get_value() const; + + void +diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc +index 1eda045..313b282 100644 +--- a/src/abg-dwarf-reader.cc ++++ b/src/abg-dwarf-reader.cc +@@ -3956,6 +3956,7 @@ die_unsigned_constant_attribute(Dwarf_Die* die, + return true; + } + ++#if 0 + /// Get the value of an attribute that is supposed to be a signed + /// constant. + /// +@@ -3988,7 +3989,7 @@ die_signed_constant_attribute(Dwarf_Die* die, + cst = result; + return true; + } +- ++#endif + /// Get the value of a DIE attribute; that value is meant to be a + /// flag. + /// +@@ -6476,8 +6477,8 @@ build_enum_type(read_context& ctxt, + string n, m; + location l; + die_loc_and_name(ctxt, &child, loc, n, m); +- ssize_t val = 0; +- die_signed_constant_attribute(&child, DW_AT_const_value, val); ++ size_t val = 0; ++ die_unsigned_constant_attribute(&child, DW_AT_const_value, val); + enms.push_back(enum_type_decl::enumerator(n, val)); + } + while (dwarf_siblingof(&child, &child) == 0); +diff --git a/src/abg-ir.cc b/src/abg-ir.cc +index dedf053..c279ad8 100644 +--- a/src/abg-ir.cc ++++ b/src/abg-ir.cc +@@ -8200,7 +8200,7 @@ enum_type_decl::enumerator::set_name(const string& n) + /// + /// @return the value of the current instance of + /// enum_type_decl::enumerator. +-ssize_t ++size_t + enum_type_decl::enumerator::get_value() const + {return priv_->value_;} + +diff --git a/src/abg-reader.cc b/src/abg-reader.cc +index 4da7f4d..3c19481 100644 +--- a/src/abg-reader.cc ++++ b/src/abg-reader.cc +@@ -3176,7 +3176,7 @@ build_enum_type_decl(read_context& ctxt, + if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) + { + string name; +- ssize_t value = 0; ++ size_t value = 0; + + xml_char_sptr a = xml::build_sptr(xmlGetProp(n, BAD_CAST("name"))); + if (a) +@@ -3185,7 +3185,7 @@ build_enum_type_decl(read_context& ctxt, + a = xml::build_sptr(xmlGetProp(n, BAD_CAST("value"))); + if (a) + { +- value = strtol(CHAR_STR(a), NULL, 0); ++ value = strtoll(CHAR_STR(a), NULL, 0); + if (errno == ERANGE) + return nil; + } +diff --git a/src/abg-writer.cc b/src/abg-writer.cc +index 8d64ce5..dcece4a 100644 +--- a/src/abg-writer.cc ++++ b/src/abg-writer.cc +@@ -1861,7 +1861,7 @@ write_enum_type_decl(const enum_type_decl_sptr decl, + o << "\n"; + } + diff --git a/libabigail.spec b/libabigail.spec new file mode 100644 index 0000000..1e34551 --- /dev/null +++ b/libabigail.spec @@ -0,0 +1,296 @@ +%global tarball_revision 0 +%global tarball_name %{name}-%{version} + +Name: libabigail +Version: 1.7 +Release: 1%{?dist} +Summary: Set of ABI analysis tools + +License: LGPLv3+ +URL: https://sourceware.org/libabigail/ +Source0: ftp://mirrors.kernel.org/sourceware/libabigail/%{tarball_name}.tar.gz + +BuildRequires: gcc-c++ +BuildRequires: libtool +BuildRequires: elfutils-devel +BuildRequires: libxml2-devel +BuildRequires: doxygen +BuildRequires: python-sphinx +BuildRequires: texinfo +BuildRequires: dos2unix +BuildRequires: dpkg +BuildRequires: python2-devel +BuildRequires: python-argparse +BuildRequires: rpm-python +BuildRequires: python-mock +BuildRequires: koji +BuildRequires: pyxdg +BuildRequires: python-unittest2 +BuildRequires: wget +#For x-rpm mimetype definition! +BuildRequires: mailcap +BuildRequires: koji + +Requires: pyxdg +Requires: rpm-python +Requires: koji +Requires: python2 >= 2.6 +Requires: wget +#For x-rpm mimetype definition! +Requires: mailcap + +%description +The libabigail package comprises seven command line utilities: +abidiff, kmidiff, abipkgdiff, abicompat, abidw, abilint and +fedabipkgdiff. The abidiff command line tool compares the ABI of two +ELF shared libraries and emits meaningful textual reports about +changes impacting exported functions, variables and their types. +Simarly, the kmidiff compares the kernel module interface of two Linux +kernels. abipkgdiff compares the ABIs of ELF binaries contained in +two packages. abicompat checks if a subsequent version of a shared +library is still compatible with an application that is linked against +it. abidw emits an XML representation of the ABI of a given ELF +shared library. abilint checks that a given XML representation of the +ABI of a shared library is correct. fedabipkgdiff interacts with the +Fedora Build System over the internet to let the user compare the ABI +of Fedora packages without having to download them manually. + +Install libabigail if you need to compare the ABI of ELF shared +libraries. + +%package devel +Summary: Shared library and header files to write ABI analysis tools +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +This package contains a shared library and the associated header files +that are necessary to develop applications that use the C++ Libabigail +library. The library provides facilities to analyze and compare +application binary interfaces of shared libraries in the ELF format. + + +%package doc +Summary: Man pages, texinfo files and html manuals of libabigail +Requires(post): info +Requires(preun): info + +%description doc +This package contains documentation for the libabigail tools in the +form of man pages, texinfo documentation and API documentation in html +format. + +%prep +%setup -n %{tarball_name} + +%build +# Sometimes the libtool program generated on the developer's machine +# when she was doing make dist contains some flags that trigger the +# use of "/usr/lib/rpm/redhat/redhat-hardened-ld", which is not +# present on el6. That flags like in the fild build-aux/ltmain.sh +# looks like: +# compiler_flags="-specs=/usr/lib/rpm/redhat/redhat-hardened-ld" +# So let's remove those flags if they are present. +if test -f build-aux/ltmain.sh; then + sed -i -e "s/compiler_flags=.*/compiler_flags=/" build-aux/ltmain.sh +fi +%configure --disable-python3 --disable-silent-rules --disable-zip-archive --disable-static +make %{?_smp_mflags} +pushd doc +make html-doc +pushd manuals +make html-doc +%if 0%{!?el6}||0%{!?el5} +make man +make info +%endif +popd +popd + +%install +%make_install +find %{buildroot} -name '*.la' -exec rm -f {} ';' + +%if 0%{!?el6}&&0%{!?el5} +# Install man and texinfo files as they are not installed by the +# default 'install' target of the makefile. +make -C doc/manuals install-man-and-info-doc DESTDIR=%{buildroot} +dos2unix doc/manuals/html/_static/jquery.js +%endif + +%check +time make %{?_smp_mflags} check || (cat tests/test-suite.log && exit 2) + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%if 0%{!?el6}&&0%{!?el5} +%post doc +/usr/sbin/install-info %{_infodir}/abigail.info* %{_infodir}/dir 2>/dev/null || : + +%preun doc +if [ $1 -eq 0 ]; then + /usr/sbin/install-info --delete %{_infodir}/abigail.info* %{_infodir}/dir 2>/dev/null || : +fi +%endif + +%files +%{_bindir}/abicompat +%{_bindir}/abidiff +%{_bindir}/abidw +%{_bindir}/abilint +%{_bindir}/abipkgdiff +%{_bindir}/fedabipkgdiff +%{_bindir}/kmidiff +%{_libdir}/libabigail.so.0 +%{_libdir}/libabigail.so.0.0.0 +%{_libdir}/libabigail/default.abignore +%if 0%{?el6}||0%{?el5} +%doc README AUTHORS ChangeLog COPYING COPYING-LGPLV3 COPYING-GPLV3 doc/manuals/html/* +%else +%doc README AUTHORS ChangeLog +%license COPYING COPYING-LGPLV3 COPYING-GPLV3 +%endif + +%files devel +%{_libdir}/libabigail.so +%{_libdir}/pkgconfig/libabigail.pc +%{_includedir}/* +%{_datadir}/aclocal/abigail.m4 + +%if 0%{!?el6}&&0%{!?el5} +%files doc +%license COPYING COPYING-LGPLV3 COPYING-GPLV3 +%doc doc/manuals/html/* +%{_mandir}/man1/* +%{_mandir}/man7/* +%{_infodir}/abigail.info* +%endif + +%changelog +* Tue Feb 25 2020 Dodji Seketeli - 1.7-1 +- Update to upstream 1.7 +- Add Koji as BuildRequires + Fixes: RHBZ#1799575 + +* Thu Mar 28 2019 Dodji Seketeli - 1.6-1 +- Update to upstream 1.6 +- Remove patches: + Support-having-several-debuginfo-search-dirs-for-a-b.patch + Add-a-fail-no-debug-info-to-abidiff.patch + +* Mon Nov 12 2018 Dodji Seketeli - 1.5-2 +- Apply patches + Support-having-several-debuginfo-search-dirs-for-a-b.patch and + Add-a-fail-no-debug-info-to-abidiff.patch + +* Thu Oct 25 2018 Dodji Seketeli - 1.5-1 +- Update to upstream 1.5 tarball + +* Fri Jul 13 2018 Dodji Seketeli - 1.4-1 +- Update to upstream 1.4 +- Merge change to build fedabipkgdiff in Fedora only + +* Wed May 16 2018 Dodji Seketeli - 1.3-1 +- Update to upstream 1.3 version +- Make sure to disable python3 + +* Tue Mar 6 2018 Dodji Seketeli - 1.2-1 +- Update to upstream 1.2 + +* Tue Jan 30 2018 Dodji Seketeli - 1.1-1 +- Update to upstream 1.1 + +* Wed Nov 22 2017 Dodji Seketeli - 1.0-1 +- Add missing %%{dist} to release. + +* Tue Nov 7 2017 Dodji Seketeli - 1.0-1 +- Update to upstream 1.0 tarball +- Adjust tarball_revision and tarball_name macros +- Adjust Release macro +- Added missing build and runtime require 'mailcap' to allow + fedabipkgdiff to detect RPM files +- Update description to account for the new kmidiff tool +- Remove patches that got applied upstream: + 0001-A-suppressed-diff-node-implies-suppressing-all-equiv.patch + 0001-Bug-20927-Segfault-when-HOME-is-not-set.patch + 0001-Fix-aborting-when-reading-.foo-symbols-from-a-ppc64-.patch +- Add kmidiff to the RPM + +* Fri Dec 9 2016 Dodji Seketeli - 1.0-0.8.rc6.4 +- Fix upstream bug - Fix aborting when reading .foo symbols from a ppc64 binary + +* Mon Dec 5 2016 Dodji Seketeli - 1.0-0.8.rc6.3 +- Fix upstream Bug 20927 - Segfault when abidiff is invoked with $HOME not set + Apply the upstream patch here. + +* Sat Nov 26 2016 Dodji Seketeli - 1.0-0.8.rc6.2 +- Fix an issue where some suppressed diff nodes are still visible in change reports + This implies applying upstream patch: + "[PATCH] A suppressed diff node implies suppressing all equivalent nodes too" + +* Thu Nov 24 2016 Dodji Seketeli - 1.0-0.8.rc6.1 +- Update to upstream 1.0.rc6 tarball +- Add pyxdg, rpm-python, koji and python2 as runtime dependencies. +- Add wget as a build and runtime requirement. It's useful for fedabipkgdiff. +- Update package description to mention fedabipkgdiff + +* Tue Jun 28 2016 Dodji Seketeli - 1.0-0.8.rc5.2 +- Add README + +* Mon Jun 27 2016 Dodji Seketeli - 1.0-0.8.rc5.1 +- Update to upstream 1.0.rc5 tarball +- Add new build requires for new fedabipkgdiff tool: python2-devel, + python-argparse, rpm-python, python-mock, koji, pyxdg, + python-unittest2 +- Add new %%{_bindir}/fedabipkgdiff binary and + %%{_libdir}/libabigail/default.abignore configuration file to the set + of distributed files. +- Drop patches that were integrated upstream: + 0001-Bug-19961-Distinguish-between-PI-executable-and-shar.patch + 0002-Bug-19964-Cannot-load-function-aliases-on-ppc64.patch + +* Mon Apr 25 2016 Dodji Seketeli - 1.0-0.8.rc4.2 +- Fix PIE and ppc64 function aliases handling. + The exact two upstream bugs fixed are: + Bug 19961 - Distinguish between PI executable and shared library + Bug 19964 - Cannot load function aliases on ppc64 + The two upstream patches applied are 8944ceb9ef03a4187 and 2529f84ae0e2ca2a + +* Sun Apr 17 2016 Dodji Seketeli - 1.0-0.8.rc4.1 +- Update to upstream 1.0.rc4 +- Remove patch fix-test-diff-pkg-patch.txt as it got applied upstream + +* Tue Mar 8 2016 Dodji Seketeli - 1.0-0.rc3.2 +- Fix test-diff-pkg regression test failure due to a race condition. + +* Tue Mar 8 2016 Dodji Seketeli - 1.0-0.rc3.1 +- Update to upstream 1.0.rc3 +- Add gcc-c++ as BuildRequires +- Drop the pactches to 1.0.rc2 as they are now integrated upstream in 1.0.rc3 +- Measure the time taken by regression tests + +* Fri Jan 8 2016 Dodji Seketeli - 1.0-0.rc2.2 +- Add enum-val-stable-on-32-64-bits-patch + +* Fri Jan 8 2016 Dodji Seketeli - 1.0-0.rc2.1 +- Update to upstream 1.0.rc2 +- Build the tests in // if possible +- Add a patch to fix build on el6/g++ 4.4.7 +- Drop the previous patches as they got integrated upstream + +* Tue Nov 17 2015 Dodji Seketeli - 1.0-0.3.rc0 +- Fix use of redhat-hardened-ld link script on el6 +- Add a patch to avoid using designated initializers in tools/abipkgdiff.cc +- Add a patch to avoid a test failure do to loss of precision of + enumerator values on 32 bits x86. + +* Tue Nov 17 2015 Dodji Seketeli - 1.0-0.2.rc0 +- Update to upstream release 1.0.rc0 +- Take a tarball built using make dist now. +- Do not run autoreconf -i anymore, during the build. +- Add redhat-rpm-config to have binaries linked with + /usr/lib/rpm/redhat/redhat-hardened-ld + +* Wed Sep 9 2015 Dodji Seketeli - 1.0-0.1.20150909git164d17e +- Initial package for upstream git commit hash 164d17e diff --git a/no-designated-init-for-el6-patch.txt b/no-designated-init-for-el6-patch.txt new file mode 100644 index 0000000..66356d3 --- /dev/null +++ b/no-designated-init-for-el6-patch.txt @@ -0,0 +1,32 @@ +Do not use designated initializers in abipkgdiff.cc + +So g++ 4.4.7 of el6 does not support designated initializers, so +libabigail fails to build on el6 for that reason. + +This patch uses a more classical syntax for that compiler. + +diff --git a/tools/abipkgdiff.cc b/tools/abipkgdiff.cc +index 3a94223..0e8ad2f 100644 +--- a/tools/abipkgdiff.cc ++++ b/tools/abipkgdiff.cc +@@ -1217,14 +1217,14 @@ prepare_packages(package& first_package, + package_descriptor ea[] = + { + { +- .pkg = first_package, +- .opts = opts, +- .callback = first_package_tree_walker_callback_fn ++ first_package, ++ opts, ++ first_package_tree_walker_callback_fn + }, + { +- .pkg = second_package, +- .opts = opts, +- .callback = second_package_tree_walker_callback_fn ++ second_package, ++ opts, ++ second_package_tree_walker_callback_fn + }, + }; + diff --git a/sources b/sources index e69de29..cf5681d 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +SHA512 (libabigail-1.7.tar.gz) = 02971c8f760cd7c6e7f77ef323c93769270666652a8f491b30cce74aa9bc20e2c5113eca0a534b814e9c8567538b6b7b84d15687e0ac15cf8ece736b2f7e2261