Bug 28669 - increment library versions before tagging releases
Summary: increment library versions before tagging releases
Status: RESOLVED FIXED
Alias: None
Product: libabigail
Classification: Unclassified
Component: default (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: ---
Assignee: Dodji Seketeli
URL:
Keywords:
Depends on:
Blocks: 27019
  Show dependency treegraph
 
Reported: 2021-12-07 22:54 UTC by Ben Woodard
Modified: 2022-10-24 17:59 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
compressed list of abi differences for tagged releases. (127.70 KB, application/x-gzip)
2021-12-07 22:54 UTC, Ben Woodard
Details
patch to add library version (613 bytes, application/mbox)
2021-12-08 22:26 UTC, Ben Woodard
Details
0001-Increment-Library-version.patch (606 bytes, application/mbox)
2021-12-08 22:34 UTC, Ben Woodard
Details
0001-Increment-Library-version.patch 2.1 (606 bytes, application/mbox)
2021-12-08 22:36 UTC, Ben Woodard
Details
0002-Increment-library-version-for-2.1-release.patch (512 bytes, application/mbox)
2021-12-08 22:43 UTC, Ben Woodard
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ben Woodard 2021-12-07 22:54:23 UTC
Created attachment 13830 [details]
compressed list of abi differences for tagged releases.

Even though you use the pimpl idiom the library versions should increase according to because the interface of libabigail is changing. https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html

This confuses some of our tooling which actually looks for cases where library interfaces change but the library soname does not. Of all packages, libabigail should be aware of its own API/ABI changes and recognize how not updating the library version can disable some of the few checks that ld.so does provide.

For example from the tag libabigail-2.0 to the current trunk the difference is:

$ g5/bin/abidiff  libabigail-2.0/lib/libabigail.so.0.0.0 g5/lib/libabigail.so.0.0.0 
Functions changes summary: 15 Removed (12 filtered out), 4 Changed (164 filtered out), 21 Added (3 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

15 Removed functions:

  [D] 'function abigail::dwarf_reader::status abigail::dwarf_reader::operator&(abigail::dwarf_reader::status, abigail::dwarf_reader::status)'    {_ZN7abigail12dwarf_readeranENS0_6statusES1_}
  [D] 'function abigail::dwarf_reader::status& abigail::dwarf_reader::operator&=(abigail::dwarf_reader::status&, abigail::dwarf_reader::status)'    {_ZN7abigail12dwarf_readeraNERNS0_6statusES1_}
  [D] 'function abigail::dwarf_reader::status abigail::dwarf_reader::operator|(abigail::dwarf_reader::status, abigail::dwarf_reader::status)'    {_ZN7abigail12dwarf_readerorENS0_6statusES1_}
  [D] 'function abigail::dwarf_reader::status& abigail::dwarf_reader::operator|=(abigail::dwarf_reader::status&, abigail::dwarf_reader::status)'    {_ZN7abigail12dwarf_readeroRERNS0_6statusES1_}
  [D] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_and_add_corpus_to_group_from_elf(abigail::dwarf_reader::read_context&, abigail::ir::corpus_group&, abigail::dwarf_reader::status&)'    {_ZN7abigail12dwarf_reader37read_and_add_corpus_to_group_from_elfERNS0_12read_contextERNS_2ir12corpus_groupERNS0_6statusE}
  [D] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(abigail::dwarf_reader::read_context&, abigail::dwarf_reader::status&)'    {_ZN7abigail12dwarf_reader20read_corpus_from_elfERNS0_12read_contextERNS0_6statusE}
  [D] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(const std::string&, const std::vector<char**, std::allocator<char**> >&, abigail::ir::environment*, bool, abigail::dwarf_reader::status&)'    {_ZN7abigail12dwarf_reader20read_corpus_from_elfERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorIPPcSaISB_EEPNS_2ir11environmentEbRNS0_6statusE}
  [D] 'function std::string abigail::dwarf_reader::status_to_diagnostic_string(abigail::dwarf_reader::status)'    {_ZN7abigail12dwarf_reader27status_to_diagnostic_stringB5cxx11ENS0_6statusE}
  [D] 'function abigail::ir::type_base_sptr abigail::ir::look_through_no_op_qualified_type(const abigail::ir::type_base_sptr&)'    {_ZN7abigail2ir33look_through_no_op_qualified_typeERKSt10shared_ptrINS0_9type_baseEE}
  [D] 'method bool abigail::suppr::type_suppression::insertion_range::eval_boundary(abigail::ir::class_decl_sptr, ssize_t&)'    {_ZN7abigail5suppr16type_suppression15insertion_range13eval_boundaryESt10shared_ptrINS2_8boundaryEES3_INS_2ir10class_declEERl}
  [D] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::integer_boundary(int)'    {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC2Ei, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC1Ei}
  [D] 'method int abigail::suppr::type_suppression::insertion_range::integer_boundary::operator int() const'    {_ZNK7abigail5suppr16type_suppression15insertion_range16integer_boundarycviEv}
  [D] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::priv::priv(int)'    {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC2Ei, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC1Ei}
  [D] 'method bool abigail::xml_writer::write_context::decl_name_is_emitted(const abigail::interned_string&) const'    {_ZNK7abigail10xml_writer13write_context20decl_name_is_emittedERKNS_15interned_stringE}
  [D] 'method void abigail::xml_writer::write_context::record_decl_as_emitted(const abigail::ir::decl_base_sptr&) const'    {_ZNK7abigail10xml_writer13write_context22record_decl_as_emittedERKSt10shared_ptrINS_2ir9decl_baseEE}

21 Added functions:

  [A] 'function void abigail::abigail_get_abixml_version(std::string&, std::string&)'    {abigail_get_abixml_version}
  [A] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_and_add_corpus_to_group_from_elf(abigail::dwarf_reader::read_context&, abigail::ir::corpus_group&, abigail::elf_reader::status&)'    {_ZN7abigail12dwarf_reader37read_and_add_corpus_to_group_from_elfERNS0_12read_contextERNS_2ir12corpus_groupERNS_10elf_reader6statusE}
  [A] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(abigail::dwarf_reader::read_context&, abigail::elf_reader::status&)'    {_ZN7abigail12dwarf_reader20read_corpus_from_elfERNS0_12read_contextERNS_10elf_reader6statusE}
  [A] 'function abigail::ir::corpus_sptr abigail::dwarf_reader::read_corpus_from_elf(const std::string&, const std::vector<char**, std::allocator<char**> >&, abigail::ir::environment*, bool, abigail::elf_reader::status&)'    {_ZN7abigail12dwarf_reader20read_corpus_from_elfERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorIPPcSaISB_EEPNS_2ir11environmentEbRNS_10elf_reader6statusE}
  [A] 'function abigail::elf_reader::status abigail::elf_reader::operator&(abigail::elf_reader::status, abigail::elf_reader::status)'    {_ZN7abigail10elf_readeranENS0_6statusES1_}
  [A] 'function abigail::elf_reader::status& abigail::elf_reader::operator&=(abigail::elf_reader::status&, abigail::elf_reader::status)'    {_ZN7abigail10elf_readeraNERNS0_6statusES1_}
  [A] 'function abigail::elf_reader::status abigail::elf_reader::operator|(abigail::elf_reader::status, abigail::elf_reader::status)'    {_ZN7abigail10elf_readerorENS0_6statusES1_}
  [A] 'function abigail::elf_reader::status& abigail::elf_reader::operator|=(abigail::elf_reader::status&, abigail::elf_reader::status)'    {_ZN7abigail10elf_readeroRERNS0_6statusES1_}
  [A] 'function std::string abigail::elf_reader::status_to_diagnostic_string(abigail::elf_reader::status)'    {_ZN7abigail10elf_reader27status_to_diagnostic_stringB5cxx11ENS0_6statusE}
  [A] 'function abigail::ir::var_decl_sptr abigail::ir::get_last_data_member(const abigail::ir::class_or_union_sptr&)'    {_ZN7abigail2ir20get_last_data_memberERKSt10shared_ptrINS0_14class_or_unionEE}
  [A] 'function bool abigail::ir::get_next_data_member_offset(const abigail::ir::class_or_union_sptr&, const abigail::ir::var_decl_sptr&, uint64_t&)'    {_ZN7abigail2ir27get_next_data_member_offsetERKSt10shared_ptrINS0_14class_or_unionEERKS1_INS0_8var_declEERm}
  [A] 'function bool abigail::ir::is_non_canonicalized_type(const abigail::ir::type_base*)'    {_ZN7abigail2ir25is_non_canonicalized_typeEPKNS0_9type_baseE}
  [A] 'function bool abigail::ir::is_non_canonicalized_type(const abigail::ir::type_base_sptr&)'    {_ZN7abigail2ir25is_non_canonicalized_typeERKSt10shared_ptrINS0_9type_baseEE}
  [A] 'function abigail::ir::decl_base_sptr abigail::ir::strip_useless_const_qualification(const abigail::ir::qualified_type_def_sptr)'    {_ZN7abigail2ir33strip_useless_const_qualificationESt10shared_ptrINS0_18qualified_type_defEE}
  [A] 'method bool abigail::suppr::type_suppression::insertion_range::boundary_value_is_end()'    {_ZN7abigail5suppr16type_suppression15insertion_range21boundary_value_is_endEm}
  [A] 'method bool abigail::suppr::type_suppression::insertion_range::eval_boundary(abigail::ir::class_decl_sptr, uint64_t&)'    {_ZN7abigail5suppr16type_suppression15insertion_range13eval_boundaryESt10shared_ptrINS2_8boundaryEES3_INS_2ir10class_declEERm}
  [A] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::integer_boundary(uint64_t)'    {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC2Em, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundaryC1Em}
  [A] 'method uint64_t abigail::suppr::type_suppression::insertion_range::integer_boundary::operator uint64_t() const'    {_ZNK7abigail5suppr16type_suppression15insertion_range16integer_boundarycvmEv}
  [A] 'method abigail::suppr::type_suppression::insertion_range::integer_boundary::priv::priv(uint64_t)'    {_ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC2Em, aliases _ZN7abigail5suppr16type_suppression15insertion_range16integer_boundary4privC1Em}
  [A] 'function std::string abigail::tools_utils::get_abixml_version_string()'    {_ZN7abigail11tools_utils25get_abixml_version_stringB5cxx11Ev}
  [A] 'method void abigail::xml_writer::write_context::record_decl_as_emitted(const abigail::ir::decl_base_sptr&)'    {_ZN7abigail10xml_writer13write_context22record_decl_as_emittedERKSt10shared_ptrINS_2ir9decl_baseEE}

4 functions with some indirect sub-type change:

  [C] 'method abigail::ir::corpus::origin abigail::ir::corpus::get_origin() const' at abg-corpus.cc:855:1 has some indirect sub-type changes:
    return type changed:
      type size hasn't changed
      1 enumerator insertion:
        'abigail::ir::corpus::origin::CTF_ORIGIN' value '3'
      1 enumerator change:
        'abigail::ir::corpus::origin::LINUX_KERNEL_BINARY_ORIGIN' from value '3' to '4' at abg-corpus.h:44:1

  [C] 'method void abigail::ir::corpus::set_origin(abigail::ir::corpus::origin)' at abg-corpus.cc:862:1 has some indirect sub-type changes:
    parameter 1 of type 'enum abigail::ir::corpus::origin' has sub-type changes:
      enum type 'enum abigail::ir::corpus::origin' changed at abg-corpus.h:44:1, as reported earlier

  [C] 'method int abigail::suppr::type_suppression::insertion_range::integer_boundary::as_integer() const' at abg-suppression.cc:1470:1 has some indirect sub-type changes:
    return type changed:
      entity changed from 'int' to compatible type 'typedef uint64_t' at stdint-uintn.h:27:1
        type name changed from 'int' to 'unsigned long int'
        type size changed from 32 to 64 (in bits)

  [C] 'function void abigail::xml_writer::set_annotate(abigail::xml_writer::write_context&, bool)' at abg-writer.cc:2098:1 has some indirect sub-type changes:
    parameter 1 of type 'abigail::xml_writer::write_context&' has sub-type changes:
      in referenced type 'class abigail::xml_writer::write_context' at abg-writer.cc:143:1:
        type size hasn't changed
        1 data member change:
          name of 'abigail::xml_writer::write_context::m_emitted_decls_map' changed to 'abigail::xml_writer::write_context::m_emitted_decls_set' at abg-writer.cc:171:1

This has not just this particular release every tagged release since 1.0 has had ABI changes.

libabigail-1.0_to_libabigail-1.1.abidiff
Functions changes summary: 3 Removed, 0 Changed, 12 Added (1 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

libabigail-1.1_to_libabigail-1.2.abidiff
Functions changes summary: 5 Removed, 1 Changed (150 filtered out), 24 Added (6 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 18 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 4 Added variable symbols not referenced by debug info

libabigail-1.2_to_libabigail-1.3.abidiff
Functions changes summary: 2 Removed, 7 Changed (295 filtered out), 48 Added (54 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 1 Added function symbol not referenced by debug info
Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info

libabigail-1.3_to_libabigail-1.4.abidiff
Functions changes summary: 0 Removed, 24 Changed (357 filtered out), 19 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

libabigail-1.4_to_libabigail-1.5.abidiff
Functions changes summary: 0 Removed, 5 Changed (684 filtered out), 14 Added (11 filtered out) functions
Variables changes summary: 1 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 11 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 5 Added variable symbols not referenced by debug info

libabigail-1.5_to_libabigail-1.6.abidiff
Functions changes summary: 18 Removed, 9 Changed (580 filtered out), 50 Added (111 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 2 Removed, 2 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info

libabigail-1.6_to_libabigail-1.7.abidiff
Functions changes summary: 635 Removed (6515 filtered out), 377 Changed (1061 filtered out), 807 Added (8698 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 1 Added variable
Function symbols changes summary: 1673 Removed, 1207 Added function symbols not referenced by debug info
Variable symbols changes summary: 674 Removed, 408 Added variable symbols not referenced by debug info

libabigail-1.7_to_libabigail-1.8.abidiff
Functions changes summary: 55 Removed (278 filtered out), 184 Changed (1679 filtered out), 126 Added (637 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 59 Removed, 85 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 11 Added variable symbols not referenced by debug info

libabigail-1.8.1_to_libabigail-1.8.2.abidiff
Functions changes summary: 5 Removed (41 filtered out), 3 Changed (1209 filtered out), 35 Added (601 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 11 Added variables
Function symbols changes summary: 0 Removed, 4 Added function symbols not referenced by debug info
Variable symbols changes summary: 1 Removed, 1 Added variable symbols not referenced by debug info

libabigail-1.8.2_to_libabigail-2.0.abidiff
Functions changes summary: 95 Removed (1155 filtered out), 61 Changed (2209 filtered out), 122 Added (2563 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 422 Removed, 197 Added function symbols not referenced by debug info
Variable symbols changes summary: 249 Removed, 5 Added variable symbols not referenced by debug info

libabigail-1.8_to_libabigail-1.8.1.abidiff
Functions changes summary: 0 Removed (31 filtered out), 0 Changed (7 filtered out), 3 Added (38 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 2 Removed, 0 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 3 Added variable symbols not referenced by debug info

libabigail-2.0_to_master.abidiff
Functions changes summary: 15 Removed (12 filtered out), 4 Changed (164 filtered out), 21 Added (3 filtered out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Comment 1 Ben Woodard 2021-12-08 18:30:05 UTC
By compiling with -flto the library version changes seem less monumental because the LTO passes eliminate many of the intralibrary TU TU references. However the overall situation with changes in the API/ABI still are the same.

==> libabigail-1.0_to_libabigail-1.1.abidiff <==
Functions changes summary: 3 Removed, 0 Changed, 12 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

==> libabigail-1.1_to_libabigail-1.2.abidiff <==
Functions changes summary: 3 Removed, 2 Changed (108 filtered out), 21 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 6 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 4 Added variable symbols not referenced by debug info

==> libabigail-1.2_to_libabigail-1.3.abidiff <==
Functions changes summary: 2 Removed, 8 Changed (222 filtered out), 47 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 1 Added function symbol not referenced by debug info
Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info

==> libabigail-1.3_to_libabigail-1.4.abidiff <==
Functions changes summary: 0 Removed, 23 Changed (282 filtered out), 19 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

==> libabigail-1.4_to_libabigail-1.5.abidiff <==
Functions changes summary: 0 Removed, 3 Changed (349 filtered out), 14 Added functions
Variables changes summary: 1 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
Variable symbols changes summary: 0 Removed, 2 Added variable symbols not referenced by debug info

==> libabigail-1.5_to_libabigail-1.6.abidiff <==
Functions changes summary: 12 Removed, 8 Changed (280 filtered out), 34 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

==> libabigail-1.6_to_libabigail-1.7.abidiff <==
Functions changes summary: 510 Removed, 289 Changed (712 filtered out), 625 Added functions
Variables changes summary: 0 Removed, 0 Changed, 1 Added (1 filtered out) variables
Function symbols changes summary: 107 Removed, 106 Added function symbols not referenced by debug info
Variable symbols changes summary: 273 Removed, 138 Added variable symbols not referenced by debug info

==> libabigail-1.7_to_libabigail-1.8.abidiff <==
Functions changes summary: 31 Removed, 183 Changed (589 filtered out), 105 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 39 Removed, 44 Added function symbols not referenced by debug info
Variable symbols changes summary: 0 Removed, 4 Added variable symbols not referenced by debug info

==> libabigail-1.8_to_libabigail-1.8.1.abidiff <==
Functions changes summary: 0 Removed, 1 Changed (3 filtered out), 1 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
Variable symbols changes summary: 0 Removed, 1 Added variable symbol not referenced by debug info

==> libabigail-1.8.1_to_libabigail-1.8.2.abidiff <==
Functions changes summary: 1 Removed, 3 Changed (440 filtered out), 28 Added functions
Variables changes summary: 0 Removed (1 filtered out), 0 Changed, 11 Added variables


==> libabigail-1.8.2_to_libabigail-2.0.abidiff <==
Functions changes summary: 22 Removed, 57 Changed (819 filtered out), 78 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 11 Removed, 28 Added function symbols not referenced by debug info
Variable symbols changes summary: 83 Removed, 4 Added variable symbols not referenced by debug info

==> libabigail-2.0_to_master.abidiff <==
Functions changes summary: 12 Removed, 4 Changed (35 filtered out), 19 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Comment 2 Ben Woodard 2021-12-08 22:26:18 UTC
Created attachment 13833 [details]
patch to add library version

This is a patch for libabigail-2.0 which sets the library version.
Comment 3 Ben Woodard 2021-12-08 22:34:28 UTC
Created attachment 13834 [details]
0001-Increment-Library-version.patch

Update library version in 2.0 branch.
Comment 4 Ben Woodard 2021-12-08 22:36:40 UTC
Created attachment 13835 [details]
0001-Increment-Library-version.patch 2.1

Patch for master which sets the library version. Apply this now.
Comment 5 Ben Woodard 2021-12-08 22:43:20 UTC
Created attachment 13836 [details]
0002-Increment-library-version-for-2.1-release.patch

This is the patch that you should apply just before you release version 2.1
Comment 6 Ben Woodard 2022-10-24 17:59:31 UTC
fixed in 2.1