Script and config to make tracking ABI/API changes easy.

AG: enhance the script a bit and fix the make instructions
This commit is contained in:
Roger A. Light 2016-04-18 14:32:55 +01:00 committed by Andy Green
parent c673125ce0
commit c6496b2510
3 changed files with 176 additions and 0 deletions

52
contrib/abi/README.md Normal file
View file

@ -0,0 +1,52 @@
ABI Compatility Tracking
========================
This directory contains files that can be used to generate an ABI compatibility
timeline for libwebsockets. This gives users an idea of where the library has
changed and can be used by the developers to see when incompatible changes have
been introduced and either increase the library SO version or fix the changes.
The tools used are the abi-\* family available at https://github.com/lvc/ and
some example output is here: http://abi-laboratory.pro/tracker/timeline/libuv/
The tools download existing source tarballs and git repository to generate this
data, so past versions are compared and in-development code can be compared as
well.
Although the application is not being included here, FYI the license is dual
LGPL2 / GPL2 at your choice.
Installation
------------
The author provides an easy way to install the various tools he provides:
git clone https://github.com/lvc/installer
cd installer
make prefix=/usr/local target=abi-tracker
It will also list any dependencies that you need to install through normal
means. (Although in the case of needing "elfutils-libelf-devel", it may
crash during install of vtable-dumper without giving a nice list)
Generating the output
---------------------
Use the `lws-abi-update.sh` script to download the source files, build them and
generate the output html. The output can be deployed to a directory on a web
server for example. Modify the commented line in lws-abi-update.sh to do this.
As it is configured, lws-abi-update.sh will only download new source - ones
that it hasn't built before - so is suitable for use with a cron job.
Viewing the output
------------------
The best place to start looking at the data is the `timeline/libwebsockets`
directory. If your path is on a web server, navigate there, otherwise you could
try:
lynx timeline/libwebsockets/

View file

@ -0,0 +1,107 @@
{
"Name": "libwebsockets",
"SourceUrl": "https://github.com/warmcat/libwebsockets/releases",
"Git": "https://github.com/warmcat/libwebsockets",
"Versions": [
{
"Number": "current",
"Installed": "installed/libwebsockets/current",
"Source": "src/libwebsockets/current",
"Changelog": "On",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.7.4",
"Installed": "installed/libwebsockets/1.7.4",
"Source": "src/libwebsockets/1.7.4/libwebsockets-1.7.4.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.7.3",
"Installed": "installed/libwebsockets/1.7.3",
"Source": "src/libwebsockets/1.7.3/libwebsockets-1.7.3.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.7.2",
"Installed": "installed/libwebsockets/1.7.2",
"Source": "src/libwebsockets/1.7.2/libwebsockets-1.7.2.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.7.1",
"Installed": "installed/libwebsockets/1.7.1",
"Source": "src/libwebsockets/1.7.1/libwebsockets-1.7.1.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.7.0",
"Installed": "installed/libwebsockets/1.7.0",
"Source": "src/libwebsockets/1.7.0/libwebsockets-1.7.0.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.6.3",
"Installed": "installed/libwebsockets/1.6.3",
"Source": "src/libwebsockets/1.6.3/libwebsockets-1.6.3.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.6.2",
"Installed": "installed/libwebsockets/1.6.2",
"Source": "src/libwebsockets/1.6.2/libwebsockets-1.6.2.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.6.1",
"Installed": "installed/libwebsockets/1.6.1",
"Source": "src/libwebsockets/1.6.1/libwebsockets-1.6.1.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
},
{
"Number": "1.5.1",
"Installed": "installed/libwebsockets/1.5.1",
"Source": "src/libwebsockets/1.5.1/libwebsockets-1.5.1.tar.gz",
"Changelog": "Off",
"HeadersDiff": "On",
"PkgDiff": "Off",
"ABIView": "Off",
"ABIDiff": "Off"
}]
}

17
contrib/abi/lws-abi-update.sh Executable file
View file

@ -0,0 +1,17 @@
#!/bin/sh
if [ ! -z "$1" ] ; then
OUT=$1
else
OUT="/tmp/lws-abi-track-htdocs"
fi
D=`dirname $0`
if [ ! -z "$D" ] ; then
D=$D/
fi
J=$D"libwebsockets.json"
abi-monitor -get -build-new $J
abi-tracker -build $J
abi-tracker -deploy $OUT $J