1 AT_COPYRIGHT([Copyright © 2019-2020 Nick Bowler
2 License GPLv2+: GNU General Public License version 2 or any later version.
3 This is free software: you are free to change and redistribute it.
4 There is NO WARRANTY, to the extent permitted by law.])
6 dnl mtime_uptodate file-a file-b: returns success iff file-a's modification
7 dnl time is at least as new as file-b's.
8 m4_divert_push([PREPARE_TESTS])dnl
10 cat >mtime-uptodate.mk <<EOF
14 $MAKE -f mtime-uptodate.mk >/dev/null 2>&1 || return 1
16 m4_divert_pop([PREPARE_TESTS])
20 dnl Delay script execution such that file modifications done prior to the
21 dnl delay will have older timestamps than file modifications performed after
24 dnl Some filesystems have insufficient timestamp resolution (or maybe
25 dnl computers are just too fast) to reliably distinguish between back-to-back
26 dnl file modification.
28 dnl This delay is implemented by repeatingly touching files until a different
29 dnl timestamp is produced.
30 m4_define([TEST_MTIME_DELAY],
31 [touch mtime-delay.old; touch mtime-delay.new
32 while mtime_uptodate mtime-delay.old mtime-delay.new; do
36 dnl Compile a C source file with default cflags for libgobject. The test
37 dnl group is skipped if libgobject was not enabled at configure time. The
38 dnl first argument contains extra compiler flags, which must include the
39 dnl source file name. The remaining arguments correspond to the remaining
40 dnl arguments of AT_CHECK (e.g., the 2nd argument to TEST_COMPILE_GOBJECT
41 dnl is the 2nd argument of AT_CHECK -- the expected exit status).
42 m4_define([TEST_COMPILE_GOBJECT], [AT_CHECK([$HAVE_GOBJECT || exit 77
43 $CC $CPPFLAGS $CFLAGS $LIBGOBJECT_CFLAGS -c $1], m4_shift($@))])
45 dnl Same as TEST_COMPILE_GOBJECT, except that the C++ compiler is used.
46 m4_define([TEST_COMPILEXX_GOBJECT], [AT_CHECK([$HAVE_GOBJECT || exit 77
47 $CXX $CPPFLAGS $CXXFLAGS $LIBGOBJECT_CFLAGS -c $1], m4_shift($@))])
49 dnl TEST_CLASSNAME_REPLACE_SEP(Class:Name, separator)
51 dnl Convert the components of Class:Name to lower case, and join them
52 dnl together with the given separator. The result is a quoted string.
53 m4_define([TEST_CLASSNAME_REPLACE_SEP],
54 [m4_join([$2], m4_unquote(m4_split(m4_tolower([$1]), [:])))])
56 dnl TEST_TYPE_MODULE(Class:Name)
57 dnl Create a GTypeModule (Class:Name:Mod) which registers the dynamic
58 dnl type indiciated by Class:Name.
59 m4_define([TEST_TYPE_MODULE],
60 [TEST_TYPE_MODULE_([$1],
61 TEST_CLASSNAME_REPLACE_SEP([$1], [_]),
62 TEST_CLASSNAME_REPLACE_SEP([$1], [-]))])
64 m4_define([TEST_TYPE_MODULE_],
65 [AT_KEYWORDS([dynamic])dnl
67 AT_DATA([$3-mod.gob], [[%ctop{
73 class $1:Mod from G:Type:Module
75 override (G:Type:Module) gboolean load(G:Type:Module *m)
82 AT_CHECK([gob2 $3-mod.gob])
83 TEST_COMPILE_GOBJECT([$3-mod.c], [0], [], [ignore])])
89 m4_divert_push([PREPARE_TESTS])dnl
90 CPPFLAGS="-I$builddir $CPPFLAGS"
92 AS_ECHO(["AUTOCONF = ${AUTOCONF=autoconf}"])
94 (set -x; $AUTOCONF --version) 2>&1
97 AS_ECHO(["MAKE = ${MAKE=make}"])
99 (set -x; $MAKE --version) 2>&1
101 } >&AS_MESSAGE_LOG_FD
102 m4_divert_pop([PREPARE_TESTS])
104 m4_include([tests/general.at])
105 m4_include([tests/options.at])
106 m4_include([tests/interface.at])