With this commit come a number of changes to build system to support
authorMorgan Deters <mdeters@gmail.com>
Sat, 3 Jul 2010 17:59:19 +0000 (17:59 +0000)
committerMorgan Deters <mdeters@gmail.com>
Sat, 3 Jul 2010 17:59:19 +0000 (17:59 +0000)
commit6759aa95d4057a2a058974991bf7c9858899a477
treecbf3c769bbac9e5f82a01d73f43fd585af41c932
parentfdf952bba734d63fe52b18bba1ef7a8f9c935455
With this commit come a number of changes to build system to support
building with CLN or with GMP, the contrib/switch-config script
(enabling "fast switching" of different configurations in the same
builds/ directory), and also some minor changes.

./configure --with-gmp     (or --without-cln) forces building with GMP
and doesn't even look for CLN.  Configure fails if GMP isn't installed.

./configure --with-cln     (or --without-gmp) forces building with CLN
and doesn't even look for GMP.  Configure fails if CLN isn't installed.

./configure [no arguments] will detect what's installed.  CLN is
default, if it isn't installed, or is too old, GMP is looked for (and
configure fails if neither is available).

It is an error to specify --with-gmp --with-cln (or --without-* for
both) at the same time.

Building with CLN (whether forced or detected) adds a note to the
configure output mentioning the fact that the build of CVC4 will be
linked against a GPLed library and notifying the user of the
--without-cln option.

Building with GMP (whether forced or detected) affects the build
directory, so CLN and GMP builds are kept separate.

./configure --with-cln debug     builds in builds/$arch/debug
./configure --with-gmp debug     builds in builds/$arch/debug-gmp

The final binaries are linked explicitly against either gmp or cln,
but not both.  If linked against cln, cln pulls in gmp as a
dependency, so the result will be linked against both.

=== Details that you probably don't care about ===

The headers src/util/{integer,rational}.h are generated from the
corresponding .in versions.  A user installing a CVC4-devel package
will get the headers for rational and integer that match the library
that s/he installs.

The preprocessor #defines CVC4_GMP_IMP and CVC4_CLN_IMP are added to
cvc4autoconfig.h.  Only one is ever #defined.  cvc4autoconfig.h
doesn't need to be #included directly; you get it through #including
cvc4_private.h (or the parser version).

AM_CONDITIONALs are also defined so that Makefiles get the cln/gmp
configuration.  AC_SUBSTs are defined so that public headers (see
src/util/{integer,rational}.h.in) can use the setting.

*Public* headers that need to depend on the cln/gmp configuration
can't use cvc4autoconfig.h, because we're keeping that in the private,
internal-only space, never to be installed on users' machines.  Here,
something special is required, like the configure-level generation of
headers that I used for src/util/{integer,rational}.h.in.

Tim's Integer and Rational wrappers are the only bits of code that
should care which library is used (and also src/util/configuration.h,
which gives the user of the library information about how CVC4 is
built), and possibly some unit tests (?).
45 files changed:
AUTHORS
COPYING
config/build-type
config/cvc4.m4
configure.ac
contrib/addsourcedir
contrib/switch-config [new file with mode: 0755]
src/Makefile.am
src/context/Makefile.am
src/expr/Makefile.am
src/include/cvc4_public.h
src/main/Makefile.am
src/parser/Makefile.am
src/parser/cvc/Makefile.am
src/parser/smt/Makefile.am
src/parser/smt2/Makefile.am
src/prop/Makefile.am
src/prop/minisat/Makefile.am
src/smt/Makefile.am
src/theory/Makefile.am
src/theory/arith/Makefile.am
src/theory/arrays/Makefile.am
src/theory/booleans/Makefile.am
src/theory/builtin/Makefile.am
src/theory/bv/Makefile.am
src/theory/uf/Makefile.am
src/util/Makefile.am
src/util/bitvector.h
src/util/configuration.cpp
src/util/configuration.h
src/util/gmp_util.h
src/util/integer.h [deleted file]
src/util/integer.h.in [new file with mode: 0644]
src/util/integer_cln_imp.cpp
src/util/integer_cln_imp.h
src/util/integer_gmp_imp.cpp
src/util/integer_gmp_imp.h
src/util/rational.h [deleted file]
src/util/rational.h.in [new file with mode: 0644]
src/util/rational_cln_imp.cpp
src/util/rational_cln_imp.h
src/util/rational_gmp_imp.cpp
src/util/rational_gmp_imp.h
src/util/sexpr.h
test/unit/Makefile.am