xref: /freebsd/contrib/kyua/Makefile.am (revision b0d29bc47dba79f6f38e67eabadfb4b32ffd9390)
1*b0d29bc4SBrooks Davis# Copyright 2010 The Kyua Authors.
2*b0d29bc4SBrooks Davis# All rights reserved.
3*b0d29bc4SBrooks Davis#
4*b0d29bc4SBrooks Davis# Redistribution and use in source and binary forms, with or without
5*b0d29bc4SBrooks Davis# modification, are permitted provided that the following conditions are
6*b0d29bc4SBrooks Davis# met:
7*b0d29bc4SBrooks Davis#
8*b0d29bc4SBrooks Davis# * Redistributions of source code must retain the above copyright
9*b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer.
10*b0d29bc4SBrooks Davis# * Redistributions in binary form must reproduce the above copyright
11*b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer in the
12*b0d29bc4SBrooks Davis#   documentation and/or other materials provided with the distribution.
13*b0d29bc4SBrooks Davis# * Neither the name of Google Inc. nor the names of its contributors
14*b0d29bc4SBrooks Davis#   may be used to endorse or promote products derived from this software
15*b0d29bc4SBrooks Davis#   without specific prior written permission.
16*b0d29bc4SBrooks Davis#
17*b0d29bc4SBrooks Davis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*b0d29bc4SBrooks Davis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*b0d29bc4SBrooks Davis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*b0d29bc4SBrooks Davis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*b0d29bc4SBrooks Davis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*b0d29bc4SBrooks Davis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*b0d29bc4SBrooks Davis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*b0d29bc4SBrooks Davis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*b0d29bc4SBrooks Davis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*b0d29bc4SBrooks Davis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*b0d29bc4SBrooks Davis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*b0d29bc4SBrooks Davis
29*b0d29bc4SBrooks DavisACLOCAL_AMFLAGS = -I m4
30*b0d29bc4SBrooks Davis
31*b0d29bc4SBrooks DavisCHECK_BOOTSTRAP_DEPS =
32*b0d29bc4SBrooks DavisCHECK_KYUA_DEPS =
33*b0d29bc4SBrooks DavisCHECK_LOCAL =
34*b0d29bc4SBrooks DavisCLEAN_TARGETS =
35*b0d29bc4SBrooks DavisDIST_HOOKS =
36*b0d29bc4SBrooks DavisPHONY_TARGETS =
37*b0d29bc4SBrooks DavisCLEANFILES =
38*b0d29bc4SBrooks Davis
39*b0d29bc4SBrooks DavisEXTRA_DIST =
40*b0d29bc4SBrooks Davisnoinst_DATA =
41*b0d29bc4SBrooks Davisnoinst_LIBRARIES =
42*b0d29bc4SBrooks Davisnoinst_SCRIPTS =
43*b0d29bc4SBrooks Davis
44*b0d29bc4SBrooks Davisdoc_DATA = AUTHORS CONTRIBUTING.md CONTRIBUTORS LICENSE NEWS.md
45*b0d29bc4SBrooks Davisnoinst_DATA += INSTALL.md README.md
46*b0d29bc4SBrooks DavisEXTRA_DIST += $(doc_DATA) INSTALL.md README.md
47*b0d29bc4SBrooks Davis
48*b0d29bc4SBrooks Davisif WITH_ATF
49*b0d29bc4SBrooks Davistests_topdir = $(pkgtestsdir)
50*b0d29bc4SBrooks Davis
51*b0d29bc4SBrooks Davistests_top_DATA = Kyuafile
52*b0d29bc4SBrooks DavisEXTRA_DIST += $(tests_top_DATA)
53*b0d29bc4SBrooks Davisendif
54*b0d29bc4SBrooks Davis
55*b0d29bc4SBrooks Davisinclude admin/Makefile.am.inc
56*b0d29bc4SBrooks Davisinclude bootstrap/Makefile.am.inc
57*b0d29bc4SBrooks Davisinclude cli/Makefile.am.inc
58*b0d29bc4SBrooks Davisinclude doc/Makefile.am.inc
59*b0d29bc4SBrooks Davisinclude drivers/Makefile.am.inc
60*b0d29bc4SBrooks Davisinclude engine/Makefile.am.inc
61*b0d29bc4SBrooks Davisinclude examples/Makefile.am.inc
62*b0d29bc4SBrooks Davisinclude integration/Makefile.am.inc
63*b0d29bc4SBrooks Davisinclude misc/Makefile.am.inc
64*b0d29bc4SBrooks Davisinclude model/Makefile.am.inc
65*b0d29bc4SBrooks Davisinclude store/Makefile.am.inc
66*b0d29bc4SBrooks Davisinclude utils/Makefile.am.inc
67*b0d29bc4SBrooks Davis
68*b0d29bc4SBrooks Davisbin_PROGRAMS = kyua
69*b0d29bc4SBrooks Daviskyua_SOURCES = main.cpp
70*b0d29bc4SBrooks Daviskyua_CXXFLAGS = $(CLI_CFLAGS) $(ENGINE_CFLAGS) $(UTILS_CFLAGS)
71*b0d29bc4SBrooks Daviskyua_LDADD = $(CLI_LIBS) $(ENGINE_LIBS) $(UTILS_LIBS)
72*b0d29bc4SBrooks Davis
73*b0d29bc4SBrooks DavisCHECK_ENVIRONMENT = KYUA_CONFDIR="/non-existent" \
74*b0d29bc4SBrooks Davis                    KYUA_DOCDIR="$(abs_top_srcdir)" \
75*b0d29bc4SBrooks Davis                    KYUA_EXAMPLESDIR="$(abs_top_srcdir)/examples" \
76*b0d29bc4SBrooks Davis                    KYUA_MISCDIR="$(abs_top_srcdir)/misc" \
77*b0d29bc4SBrooks Davis                    KYUA_STOREDIR="$(abs_top_srcdir)/store" \
78*b0d29bc4SBrooks Davis                    KYUA_STORETESTDATADIR="$(abs_top_srcdir)/store" \
79*b0d29bc4SBrooks Davis                    PATH="$(abs_top_builddir):$${PATH}"
80*b0d29bc4SBrooks DavisINSTALLCHECK_ENVIRONMENT = KYUA_CONFDIR="/non-existent" \
81*b0d29bc4SBrooks Davis                           PATH="$(prefix)/bin:$${PATH}"
82*b0d29bc4SBrooks Davis
83*b0d29bc4SBrooks Davis# Generate local-kyua, a wrapper shell script to run the just-built 'kyua'
84*b0d29bc4SBrooks Davis# binary by pointing it to the possibly not-yet-installed data files in the
85*b0d29bc4SBrooks Davis# build tree.
86*b0d29bc4SBrooks Davisnoinst_SCRIPTS += local-kyua
87*b0d29bc4SBrooks DavisCLEANFILES += local-kyua local-kyua.tmp
88*b0d29bc4SBrooks Davislocal-kyua: Makefile
89*b0d29bc4SBrooks Davis	$(AM_V_GEN)echo '#!/bin/sh' >local-kyua.tmp; \
90*b0d29bc4SBrooks Davis	echo 'env $(CHECK_ENVIRONMENT) $(TESTS_ENVIRONMENT)' \
91*b0d29bc4SBrooks Davis	    '"$(abs_top_builddir)/kyua" \
92*b0d29bc4SBrooks Davis	    --config='$(KYUA_CONFIG_FILE_FOR_CHECK)' \
93*b0d29bc4SBrooks Davis	    "$${@}"' >>local-kyua.tmp; \
94*b0d29bc4SBrooks Davis	chmod +x local-kyua.tmp; \
95*b0d29bc4SBrooks Davis	mv -f local-kyua.tmp local-kyua
96*b0d29bc4SBrooks Davis
97*b0d29bc4SBrooks Davisif WITH_ATF
98*b0d29bc4SBrooks DavisCHECK_LOCAL += dump-ulimits check-kyua
99*b0d29bc4SBrooks DavisPHONY_TARGETS += check-kyua
100*b0d29bc4SBrooks Davischeck-kyua: $(CHECK_KYUA_DEPS)
101*b0d29bc4SBrooks Davis	@failed=no; \
102*b0d29bc4SBrooks Davis	./local-kyua test \
103*b0d29bc4SBrooks Davis	    --kyuafile='$(top_srcdir)/Kyuafile' --build-root='$(top_builddir)' \
104*b0d29bc4SBrooks Davis	    || failed=yes; \
105*b0d29bc4SBrooks Davis	if [ "$${failed}" = yes ]; then \
106*b0d29bc4SBrooks Davis	    ./local-kyua report --results-file='$(abs_top_srcdir)' \
107*b0d29bc4SBrooks Davis	        --verbose --results-filter=broken,failed; \
108*b0d29bc4SBrooks Davis	    exit 1; \
109*b0d29bc4SBrooks Davis	fi
110*b0d29bc4SBrooks Davis
111*b0d29bc4SBrooks Davisinstallcheck-local: dump-ulimits installcheck-kyua
112*b0d29bc4SBrooks DavisPHONY_TARGETS += installcheck-kyua
113*b0d29bc4SBrooks Davisinstallcheck-kyua:
114*b0d29bc4SBrooks Davis	@failed=no; \
115*b0d29bc4SBrooks Davis	cd $(pkgtestsdir) && $(INSTALLCHECK_ENVIRONMENT) $(TESTS_ENVIRONMENT) \
116*b0d29bc4SBrooks Davis	    kyua --config='$(KYUA_CONFIG_FILE_FOR_CHECK)' test \
117*b0d29bc4SBrooks Davis	    || failed=yes; \
118*b0d29bc4SBrooks Davis	if [ "$${failed}" = yes ]; then \
119*b0d29bc4SBrooks Davis	    cd $(pkgtestsdir) && $(INSTALLCHECK_ENVIRONMENT) \
120*b0d29bc4SBrooks Davis	        $(TESTS_ENVIRONMENT) \
121*b0d29bc4SBrooks Davis	        kyua --config='$(KYUA_CONFIG_FILE_FOR_CHECK)' report \
122*b0d29bc4SBrooks Davis	        --verbose --results-filter=broken,failed; \
123*b0d29bc4SBrooks Davis	    exit 1; \
124*b0d29bc4SBrooks Davis	fi
125*b0d29bc4SBrooks Davis
126*b0d29bc4SBrooks Davis# TODO(jmmv): kyua should probably be recording this information itself as part
127*b0d29bc4SBrooks Davis# of the execution context, just as we record environment variables.
128*b0d29bc4SBrooks DavisPHONY_TARGETS += dump-ulimits
129*b0d29bc4SBrooks Davisdump-ulimits:
130*b0d29bc4SBrooks Davis	@echo "Resource limits:"
131*b0d29bc4SBrooks Davis	@{ \
132*b0d29bc4SBrooks Davis	    ulimit -a | sed -e 's,$$, (soft),'; \
133*b0d29bc4SBrooks Davis	    ulimit -a -H | sed -e 's,$$, (hard),'; \
134*b0d29bc4SBrooks Davis	} | sort | sed -e 's,^,    ,'
135*b0d29bc4SBrooks Davis	@echo
136*b0d29bc4SBrooks Daviselse
137*b0d29bc4SBrooks DavisDIST_HOOKS += forbid-dist
138*b0d29bc4SBrooks DavisPHONY_TARGETS += forbid-dist
139*b0d29bc4SBrooks Davisforbid-dist:
140*b0d29bc4SBrooks Davis	@echo "Sorry; cannot make dist without atf."
141*b0d29bc4SBrooks Davis	@false
142*b0d29bc4SBrooks Davisendif
143*b0d29bc4SBrooks Davischeck-local: $(CHECK_LOCAL)
144*b0d29bc4SBrooks Davis
145*b0d29bc4SBrooks Davisif WITH_DOXYGEN
146*b0d29bc4SBrooks Davis# Runs doxygen on the source tree and validates the contents of the docstrings.
147*b0d29bc4SBrooks Davis# We do not do this by default, even if doxygen has been enabled, because this
148*b0d29bc4SBrooks Davis# step takes a long time.  Instead, we just rely on a Travis CI build to catch
149*b0d29bc4SBrooks Davis# inconsistencies.
150*b0d29bc4SBrooks DavisPHONY_TARGETS += check-api-docs
151*b0d29bc4SBrooks Davischeck-api-docs: api-docs/api-docs.tag
152*b0d29bc4SBrooks Davis	@$(AWK) -f $(srcdir)/admin/check-api-docs.awk api-docs/doxygen.out
153*b0d29bc4SBrooks Davis
154*b0d29bc4SBrooks Davisapi-docs/api-docs.tag: $(builddir)/Doxyfile $(SOURCES)
155*b0d29bc4SBrooks Davis	@$(MKDIR_P) api-docs
156*b0d29bc4SBrooks Davis	@rm -f api-docs/doxygen.out api-docs/doxygen.out.tmp
157*b0d29bc4SBrooks Davis	$(AM_V_GEN)$(DOXYGEN) $(builddir)/Doxyfile \
158*b0d29bc4SBrooks Davis	    >api-docs/doxygen.out.tmp 2>&1 && \
159*b0d29bc4SBrooks Davis	    mv api-docs/doxygen.out.tmp api-docs/doxygen.out
160*b0d29bc4SBrooks Davis
161*b0d29bc4SBrooks DavisCLEAN_TARGETS += clean-api-docs
162*b0d29bc4SBrooks Davisclean-api-docs:
163*b0d29bc4SBrooks Davis	rm -rf api-docs
164*b0d29bc4SBrooks Davisendif
165*b0d29bc4SBrooks Davis
166*b0d29bc4SBrooks Davis# Replace Automake's builtin check-news functionality so that we can validate
167*b0d29bc4SBrooks Davis# the NEWS.md file instead of NEWS.
168*b0d29bc4SBrooks DavisDIST_HOOKS += check-news
169*b0d29bc4SBrooks DavisPHONY_TARGETS += check-news
170*b0d29bc4SBrooks Davischeck-news:
171*b0d29bc4SBrooks Davis	@case "$$(sed 15q "$(srcdir)/NEWS.md")" in \
172*b0d29bc4SBrooks Davis	*"$(VERSION)"*) : ;; \
173*b0d29bc4SBrooks Davis	*) \
174*b0d29bc4SBrooks Davis	    echo "NEWS.md not updated; not releasing" 1>&2; \
175*b0d29bc4SBrooks Davis	    exit 1 \
176*b0d29bc4SBrooks Davis	    ;; \
177*b0d29bc4SBrooks Davis	esac
178*b0d29bc4SBrooks Davis
179*b0d29bc4SBrooks Davisclean-local: $(CLEAN_TARGETS)
180*b0d29bc4SBrooks Davisdist-hook: $(DIST_HOOKS)
181*b0d29bc4SBrooks Davis
182*b0d29bc4SBrooks DavisPHONY_TARGETS += clean-all
183*b0d29bc4SBrooks Davisclean-all:
184*b0d29bc4SBrooks Davis	GIT="$(GIT)" $(SH) $(srcdir)/admin/clean-all.sh
185*b0d29bc4SBrooks Davis
186*b0d29bc4SBrooks Davis.PHONY: $(PHONY_TARGETS)
187