1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# How to use the installed tests m4
#
# Place EDS_INSTALLED_TESTS somewhere in configure.ac
#
# Writing your Makefile.am
# ~~~~~~~~~~~~~~~~~~~~~~~~
#
# Build your local unit tests in the normal way, we only
# depend on your correctly building tests under noinst_PROGRAMS:
#
# noinst_PROGRAMS=list of unit tests
#
# Normally you will go ahead an assign the TESTS and TESTS_ENVIRONMENT variables
# so that your unit tests run at `make check' time, we recommend this
# but it's not a requirement for this macro to work.
#
# Somewhere in your Makefile.am in this test directory, you need to declare
# the following variables:
#
# INSTALLED_TESTS=list of tests to install
# INSTALLED_TESTS_TYPE=session
# INSTALLED_TESTS_ENVIRONMENT="SOME_OPTION=foo OTHER_OPTION=bar"
#
# First the list of tests which should be installed, followed by
# the type of test they should be configured as. The type can
# be 'session' or 'session-exclusive'
#
# More information about valid types can be found here:
# https://wiki.gnome.org/GnomeGoals/InstalledTests
#
# The last variable is optional, but can be useful to configure
# your test program to run in the installed environment as opposed
# to the normal `make check' run.
#
# Finally, place this somewhere in your Makefile.am
#
# @EDS_INSTALLED_TESTS_RULE@
#
# And that's it, now your unit tests will be installed along with
# a .test metadata file into $(pkglibexecdir) if --enable-installed-tests
# is passed to your configure script, and will be run automatically
# by the continuous integration servers.
#
# FIXME: Change the above link to point to real documentation, not
# a gnome goal page which might disappear at some point.
#
# BUGS: This macro hooks into install-exec-am and install-data-am
# which are internals of Automake. This is because Automake doesnt
# consider the regular install-exec-local / install-exec-hook or
# data install components unless variables have been setup for them
# in advance.
#
# This doesnt seem to present a problem, but it is depending on
# internals of Automake instead of clear documented API.
# Place this in configure.ac to enable
# the installed tests option.
AC_DEFUN([EDS_INSTALLED_TESTS], [
AC_PREREQ([2.50])dnl
AC_REQUIRE([AM_NLS])dnl
AC_PROG_INSTALL
AC_PROG_MKDIR_P
AC_PROG_LIBTOOL
AC_ARG_ENABLE(installed-tests,
[AC_HELP_STRING([--enable-installed-tests],
[enable installed unit tests [default=no]])],,
[enable_installed_tests="no"])
AM_CONDITIONAL([EDS_INSTALLED_TESTS_ENABLED],[test "x$enable_installed_tests" = "xyes"])
AC_SUBST([EDS_INSTALLED_TESTS_ENABLED], [$enable_installed_tests])
# Define the rule for makefiles
EDS_INSTALLED_TESTS_RULE='
ifeq ($(EDS_INSTALLED_TESTS_ENABLED),yes)
install-exec-am: installed-tests-exec-hook
install-data-am: installed-tests-data-hook
META_DIRECTORY=${DESTDIR}/${datadir}/installed-tests/${PACKAGE}
EXEC_DIRECTORY=${DESTDIR}/${pkglibexecdir}/installed-tests
FINAL_TEST_ENVIRONMENT=
ifneq ($(INSTALLED_TESTS_ENVIRONMENT),)
FINAL_TEST_ENVIRONMENT="env $(INSTALLED_TESTS_ENVIRONMENT)"
endif
installed-tests-exec-hook:
@$(MKDIR_P) $(EXEC_DIRECTORY);
@for test in $(INSTALLED_TESTS); do \
$(LIBTOOL) --mode=install $(INSTALL) --mode=755 $$test $(EXEC_DIRECTORY); \
done
installed-tests-data-hook:
@$(MKDIR_P) $(META_DIRECTORY);
@for test in $(INSTALLED_TESTS); do \
echo "Installing $$test.test to $(META_DIRECTORY)"; \
echo m4_escape([[Test]]) > $(META_DIRECTORY)/$$test.test; \
echo "Exec=$(FINAL_TEST_ENVIRONMENT) $(pkglibexecdir)/installed-tests/$$test" \
>> $(META_DIRECTORY)/$$test.test; \
echo "Type=$(INSTALLED_TESTS_TYPE)" >> $(META_DIRECTORY)/$$test.test; \
done
endif
'
# substitute @EDS_INSTALLED_TESTS_RULE@ in Makefiles
AC_SUBST([EDS_INSTALLED_TESTS_RULE])
m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([EDS_INSTALLED_TESTS_RULE])])
])
|