1 /*	$NetBSD: h_build.h,v 1.1.1.3 2014/12/10 03:34:48 christos Exp $	*/
2 
3 /*
4  * Automated Testing Framework (atf)
5  *
6  * Copyright (c) 2009 The NetBSD Foundation, Inc.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
19  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
20  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
23  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
25  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
27  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
29  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #if defined(TESTS_ATF_ATF_C_H_BUILD_H)
33 #   error "Cannot include h_build.h more than once."
34 #else
35 #   define TESTS_ATF_ATF_C_H_BUILD_H
36 #endif
37 
38 /* ---------------------------------------------------------------------
39  * Test case data.
40  * --------------------------------------------------------------------- */
41 
42 static struct c_o_test {
43     const char *msg;
44     const char *cc;
45     const char *cflags;
46     const char *cppflags;
47     const char *sfile;
48     const char *ofile;
49     bool hasoptargs;
50     const char *const optargs[16];
51     const char *const expargv[16];
52 } c_o_tests[] = {
53     {
54         "No flags",
55         "cc",
56         "",
57         "",
58         "test.c",
59         "test.o",
60         false,
61         {
62             NULL
63         },
64         {
65             "cc", "-o", "test.o", "-c", "test.c", NULL
66         },
67     },
68 
69     {
70         "Multi-word program name",
71         "cc -foo",
72         "",
73         "",
74         "test.c",
75         "test.o",
76         false,
77         {
78             NULL
79         },
80         {
81             "cc", "-foo", "-o", "test.o", "-c", "test.c", NULL
82         },
83     },
84 
85     {
86         "Some cflags",
87         "cc",
88         "-f1 -f2    -f3 -f4-f5",
89         "",
90         "test.c",
91         "test.o",
92         false,
93         {
94             NULL
95         },
96         {
97             "cc", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o",
98             "-c", "test.c", NULL
99         },
100     },
101 
102     {
103         "Some cppflags",
104         "cc",
105         "",
106         "-f1 -f2    -f3 -f4-f5",
107         "test.c",
108         "test.o",
109         false,
110         {
111             NULL
112         },
113         {
114             "cc", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o",
115             "-c", "test.c", NULL
116         },
117     },
118 
119     {
120         "Some cflags and cppflags",
121         "cc",
122         "-f2",
123         "-f1",
124         "test.c",
125         "test.o",
126         false,
127         {
128             NULL
129         },
130         {
131             "cc", "-f1", "-f2", "-o", "test.o", "-c", "test.c", NULL
132         },
133     },
134 
135     {
136         "Some optional arguments",
137         "cc",
138         "",
139         "",
140         "test.c",
141         "test.o",
142         true,
143         {
144             "-o1", "-o2", NULL
145         },
146         {
147             "cc", "-o1", "-o2", "-o", "test.o", "-c", "test.c", NULL
148         },
149     },
150 
151     {
152         "Some cflags, cppflags and optional arguments",
153         "cc",
154         "-f2",
155         "-f1",
156         "test.c",
157         "test.o",
158         true,
159         {
160             "-o1", "-o2", NULL
161         },
162         {
163             "cc", "-f1", "-f2", "-o1", "-o2", "-o", "test.o",
164             "-c", "test.c", NULL
165         },
166     },
167 
168     {
169         NULL,
170         NULL,
171         NULL,
172         NULL,
173         NULL,
174         NULL,
175         false,
176         { NULL },
177         { NULL },
178     },
179 };
180 
181 static struct cpp_test {
182     const char *msg;
183     const char *cpp;
184     const char *cppflags;
185     const char *sfile;
186     const char *ofile;
187     bool hasoptargs;
188     const char *const optargs[16];
189     const char *const expargv[16];
190 } cpp_tests[] = {
191     {
192         "No flags",
193         "cpp",
194         "",
195         "test.c",
196         "test.out",
197         false,
198         {
199             NULL
200         },
201         {
202             "cpp", "-o", "test.out", "test.c", NULL
203         },
204     },
205 
206     {
207         "Multi-word program name",
208         "cpp -foo",
209         "",
210         "test.c",
211         "test.out",
212         false,
213         {
214             NULL
215         },
216         {
217             "cpp", "-foo", "-o", "test.out", "test.c", NULL
218         },
219     },
220 
221     {
222         "Some cppflags",
223         "cpp",
224         "-f1 -f2    -f3 -f4-f5",
225         "test.c",
226         "test.out",
227         false,
228         {
229             NULL
230         },
231         {
232             "cpp", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.out",
233             "test.c", NULL
234         },
235     },
236 
237     {
238         "Some optional arguments",
239         "cpp",
240         "",
241         "test.c",
242         "test.out",
243         true,
244         {
245             "-o1", "-o2", NULL
246         },
247         {
248             "cpp", "-o1", "-o2", "-o", "test.out", "test.c", NULL
249         },
250     },
251 
252     {
253         "Some cppflags and optional arguments",
254         "cpp",
255         "-f1",
256         "test.c",
257         "test.out",
258         true,
259         {
260             "-o1", "-o2", NULL
261         },
262         {
263             "cpp", "-f1", "-o1", "-o2", "-o", "test.out", "test.c", NULL
264         },
265     },
266 
267     {
268         NULL,
269         NULL,
270         NULL,
271         NULL,
272         NULL,
273         false,
274         { NULL },
275         { NULL },
276     },
277 };
278 
279 static struct cxx_o_test {
280     const char *msg;
281     const char *cxx;
282     const char *cxxflags;
283     const char *cppflags;
284     const char *sfile;
285     const char *ofile;
286     bool hasoptargs;
287     const char *const optargs[16];
288     const char *const expargv[16];
289 } cxx_o_tests[] = {
290     {
291         "No flags",
292         "c++",
293         "",
294         "",
295         "test.c",
296         "test.o",
297         false,
298         {
299             NULL
300         },
301         {
302             "c++", "-o", "test.o", "-c", "test.c", NULL
303         },
304     },
305 
306     {
307         "Multi-word program name",
308         "c++ -foo",
309         "",
310         "",
311         "test.c",
312         "test.o",
313         false,
314         {
315             NULL
316         },
317         {
318             "c++", "-foo", "-o", "test.o", "-c", "test.c", NULL
319         },
320     },
321 
322     {
323         "Some cxxflags",
324         "c++",
325         "-f1 -f2    -f3 -f4-f5",
326         "",
327         "test.c",
328         "test.o",
329         false,
330         {
331             NULL
332         },
333         {
334             "c++", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o",
335             "-c", "test.c", NULL
336         },
337     },
338 
339     {
340         "Some cppflags",
341         "c++",
342         "",
343         "-f1 -f2    -f3 -f4-f5",
344         "test.c",
345         "test.o",
346         false,
347         {
348             NULL
349         },
350         {
351             "c++", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o",
352             "-c", "test.c", NULL
353         },
354     },
355 
356     {
357         "Some cxxflags and cppflags",
358         "c++",
359         "-f2",
360         "-f1",
361         "test.c",
362         "test.o",
363         false,
364         {
365             NULL
366         },
367         {
368             "c++", "-f1", "-f2", "-o", "test.o", "-c", "test.c", NULL
369         },
370     },
371 
372     {
373         "Some optional arguments",
374         "c++",
375         "",
376         "",
377         "test.c",
378         "test.o",
379         true,
380         {
381             "-o1", "-o2", NULL
382         },
383         {
384             "c++", "-o1", "-o2", "-o", "test.o", "-c", "test.c", NULL
385         },
386     },
387 
388     {
389         "Some cxxflags, cppflags and optional arguments",
390         "c++",
391         "-f2",
392         "-f1",
393         "test.c",
394         "test.o",
395         true,
396         {
397             "-o1", "-o2", NULL
398         },
399         {
400             "c++", "-f1", "-f2", "-o1", "-o2", "-o", "test.o",
401             "-c", "test.c", NULL
402         },
403     },
404 
405     {
406         NULL,
407         NULL,
408         NULL,
409         NULL,
410         NULL,
411         NULL,
412         false,
413         { NULL },
414         { NULL },
415     },
416 };
417