Fix a few minor issues in options processing, improving usability, consistency, error...
[cvc5.git] / Makefile.am
1 include $(top_srcdir)/config/doxygen.am
2
3 AM_CXXFLAGS = -Wall -Wno-unknown-pragmas
4
5 AUTOMAKE_OPTIONS = foreign
6 ACLOCAL_AMFLAGS = -I config
7
8 SUBDIRS = src test contrib
9 DIST_SUBDIRS = $(SUBDIRS) examples
10
11 .PHONY: examples
12 examples: all
13 (cd examples && $(MAKE) $(AM_MAKEFLAGS))
14
15 .PHONY: units systemtests regress regress0 regress1 regress2 regress3
16 systemtests regress regress0 regress1 regress2 regress3: all
17 +(cd test && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1
18 # We descend into "src" with the "check" target here to ensure that
19 # the test prerequisites are all built.
20 units:
21 (cd src && $(MAKE) $(AM_MAKEFLAGS) check)
22 +(cd test && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1
23
24 LCOV = lcov
25 GENHTML = genhtml
26
27 LCOV_EXCLUDES = \
28 "$(CXXTEST)/*" \
29 "/usr/include/*" \
30 "$(abs_top_builddir)/test/*"
31
32 .PHONY: lcov lcov-all lcov18
33 if COVERAGE_ENABLED
34
35 # lcov 1.7 has some bugs that we have to work around (can't do
36 # baseline measurement, merge between different test-names doesn't
37 # work...)
38 lcov: all
39 $(LCOV) -z -d .
40 (cd src && $(MAKE) $(AM_MAKEFLAGS) check)
41 +(cd test/unit && $(MAKE) $(AM_MAKEFLAGS) check)
42 $(LCOV) -c -d . -t cvc4_units -o cvc4-coverage-full.info
43 $(LCOV) -o cvc4-coverage.info -r cvc4-coverage-full.info $(LCOV_EXCLUDES)
44 mkdir -p "@top_srcdir@/html"
45 $(GENHTML) -o "@top_srcdir@/html" cvc4-coverage.info
46 @echo "De-mangling C++ symbols..."
47 @find "@top_srcdir@/html" -name '*.func.html' | \
48 xargs perl -pi -e 's#(<td class="coverFn"><a href=".*">)(.*)(</a></td>)#$$_=`c++filt "$$2"`;chomp;print "$$1<xmp>$$_</xmp>$$3\n";#e'
49
50 lcov-all: all
51 $(LCOV) -z -d .
52 (cd src && $(MAKE) $(AM_MAKEFLAGS) check)
53 +(cd test && $(MAKE) $(AM_MAKEFLAGS) check)
54 $(LCOV) -c -d . -t cvc4_units -o cvc4-coverage-full.info
55 $(LCOV) -o cvc4-coverage.info -r cvc4-coverage-full.info $(LCOV_EXCLUDES)
56 mkdir -p "@top_srcdir@/html"
57 $(GENHTML) -o "@top_srcdir@/html" cvc4-coverage.info
58 @echo "De-mangling C++ symbols..."
59 @find "@top_srcdir@/html" -name '*.func.html' | \
60 xargs perl -pi -e 's#(<td class="coverFn"><a href=".*">)(.*)(</a></td>)#$$_=`c++filt "$$2"`;chomp;print "$$1<xmp>$$_</xmp>$$3\n";#e'
61
62 # when we get a working lcov, we can do better stats for
63 # modules/test-types; unfortunately lcov 1.8 directory paths
64 # are broken(?) or at least different than 1.7
65 lcov18: all
66 +@for testtype in public black white; do \
67 echo; echo "=== Collecting coverage data from $$testtype unit tests ==="; \
68 echo $(LCOV) -z -d .; \
69 $(LCOV) -z -d . || exit 1; \
70 echo "(cd src && $(MAKE) $(AM_MAKEFLAGS) check) || exit 1"; \
71 (cd src && $(MAKE) $(AM_MAKEFLAGS) check) || exit 1; \
72 echo "(cd test/unit && $(MAKE) $(AM_MAKEFLAGS) check TEST_SUFFIX=_$$testtype) || exit 1"; \
73 (cd test/unit && $(MAKE) $(AM_MAKEFLAGS) check TEST_SUFFIX=_$$testtype) || exit 1; \
74 echo $(LCOV) -c -d . -t $$testtype -o cvc4-coverage-$$testtype-full.info || exit 1; \
75 $(LCOV) -c -d . -t $$testtype -o cvc4-coverage-$$testtype-full.info || exit 1; \
76 echo $(LCOV) -o cvc4-coverage-$$testtype.info -r cvc4-coverage-$$testtype-full.info $(LCOV_EXCLUDES); \
77 $(LCOV) -o cvc4-coverage-$$testtype.info -r cvc4-coverage-$$testtype-full.info $(LCOV_EXCLUDES) || exit 1; \
78 echo; \
79 done
80 mkdir -p "@top_srcdir@/html"
81 $(GENHTML) -o "@top_srcdir@/html" cvc4-coverage-public.info cvc4-coverage-black.info cvc4-coverage-white.info
82 @echo "De-mangling C++ symbols..."
83 @find "@top_srcdir@/html" -name '*.func.html' | \
84 xargs perl -ni -e 's,(<td class="coverFn"><a href=".*">)(.*)(</a></td>.*),$$_=`c++filt "$$2"`;chomp;print "$$1<xmp>$$_</xmp>$$3\n";,e || print'
85
86 else
87
88 lcov lcov-all lcov18:
89 @echo
90 @echo "Coverage is not enabled in this build." >&2
91 @echo "Please run configure with --enable-coverage." >&2
92 @echo
93 @false
94
95 endif
96
97 # abs_srcdir is required here to get this Makefile instead of the
98 # Makefile in the builddir (since $(srcdir) is stripped off of
99 # EXTRA_DIST files)
100 EXTRA_DIST = \
101 Makefile.builds.in \
102 Makefile.subdir \
103 library_versions \
104 config/build-type \
105 config/mkbuilddir \
106 config/doxygen.cfg \
107 doc/cvc4.1_template.in \
108 doc/cvc4.5.in \
109 doc/libcvc4.3_template.in \
110 doc/libcvc4parser.3.in \
111 doc/libcvc4compat.3.in
112 man_MANS = \
113 doc/cvc4.1 \
114 doc/pcvc4.1 \
115 doc/cvc4.5 \
116 doc/libcvc4.3 \
117 doc/libcvc4parser.3 \
118 doc/libcvc4compat.3
119
120 doc/pcvc4.1:
121 rm -f doc/pcvc4.1
122 $(LN_S) cvc4.1 doc/pcvc4.1
123
124 dist-hook:
125 cp -p "$(srcdir)/Makefile" "$(distdir)/Makefile"
126
127 distclean-local:
128 test -z "$(DX_DOCDIR)" || rm -fr "$(DX_DOCDIR)"
129
130 # these have .in versions
131 DISTCLEANFILES = \
132 doc/cvc4.1 \
133 doc/cvc4.1_template \
134 doc/cvc4.5 \
135 doc/libcvc4.3 \
136 doc/libcvc4.3_template \
137 doc/libcvc4compat.3 \
138 doc/libcvc4parser.3