<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="description" content="Changelog for ABI Compliance Checker" />
  <title>ABI Compliance Checker: History</title>

  <style type="text/css">
    body {
      margin-top: 1.0em;
      background-color: #deeef7;
      font-family: Helvetica, Arial, FreeSans, san-serif;
      color: #000000;
    }
    #container {
      margin: 0 auto;
      width: 700px;
    }
    h1 { font-size: 3.8em; color: #211108; margin-bottom: 3px;margin-top:0px;padding-top:0px;}
    h1 .small { font-size: 0.4em; }
    h1 a { text-decoration: none }
    h2 { font-size: 1.5em; color: #211108; }
    h3 { text-align: center; color: #211108; }
    a { color: #211108; }
    .description { font-size: 1.2em; margin-bottom: 30px; margin-top: 30px; font-style: italic;}
    .download { float: right; }
    pre {padding: 0px;margin: 0px;padding-left: 10px;word-wrap:break-word;white-space: pre-wrap;}
    hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
    .footer { text-align:center; padding-top:30px; font-style: italic; }
    .code {border: dashed 1px gray; background-color: #f0f0f0;}
    .listing {padding: 10px;border: 1px solid black;width: 70%;font-family:"DejaVu Sans Mono", "Monaco", "Courier New", monospace;font-size:14px;}
    .summary {border:1px solid black;border-collapse:collapse;}
    table.summary td, table.summary th {border:1px solid black;padding:2px;}
  </style>

</head>

<body>
<a href="https://github.com/lvc/abi-compliance-checker"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>

<div id="container">

<h1>ABI Compliance<br/>Checker: History</h1>
<p/>
<br/>

<b>Version 1.99.25 (October 07, 2016)</b><br/>
<b>New Options</b>
<ul>
    <li>
        -test-abi-dumper: compare ABI dumps created by the ABI Dumper tool
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Do not list a symbol as removed in the source-compatibility report if it is presented in the dynsym table
    </li>
</ul>
<br/>

<b>Version 1.99.24 (October 04, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Support for Clang
    </li>
    <li>
        Improved a module to compare operating systems
    </li>
    <li>
        Improved support for C++ keywords in C code
    </li>
    <li>
        Improved support for Windows
    </li>
    <li>
        Improved support for MinGW
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -skip-typedef-uncover: do not report a problem if type is covered or uncovered by typedef (useful for broken debug info)
    </li>
    <li>
        -mingw-compatible: if input header files are compatible with the MinGW GCC compiler, then you can tell the tool about this and speedup the analysis
    </li>
    <li>
        -skip-unidentified: skip header files in 'headers' and 'include_preamble' sections of the XML descriptor that cannot be found
    </li>
    <li>
        -disable-constants-check: do not check for changes in constants
    </li>
    <li>
        -skip-added-constants: do not detect added constants
    </li>
    <li>
        -skip-removed-constants: do not detect removed constants
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Do not show GCC version in the source compatibility report
    </li>
    <li>
        Renamed CPU Type column to Arch in the report
    </li>
    <li>
        Support for ABI dumps v3.3
    </li>
    <li>
        The -cpp-compatible option is now enabled by default
    </li>
</ul>
<br/>

<b>Version 1.99.23 (August 15, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Improved generation of quick empty reports
    </li>
    <li>
        Improved SysCheck.pm module for analysis of operating systems
    </li>
    <li>
        Improved support for Windows 10
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -disable-quick-empty-report: do not generate quick empty report if input ABI dumps are equal
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed lists of affected symbols in the XML-format report.
    </li>
</ul>
<br/>

<b>Version 1.99.22 (July 04, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        New style of the report
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -old-style: generate old-style report
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed handling of patterns in -skip-* options
    </li>
    <li>
        Fixed rounding of the BC rate in the report
    </li>
</ul>
<br/>

<b>Version 1.99.21 (May 26, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Up to 4 times faster on big libraries
    </li>
    <li>
        Show compatibility rate instead of verdict in the report
    </li>
    <li>
        Highlight the numbers of high/medium/low severity problems in the report
    </li>
    <li>
        Show percentage of affected methods in the problem description
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -count-symbols: count public symbols in the ABI dump
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed quick comparison of equal ABI dumps
    </li>
</ul>
<br/>

<b>Version 1.99.20 (May 14, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Use regular expressions instead of wildcards in -skip-* options
    </li>
</ul>
<br/>

<b>Version 1.99.19 (April 18, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Support for GCC 5.1
    </li>
</ul>
<b>Misc</b>
<ul>
    <li>
        Separated LICENSE file
    </li>
    <li>
        Removed obsolete descriptors from the package
    </li>
    <li>
        Updated docs
    </li>
</ul>
<br/>

<b>Version 1.99.18 (April 03, 2016)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed comparison of qualifiers in parameter data types
    </li>
    <li>
        Fixed problem descriptions in the report
    </li>
    <li>
        Reduced size of the report
    </li>
    <li>
        Fixed console output
    </li>
</ul>
<br/>

<b>Version 1.99.17 (March 12, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Added a check for changes in parameters of function pointers
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed comparison of virtual table entries
    </li>
    <li>
        Do not show time stamp in the report
    </li>
    <li>
        Fixed -skip-symbols option
    </li>
    <li>
        Fixed detection of the GCC version number
    </li>
</ul>
<br/>

<b>Version 1.99.16 (January 28, 2016)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Do not check private part of the ABI when comparing ABI dumps created by the ABI Dumper tool with use of the -public-headers option
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -check-private-abi: enable check of the private ABI
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed counting of checked data types
    </li>
</ul>
<br/>

<b>Version 1.99.15 (December 11, 2015)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed hang on some template instances
    </li>
    <li>
        Fixed support for old ABI dumps (formatting of data types)
    </li>
    <li>
        Fixed false positives in the report if input ABI dumps contain __unknown__ types
    </li>
</ul>
<br/>

<b>Version 1.99.14 (November 01, 2015)</b><br/>
<b>New Options</b>
<ul>
    <li>
        -skip-types: set list of types that should not be checked
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed formatting of symbol signatures
    </li>
    <li>
        Fixed checks of template types
    </li>
</ul>
<br/>

<b>Version 1.99.13 (October 18, 2015)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Check public symbols only if comparing public ABI dumps generated by the ABI dumper (with -public-headers option)
    </li>
    <li>
        Added more metadata to the report
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -skip-internal-types: do not check data types matched by the pattern
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed Type_Became_Opaque, Parameter_Changed_Register, Parameter_From_Register and Parameter_To_Register rules
    </li>
    <li>
        Fixed method signatures in the report (C++)
    </li>
    <li>
        Fixed -headers-list option
    </li>
    <li>
        Option -skip-internal renamed to -skip-internal-symbols
    </li>
    <li>
        Fixed false positives if vtable-dumper generates incomplete data
    </li>
    <li>
        Fixed Makefile
    </li>
</ul>
<br/>

<b>Version 1.99.12 (September 20, 2015)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed title of the report
    </li>
    <li>
        Print warning if version number is not set in the ABI dump
    </li>
</ul>
<br/>

<b>Version 1.99.11 (September 12, 2015)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed Removed_Field_And_Layout rule
    </li>
    <li>
        Fixed -skip-symbols option
    </li>
</ul>
<br/>

<b>Version 1.99.10 (September 08, 2015)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Improved style of the report
    </li>
    <li>
        New documentation
    </li>
    <li>
        Added more test cases
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -types-list: specify a list of types that should be checked
    </li>
    <li>
        -gcc-options: specify additional compiler options
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Limited number of affected symbols shown for each BC problem in the report
    </li>
    <li>
        Fixed check of the DataType_Size_And_Stack rule
    </li>
    <li>
        Fixed checks of base classes
    </li>
    <li>
        Carefully substitute parameters in rules
    </li>
    <li>
        Allow to check for source-compatibility in the -cmp-systems mode by specifying both -bin and -src options
    </li>
    <li>
        Fixed sorting of problems listed in the report
    </li>
    <li>
        Limit number of checked types if -headers-list option is specified
    </li>
    <li>
        Fixed -headers-list and -skip-symbols options
    </li>
    <li>
        Fixed cross-platform issues
    </li>
    <li>
        Set LANG=C.UTF-8 for objdump
    </li>
    <li>
        Fixed list of headers in the report
    </li>
    <li>
        Fixed number of checked headers in the report summary. Removed support for old dumps &lt; 1.18
    </li>
    <li>
        Renamed -lib-full option to -title
    </li>
    <li>
        Carefully detect architecture of input objects and word size
    </li>
    <li>
        Corrected detection of the GCC target architecture
    </li>
    <li>
        More accurate checking of ABI dump names
    </li>
    <li>
        Fixed regressions with SysCheck.pm module
    </li>
    <li>
        Removed obsolete code and options
    </li>
    <li>
        Fixed the objdump command line when the path contains spaces
    </li>
    <li>
        Simplified Makefile
    </li>
    <li>
        Do not install system descriptors to PREFIX/share
    </li>
    <li>
        Take -relpath option into account in the SysCheck.pm module
    </li>
    <li>
        Fixed CSS styles of the CmpSystems module
    </li>
</ul>
<br/>

<b>Version 1.99.9 (January 23, 2014)</b><br/>
<b>New Options</b>
<ul>
    <li>
        -skip-internal: do not check internal interfaces matched by the pattern 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed duplicated entries in the XML report 
    </li>
    <li>
        Reduced size of the XML report 
    </li>
    <li>
        Fixed duplicated problems related to changed size of a global data 
    </li>
    <li>
        Options -v1 and -v2 can now be used when comparing ABI dumps to change library versions shown in the report 
    </li>
    <li>
        Fixed false positives with the size change of a template instance type 
    </li>
    <li>
        Fixed false positives with the change of a parameter/field type name 
    </li>
</ul>
<br/>

<b>Version 1.99.8.5 (October 03, 2013)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Optimized performance and memory usage (up to 90%) on input objects with a huge number of changes and deep data type trees (e.g. Linux kernel)
    </li>
    <li>
        Partial support for GCC 4.8.{0-1}, waiting for a fix for the bug <a href='http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57850'>57850</a> in the next GCC versions
    </li>
    <li>
        Support for incomplete ABI dumps
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -affected-limit
    </li>
    <li>
        -cpp-incompatible
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed identification of template constructors and destructors 
    </li>
    <li>
        Do not show "this" first argument of methods in the report
    </li>
    <li>
        Corrected descriptions of affected symbols in the report 
    </li>
    <li>
        Fixed false alarms on changed offset of parameters 
    </li>
    <li>
        Do not hang on class A&lt;N&gt;:public A&lt;N-1&gt; 
    </li>
    <li>
        Corrected identification of header files in the include_preamble 
    </li>
    <li>
        Corrected comparison of function pointer types 
    </li>
    <li>
        Corrected rule Global_Data_Size 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Code refactoring
    </li>
</ul>
<br/>

<b>Version 1.99.7 (July 01, 2013)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Added missed fields of template instance types to the ABI dump 
    </li>
    <li>
        Improved support for old ABI dumps 
    </li>
    <li>
        Added Struct_Field_Size_Increased rule 
    </li>
    <li>
        Support for vector types (GCC extension) 
    </li>
    <li>
        Removed duplicates from the ABI dump 
    </li>
    <li>
        Corrected visualization of v-table content in the report 
    </li>
    <li>
        Corrected identification of target headers 
    </li>
    <li>
        Corrected source-compatibility check 
    </li>
    <li>
        Performance optimization (5%) 
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -check - to check completeness of the ABI dump 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed default arguments of methods (broken in 1.99.1 due to added "this" parameter) 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Extended test suite 
    </li>
</ul>
<br/>

<b>Version 1.99.1 (June 07, 2013)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Support for ABI Dumper 0.97 
    </li>
    <li>
        Show added/removed inline virtual functions in the binary compatibility report 
    </li>
    <li>
        Added "this" hidden parameter to non-static class methods in the ABI dump 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed XmlDump module 
    </li>
    <li>
        Fixed CallConv module 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Support for old ABI dumps
    </li>
</ul>
<br/>

<b>Version 1.99 (May 24, 2013)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Support for ABI Dumper 0.95 
    </li>
    <li>
        Added 14 binary-compatibility rules
    </li>
    <li>
        Added 10 source-compatibility rules 
    </li>
    <li>
        Improved model of type alignment 
    </li>
    <li>
        Changed version of ABI dump format to 3.0 
    </li>
    <li>
        Added _vptr member to virtual classes 
    </li>
    <li>
        Added constants defined by GCC to ABI dump 
    </li>
    <li>
        Improved analysis of constants 
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -skip-symbols
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Increased severity of Field_Became_Non_Mutable rule 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Support for old ABI dumps 
    </li>
    <li>
        Extended test suite (+11 test cases) 
    </li>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.98.8 (February 07, 2013)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Show added and removed constants (#defines) in the report 
    </li>
    <li>
        Show changes in unnamed enumerations 
    </li>
    <li>
        Avoid false alarm about renamed field if old name of this field is defined to new (SC) 
    </li>
    <li>
        Recursive comparing of structured data types in *_Format rules 
    </li>
    <li>
        Added Typedef_BaseType_Format rule to check format changes in the typedef base type 
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -tolerant 
    </li>
    <li>
        -tolerance 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Increased severity of Parameter_BaseType_And_Size BC rule (Low to Medium) 
    </li>
    <li>
        Increased severity of Added_Field SC rule (Safe to Low) 
    </li>
    <li>
        Corrected handling of the tool error codes in the test suite 
    </li>
    <li>
        Corrected handling of relative paths in the descriptor options 
    </li>
    <li>
        Skipping linker-related options in gcc_options option of the descriptor 
    </li>
    <li>
        Corrected internal mangler for C++ functions 
    </li>
    <li>
        Corrected conditions for enabling of C++ compatibility mode 
    </li>
    <li>
        Corrected handling of C++ keywords in C-code 
    </li>
    <li>
        Corrected -extended option 
    </li>
    <li>
        Corrected Typedef_BaseType rule 
    </li>
    <li>
        Corrected parsing of default function arguments 
    </li>
    <li>
        Do not check presence of archive utilities if not used 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Extended test suite 
    </li>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.98.7 (December 14, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Extended extra info dumped by -extra-info option 
    </li>
    <li>
        Extended additional info dumped by -extra-dump option 
    </li>
    <li>
        Added specifiers for structs, unions and enums in the report and ABI dump 
    </li>
    <li>
        Improved support for old ABI dumps 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected -debug option 
    </li>
    <li>
        Corrected creating of archives with ABI dumps 
    </li>
    <li>
        Corrected parsing of includes in header files 
    </li>
    <li>
        Corrected processing of undefined symbols 
    </li>
    <li>
        Corrected -app option 
    </li>
    <li>
        Corrected processing of default paths to system libraries 
    </li>
    <li>
        Corrected Makefile 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Code cleaning and refactoring 
    </li>
</ul>
<br/>

<b>Version 1.98.6 (December 04, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Extended -extra-info and -extra-dump options 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected processing of input XML descriptor 
    </li>
    <li>
        Corrected "Parameter_Default_Value_Removed" rule 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.98.5 (November 30, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Support for Mac OS X 10.8 
    </li>
    <li>
        Support for OpenBSD 
    </li>
    <li>
        Support for old GCC versions &lt;= 4.2 
    </li>
    <li>
        Added "throw" and "weak" attributes of methods to ABI dump 
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -extra-info
    </li>
    <li>
        -extra-dump
    </li>
    <li>
        -force
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected order of user-defined include paths 
    </li>
    <li>
        Corrected internal C++ mangler 
    </li>
    <li>
        Removed false positives of the "Parameter_Type_Format" rule 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Extended test suite 
    </li>
    <li>
        Code cleaning 
    </li>
    <li>
        Docs cleaning 
    </li>
</ul>
<br/>

<b>Version 1.98.4 (October 18, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Optimization of memory usage (5%-10%) and performance (5%-10%) 
    </li>
    <li>
        Added "Used Reserved Field" rule of binary compatibility analysis 
    </li>
    <li>
        Improved design of the operating system compatibility report 
    </li>
    <li>
        Added meta descriptors for 334 libraries 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed an issue with diagnostics of added virtual functions 
    </li>
    <li>
        Corrected the list of functions affected by the compatibility problem 
    </li>
    <li>
        Avoid false alarm about removed function if this function became macro (SC) 
    </li>
    <li>
        Corrected parser of C header files 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Extended test suite 
    </li>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.98.3 (July 19, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Implemented a model of calling conventions on x86 and x86_64 
    </li>
    <li>
        Improved diagnostics of changes in function parameters and return value (distribution on registers and stack) 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
       Corrected parser of C++ header files to detect non-member functions inside namespaces 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Added requirement for Ctags (5.8 or newer) 
    </li>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.98.2 (June 26, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Support for reading ABI dumps in XML format 
    </li>
    <li>
        Automatic enabling of c++0x support if needed to compile headers 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected XML and Perl (default) formats of ABI dumps 
    </li>
    <li>
        Improved support for old ABI dumps 
    </li>
    <li>
        Improved -dump-system option 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Improved documentation 
    </li>
</ul>
<br/>

<b>Version 1.98.1 (June 18, 2012)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Removed symbols marked as LOCAL in a shared library from lists of added/removed symbols in source-compatibility report 
    </li>
    <li>
        Fixed a false positive with some removed extern "C" symbols in source-compatibility report 
    </li>
    <li>
        Fixed a bug with removed debug/ directory when using -use-dumps and -debug options together 
    </li>
    <li>
        Added support for "skip_including" section of target system XML descriptors (modules/Targets) used by -dump-system option 
    </li>
    <li>
        Extended XML ABI dumps by size attribute of library symbols 
    </li>
</ul>
<br/>

<b>Version 1.98.0 (June 14, 2012)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Implemented XML format of ABI dumps 
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -dump-format 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Improved support for old ABI dumps 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<br/>

<b>Version 1.97.8 (June 08, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Redesigned format of ABI dump 
    </li>
    <li>
        Optimization of memory usage (5%-10%) and performance (5%-10%) 
    </li>
    <li>
        Improved support for GCC 4.0-4.5 
    </li>
    <li>
        Added "add_namespaces" section of the XML descriptor 
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -open
    </li>
    <li>
        -sort
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Improved support for old ABI dumps 
    </li>
    <li>
        Fixed a bug with auto-detection of include paths when comparing two XML descriptors 
    </li>
    <li>
        Corrected output of -debug option 
    </li>
    <li>
        Corrected -dump-system and -cmp-systems options 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.97.5 (May 14, 2012)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Extended ABI dumps by source-level type declarations 
    </li>
    <li>
        Improved support for old ABI dumps 
    </li>
    <li>
        Optimization of memory usage (20%-30%) and performance (10%-20%) 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected auto-detection of a set of target headers to check/dump in -headers-only mode 
    </li>
    <li>
        Other fixes 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Extended regression test suite 
    </li>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.97.4 (April 16, 2012)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added 16 new binary-compatibility rules 
    </li>
    <li>
        Added 17 new source-compatibility rules 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Added some missed typedef types to function signatures 
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Improved support for old ABI dumps 
    </li>
    <li>
        Support for GCC 4.7 
    </li>
    <li>
        Extended regression test suite 
    </li>
    <li>
        Code cleaning 
    </li>
</ul>
<br/>

<b>Version 1.97.3 (April 03, 2012)</b><br/>
<b>Completed Tasks</b>
<ul>
    <li>
        Implement source-level compatibility checks
    </li>
    <li>
        Implement 2.0 architecture
    </li>
</ul>
<b>New Features</b>
<ul>
    <li>
        Added -browse=PROG option 
    </li>
    <li>
        Added -xml alias option for --report-format=xml
    </li>
    <li>
        Added -binary option to generate binary-compatibility report only 
    </li>
    <li>
        Added -source option to generate source-compatibility report only 
    </li>
    <li>
        Added -bin-report-path option: path to binary-compatibility report 
    </li>
    <li>
        Added -src-report-path option: path to source-compatibility report 
    </li>
</ul>
<b>Other Features</b>
<ul>
    <li>
        Improved debug mode (-debug) 
    </li>
    <li>
        Improved mark-up of the HTML report 
    </li>
    <li>
        Improved mark-up of the HTML report 
    </li>
    <li>
        Improved support for old ABI dumps 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected ABI dumps 
    </li>
</ul>
<br/>

<b>Version 1.96.8 (February 17, 2012)</b><br/>
<b>Completed Tasks</b>
<ul>
    <li>
        Implement XML format of compatibility report
    </li>
    <li>
        Testing on MeeGo 1.2 Harmattan Beta2
    </li>
</ul>
<b>New Features</b>
<ul>
    <li>
        Added hidden statistics line to compatibility report for operating systems
    </li>
    <li>
        Added -headers-list option
    </li>
    <li>
        Added -lang option
    </li>
    <li>
        Support for symbolic links in /usr/include and /usr/lib
    </li>
    <li>
        Added "skip_include_paths" section of the XML-descriptor 
    </li>
    <li>
        Added "skip_including" section of the XML-descriptor
    </li>
    <li>
        Added -list-affected option to create plain list of incompatible symbols
    </li>
    <li>
        Added -quiet option to print all errors and warnings to the log file instead of stderr and stdout
    </li>
    <li>
        Added -stdout option to print results to stdout
    </li>
    <li>
        Added an option to check binary compatibility in the extended sense
    </li>
    <li>
        Improve diagnostic messages for added base classes with virtual functions
    </li>
    <li>
        Added -update option to installer
    </li>
    <li>
        Added a relative default directory to locate modules after installation
    </li>
    <li>
        Compatibility rate = (high+1/2*medium+1/4*low) / number of symbols
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Some symbols with extern "C" linkage are missed in -headers-only mode
    </li>
    <li>
        Changes in global data are not detected under Windows
    </li>
    <li>
        False negative: change global data to be "const"
    </li>
    <li>
        Removed middle enumeration value is reported as renamed
    </li>
    <li>
        False positive: change parameter type from "const int" to "int"
    </li>
    <li>
        Support for old ABI dump format of ACC 1.21.6
    </li>
    <li>
        The tool doesn't search for included headers in /usr/lib/qt4/include/
    </li>
    <li>
        False Negative: Header is incompatible with itself
    </li>
    <li>
        Check libstdc++ in -headers-only mode
    </li>
    <li>
        Restrict checked header files in the -headers-only mode
    </li>
    <li>
        Problem with mangled C++ functions using old ABI dump formats in -headers-only mode
    </li>
    <li>
        Incorrect size of method pointer in ABI dumps
    </li>
    <li>
        False negative: add/remove "register" modifier of the parameter
    </li>
    <li>
        Incorrect WORD size when using old ABI dump format
    </li>
    <li>
        Conflict of a static method with a function of the same name in the ABI dump
    </li>
    <li>
        Missed right bracket of "func-ptr" type in HTML report
    </li>
    <li>
        Incorrect report for overridden methods
    </li>
    <li>
        False negative: override a virtual that doesn't come from a primary base
    </li>
    <li>
        False negative: change a function parameter to be "restrict"
    </li>
    <li>
        False negative: change a field to be "volatile"
    </li>
    <li>
        False negative: change "const"-ness of a return value 
    </li>
    <li>
        False negative: change "volatile" attribute of a method
    </li>
    <li>
        False positive: removed symbols with inline virtual prototype in the leaf class with default constructor
    </li>
</ul>
<br/>

<b>Version 1.94 (September 09, 2011)</b><br/>
<b>Completed Tasks</b>
<ul>
    <li>
        Separated regression tests into the module
    </li>
</ul>
<b>New Features</b>
<ul>
    <li>
        Added Makefile.pl installer
    </li>
</ul>
<br/>

<b>Version 1.93.8 (September 08, 2011)</b><br/>
<b>Completed Tasks</b>
<ul>
    <li>
        Separated rules DB
    </li>
    <li>
        Testing on Symbian SDK
    </li>
    <li>
        Testing on Windows SDK
    </li>
    <li>
        Support for OS3000
    </li>
</ul>
<b>New Features</b>
<ul>
    <li>
        SONAME change in the OS comparison table
    </li>
    <li>
        Added a compatibility percentage to the OS comparison table
    </li>
    <li>
        Added -debug option
    </li>
    <li>
        Added listing of symbols in OS comparison table
    </li>
    <li>
        Use zip format of dumps in Windows
    </li>
    <li>
        Added -dump-system descriptor.xml option
    </li>
    <li>
        Analysis of static libraries 
    </li>
    <li>
        Added -sysinfo option
    </li>
    <li>
        Added -component option
    </li>
    <li>
        Added -nostdinc option 
    </li>
    <li>
        Added "weakly"- and "almost"-compatible verdicts
    </li>
    <li>
         Added "skip_namespaces" section of the library XML-descriptor 
    </li>
    <li>
        Search for modules/ directory in the system
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Missed typedefs in the ABI dump using GCC 4.4.1
    </li>
    <li>
        False negative: change enum member value from zero to non-zero
    </li>
    <li>
        False negative: interchange the positions of two fields in a structure
    </li>
    <li>
        False positive: add a field instead of padding fields
    </li>
    <li>
        Problems with "copied" classes
    </li>
    <li>
        Changes in "private" fields
    </li>
    <li>
        Illegal modulus zero at abi-compliance-checker.pl
    </li>
    <li>
         Incorrect order of include paths
    </li>
    <li>
        Change constness of a class method
    </li>
    <li>
        False negative: change "struct Type" to "union Type"
    </li>
    <li>
        Change parameter type from "..." to "int"
    </li>
    <li>
        Remove/add "const"-qualifier of a method
    </li>
    <li>
        False negative: renamed parameters
    </li>
</ul>
<b>Other</b>
<ul>
    <li>
        Improved debug mode
    </li>
</ul>
<br/>

<b>Version 1.23.5 (July 01, 2011)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected exit codes: 0 - compatible, 1 - incompatible, 2 - error, ...
    </li>
    <li>
        Corrected diagnostic messages for C++ functions with changed signature
    </li>
    <li>
        Fixed regression with C++ non-member functions
    </li>
    <li>
        Removed false positive with overridden private methods
    </li>
    <li>
        Corrected functionality for checking binary compatibility of operating systems
    </li>
    <li>
        Removed false positive for removed default version of a symbol
    </li>
    <li>
        Adapted -dump-system option for MeeGo 1.2 Harmattan
    </li>
    <li>
        Fixed hanging execution on "#include "../../file.h"
    </li>
    <li>
        Fixed incorrect automatic include paths
    </li>
</ul>
<br/>

<b>Version 1.23 (June 07, 2011)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added 42 compatibility checks (total: 83) 
    </li>
    <li>
        Improved diagnostics of compatibility problems 
    </li>
    <li>
        Opened an issue tracker 
    </li>
    <li>
        Support for cross-compilers 
    </li>
    <li>
        Ported to Mac OS X (10.5) and MS Windows (Xp, Vista, 7) 
    </li>
    <li>
        Added a viewer of "real" v-table layouts for changed C++ classes 
    </li>
    <li>
        Added functionality to check OS backward compatibility 
    </li>
    <li>
        Supports for old-version dump formats (>=1.18) 
    </li>
    <li>
        Separated versioning of dump formats 
    </li>
    <li>
        Improved design of the compatibility report 
    </li>
    <li>
        Improved performance 
    </li>
    <li>
        Support for old GCC 3.4.4 
    </li>
</ul>
<b>New Options</b>
<ul>
    <li>
        -cross-gcc: support for cross-compilers 
    </li>
    <li>
        -sysroot: specify the alternative system root directory 
    </li>
    <li>
        -dump-system, -cmp-systems: checking OS backward compatibility 
    </li>
    <li>
        -use-dumps: check for compatibility using the intermediate dumping 
    </li>
    <li>
        -show-retval: show symbol's return value type in the report 
    </li>
    <li>
        -old-dumps: support for old-version dumps 
    </li>
    <li>
        -test-dump: test for dumping functionality 
    </li>
    <li>
        -report-path: change the location of output compatibility report 
    </li>
    <li>
        -dump-path: change the location of output ABI dump 
    </li>
    <li>
        -log1-path, -log2-path: change the location of output logs 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Reduced false positives 
    </li>
    <li>
        Support for C-headers containing C++ keywords 
    </li>
    <li>
        Corrected automatic include paths for headers 
    </li>
</ul>
<br/>

<b>Version 1.21.12 (April 29, 2011)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected automatic detection of include paths for header files
    </li>
    <li>
        Removed false positives with overridden virtual functions
    </li>
    <li>
        Corrected processing of typedef type names, fixed potential program hangup
    </li>
    <li>
        Added some missed problems relating to the return type changes of a function
    </li>
    <li>
        Corrected processing of a translation unit dump generated by modern GCC versions
    </li>
    <li>
        Corrected identifying of inline functions (using the -fkeep-inline-functions GCC option)
    </li>
    <li>
        Corrected parser for C++: analysis of const global data and functions inside a namespace
    </li>
    <li>
        Corrected names and v-table checks for template types
    </li>
    <li>
        Corrected checks for changes in enumerations
    </li>
    <li>
        Corrected ABI dumping and sorting of dumps
    </li>
    <li>
        Corrected analysis of added/removed virtual functions
    </li>
    <li>
        Corrected help message and documentation
    </li>
    <li>
        Documentation has been moved to "doc/" subdirectory
    </li>
    <li>
        Using File::Temp for storing temporary files
    </li>
    <li>
        Support for latest GCC 4.6.0 and old GCC v3.x series
    </li>
    <li>
        Fixed infinite loop finding the path for "which" command in the system
    </li>
    <li>
        Corrected distinction of descriptor kinds (headers, libraries, directories and XML-descriptors)
    </li>
    <li>
        Corrected processing of "include_paths" section of the XML-descriptor
    </li>
</ul>
<br/>

<b>Version 1.21 (August 19, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added -check-implementation option: compare disassembled binary code to detect changes in the interface implementation
    </li>
    <li>
        Added -objects-only option: compare shared objects without header files
    </li>
    <li>
        Added -v1 and -v2 options: specify version number outside the descriptor
    </li>
    <li>
        Improved help message
    </li>
    <li>
        Improved performance of the tool
    </li>
    <li>
        Removed template instances and stdc++ interfaces from the report (C++)
    </li>
    <li>
        Added README.html and CHANGES.html to the package
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected ABI compatibility report
    </li>
    <li>
        Corrected interface names and versions in the report
    </li>
    <li>
        Corrected number of problems in report summary
    </li>
    <li>
        Corrected ABI dump
    </li>
</ul>
<br/>

<b>Version 1.20 (August 30, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added "defines" section of the library descriptor: this section allows to add defines at the headers compiling stage
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected reports about added/withdrawn members in the structure types and added/withdrawn parameters
    </li>
    <li>
        Corrected report about added/withdrawn virtual functions if -headers_only option specified
    </li>
    <li>
        Corrected processing of header paths containing special characters
    </li>
</ul>
<br/>

<b>Version 1.19 (July 22, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added -library_full_name option to display full library name in title of the report
    </li>
    <li>
        Added -relpath option to replace the {RELPATH} in the descriptor for ABI dumping
    </li>
    <li>
        Added "skip_libs" section of the library descriptor: this section contains a list of shared objects and/or directories with shared objects that should not be processed
    </li>
    <li>
        Improved performance on big libraries
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Removed duplicated problems from the report
    </li>
    <li>
        Corrected names of the template instances
    </li>
    <li>
        Corrected checking of reference type changes
    </li>
    <li>
        Corrected titles in the report
    </li>
    <li>
        Corrected size of some array types
    </li>
    <li>
        Corrected checking of added/withdrawn members in the structure types with reserved members
    </li>
    <li>
        Corrected checking of added/withdrawn parameters
    </li>
</ul>
<br/>

<b>Version 1.18 (June 25, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added -relpath1 and -relpath2 options to replace the {RELPATH} in the descriptors; old option -relpath was removed
    </li>
    <li>
        Added "add_include_paths" section of the library descriptor: this section contains a list of include paths that should be added to the automatically detected include paths
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Added some previously missed compatibility problems in the report
    </li>
    <li>
        Corrected techniques for auto-detection of header file dependencies (include paths)
    </li>
    <li>
        Removed problems relating to the changes in the temporary header files
    </li>
    <li>
        Corrected interface signatures in the report
    </li>
    <li>
        Corrected checking of added/withdrawn parameters
    </li>
    <li>
        Corrected changes in the virtual tables of the libraries with symbol versioning
    </li>
    <li>
        Corrected checking of complex namespaces changes (C++)
    </li>
    <li>
        Added namespaces information to the ABI dump
    </li>
</ul>
<br/>

<b>Version 1.17.2 (June 16, 2010)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed -separately option
    </li>
    <li>
        Corrected permissions of LICENSE file
    </li>
    <li>
        Corrected tool description
    </li>
</ul>
<br/>

<b>Version 1.17.1 (June 09, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added -relpath option for adding prefixes to the paths in the library descriptor
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected checking of added/withdrawn parameters
    </li>
    <li>
        Corrected processing of mixed C/C++ header sets
    </li>
    <li>
        Corrected checking of parameter type changes
    </li>
</ul>
<br/>

<b>Version 1.17 (June 08, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Visualizing of the serious changes (added/withdrawn parameters) in the interface signature
    </li>
    <li>
        Recursive analysis of constant changes
    </li>
    <li>
        Separated stderr and stdout streams of the tool
    </li>
    <li>
        Added "skip_constants" section of the library descriptor to skip checking of some constants
    </li>
    <li>
        Added -params option to add function parameter names to the report
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected analysis of virtual table layout changes
    </li>
    <li>
        Corrected analysis of parameter type changes
    </li>
    <li>
        Corrected complex array type names
    </li>
    <li>
        Corrected typedef names
    </li>
    <li>
        Corrected analysis of structure layout changes
    </li>
    <li>
        Fixed tool hanging on some C++ headers (with many namespaces)
    </li>
    <li>
        Corrected analysis of Glibc headers
    </li>
    <li>
        Corrected analysis of library language changes (if added some C++ headers)
    </li>
    <li>
        Corrected descriptions of some compatibility problems
    </li>
    <li>
        Corrected analysis of added/withdrawn parameters in C headers
    </li>
</ul>
<br/>

<b>Version 1.16 (May 05, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added -strict option for treating all compatibility warnings as problems
    </li>
    <li>
        Added -dumpversion option for printing tool version and don't do anything else
    </li>
    <li>
        Ignoring hidden .svn, .git, .bzr, .hg, and CVS directories
    </li>
    <li>
        Improved header files sorting for protecting from compilation errors on the intermediate phase of temporary header file compilation
    </li>
    <li>
        Improved techniques for auto-detection of header file dependencies (include paths)
    </li>
    <li>
        Ignoring problems related to changes of constants (defines) describing library version (*_VERSION_*, *_COPYRIGHT_* and other)
    </li>
    <li>
        New internal test cases
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Checking of some previously missed C++ namespaces
    </li>
    <li>
        Removed hidden "void const** __vtt_parm" parameters from signatures of some constructors
    </li>
    <li>
        Corrected dumping of C++ classes ABI
    </li>
    <li>
        Corrected checking of pure virtual destructors
    </li>
    <li>
        Removed unnecessary built-in constants from the ABI dump
    </li>
</ul>
<br/>

<b>Version 1.15 (March 26, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        The license was changed to dual GNU GPL and LGPL
    </li>
    <li>
        Added "skip_headers" section of the library descriptor
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected processing of "include_paths" section of the library descriptor
    </li>
    <li>
        Corrected processing of relative paths in the "headers" and "include_paths" sections of the descriptor
    </li>
    <li>
        Directory with temporary files renamed from "temp" to hidden ".tmp_dir"
    </li>
    <li>
        Corrected processing of shared object dependencies
    </li>
    <li>
        Corrected processing of some previously missed functions and conversion operators in C++
    </li>
    <li>
        Corrected internal test suite
    </li>
    <li>
        Corrected some error messages
    </li>
</ul>
<br/>

<b>Version 1.14 (March 03, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added techniques to auto-detect dependencies of a header file (include paths); providing of "include_paths" section of the descriptor is not necessary for now
    </li>
    <li>
        Ported to FreeBSD and Haiku
    </li>
    <li>
        Added check for gcc/g++ version (>=3.0.0)
    </li>
    <li>
        Added sorting of interface problems by namespace in the report (C++)
    </li>
    <li>
        Improved internal test suite
    </li>
    <li>
        Added log for describing tool actions and occurred errors
    </li>
    <li>
        Added exit error code (high/medium risk for ABI break)
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected ABI dumping
    </li>
    <li>
        Corrected styles of the report
    </li>
</ul>
<br/>

<b>Version 1.13 (February 16, 2010)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added -version option
    </li>

</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected processing of tab characters in the descriptor
    </li>
    <li>
        Corrected help message
    </li>
    <li>
        Corrected descriptor template structure
    </li>
    <li>
        Corrected error and warning messages
    </li>
    <li>
        Corrected processing of shared object dependencies
    </li>
</ul>
<br/>

<b>Version 1.12 (December 04, 2009)</b><br/>
<b>New Features</b>
<ul>
    <li>
        New help message
    </li>
    <li>
        Highlighting of [in-charge], [not-in-charge] constructors and destructors in the report was improved
    </li>
    <li>
        New option -time for enabling time measurements
    </li>
    <li>
        New internal test cases
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected classification of compatibility problems in the report
    </li>
    <li>
        Reduced priority of problems related to changes in a method's object
    </li>
    <li>
        Corrected complex template type names
    </li>
</ul>
<br/>

<b>Version 1.11 (November 10, 2009)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added -app option to check portability of applications to the new library version
    </li>
    <li>
        Memory usage decreased twice
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected checking of added middle structure members
    </li>
    <li>
        Corrected names of template types (with intrinsic, bool and string parameters)
    </li>
    <li>
        Corrected highlighting of function signatures in the report
    </li>
</ul>
<br/>

<b>Version 1.10 (November 02, 2009)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Checking added/dropped function parameters (C language only)
    </li>
    <li>
        Improved design of the report
    </li>
    <li>
        New internal test cases
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Incorrect checking of redefined virtual functions and differences in parameter types
    </li>
    <li>
        More careful checking of withdrawn interfaces using shared library dependencies
    </li>
</ul>
<br/>

<b>Version 1.9 (October 12, 2009)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Improved design of ABI compliance report
    </li>
    <li>
        Improved algorithms of checking parameter/field type change
    </li>
    <li>
        New internal test cases
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Fixed incorrect names of typedefs and function pointer types
    </li>
    <li>
        Checking of some previously missed C++ functions
    </li>
    <li>
        Removed some false positives from the report (for anon-types)
    </li>
</ul>
<br/>

<b>Version 1.8 (September 29, 2009)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Added ability to specify a file with a list of interfaces that should be checked
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Size of ABI info dumps have been reduced through removing of unnecessary information
    </li>
    <li>
        Incorrect names of template instances and function pointer types
    </li>
    <li>
        Incorrect positions of function parameters in the "Interface Problems" section of the report
    </li>
    <li>
        Removed some false positives from the report
    </li>
    <li>
        Incorrect handling of special symbols in the paths to header files and shared objects
    </li>
</ul>
<br/>

<b>Version 1.7 (September 11, 2009)</b><br/>
<b>New Features</b>
<ul>
    <li>
        Checking of incorrect symbols versioning
    </li>
    <li>
        Checking the values of defines (constants)
    </li>
    <li>
        Ability to check header files without shared objects; It is easy to run, but may provide a low quality report with a lot of false positives and without detecting of added/withdrawn interfaces
    </li>
    <li>
        Number of checked interfaces and data types in the report
    </li>
    <li>
        Added tests for checking new features
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Incorrect processing of duplicated headers in the input set (headers with the same name but different paths)
    </li>
    <li>
        Incorrect header files include order
    </li>
    <li>
        Sorting in the ABI dumps
    </li>
    <li>
        Incorrect processing of redefined virtual methods
    </li>
    <li>
        Incorrect processing of anon types
    </li>
    <li>
        Absence of some necessary information about C++ functions in the ABI dumps
    </li>
</ul>
<br/>

<b>Version 1.6 (August 31, 2009)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Corrected processing of relative paths in the library descriptor
    </li>
    <li>
        Display machine hardware name instead of processor type in the report
    </li>
    <li>
        Fixed grammar/spelling errors
    </li>
    <li>
        Renamed "internal_interfaces" section of the library descriptor to "skip_interfaces"
    </li>
    <li>
        Cosmetic changes in the code
    </li>
</ul>
<br/>

<b>Version 1.5 (August 25, 2009)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Absent information about opaque types and internal interfaces has been added to the ABI dump 
    </li>
    <li>
        Fixed style of the report 
    </li>
    <li>
        Fixed grammar/spelling 
    </li>
    <li>
        Renamed "internal_functions" section of the library descriptor to "internal_interfaces" 
    </li>
    <li>
        Renamed outptu ABI dump to "*.abi.tar.gz" (previously it was "*.info.tar.gz") 
    </li>
    <li>
        Corrected interface names in the report (for -separately option) 
    </li>
</ul>
<br/>

<b>Version 1.4 (August 18, 2009)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Added ability to check ABI compliance of library versions located on different machines 
    </li>
    <li>
        Header files checking mode by default has been changed: checking all header files together instead of separate checking 
    </li>
</ul>
<b>Bug Fixes</b>
<ul>
    <li>
        Incorrect description for affected interfaces 
    </li>
    <li>
        Incorrect virtual table checking 
    </li>
</ul>
<br/>

<b>Version 1.3 (August 14, 2009)</b><br/>
<b>Bug Fixes</b>
<ul>
    <li>
        Incorrect number of binary compatibility problems in the report summary 
    </li>
    <li>
        Incorrect design of problem descriptions in the report 
    </li>
</ul>
<br/>

<b>Version 1.1 (August 06, 2009)</b><br/>
<b>Improvements</b>
<ul>
    <li>
        Design of the report has been greatly improved 
    </li>
</ul>
<br/>

<b>Version 1.0 (July 31, 2009)</b><br/>
Initial version of the tool.

<div class="footer">
    get the source code on GitHub : <a href="https://github.com/lvc/abi-compliance-checker">lvc/abi-compliance-checker</a>
</div>

<br/>
<br/>

</div>
</body>
</html>
