1 #include "cmTestConfigure.h"
2 #include "cmTestConfigureEscape.h"
3 #include "cmTestGeneratedHeader.h"
7 #include "ExtraSources/file1.h"
9 #include "sharedFile.h"
11 #include "testConly.h"
22 # define S_ISDIR(mode) ((mode)&_S_IFDIR)
25 #ifdef COMPLEX_TEST_LINK_STATIC
27 int TestLinkGetType();
33 // ======================================================================
35 void cmFailed(const char* Message, const char* m2 = "", const char* m3 = "")
37 std::cout << "FAILED: " << Message << m2 << m3 << "\n";
41 // ======================================================================
43 void cmPassed(const char* Message, const char* m2 = "")
45 std::cout << "Passed: " << Message << m2 << "\n";
49 #ifndef COMPLEX_DEFINED_PRE
50 # error "COMPLEX_DEFINED_PRE not defined!"
53 #ifdef COMPLEX_DEFINED
54 # error "COMPLEX_DEFINED is defined but it should not!"
57 #ifndef COMPLEX_DEFINED_POST
58 # error "COMPLEX_DEFINED_POST not defined!"
61 #ifndef CMAKE_IS_REALLY_FUN
62 # error This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work
65 #if defined(COMPLEX_NDEBUG) && !defined(CMAKE_IS_FUN_IN_RELEASE_MODE)
66 # error Per-configuration directory-level definition not inherited.
69 // ======================================================================
71 void TestAndRemoveFile(const char* filename)
74 if (stat(filename, &st) < 0) {
75 cmFailed("Could not find file: ", filename);
77 if (remove(filename) < 0) {
78 cmFailed("Unable to remove file. It does not imply that this test "
79 "failed, but it *will* be corrupted thereafter if this file is "
83 cmPassed("Find and remove file: ", filename);
88 // ======================================================================
90 void TestDir(const char* filename)
93 if (stat(filename, &st) < 0 || !S_ISDIR(st.st_mode)) {
94 cmFailed("Could not find dir: ", filename);
96 cmPassed("Find dir: ", filename);
100 // Here is a stupid function that tries to use std::string methods
101 // so that the dec cxx compiler will instantiate the stuff that
102 // we are using from the CMakeLib library....
103 void ForceStringUse()
105 std::vector<std::string> v;
106 std::vector<std::string> v2;
108 std::string cachetest = CACHE_TEST_VAR_INTERNAL;
109 v.push_back(cachetest);
111 std::string x(5, 'x');
115 std::string::size_type pos = 0;
116 x.replace(pos, pos, pos, 'x');
117 std::string copy = cachetest;
118 cachetest.find("bar");
119 cachetest.rfind("bar");
120 copy.append(cachetest);
121 copy = cachetest.substr(0, cachetest.size());
124 // defined in testcflags.c
125 extern "C" int TestCFlags(char* m);
126 extern "C" int TestTargetCompileFlags(char* m);
129 // defined in Sub1/NameConflictTest.c
130 extern "C" int NameConflictTest1();
131 // defined in Sub2/NameConflictTest.c
132 extern "C" int NameConflictTest2();
135 // ======================================================================
140 if(NameConflictTest1() == 0 && NameConflictTest2() == 0)
142 cmPassed("Sub dir with same named source works");
146 cmFailed("Sub dir with same named source fails");
150 cmFailed("Call to file1 function from library failed.");
152 cmPassed("Call to file1 function returned 1.");
154 #ifndef COMPLEX_TARGET_FLAG
155 cmFailed("COMPILE_FLAGS did not work with SET_TARGET_PROPERTIES");
157 cmPassed("COMPILE_FLAGS did work with SET_TARGET_PROPERTIES");
161 cmPassed("ELSEIF did work");
163 cmFailed("ELSEIF did not work");
166 #ifdef CONDITIONAL_PARENTHESES
167 cmPassed("CONDITIONAL_PARENTHESES did work");
169 cmFailed("CONDITIONAL_PARENTHESES did not work");
173 cmFailed("Call to file2 function from library failed.");
175 cmPassed("Call to file2 function returned 1.");
177 #ifndef TEST_CXX_FLAGS
178 cmFailed("CMake CMAKE_CXX_FLAGS is not being passed to the compiler!");
180 cmPassed("CMake CMAKE_CXX_FLAGS is being passed to the compiler.");
182 std::string gen = CMAKE_GENERATOR;
183 // visual studio is currently broken for c flags
185 if (gen.find("Visual") == gen.npos) {
188 "CMake CMAKE_C_FLAGS are being passed to c++ files the compiler!");
190 cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files.");
192 if (TestCFlags(msg)) {
193 cmPassed("CMake CMAKE_C_FLAGS are being passed to c files and CXX flags "
199 if (TestTargetCompileFlags(msg)) {
205 // ----------------------------------------------------------------------
206 // Test ADD_DEFINITIONS
209 cmFailed("CMake is not fun, so it is broken and should be fixed.");
211 cmPassed("CMAKE_IS_FUN is defined.");
214 #if defined(CMAKE_ARGV1) && defined(CMAKE_ARGV2) && defined(CMAKE_ARGV3) && \
216 cmPassed("Variable args for MACROs are working.");
218 cmFailed("Variable args for MACROs are failing.");
221 // ----------------------------------------------------------------------
222 // Test GET_SOURCE_FILE_PROPERTY for location
223 #ifndef CMAKE_FOUND_ACXX
224 cmFailed("CMake did not get the location of A.cxx correctly");
226 cmPassed("CMake found A.cxx properly");
229 // ----------------------------------------------------------------------
230 // Test GET_DIRECTORY_PROPERTY for parent
231 #ifndef CMAKE_FOUND_PARENT
232 cmFailed("CMake did not get the location of the parent directory properly");
234 cmPassed("CMake found the parent directory properly");
237 // ----------------------------------------------------------------------
238 // Test GET_DIRECTORY_PROPERTY for listfiles
239 #ifndef CMAKE_FOUND_LISTFILE_STACK
240 cmFailed("CMake did not get the listfile stack properly");
242 cmPassed("CMake found the listfile stack properly");
245 // ----------------------------------------------------------------------
246 // Test SET, VARIABLE_REQUIRES
248 #ifdef SHOULD_NOT_BE_DEFINED
249 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED is defined.");
251 cmPassed("SHOULD_NOT_BE_DEFINED is not defined.");
254 #ifndef SHOULD_BE_DEFINED
255 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED is not defined.\n");
257 cmPassed("SHOULD_BE_DEFINED is defined.");
261 cmFailed("cmakedefine is broken, ONE_VAR is not defined.");
263 cmPassed("ONE_VAR is defined.");
266 #ifndef ONE_VAR_AND_INDENTED
267 cmFailed("cmakedefine is broken, ONE_VAR_AND_INDENTED is not defined.");
269 cmPassed("ONE_VAR_AND_INDENTED is defined.");
272 #ifndef ONE_VAR_IS_DEFINED
273 cmFailed("cmakedefine, SET or VARIABLE_REQUIRES is broken, "
274 "ONE_VAR_IS_DEFINED is not defined.");
276 cmPassed("ONE_VAR_IS_DEFINED is defined.");
280 cmFailed("cmakedefine is broken, ZERO_VAR is defined.");
282 cmPassed("ZERO_VAR is not defined.");
285 #ifdef ZERO_VAR_AND_INDENTED
286 cmFailed("cmakedefine is broken, ZERO_VAR_AND_INDENTED is defined.");
288 cmPassed("ZERO_VAR_AND_INDENTED is not defined.");
292 cmFailed("the CONFIGURE_FILE command is broken, STRING_VAR is not defined.");
294 if (strcmp(STRING_VAR, "CMake is great") != 0) {
295 cmFailed("the SET or CONFIGURE_FILE command is broken. STRING_VAR == ",
298 cmPassed("STRING_VAR == ", STRING_VAR);
302 // ----------------------------------------------------------------------
303 // Test various IF/ELSE combinations
305 #ifdef SHOULD_NOT_BE_DEFINED_NOT
306 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_NOT is defined.");
308 cmPassed("SHOULD_NOT_BE_DEFINED_NOT is not defined.");
311 #ifndef SHOULD_BE_DEFINED_NOT
312 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_NOT is not defined.\n");
314 cmPassed("SHOULD_BE_DEFINED_NOT is defined.");
317 #ifdef SHOULD_NOT_BE_DEFINED_NOT2
318 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_NOT2 is defined.");
320 cmPassed("SHOULD_NOT_BE_DEFINED_NOT2 is not defined.");
323 #ifndef SHOULD_BE_DEFINED_NOT2
324 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_NOT2 is not defined.\n");
326 cmPassed("SHOULD_BE_DEFINED_NOT2 is defined.");
329 #ifdef SHOULD_NOT_BE_DEFINED_AND
330 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_AND is defined.");
332 cmPassed("SHOULD_NOT_BE_DEFINED_AND is not defined.");
335 #ifndef SHOULD_BE_DEFINED_AND
336 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_AND is not defined.\n");
338 cmPassed("SHOULD_BE_DEFINED_AND is defined.");
341 #ifdef SHOULD_NOT_BE_DEFINED_AND2
342 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_AND2 is defined.");
344 cmPassed("SHOULD_NOT_BE_DEFINED_AND2 is not defined.");
347 #ifndef SHOULD_BE_DEFINED_AND2
348 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_AND2 is not defined.\n");
350 cmPassed("SHOULD_BE_DEFINED_AND2 is defined.");
353 #ifdef SHOULD_NOT_BE_DEFINED_OR
354 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_OR is defined.");
356 cmPassed("SHOULD_NOT_BE_DEFINED_OR is not defined.");
359 #ifndef SHOULD_BE_DEFINED_OR
360 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_OR is not defined.\n");
362 cmPassed("SHOULD_BE_DEFINED_OR is defined.");
365 #ifdef SHOULD_NOT_BE_DEFINED_OR2
366 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_OR2 is defined.");
368 cmPassed("SHOULD_NOT_BE_DEFINED_OR2 is not defined.");
371 #ifndef SHOULD_BE_DEFINED_OR2
372 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_OR2 is not defined.\n");
374 cmPassed("SHOULD_BE_DEFINED_OR2 is defined.");
377 #ifdef SHOULD_NOT_BE_DEFINED_MATCHES
378 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_MATCHES is defined.");
380 cmPassed("SHOULD_NOT_BE_DEFINED_MATCHES is not defined.");
383 #ifndef SHOULD_BE_DEFINED_MATCHES
384 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_MATCHES is not defined.\n");
386 cmPassed("SHOULD_BE_DEFINED_MATCHES is defined.");
389 #ifdef SHOULD_NOT_BE_DEFINED_MATCHES2
390 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_MATCHES2 is defined.");
392 cmPassed("SHOULD_NOT_BE_DEFINED_MATCHES2 is not defined.");
395 #ifndef SHOULD_BE_DEFINED_MATCHES2
397 "IF or SET is broken, SHOULD_BE_DEFINED_MATCHES2 is not defined.\n");
399 cmPassed("SHOULD_BE_DEFINED_MATCHES2 is defined.");
402 #ifdef SHOULD_NOT_BE_DEFINED_COMMAND
403 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_COMMAND is defined.");
405 cmPassed("SHOULD_NOT_BE_DEFINED_COMMAND is not defined.");
408 #ifndef SHOULD_BE_DEFINED_COMMAND
409 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_COMMAND is not defined.\n");
411 cmPassed("SHOULD_BE_DEFINED_COMMAND is defined.");
414 #ifdef SHOULD_NOT_BE_DEFINED_COMMAND2
415 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_COMMAND2 is defined.");
417 cmPassed("SHOULD_NOT_BE_DEFINED_COMMAND2 is not defined.");
420 #ifndef SHOULD_BE_DEFINED_COMMAND2
422 "IF or SET is broken, SHOULD_BE_DEFINED_COMMAND2 is not defined.\n");
424 cmPassed("SHOULD_BE_DEFINED_COMMAND2 is defined.");
427 #ifdef SHOULD_NOT_BE_DEFINED_EXISTS
428 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EXISTS is defined.");
430 cmPassed("SHOULD_NOT_BE_DEFINED_EXISTS is not defined.");
433 #ifndef SHOULD_BE_DEFINED_EXISTS
434 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EXISTS is not defined.\n");
436 cmPassed("SHOULD_BE_DEFINED_EXISTS is defined.");
439 #ifdef SHOULD_NOT_BE_DEFINED_EXISTS2
440 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EXISTS2 is defined.");
442 cmPassed("SHOULD_NOT_BE_DEFINED_EXISTS2 is not defined.");
445 #ifndef SHOULD_BE_DEFINED_EXISTS2
446 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EXISTS2 is not defined.\n");
448 cmPassed("SHOULD_BE_DEFINED_EXISTS2 is defined.");
451 #ifndef SHOULD_BE_DEFINED_IS_DIRECTORY
453 "IF or SET is broken, SHOULD_BE_DEFINED_IS_DIRECTORY is not defined.\n");
455 cmPassed("SHOULD_BE_DEFINED_IS_DIRECTORY is defined.");
458 #ifndef SHOULD_BE_DEFINED_IS_DIRECTORY2
460 "IF or SET is broken, SHOULD_BE_DEFINED_IS_DIRECTORY2 is not defined.\n");
462 cmPassed("SHOULD_BE_DEFINED_IS_DIRECTORY2 is defined.");
465 #ifdef SHOULD_NOT_BE_DEFINED_LESS
466 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS is defined.");
468 cmPassed("SHOULD_NOT_BE_DEFINED_LESS is not defined.");
471 #ifndef SHOULD_BE_DEFINED_LESS
472 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_LESS is not defined.");
474 cmPassed("SHOULD_BE_DEFINED_LESS is defined.");
477 #ifdef SHOULD_NOT_BE_DEFINED_LESS2
478 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS2 is defined.");
480 cmPassed("SHOULD_NOT_BE_DEFINED_LESS2 is not defined.");
483 #ifndef SHOULD_BE_DEFINED_LESS2
484 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_LESS2 is not defined.");
486 cmPassed("SHOULD_BE_DEFINED_LESS2 is defined.");
489 #ifdef SHOULD_NOT_BE_DEFINED_GREATER
490 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER is defined.");
492 cmPassed("SHOULD_NOT_BE_DEFINED_GREATER is not defined.");
495 #ifndef SHOULD_BE_DEFINED_GREATER
496 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_GREATER is not defined.");
498 cmPassed("SHOULD_BE_DEFINED_GREATER is defined.");
501 #ifdef SHOULD_NOT_BE_DEFINED_GREATER2
502 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER2 is defined.");
504 cmPassed("SHOULD_NOT_BE_DEFINED_GREATER2 is not defined.");
507 #ifndef SHOULD_BE_DEFINED_GREATER2
508 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_GREATER2 is not defined.");
510 cmPassed("SHOULD_BE_DEFINED_GREATER2 is defined.");
513 #ifdef SHOULD_NOT_BE_DEFINED_EQUAL
514 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EQUAL is defined.");
516 cmPassed("SHOULD_NOT_BE_DEFINED_EQUAL is not defined.");
519 #ifndef SHOULD_BE_DEFINED_EQUAL
520 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EQUAL is not defined.");
522 cmPassed("SHOULD_BE_DEFINED_EQUAL is defined.");
525 #ifdef SHOULD_NOT_BE_DEFINED_LESS_EQUAL
527 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS_EQUAL is defined.");
529 cmPassed("SHOULD_NOT_BE_DEFINED_LESS_EQUAL is not defined.");
532 #ifndef SHOULD_BE_DEFINED_LESS_EQUAL
534 "IF or SET is broken, SHOULD_BE_DEFINED_LESS_EQUAL is not defined.");
536 cmPassed("SHOULD_BE_DEFINED_LESS_EQUAL is defined.");
539 #ifdef SHOULD_NOT_BE_DEFINED_LESS_EQUAL2
541 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS_EQUAL2 is defined.");
543 cmPassed("SHOULD_NOT_BE_DEFINED_LESS_EQUAL2 is not defined.");
546 #ifndef SHOULD_BE_DEFINED_LESS_EQUAL2
548 "IF or SET is broken, SHOULD_BE_DEFINED_LESS_EQUAL2 is not defined.");
550 cmPassed("SHOULD_BE_DEFINED_LESS_EQUAL2 is defined.");
553 #ifdef SHOULD_NOT_BE_DEFINED_LESS_EQUAL3
555 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS_EQUAL3 is defined.");
557 cmPassed("SHOULD_NOT_BE_DEFINED_LESS_EQUAL3 is not defined.");
560 #ifndef SHOULD_BE_DEFINED_LESS_EQUAL3
562 "IF or SET is broken, SHOULD_BE_DEFINED_LESS_EQUAL3 is not defined.");
564 cmPassed("SHOULD_BE_DEFINED_LESS_EQUAL3 is defined.");
567 #ifdef SHOULD_NOT_BE_DEFINED_GREATER_EQUAL
569 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER_EQUAL is defined.");
571 cmPassed("SHOULD_NOT_BE_DEFINED_GREATER_EQUAL is not defined.");
574 #ifndef SHOULD_BE_DEFINED_GREATER_EQUAL
576 "IF or SET is broken, SHOULD_BE_DEFINED_GREATER_EQUAL is not defined.");
578 cmPassed("SHOULD_BE_DEFINED_GREATER_EQUAL is defined.");
581 #ifdef SHOULD_NOT_BE_DEFINED_GREATER_EQUAL2
583 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER_EQUAL2 is defined.");
585 cmPassed("SHOULD_NOT_BE_DEFINED_GREATER_EQUAL2 is not defined.");
588 #ifndef SHOULD_BE_DEFINED_GREATER_EQUAL2
590 "IF or SET is broken, SHOULD_BE_DEFINED_GREATER_EQUAL2 is not defined.");
592 cmPassed("SHOULD_BE_DEFINED_GREATER_EQUAL2 is defined.");
595 #ifdef SHOULD_NOT_BE_DEFINED_GREATER_EQUAL3
597 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER_EQUAL3 is defined.");
599 cmPassed("SHOULD_NOT_BE_DEFINED_GREATER_EQUAL3 is not defined.");
602 #ifndef SHOULD_BE_DEFINED_GREATER_EQUAL3
604 "IF or SET is broken, SHOULD_BE_DEFINED_GREATER_EQUAL3 is not defined.");
606 cmPassed("SHOULD_BE_DEFINED_GREATER_EQUAL3 is defined.");
609 #ifdef SHOULD_NOT_BE_DEFINED_STRLESS
610 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS is defined.");
612 cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS is not defined.");
615 #ifndef SHOULD_BE_DEFINED_STRLESS
616 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRLESS is not defined.");
618 cmPassed("SHOULD_BE_DEFINED_STRLESS is defined.");
621 #ifdef SHOULD_NOT_BE_DEFINED_STRLESS2
622 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS2 is defined.");
624 cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS2 is not defined.");
627 #ifndef SHOULD_BE_DEFINED_STRLESS2
628 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRLESS2 is not defined.");
630 cmPassed("SHOULD_BE_DEFINED_STRLESS2 is defined.");
633 #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER
635 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER is defined.");
637 cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER is not defined.");
640 #ifndef SHOULD_BE_DEFINED_STRGREATER
642 "IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER is not defined.");
644 cmPassed("SHOULD_BE_DEFINED_STRGREATER is defined.");
647 #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER2
649 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER2 is defined.");
651 cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER2 is not defined.");
654 #ifndef SHOULD_BE_DEFINED_STRGREATER2
656 "IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER2 is not defined.");
658 cmPassed("SHOULD_BE_DEFINED_STRGREATER2 is defined.");
661 #ifdef SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL
663 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL is defined.");
665 cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL is not defined.");
668 #ifndef SHOULD_BE_DEFINED_STRLESS_EQUAL
670 "IF or SET is broken, SHOULD_BE_DEFINED_STRLESS_EQUAL is not defined.");
672 cmPassed("SHOULD_BE_DEFINED_STRLESS_EQUAL is defined.");
675 #ifdef SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL2
677 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL2 is defined.");
679 cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL2 is not defined.");
682 #ifndef SHOULD_BE_DEFINED_STRLESS_EQUAL2
684 "IF or SET is broken, SHOULD_BE_DEFINED_STRLESS_EQUAL2 is not defined.");
686 cmPassed("SHOULD_BE_DEFINED_STRLESS_EQUAL2 is defined.");
689 #ifdef SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL3
691 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL3 is defined.");
693 cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL3 is not defined.");
696 #ifndef SHOULD_BE_DEFINED_STRLESS_EQUAL3
698 "IF or SET is broken, SHOULD_BE_DEFINED_STRLESS_EQUAL3 is not defined.");
700 cmPassed("SHOULD_BE_DEFINED_STRLESS_EQUAL3 is defined.");
703 #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL
705 "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL is defined.");
707 cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL is not defined.");
710 #ifndef SHOULD_BE_DEFINED_STRGREATER_EQUAL
712 "IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER_EQUAL is not defined.");
714 cmPassed("SHOULD_BE_DEFINED_STRGREATER_EQUAL is defined.");
717 #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL2
718 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL2 is "
721 cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL2 is not defined.");
724 #ifndef SHOULD_BE_DEFINED_STRGREATER_EQUAL2
725 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER_EQUAL2 is not "
728 cmPassed("SHOULD_BE_DEFINED_STRGREATER_EQUAL2 is defined.");
731 #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL3
732 cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL3 is "
735 cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL3 is not defined.");
738 #ifndef SHOULD_BE_DEFINED_STRGREATER_EQUAL3
739 cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER_EQUAL3 is not "
742 cmPassed("SHOULD_BE_DEFINED_STRGREATER_EQUAL3 is defined.");
745 // ----------------------------------------------------------------------
749 cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
750 "FOREACH_VAR1 is not defined.");
752 if (strcmp(FOREACH_VAR1, "VALUE1") != 0) {
753 cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
757 cmPassed("FOREACH_VAR1 == ", FOREACH_VAR1);
762 cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
763 "FOREACH_VAR2 is not defined.");
765 if (strcmp(FOREACH_VAR2, "VALUE2") != 0) {
766 cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
770 cmPassed("FOREACH_VAR2 == ", FOREACH_VAR2);
774 #ifndef FOREACH_CONCAT
775 cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
776 "FOREACH_CONCAT is not defined.");
778 if (strcmp(FOREACH_CONCAT, "abcdefg") != 0) {
779 cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
780 "FOREACH_CONCAT == ",
783 cmPassed("FOREACH_CONCAT == ", FOREACH_CONCAT);
787 // ----------------------------------------------------------------------
790 if (WHILE_VALUE != 1000) {
791 cmFailed("WHILE command is not working");
793 cmPassed("WHILE command is working");
796 // ----------------------------------------------------------------------
799 #ifndef CACHE_TEST_VAR1
800 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
801 "CACHE_TEST_VAR1 is not defined.");
803 if (strcmp(CACHE_TEST_VAR1, "foo") != 0) {
804 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
805 "CACHE_TEST_VAR1 == ",
808 cmPassed("CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1);
812 #ifndef CACHE_TEST_VAR2
813 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
814 "CACHE_TEST_VAR2 is not defined.");
816 if (strcmp(CACHE_TEST_VAR2, "bar") != 0) {
817 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
818 "CACHE_TEST_VAR2 == ",
821 cmPassed("CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2);
825 #ifndef CACHE_TEST_VAR3
826 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
827 "CACHE_TEST_VAR3 is not defined.");
829 if (strcmp(CACHE_TEST_VAR3, "1") != 0) {
830 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
831 "CACHE_TEST_VAR3 == ",
834 cmPassed("CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3);
838 #ifdef CACHE_TEST_VAR_EXCLUDED
840 "the LOAD_CACHE or CONFIGURE_FILE command or cmakedefine is broken, "
841 "CACHE_TEST_VAR_EXCLUDED is defined (should not have been loaded).");
843 cmPassed("CACHE_TEST_VAR_EXCLUDED is not defined.");
846 #ifndef CACHE_TEST_VAR_INTERNAL
847 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
848 "CACHE_TEST_VAR_INTERNAL is not defined.");
850 std::string cachetest = CACHE_TEST_VAR_INTERNAL;
851 if (cachetest != "bar") {
852 cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
853 "CACHE_TEST_VAR_INTERNAL == ",
854 CACHE_TEST_VAR_INTERNAL);
856 cmPassed("CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL);
860 // ----------------------------------------------------------------------
861 // Some pre-build/pre-link/post-build custom-commands have been
862 // attached to the lib (see Library/).
863 // Each runs ${CREATE_FILE_EXE} which will create a file.
864 // It also copies that file again using cmake -E.
865 // Similar rules have been added to this executable.
867 // WARNING: if you run 'complex' manually, this *will* fail, because
868 // the file was removed the last time 'complex' was run, and it is
869 // only created during a build.
871 TestAndRemoveFile("Library/prebuild.txt");
872 TestAndRemoveFile("Library/prelink.txt");
873 TestAndRemoveFile("Library/postbuild.txt");
874 TestAndRemoveFile("Library/postbuild2.txt");
875 TestAndRemoveFile("Executable/prebuild.txt");
876 TestAndRemoveFile("Executable/prelink.txt");
877 TestAndRemoveFile("Executable/postbuild.txt");
878 TestAndRemoveFile("Executable/postbuild2.txt");
880 // ----------------------------------------------------------------------
881 // A custom target has been created (see Library/).
882 // It runs ${CREATE_FILE_EXE} which will create a file.
884 // WARNING: if you run 'complex' manually, this *will* fail, because
885 // the file was removed the last time 'complex' was run, and it is
886 // only created during a build.
888 TestAndRemoveFile("Library/custom_target1.txt");
890 // ----------------------------------------------------------------------
891 // A directory has been created.
895 // ----------------------------------------------------------------------
896 // Test OUTPUT_REQUIRED_FILES
897 // The files required by 'complex' have been output to a file.
898 // The contents of this file is not tested (absolute paths).
900 // WARNING: if you run 'complex' manually, this *will* fail, because
901 // the file was removed the last time 'complex' was run, and it is
902 // only created during a build.
904 TestAndRemoveFile("Executable/Temp/complex-required.txt");
906 // ----------------------------------------------------------------------
909 #ifndef FIND_DUMMY_LIB
910 cmFailed("the CONFIGURE_FILE command is broken, "
911 "FIND_DUMMY_LIB is not defined.");
913 if (strstr(FIND_DUMMY_LIB, "dummylib") == NULL) {
914 cmFailed("the FIND_LIBRARY or CONFIGURE_FILE command is broken, "
915 "FIND_DUMMY_LIB == ",
918 cmPassed("FIND_DUMMY_LIB == ", FIND_DUMMY_LIB);
922 // ----------------------------------------------------------------------
923 // Test SET_SOURCE_FILES_PROPERTIES
925 #ifndef FILE_HAS_EXTRA_COMPILE_FLAGS
926 cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting "
927 "FILE_HAS_EXTRA_COMPILE_FLAGS flag");
929 cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting "
930 "FILE_HAS_EXTRA_COMPILE_FLAGS flag");
933 #if 0 // Disable until implemented everywhere.
934 # ifndef FILE_DEFINE_STRING
935 cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag");
937 if(strcmp(FILE_DEFINE_STRING, "hello") != 0)
939 cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag correctly");
943 cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_DEFINE_STRING flag");
948 #ifndef FILE_HAS_ABSTRACT
949 cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting ABSTRACT flag");
951 cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting ABSTRACT flag");
954 #ifndef FILE_HAS_WRAP_EXCLUDE
955 cmFailed("FILE_HAS_WRAP_EXCLUDE failed at setting WRAP_EXCLUDE flag");
957 cmPassed("FILE_HAS_WRAP_EXCLUDE succeeded in setting WRAP_EXCLUDE flag");
960 #ifndef FILE_COMPILE_FLAGS
961 cmFailed("the CONFIGURE_FILE command is broken, FILE_COMPILE_FLAGS is not "
964 if (strcmp(FILE_COMPILE_FLAGS, "-foo -bar") != 0) {
965 cmFailed("the SET_SOURCE_FILES_PROPERTIES or CONFIGURE_FILE command is "
966 "broken. FILE_COMPILE_FLAGS == ",
970 "SET_SOURCE_FILES_PROPERTIES succeeded in setting extra flags == ",
975 // ----------------------------------------------------------------------
976 // Test registry (win32)
977 #if defined(_WIN32) && !defined(__CYGWIN__)
978 # ifndef REGISTRY_TEST_PATH
979 cmFailed("the CONFIGURE_FILE command is broken, REGISTRY_TEST_PATH is not "
982 std::cout << "REGISTRY_TEST_PATH == " << REGISTRY_TEST_PATH << "\n";
983 if (stricmp(REGISTRY_TEST_PATH, BINARY_DIR "/registry_dir") != 0) {
984 cmFailed("the 'read registry value' function or CONFIGURE_FILE command is "
985 "broken. REGISTRY_TEST_PATH == ",
986 REGISTRY_TEST_PATH, " is not " BINARY_DIR "/registry_dir");
988 cmPassed("REGISTRY_TEST_PATH == ", REGISTRY_TEST_PATH);
991 #endif // defined(_WIN32) && !defined(__CYGWIN__)
993 if (strcmp(CMAKE_MINIMUM_REQUIRED_VERSION, "2.4") == 0) {
994 cmPassed("CMAKE_MINIMUM_REQUIRED_VERSION is set to 2.4");
996 cmFailed("CMAKE_MINIMUM_REQUIRED_VERSION is not set to the expected 2.4");
999 // ----------------------------------------------------------------------
1000 // Test REMOVE command
1001 if (strcmp("a;b;d", REMOVE_STRING) == 0) {
1002 cmPassed("REMOVE is working");
1004 cmFailed("REMOVE is not working");
1007 // ----------------------------------------------------------------------
1008 // Test SEPARATE_ARGUMENTS
1009 if (strcmp("a;b;c", TEST_SEP) == 0) {
1010 cmPassed("SEPARATE_ARGUMENTS is working");
1012 cmFailed("SEPARATE_ARGUMENTS is not working");
1015 // ----------------------------------------------------------------------
1016 // Test Escape Quotes
1017 if (strcmp("\"hello world\"", STRING_WITH_QUOTES) == 0) {
1018 cmPassed("ESCAPE_QUOTES is working");
1020 cmFailed("ESCAPE_QUOTES is not working");
1023 // ----------------------------------------------------------------------
1024 // Test if IF command inside a FOREACH works.
1025 #if defined(IF_INSIDE_FOREACH_THEN_EXECUTED) && \
1026 !defined(IF_INSIDE_FOREACH_ELSE_EXECUTED)
1027 cmPassed("IF inside a FOREACH block works");
1029 cmFailed("IF inside a FOREACH block is broken");
1032 #if defined(GENERATED_HEADER_INCLUDED)
1033 cmPassed("Generated header included by non-generated source works.");
1035 cmFailed("Generated header included by non-generated source failed.");
1037 if (SHOULD_BE_ZERO == 0) {
1038 cmPassed("cmakedefine01 is working for 0");
1040 cmFailed("cmakedefine01 is not working for 0");
1042 if (SHOULD_BE_ONE == 1) {
1043 cmPassed("cmakedefine01 is working for 1");
1045 cmFailed("cmakedefine01 is not working for 1");
1047 if (SHOULD_BE_ZERO_AND_INDENTED == 0) {
1048 cmPassed("cmakedefine01 is working for 0 and indented");
1050 cmFailed("cmakedefine01 is not working for 0 and indented");
1052 if (SHOULD_BE_ONE_AND_INDENTED == 1) {
1053 cmPassed("cmakedefine01 is working for 1 and indented");
1055 cmFailed("cmakedefine01 is not working for 1 and indented");
1058 cmFailed("CMake SET CACHE FORCE");
1060 cmPassed("CMake SET CACHE FORCE");
1063 #ifdef COMPLEX_TEST_LINK_STATIC
1064 if (TestLinkGetType()) {
1065 cmPassed("Link to static over shared worked.");
1067 cmFailed("Link to static over shared failed.");
1071 #if defined(A_VALUE) && A_VALUE == 10
1072 cmPassed("Single-character executable A worked.");
1074 cmFailed("Single-character executable A failed.");
1077 // ----------------------------------------------------------------------
1080 std::cout << "Passed: " << cm_passed << "\n";
1082 std::cout << "Failed: " << cm_failed << "\n";