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