Very exciting stuff altogether, I'm sure you'll agree.
What it all means is that just before release we need to make sure we hold to this promise. In the past, we've done this with varying degrees of success. API stability is fairly easy to hold to, but ABI stability is trickier - knowing the rules for what makes or breaks the ABI is half the battle. To be fair, the reason it has been so difficult is because there was no automated tool for sorting this all out for us.
Finally, a couple of years ago, the ABI Compliance Checker appeared which makes the whole thing a doddle. So today I compiled OB 2.3.1 and OB 2.3.2 and installed locally on a Linux system. Then, for each, I made an XML file like so:
<version> 2.3.1 </version> <headers> /home/noel/Tools/ABIComplianceChecker/openbabel-2-3-1/tree/include/openbabel-2.0/openbabel /home/noel/Tools/ABIComplianceChecker/openbabel-2-3-1/tree/include/inchi </headers> <libs> /home/noel/Tools/ABIComplianceChecker/openbabel-2-3-1/tree/lib </libs>
And finally, I just ran the checker:
$abi-compliance-checker-1.98.3/abi-compliance-checker.pl -lib openbabel -old 2.3.1.xml -new 2.3.2.xml preparation, please wait ... Using GCC 4.8.0 (x86_64-unknown-linux-gnu) checking header(s) 2.3.1 ... ERROR: some errors occurred when compiling headers ERROR: see log for details: /home/noel/Tools/ABIComplianceChecker/logs/openbabel/2.3.1/log.txt checking header(s) 2.3.2 ... ERROR: some errors occurred when compiling headers ERROR: see log for details: /home/noel/Tools/ABIComplianceChecker/logs/openbabel/2.3.2/log.txt comparing ABIs ... comparing APIs ... creating compatibility report ... result: COMPATIBLE total "Binary" compatibility problems: 0, warnings: 4 total "Source" compatibility problems: 0, warnings: 8 see detailed report: compat_reports/openbabel/2.3.1_to_2.3.2/compat_report.html
You can check out the detailed report here.
(1) I also had to delete openbabel/math/align.h as I had compiled without Eigen in each case. This header file probably shouldn't have been installed in that case.
(2) The error messages in the log files were related to the use of abs(double). Not sure why.