]> git.draconx.ca Git - dxcommon.git/blob - tests/macros.at
Fix underquoting issue in DX_DO.
[dxcommon.git] / tests / macros.at
1 dnl Copyright © 2014-2015, 2018 Nick Bowler
2 dnl
3 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
4 dnl This is free software: you are free to do what the fuck you want to.
5 dnl There is NO WARRANTY, to the extent permitted by law.
6
7 AT_BANNER([Autoconf macros])
8
9 m4_define([TEST_CONFIGURE_AC], [AT_DATA([configure.ac],
10 [[AC_INIT([test], [0])
11 ]$1[
12 AC_OUTPUT
13 ]])
14 cp "$srcdir/install-sh" \
15    "$srcdir/config.guess" \
16    "$srcdir/config.sub" \
17    .
18 ])
19
20 m4_define([TEST_AUTORECONF],
21   [AT_CHECK([autoreconf -I "$srcdir/m4"], [0], [], [stderr])])
22
23 m4_define([TEST_CONFIGURE], [AT_CHECK([./configure $1], [0], [ignore])])
24
25 dnl Verify that the DX_BASEDIR macro expands correctly during argument
26 dnl collection.  Crucially, the output must not contain any other text.
27 AT_SETUP([DX_BASEDIR during argument collection])
28 AT_KEYWORDS([DX_BASEDIR macro])
29
30 AT_DATA([test.in],
31 [[@TEST@
32 ]])
33
34 TEST_CONFIGURE_AC(
35 [[AC_SUBST([TEST], 'm4@&t@_dquote(DX_BASEDIR)')
36 AC_CONFIG_FILES([test])
37 ]])
38 TEST_AUTORECONF
39 TEST_CONFIGURE
40
41 printf '%s\n' "$srcdir" | sed -e 's:/\./:/:g' -e 's:/\.$::g' \
42                               -e 's:\(.\)//*:\1/:g' >expout
43 AT_CHECK([cat test], [0], [expout])
44
45 AT_CLEANUP
46
47 dnl Verify that DX_BASEDIR is correctly AC_SUBSTed
48 AT_SETUP([DX_BASEDIR output substitution])
49 AT_KEYWORDS([DX_BASEDIR macro])
50
51 AT_DATA([test.in],
52 [[@DX_BASEDIR@
53 ]])
54
55 TEST_CONFIGURE_AC(
56 [[DX_INIT
57 AC_CONFIG_FILES([test])
58 ]])
59 TEST_AUTORECONF
60 TEST_CONFIGURE
61
62 printf '%s\n' "$srcdir" | sed -e 's:/\./:/:g' -e 's:/\.$::g' \
63                               -e 's:\(.\)//*:\1/:g' >expout
64 AT_CHECK([cat test], [0], [expout])
65
66 AT_CLEANUP
67
68 dnl Verify that DX_BASEDIR is set correctly implicitly
69 AT_SETUP([DX_BASEDIR implicit definition])
70 AT_KEYWORDS([DX_BASEDIR macro])
71
72 AT_DATA([test.in],
73 [[@DX_BASEDIR@
74 ]])
75
76 TEST_CONFIGURE_AC(
77 [[DX_EXPORTED_SH
78 AC_CONFIG_FILES([test])
79 ]])
80 TEST_AUTORECONF
81 TEST_CONFIGURE
82
83 AT_CLEANUP
84
85 AT_SETUP([DX_COMMAND_OUTPUT])
86 AT_KEYWORDS([DX_COMMAND_OUTPUT macro])
87
88 AT_DATA([expout],
89 [[   leading whitespace
90 trailing whitespace     @&t@
91 embedded\ backslashes
92       @&t@
93 backslash\
94 newline
95 ]])
96
97 TEST_CONFIGURE_AC(
98 [[DX_COMMAND_OUTPUT([var], [cat expout])
99 AS@&t@_ECHO(["$var"]) >test.out
100 ]])
101 TEST_AUTORECONF
102 TEST_CONFIGURE
103
104 AT_CHECK([cat test.out], [0], [expout])
105
106 AT_CLEANUP
107
108 AT_SETUP([DX_DO quoting])
109 AT_KEYWORDS([DX_DO macro])
110
111 TEST_CONFIGURE_AC(
112 [[m4@&t@_define([FOO])
113 :; { DX_DO([AS@&t@_ECHO_N(["[FOO]"])],
114            [AS@&t@_ECHO_N(["[FOO]"])],
115            [AS@&t@_ECHO(["[FOO]"])])
116 } >test.out
117 ]])
118
119 dnl TEST_CONFIGURE_AC(
120 dnl [[DX_DO([AS@&t@_ECHO_N([hello,world])],[AS@&t@_ECHO_N([goodbye,world])])
121 dnl ]])
122 TEST_AUTORECONF
123 TEST_CONFIGURE
124 AT_CHECK([cat test.out], [0], [[FOOFOOFOO
125 ]])
126
127 AT_CLEANUP