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