In order to implement correct gnulib-comp.m4 generation, the whole
conditional dependencies calculation algorithm had to be rewritten.
This patch fixes transitive closure algorithm so that it handles all
conditions correctly. Most of the transitive closure functionality was
separated into a standalone TransitiveClosure class to provide a fast
access to transitive closure results (thus incorporating almost all
functionality of the pygnulib.module.Database class).
The transitive closure is usually performed twice: the base one checks
dependencies for the base set of modules, while the full one also takes
the corresponding tests into account. A standalone Database class was
created to perform both closures in one shot and provide an easy access
to all required module and file lists. This allowed to incorporate some
code from the main script: dummy module handling, libtests.a presense,
module and file lists processing.
Yet another small change is that there is a special DummyModule object,
representing the well-known gnulib dummy module. It was created since
the original gnulib dummy module is unlikely to change quite often, so
it acts like special placeholder value.
Finally the naming convention was changed to longer names again.
Enums are a recent features of Python. To maximize portability don't
use them.
* pygnulib/parser.py (CommandLine.Option): Don't inherit from enum.Flag.
* pygnulib/config.py (Option): Likewise.
When the command-line parser was reworked, a mutually exclusive group
was deleted and check for conflicting options was eliminated as well.
The commit implements the lost feature in a more elegant way than it
has been done before, allowing more flexibility.