2014-09-26 15:02:46 +00:00
# Makefile for Sphinx documentation
2014-11-19 20:00:50 +00:00
EXTRA_DIST = \
a b i d i f f . r s t \
Initial implementation of the abicompat tool
Given an application A that links to a shared library L of version V
denoted L(V) and a subsequent version of that library denoted L(V+P),
the 'abicompat' tool tells the user if L(V+P) is still ABI compatible
with L(V+P). And if it is not, abicompat gives a reports that shows
the differences between L(V) and L(V+P) that makes L(V+P)
ABI-incompatible with A.
The source code of this tool is in the tools/abicompat.cc source
file. To support this new tool, this commit changes the comparison
engine to optionally avoid showing added symbols that were not
referenced by any debug info. It changes the ABI corpus type to allow
the specification of a list of variables and functions symbols to keep
(and drop all other functions and variables which have other symbols
on the floor even before starting to compare the two libraries).
This is how the abicompat tool itself works. It basically compares
L(V) and L(V+P) but it only looks at their exported functions and
variables which symbols are undefined in application A. If the list
of exported and defined variables and functions of L(V) whose symbols
are undefined in A equals that of L(V+P) (including the sub-types of
these variables and functions) A is still compatible with L(V+P).
Otherwise, they might not be compatible depending on the kind of
differences that are found.
* include/abg-comparison.h
(diff_context::show_added_symbols_unreferenced_by_debug_info):
Declare new accessors.
(corpus_diff::{deleted_variables,
deleted_unrefed_function_symbols,
deleted_unrefed_variable_symbols,
apply_filters_and_suppressions_before_reporting}): Declare new
methods.
(corpus_diff::diff_stats): Declare this new type. Actually this
was previously corpus_diff::priv::diff_stats, which was a hidden
internal type.. We are moving it here, in the external API so
that client code can have more information about changes
statistics. Change all the previously publicly accessible data
members into accessor functions.
* src/abg-comparison.cc (class corpus_diff::diff_stats::priv): New
type.
(diff_context::priv::show_added_syms_unreferenced_by_di_): New
data member.
(diff_context::priv::priv): Adjust.
(diff_context::show_added_symbols_unreferenced_by_debug_info):
Define this new method.
(corpus_diff::priv::emit_diff_stats): Do not show the diff stat
if the only changes is added function or variables symbols and if
we were instructed to not show added symbols.
(corpus_diff::priv::{diff_stats_, filters_and_suppr_applied_}):
New data members.
(corpus_diff::priv::priv): Initialize the
filters_and_suppr_applied_ data member.
(corpus_diff::priv::diff_stats): Move this type to
corpus_diff::diff_stats.
(corpus_diff::priv::{apply_filters_and_compute_diff_stats,
emit_diff_stats}): Adjust.
(corpus_diff::apply_filters_and_suppressions_before_reporting):
Define new member function.
(corpus_diff::report): Use the new
apply_filters_and_suppressions_before_reporting() function, rather
than applying the filters and suppressions by ourselves. Also
adjust to the use the accessors of the new corpus_diff::diff_stats
type.
(corpus_diff::{deleted_variables,
deleted_unrefed_function_symbols,
deleted_unrefed_variable_symbols}): Define new accessors.
(corpus_diff::diff_stats::{diff_stats, num_func_removed,
num_func_added, num_func_changed, num_func_filtered_out,
net_num_func_changed, num_vars_removed, num_vars_added,
num_vars_changed, num_vars_filtered_out, net_num_vars_changed,
num_func_sym_removed, num_func_syms_added, num_var_syms_removed,
num_var_syms_added}): Define new member functions.
* include/abg-corpus.h (corpus::{get_sym_ids_of_fns_to_keep,
get_sym_ids_of_vars_to_keep}): Declare new methods.
* src/abg-corpus.cc (corpus::priv::{sym_id_fns_to_keep,
sym_id_vars_to_keep}): Added data members.
(symtab_build_visitor_type::{unrefed_fun_symbols,
unrefed_var_symbols, sym_id_fns_to_keep, sym_id_vars_to_keep}):
Added new data members.
(symtab_build_visitor_type::symtab_build_visitor_type): Take two
additional parameters for the function and variable symbol ids to
keep.
(symtab_build_visitor_type::add_fn_to_wip_fns): Take the function
symbols to keep in account when building the exported symbol
table.
(symtab_build_visitor_type::add_var_to_wip_vars): Likewise, take
the variable symbols to keep in account when building the exported
symbol table.
(corpus::priv::build_public_decl_table): Adjust the initialization
of the visitor that walks the ABI artifacts to build the exported
symbol table to know take a list of function/variable symbols to
keep.
(corpus::priv::build_unreferenced_symbols_tables): Ensure that the
public table of functions/variables is built before doing the work
of this function. Also, if a list of variable/function symbols to
keep is given, drop all symbols that are not in that list on the
floor.
(corpus::{get_sym_ids_of_fns_to_keep,
get_sym_ids_of_vars_to_keep}): Define new accessors.
* tools/abicompat.cc: New abicompat tool.
* doc/manuals/abicompat.rst: New documentation source for
abicompat.
* doc/manuals/libabigail-tools.rst: Add an entry for the abicompat
doc.
* tests/test-abicompat.cc: New test harness for the 'abicompat'
tool.
* tests/Makefile.am: Build the runtestabicompat test harness and
add it to the list of tests harnesses that are run by make check.
* tests/data/test-abicompat/libtest0-fn-changed-libapp-v0.so: New
test input.
* tests/data/test-abicompat/libtest0-fn-changed-libapp-v1.so: Likewise.
* tests/data/test-abicompat/test0-fn-changed-app: Likewise.
* tests/data/test-abicompat/test0-fn-changed-0.suppr: Likewise
* tests/data/test-abicompat/test0-fn-changed-report-0.txt: Likewise.
* tests/data/test-abicompat/test0-fn-changed-report-1.txt: Likewise.
* tests/data/test-abicompat/test0-fn-changed-app.cc: Likewise.
* tests/data/test-abicompat/test0-fn-changed-libapp.h: Likewise.
* tests/data/test-abicompat/test0-fn-changed-libapp-v0.cc: Likewise.
* tests/data/test-abicompat/test0-fn-changed-libapp-v1.cc: Likewise.
* tests/data/test-abicompat/libtest1-fn-removed-v0.so: Likewise.
* tests/data/test-abicompat/libtest1-fn-removed-v1.so: Likewise.
* tests/data/test-abicompat/test1-fn-removed-app: Likewise.
* tests/data/test-abicompat/test1-fn-removed-app.cc: Likewise.
* tests/data/test-abicompat/test1-fn-removed-report-0.txt: Likewise.
* tests/data/test-abicompat/test1-fn-removed-v0.cc: Likewise.
* tests/data/test-abicompat/test1-fn-removed-v1.cc: Likewise.
* tests/data/test-abicompat/libtest2-var-removed-v0.so: Likewise.
* tests/data/test-abicompat/libtest2-var-removed-v1.so: Likewise.
* tests/data/test-abicompat/test2-var-removed-app: Likewise.
* tests/data/test-abicompat/test2-var-removed-app.cc: Likewise.
* tests/data/test-abicompat/test2-var-removed-report-0.txt: Likewise.
* tests/data/test-abicompat/test2-var-removed-v0.cc: Likewise.
* tests/data/test-abicompat/test2-var-removed-v1.cc: Likewise.
* tests/data/test-abicompat/libtest3-fn-removed-v0.so: Likewise.
* tests/data/test-abicompat/libtest3-fn-removed-v1.so: Likewise.
* tests/data/test-abicompat/test3-fn-removed-app: Likewise.
* tests/data/test-abicompat/test3-fn-removed-app.cc: Likewise.
* tests/data/test-abicompat/test3-fn-removed-report-0.txt: Likewise.
* tests/data/test-abicompat/test3-fn-removed-v0.cc: Likewise.
* tests/data/test-abicompat/test3-fn-removed-v1.cc: Likewise.
* tests/data/test-abicompat/test3-fn-removed-version-script-0 Likewise.:
* tests/data/test-abicompat/test3-fn-removed-version-script-1: Likewise.
* tests/data/Makefile.am: Add the new test inputs above to the
source distribution.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-11-30 17:18:55 +00:00
a b i c o m p a t . r s t \
2014-11-19 20:00:50 +00:00
a b i d w . r s t \
a b i l i n t . r s t \
c o n f . p y \
i n d e x . r s t \
l i b a b i g a i l - c o n c e p t s . r s t \
l i b a b i g a i l - o v e r v i e w . r s t \
l i b a b i g a i l - t o o l s . r s t
2014-09-26 15:02:46 +00:00
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
2014-11-19 20:00:50 +00:00
BUILDDIR = $( abs_builddir)
SOURCEDIR = $( abs_srcdir)
2014-09-26 15:02:46 +00:00
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size = a4
PAPEROPT_letter = -D latex_paper_size = letter
2014-11-18 22:32:50 +00:00
ALLSPHINXOPTS = -d $( BUILDDIR) /doctrees $( PAPEROPT_$( PAPER) ) $( SPHINXOPTS) $( SOURCEDIR)
2014-09-26 15:02:46 +00:00
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $( PAPEROPT_$( PAPER) ) $( SPHINXOPTS) .
2014-11-19 20:00:50 +00:00
.PHONY : help clean html -local dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
2014-09-26 15:02:46 +00:00
help :
@echo "Please use \`make <target>' where <target> is one of"
2014-11-19 20:00:50 +00:00
@echo " html-doc to make standalone HTML files"
2014-09-26 15:02:46 +00:00
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
2014-11-19 20:00:50 +00:00
html-doc :
2014-11-19 16:30:12 +00:00
$( SPHINXBUILD) -b html $( ALLSPHINXOPTS) $( DESTDIR) $( BUILDDIR) /html
2014-09-26 15:02:46 +00:00
@echo
@echo " Build finished. The HTML pages are in $( BUILDDIR) /html. "
dirhtml :
$( SPHINXBUILD) -b dirhtml $( ALLSPHINXOPTS) $( BUILDDIR) /dirhtml
@echo
@echo " Build finished. The HTML pages are in $( BUILDDIR) /dirhtml. "
singlehtml :
$( SPHINXBUILD) -b singlehtml $( ALLSPHINXOPTS) $( BUILDDIR) /singlehtml
@echo
@echo " Build finished. The HTML page is in $( BUILDDIR) /singlehtml. "
pickle :
$( SPHINXBUILD) -b pickle $( ALLSPHINXOPTS) $( BUILDDIR) /pickle
@echo
@echo "Build finished; now you can process the pickle files."
json :
$( SPHINXBUILD) -b json $( ALLSPHINXOPTS) $( BUILDDIR) /json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp :
$( SPHINXBUILD) -b htmlhelp $( ALLSPHINXOPTS) $( BUILDDIR) /htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
" .hhp project file in $( BUILDDIR) /htmlhelp. "
qthelp :
$( SPHINXBUILD) -b qthelp $( ALLSPHINXOPTS) $( BUILDDIR) /qthelp
@echo
@echo "Build finished; now you can run " qcollectiongenerator" with the" \
" .qhcp project file in $( BUILDDIR) /qthelp, like this: "
@echo " # qcollectiongenerator $( BUILDDIR) /qthelp/Libabigailmanuals.qhcp "
@echo "To view the help file:"
@echo " # assistant -collectionFile $( BUILDDIR) /qthelp/Libabigailmanuals.qhc "
devhelp :
$( SPHINXBUILD) -b devhelp $( ALLSPHINXOPTS) $( BUILDDIR) /devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo " # mkdir -p $$ HOME/.local/share/devhelp/Libabigailmanuals "
@echo " # ln -s $( BUILDDIR) /devhelp $$ HOME/.local/share/devhelp/Libabigailmanuals "
@echo "# devhelp"
epub :
$( SPHINXBUILD) -b epub $( ALLSPHINXOPTS) $( BUILDDIR) /epub
@echo
@echo " Build finished. The epub file is in $( BUILDDIR) /epub. "
latex :
$( SPHINXBUILD) -b latex $( ALLSPHINXOPTS) $( BUILDDIR) /latex
@echo
@echo " Build finished; the LaTeX files are in $( BUILDDIR) /latex. "
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf :
$( SPHINXBUILD) -b latex $( ALLSPHINXOPTS) $( BUILDDIR) /latex
@echo "Running LaTeX files through pdflatex..."
$( MAKE) -C $( BUILDDIR) /latex all-pdf
@echo " pdflatex finished; the PDF files are in $( BUILDDIR) /latex. "
text :
$( SPHINXBUILD) -b text $( ALLSPHINXOPTS) $( BUILDDIR) /text
@echo
@echo " Build finished. The text files are in $( BUILDDIR) /text. "
man :
$( SPHINXBUILD) -b man $( ALLSPHINXOPTS) $( BUILDDIR) /man
@echo
@echo " Build finished. The manual pages are in $( BUILDDIR) /man. "
texinfo :
$( SPHINXBUILD) -b texinfo $( ALLSPHINXOPTS) $( BUILDDIR) /texinfo
@echo
@echo " Build finished. The Texinfo files are in $( BUILDDIR) /texinfo. "
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info :
$( SPHINXBUILD) -b texinfo $( ALLSPHINXOPTS) $( BUILDDIR) /texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $( BUILDDIR) /texinfo info
@echo " makeinfo finished; the Info files are in $( BUILDDIR) /texinfo. "
gettext :
$( SPHINXBUILD) -b gettext $( I18NSPHINXOPTS) $( BUILDDIR) /locale
@echo
@echo " Build finished. The message catalogs are in $( BUILDDIR) /locale. "
changes :
$( SPHINXBUILD) -b changes $( ALLSPHINXOPTS) $( BUILDDIR) /changes
@echo
@echo " The overview file is in $( BUILDDIR) /changes. "
linkcheck :
$( SPHINXBUILD) -b linkcheck $( ALLSPHINXOPTS) $( BUILDDIR) /linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
" or in $( BUILDDIR) /linkcheck/output.txt. "
doctest :
$( SPHINXBUILD) -b doctest $( ALLSPHINXOPTS) $( BUILDDIR) /doctest
@echo "Testing of doctests in the sources finished, look at the " \
" results in $( BUILDDIR) /doctest/output.txt. "
2014-11-18 22:54:16 +00:00
2015-01-13 11:11:09 +00:00
manpages =
2015-01-13 17:10:19 +00:00
texinfodocs =
2014-11-19 16:08:10 +00:00
i f E N A B L E _ M A N U A L
2015-01-13 11:11:09 +00:00
manpages += abidiff.7 abidw.7 abilint.7 abicompat.7 libabigail.7
2015-01-13 17:10:19 +00:00
texinfodocs += abigail.info
2015-01-13 11:11:09 +00:00
2014-11-19 20:00:50 +00:00
install-html-doc : html -doc
test -d " $( DESTDIR) $( docdir) /manual " || $( mkinstalldirs) " $( DESTDIR) $( docdir) /manual "
cp -r " $( DESTDIR) $( BUILDDIR) /html " " $( DESTDIR) $( docdir) /manual "
2015-01-14 13:36:20 +00:00
e l s e
install-html-doc :
2015-01-13 17:10:19 +00:00
2014-11-19 20:00:50 +00:00
e n d i f
2014-11-18 22:54:16 +00:00
2014-11-19 20:00:50 +00:00
clean-local :
-rm -rf $( BUILDDIR) /html
-rm -rf $( BUILDDIR) /doctrees
2014-11-19 16:08:10 +00:00
2015-01-14 17:46:06 +00:00
install-man-and-info-doc :
2015-01-13 11:11:09 +00:00
-test -f $( BUILDDIR) /man/abidiff.7 && $( mkinstalldirs) $( DESTDIR) $( mandir) /man7
-for m in $( manpages) ; do test -f $( BUILDDIR) /man/$$ m && $( install_sh_DATA) $( BUILDDIR) /man/$$ m $( DESTDIR) $( mandir) /man7; done ;
2015-01-13 17:10:19 +00:00
-test -f $( BUILDDIR) /texinfo/abidiff.info && $( mkinstalldirs) $( DESTDIR) $( infodir)
2015-01-14 13:36:20 +00:00
-for i in $( texinfodocs) ; do test -f $( BUILDDIR) /texinfo/$$ i && $( install_sh_DATA) $( BUILDDIR) /texinfo/$$ i $( DESTDIR) $( infodir) /$$ i; gzip $( DESTDIR) $( infodir) /$$ i; done ;
2015-01-13 17:10:19 +00:00
2014-11-19 20:00:50 +00:00
uninstall-local : clean -local
2015-01-13 17:10:19 +00:00
-for i in $$ ( manpages) ; do rm -f $( DESTDIR) $( mandir) /man7/$$ i; done
-for i in $$ ( texinfodocs) ; do rm -f $( DESTDIR) $( infodir) /$$ i; done
2014-11-19 20:00:50 +00:00
-rm -rf $( DESTDIR) $( docdir) /manual/html