| #include "cmTestConfigure.h" | |
| #include "cmTestConfigureEscape.h" | |
| #include "cmTestGeneratedHeader.h" | |
| #include "cmVersion.h" | |
| #include "Aout.h" | |
| #include "ExtraSources/file1.h" | |
| #include "file2.h" | |
| #include "sharedFile.h" | |
| extern "C" { | |
| #include "testConly.h" | |
| } | |
| #include <iostream> | |
| #include <string> | |
| #include <vector> | |
| #include <stdio.h> | |
| #include <string.h> | |
| #include <sys/stat.h> | |
| #if !defined(S_ISDIR) | |
| # define S_ISDIR(mode) ((mode) & _S_IFDIR) | |
| #endif | |
| #ifdef COMPLEX_TEST_LINK_STATIC | |
| extern "C" { | |
| int TestLinkGetType(); | |
| } | |
| #endif | |
| int cm_passed = 0; | |
| int cm_failed = 0; | |
| // ====================================================================== | |
| void cmFailed(char const* Message, char const* m2 = "", char const* m3 = "") | |
| { | |
| std::cout << "FAILED: " << Message << m2 << m3 << "\n"; | |
| cm_failed++; | |
| } | |
| // ====================================================================== | |
| void cmPassed(char const* Message, char const* m2 = "") | |
| { | |
| std::cout << "Passed: " << Message << m2 << "\n"; | |
| cm_passed++; | |
| } | |
| #ifndef COMPLEX_DEFINED_PRE | |
| # error "COMPLEX_DEFINED_PRE not defined!" | |
| #endif | |
| #ifdef COMPLEX_DEFINED | |
| # error "COMPLEX_DEFINED is defined but it should not!" | |
| #endif | |
| #ifndef COMPLEX_DEFINED_POST | |
| # error "COMPLEX_DEFINED_POST not defined!" | |
| #endif | |
| #ifndef CMAKE_IS_REALLY_FUN | |
| # error This is a problem. Looks like ADD_DEFINITIONS and REMOVE_DEFINITIONS does not work | |
| #endif | |
| // ====================================================================== | |
| void TestAndRemoveFile(char const* filename) | |
| { | |
| struct stat st; | |
| if (stat(filename, &st) < 0) { | |
| cmFailed("Could not find file: ", filename); | |
| } else { | |
| if (remove(filename) < 0) { | |
| cmFailed("Unable to remove file. It does not imply that this test " | |
| "failed, but it *will* be corrupted thereafter if this file is " | |
| "not removed: ", | |
| filename); | |
| } else { | |
| cmPassed("Find and remove file: ", filename); | |
| } | |
| } | |
| } | |
| // ====================================================================== | |
| void TestDir(char const* filename) | |
| { | |
| struct stat st; | |
| if (stat(filename, &st) < 0 || !S_ISDIR(st.st_mode)) { | |
| cmFailed("Could not find dir: ", filename); | |
| } else { | |
| cmPassed("Find dir: ", filename); | |
| } | |
| } | |
| // Here is a stupid function that tries to use std::string methods | |
| // so that the dec cxx compiler will instantiate the stuff that | |
| // we are using from the CMakeLib library.... | |
| void ForceStringUse() | |
| { | |
| std::vector<std::string> v; | |
| std::vector<std::string> v2; | |
| v = v2; | |
| std::string cachetest = CACHE_TEST_VAR_INTERNAL; | |
| v.push_back(cachetest); | |
| v2 = v; | |
| std::string x(5, 'x'); | |
| char buff[5]; | |
| x.copy(buff, 1, 0); | |
| x[0] = 'a'; | |
| std::string::size_type pos = 0; | |
| x.replace(pos, pos, pos, 'x'); | |
| std::string copy = cachetest; | |
| cachetest.find("bar"); | |
| cachetest.rfind("bar"); | |
| copy.append(cachetest); | |
| copy = cachetest.substr(0, cachetest.size()); | |
| } | |
| // defined in testcflags.c | |
| extern "C" int TestCFlags(char* m); | |
| extern "C" int TestTargetCompileFlags(char* m); | |
| #if 0 | |
| // defined in Sub1/NameConflictTest.c | |
| extern "C" int NameConflictTest1(); | |
| // defined in Sub2/NameConflictTest.c | |
| extern "C" int NameConflictTest2(); | |
| #endif | |
| // ====================================================================== | |
| int main() | |
| { | |
| #if 0 | |
| if(NameConflictTest1() == 0 && NameConflictTest2() == 0) | |
| { | |
| cmPassed("Sub dir with same named source works"); | |
| } | |
| else | |
| { | |
| cmFailed("Sub dir with same named source fails"); | |
| } | |
| #endif | |
| if (file1() != 1) { | |
| cmFailed("Call to file1 function from library failed."); | |
| } else { | |
| cmPassed("Call to file1 function returned 1."); | |
| } | |
| #ifndef COMPLEX_TARGET_FLAG | |
| cmFailed("COMPILE_FLAGS did not work with SET_TARGET_PROPERTIES"); | |
| #else | |
| cmPassed("COMPILE_FLAGS did work with SET_TARGET_PROPERTIES"); | |
| #endif | |
| #ifdef ELSEIF_RESULT | |
| cmPassed("ELSEIF did work"); | |
| #else | |
| cmFailed("ELSEIF did not work"); | |
| #endif | |
| #ifdef CONDITIONAL_PARENTHESES | |
| cmPassed("CONDITIONAL_PARENTHESES did work"); | |
| #else | |
| cmFailed("CONDITIONAL_PARENTHESES did not work"); | |
| #endif | |
| if (file2() != 1) { | |
| cmFailed("Call to file2 function from library failed."); | |
| } else { | |
| cmPassed("Call to file2 function returned 1."); | |
| } | |
| #ifndef TEST_CXX_FLAGS | |
| cmFailed("CMake CMAKE_CXX_FLAGS is not being passed to the compiler!"); | |
| #else | |
| cmPassed("CMake CMAKE_CXX_FLAGS is being passed to the compiler."); | |
| #endif | |
| std::string gen = CMAKE_GENERATOR; | |
| // visual studio is currently broken for c flags | |
| char msg[1024]; | |
| if (gen.find("Visual") == gen.npos) { | |
| #ifdef TEST_C_FLAGS | |
| cmFailed( | |
| "CMake CMAKE_C_FLAGS are being passed to c++ files the compiler!"); | |
| #else | |
| cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files."); | |
| #endif | |
| if (TestCFlags(msg)) { | |
| cmPassed("CMake CMAKE_C_FLAGS are being passed to c files and CXX flags " | |
| "are not."); | |
| } else { | |
| cmFailed(msg); | |
| } | |
| } | |
| if (TestTargetCompileFlags(msg)) { | |
| cmPassed(msg); | |
| } else { | |
| cmFailed(msg); | |
| } | |
| // ---------------------------------------------------------------------- | |
| // Test ADD_DEFINITIONS | |
| #ifndef CMAKE_IS_FUN | |
| cmFailed("CMake is not fun, so it is broken and should be fixed."); | |
| #else | |
| cmPassed("CMAKE_IS_FUN is defined."); | |
| #endif | |
| #if defined(CMAKE_ARGV1) && defined(CMAKE_ARGV2) && defined(CMAKE_ARGV3) && \ | |
| defined(CMAKE_ARGV4) | |
| cmPassed("Variable args for MACROs are working."); | |
| #else | |
| cmFailed("Variable args for MACROs are failing."); | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test GET_SOURCE_FILE_PROPERTY for location | |
| #ifndef CMAKE_FOUND_ACXX | |
| cmFailed("CMake did not get the location of A.cxx correctly"); | |
| #else | |
| cmPassed("CMake found A.cxx properly"); | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test GET_DIRECTORY_PROPERTY for parent | |
| #ifndef CMAKE_FOUND_PARENT | |
| cmFailed("CMake did not get the location of the parent directory properly"); | |
| #else | |
| cmPassed("CMake found the parent directory properly"); | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test GET_DIRECTORY_PROPERTY for listfiles | |
| #ifndef CMAKE_FOUND_LISTFILE_STACK | |
| cmFailed("CMake did not get the listfile stack properly"); | |
| #else | |
| cmPassed("CMake found the listfile stack properly"); | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test SET | |
| #ifdef SHOULD_NOT_BE_DEFINED | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED is defined."); | |
| #endif | |
| #ifndef ONE_VAR | |
| cmFailed("cmakedefine is broken, ONE_VAR is not defined."); | |
| #else | |
| cmPassed("ONE_VAR is defined."); | |
| #endif | |
| #ifndef ONE_VAR_AND_INDENTED | |
| cmFailed("cmakedefine is broken, ONE_VAR_AND_INDENTED is not defined."); | |
| #else | |
| cmPassed("ONE_VAR_AND_INDENTED is defined."); | |
| #endif | |
| #ifdef ZERO_VAR | |
| cmFailed("cmakedefine is broken, ZERO_VAR is defined."); | |
| #else | |
| cmPassed("ZERO_VAR is not defined."); | |
| #endif | |
| #ifdef ZERO_VAR_AND_INDENTED | |
| cmFailed("cmakedefine is broken, ZERO_VAR_AND_INDENTED is defined."); | |
| #else | |
| cmPassed("ZERO_VAR_AND_INDENTED is not defined."); | |
| #endif | |
| #ifndef STRING_VAR | |
| cmFailed("the CONFIGURE_FILE command is broken, STRING_VAR is not defined."); | |
| #else | |
| if (strcmp(STRING_VAR, "CMake is great") != 0) { | |
| cmFailed("the SET or CONFIGURE_FILE command is broken. STRING_VAR == ", | |
| STRING_VAR); | |
| } else { | |
| cmPassed("STRING_VAR == ", STRING_VAR); | |
| } | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test various IF/ELSE combinations | |
| #ifdef SHOULD_NOT_BE_DEFINED_NOT | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_NOT is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_NOT is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_NOT | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_NOT is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_NOT is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_NOT2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_NOT2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_NOT2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_NOT2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_NOT2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_NOT2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_AND | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_AND is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_AND is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_AND | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_AND is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_AND is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_AND2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_AND2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_AND2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_AND2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_AND2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_AND2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_OR | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_OR is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_OR is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_OR | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_OR is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_OR is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_OR2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_OR2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_OR2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_OR2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_OR2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_OR2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_MATCHES | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_MATCHES is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_MATCHES is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_MATCHES | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_MATCHES is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_MATCHES is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_MATCHES2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_MATCHES2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_MATCHES2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_MATCHES2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_MATCHES2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_MATCHES2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_COMMAND | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_COMMAND is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_COMMAND is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_COMMAND | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_COMMAND is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_COMMAND is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_COMMAND2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_COMMAND2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_COMMAND2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_COMMAND2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_COMMAND2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_COMMAND2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_EXISTS | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EXISTS is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_EXISTS is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_EXISTS | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EXISTS is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_EXISTS is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_EXISTS2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EXISTS2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_EXISTS2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_EXISTS2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EXISTS2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_EXISTS2 is defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_IS_DIRECTORY | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_IS_DIRECTORY is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_IS_DIRECTORY is defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_IS_DIRECTORY2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_IS_DIRECTORY2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_IS_DIRECTORY2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_LESS | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_LESS is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_LESS | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_LESS is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_LESS is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_LESS2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_LESS2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_LESS2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_LESS2 is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_LESS2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_GREATER | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_GREATER is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_GREATER | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_GREATER is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_GREATER is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_GREATER2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_GREATER2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_GREATER2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_GREATER2 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_GREATER2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_EQUAL | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EQUAL is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_EQUAL is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_EQUAL | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EQUAL is not defined.\n"); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_EQUAL is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_LESS_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS_EQUAL is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_LESS_EQUAL is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_LESS_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_LESS_EQUAL is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_LESS_EQUAL is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_LESS_EQUAL2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS_EQUAL2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_LESS_EQUAL2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_LESS_EQUAL2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_LESS_EQUAL2 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_LESS_EQUAL2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_LESS_EQUAL3 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_LESS_EQUAL3 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_LESS_EQUAL3 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_LESS_EQUAL3 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_LESS_EQUAL3 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_LESS_EQUAL3 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_GREATER_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER_EQUAL is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_GREATER_EQUAL is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_GREATER_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_GREATER_EQUAL is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_GREATER_EQUAL is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_GREATER_EQUAL2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER_EQUAL2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_GREATER_EQUAL2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_GREATER_EQUAL2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_GREATER_EQUAL2 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_GREATER_EQUAL2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_GREATER_EQUAL3 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_GREATER_EQUAL3 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_GREATER_EQUAL3 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_GREATER_EQUAL3 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_GREATER_EQUAL3 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_GREATER_EQUAL3 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRLESS | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRLESS | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRLESS is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRLESS is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRLESS2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRLESS2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRLESS2 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRLESS2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRGREATER | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRGREATER is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRGREATER2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER2 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRGREATER2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRLESS_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_STRLESS_EQUAL is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRLESS_EQUAL is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL2 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRLESS_EQUAL2 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_STRLESS_EQUAL2 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRLESS_EQUAL2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL3 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL3 is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRLESS_EQUAL3 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRLESS_EQUAL3 | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_STRLESS_EQUAL3 is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRLESS_EQUAL3 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL is defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRGREATER_EQUAL | |
| cmFailed( | |
| "IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER_EQUAL is not defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRGREATER_EQUAL is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL2 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL2 is " | |
| "defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL2 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRGREATER_EQUAL2 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER_EQUAL2 is not " | |
| "defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRGREATER_EQUAL2 is defined."); | |
| #endif | |
| #ifdef SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL3 | |
| cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL3 is " | |
| "defined."); | |
| #else | |
| cmPassed("SHOULD_NOT_BE_DEFINED_STRGREATER_EQUAL3 is not defined."); | |
| #endif | |
| #ifndef SHOULD_BE_DEFINED_STRGREATER_EQUAL3 | |
| cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_STRGREATER_EQUAL3 is not " | |
| "defined."); | |
| #else | |
| cmPassed("SHOULD_BE_DEFINED_STRGREATER_EQUAL3 is defined."); | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test FOREACH | |
| #ifndef FOREACH_VAR1 | |
| cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, " | |
| "FOREACH_VAR1 is not defined."); | |
| #else | |
| if (strcmp(FOREACH_VAR1, "VALUE1") != 0) { | |
| cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, " | |
| "FOREACH_VAR1 == ", | |
| FOREACH_VAR1); | |
| } else { | |
| cmPassed("FOREACH_VAR1 == ", FOREACH_VAR1); | |
| } | |
| #endif | |
| #ifndef FOREACH_VAR2 | |
| cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, " | |
| "FOREACH_VAR2 is not defined."); | |
| #else | |
| if (strcmp(FOREACH_VAR2, "VALUE2") != 0) { | |
| cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, " | |
| "FOREACH_VAR2 == ", | |
| FOREACH_VAR2); | |
| } else { | |
| cmPassed("FOREACH_VAR2 == ", FOREACH_VAR2); | |
| } | |
| #endif | |
| #ifndef FOREACH_CONCAT | |
| cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, " | |
| "FOREACH_CONCAT is not defined."); | |
| #else | |
| if (strcmp(FOREACH_CONCAT, "abcdefg") != 0) { | |
| cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, " | |
| "FOREACH_CONCAT == ", | |
| FOREACH_CONCAT); | |
| } else { | |
| cmPassed("FOREACH_CONCAT == ", FOREACH_CONCAT); | |
| } | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test WHILE | |
| if (WHILE_VALUE != 1000) { | |
| cmFailed("WHILE command is not working"); | |
| } else { | |
| cmPassed("WHILE command is working"); | |
| } | |
| // ---------------------------------------------------------------------- | |
| // Test LOAD_CACHE | |
| #ifndef CACHE_TEST_VAR1 | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR1 is not defined."); | |
| #else | |
| if (strcmp(CACHE_TEST_VAR1, "foo") != 0) { | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR1 == ", | |
| CACHE_TEST_VAR1); | |
| } else { | |
| cmPassed("CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1); | |
| } | |
| #endif | |
| #ifndef CACHE_TEST_VAR2 | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR2 is not defined."); | |
| #else | |
| if (strcmp(CACHE_TEST_VAR2, "bar") != 0) { | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR2 == ", | |
| CACHE_TEST_VAR2); | |
| } else { | |
| cmPassed("CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2); | |
| } | |
| #endif | |
| #ifndef CACHE_TEST_VAR3 | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR3 is not defined."); | |
| #else | |
| if (strcmp(CACHE_TEST_VAR3, "1") != 0) { | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR3 == ", | |
| CACHE_TEST_VAR3); | |
| } else { | |
| cmPassed("CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3); | |
| } | |
| #endif | |
| #ifdef CACHE_TEST_VAR_EXCLUDED | |
| cmFailed( | |
| "the LOAD_CACHE or CONFIGURE_FILE command or cmakedefine is broken, " | |
| "CACHE_TEST_VAR_EXCLUDED is defined (should not have been loaded)."); | |
| #else | |
| cmPassed("CACHE_TEST_VAR_EXCLUDED is not defined."); | |
| #endif | |
| #ifndef CACHE_TEST_VAR_INTERNAL | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR_INTERNAL is not defined."); | |
| #else | |
| std::string cachetest = CACHE_TEST_VAR_INTERNAL; | |
| if (cachetest != "bar") { | |
| cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, " | |
| "CACHE_TEST_VAR_INTERNAL == ", | |
| CACHE_TEST_VAR_INTERNAL); | |
| } else { | |
| cmPassed("CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL); | |
| } | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Some pre-build/pre-link/post-build custom-commands have been | |
| // attached to the lib (see Library/). | |
| // Each runs ${CREATE_FILE_EXE} which will create a file. | |
| // It also copies that file again using cmake -E. | |
| // Similar rules have been added to this executable. | |
| // | |
| // WARNING: if you run 'complex' manually, this *will* fail, because | |
| // the file was removed the last time 'complex' was run, and it is | |
| // only created during a build. | |
| TestAndRemoveFile("Library/prebuild.txt"); | |
| TestAndRemoveFile("Library/prelink.txt"); | |
| TestAndRemoveFile("Library/postbuild.txt"); | |
| TestAndRemoveFile("Library/postbuild2.txt"); | |
| TestAndRemoveFile("Executable/prebuild.txt"); | |
| TestAndRemoveFile("Executable/prelink.txt"); | |
| TestAndRemoveFile("Executable/postbuild.txt"); | |
| TestAndRemoveFile("Executable/postbuild2.txt"); | |
| // ---------------------------------------------------------------------- | |
| // A custom target has been created (see Library/). | |
| // It runs ${CREATE_FILE_EXE} which will create a file. | |
| // | |
| // WARNING: if you run 'complex' manually, this *will* fail, because | |
| // the file was removed the last time 'complex' was run, and it is | |
| // only created during a build. | |
| TestAndRemoveFile("Library/custom_target1.txt"); | |
| // ---------------------------------------------------------------------- | |
| // A directory has been created. | |
| TestDir("make_dir"); | |
| // ---------------------------------------------------------------------- | |
| // Test FIND_LIBRARY | |
| #ifndef FIND_DUMMY_LIB | |
| cmFailed("the CONFIGURE_FILE command is broken, " | |
| "FIND_DUMMY_LIB is not defined."); | |
| #else | |
| if (strstr(FIND_DUMMY_LIB, "dummylib") == NULL) { | |
| cmFailed("the FIND_LIBRARY or CONFIGURE_FILE command is broken, " | |
| "FIND_DUMMY_LIB == ", | |
| FIND_DUMMY_LIB); | |
| } else { | |
| cmPassed("FIND_DUMMY_LIB == ", FIND_DUMMY_LIB); | |
| } | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test SET_SOURCE_FILES_PROPERTIES | |
| #ifndef FILE_HAS_EXTRA_COMPILE_FLAGS | |
| cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting " | |
| "FILE_HAS_EXTRA_COMPILE_FLAGS flag"); | |
| #else | |
| cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting " | |
| "FILE_HAS_EXTRA_COMPILE_FLAGS flag"); | |
| #endif | |
| #if 0 // Disable until implemented everywhere. | |
| # ifndef FILE_DEFINE_STRING | |
| cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag"); | |
| # else | |
| if(strcmp(FILE_DEFINE_STRING, "hello") != 0) | |
| { | |
| cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting FILE_DEFINE_STRING flag correctly"); | |
| } | |
| else | |
| { | |
| cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting FILE_DEFINE_STRING flag"); | |
| } | |
| # endif | |
| #endif | |
| #ifndef FILE_HAS_ABSTRACT | |
| cmFailed("SET_SOURCE_FILES_PROPERTIES failed at setting ABSTRACT flag"); | |
| #else | |
| cmPassed("SET_SOURCE_FILES_PROPERTIES succeeded in setting ABSTRACT flag"); | |
| #endif | |
| #ifndef FILE_HAS_WRAP_EXCLUDE | |
| cmFailed("FILE_HAS_WRAP_EXCLUDE failed at setting WRAP_EXCLUDE flag"); | |
| #else | |
| cmPassed("FILE_HAS_WRAP_EXCLUDE succeeded in setting WRAP_EXCLUDE flag"); | |
| #endif | |
| #ifndef FILE_COMPILE_FLAGS | |
| cmFailed("the CONFIGURE_FILE command is broken, FILE_COMPILE_FLAGS is not " | |
| "defined."); | |
| #else | |
| if (strcmp(FILE_COMPILE_FLAGS, "-foo -bar") != 0) { | |
| cmFailed("the SET_SOURCE_FILES_PROPERTIES or CONFIGURE_FILE command is " | |
| "broken. FILE_COMPILE_FLAGS == ", | |
| FILE_COMPILE_FLAGS); | |
| } else { | |
| cmPassed( | |
| "SET_SOURCE_FILES_PROPERTIES succeeded in setting extra flags == ", | |
| FILE_COMPILE_FLAGS); | |
| } | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Test registry (win32) | |
| #if defined(_WIN32) && !defined(__CYGWIN__) | |
| # ifndef REGISTRY_TEST_PATH | |
| cmFailed("the CONFIGURE_FILE command is broken, REGISTRY_TEST_PATH is not " | |
| "defined."); | |
| # else | |
| std::cout << "REGISTRY_TEST_PATH == " << REGISTRY_TEST_PATH << "\n"; | |
| if (stricmp(REGISTRY_TEST_PATH, BINARY_DIR "/registry_dir") != 0) { | |
| cmFailed("the 'read registry value' function or CONFIGURE_FILE command is " | |
| "broken. REGISTRY_TEST_PATH == ", | |
| REGISTRY_TEST_PATH, " is not " BINARY_DIR "/registry_dir"); | |
| } else { | |
| cmPassed("REGISTRY_TEST_PATH == ", REGISTRY_TEST_PATH); | |
| } | |
| # endif | |
| #endif // defined(_WIN32) && !defined(__CYGWIN__) | |
| if (strcmp(CMAKE_MINIMUM_REQUIRED_VERSION, "3.10") == 0) { | |
| cmPassed("CMAKE_MINIMUM_REQUIRED_VERSION is set to 3.10"); | |
| } else { | |
| cmFailed("CMAKE_MINIMUM_REQUIRED_VERSION is not set to the expected 2.4"); | |
| } | |
| // ---------------------------------------------------------------------- | |
| // Test REMOVE command | |
| if (strcmp("a;b;d", REMOVE_STRING) == 0) { | |
| cmPassed("REMOVE is working"); | |
| } else { | |
| cmFailed("REMOVE is not working"); | |
| } | |
| // ---------------------------------------------------------------------- | |
| // Test SEPARATE_ARGUMENTS | |
| if (strcmp("a;b;c", TEST_SEP) == 0) { | |
| cmPassed("SEPARATE_ARGUMENTS is working"); | |
| } else { | |
| cmFailed("SEPARATE_ARGUMENTS is not working"); | |
| } | |
| // ---------------------------------------------------------------------- | |
| // Test Escape Quotes | |
| if (strcmp("\"hello world\"", STRING_WITH_QUOTES) == 0) { | |
| cmPassed("ESCAPE_QUOTES is working"); | |
| } else { | |
| cmFailed("ESCAPE_QUOTES is not working"); | |
| } | |
| // ---------------------------------------------------------------------- | |
| // Test if IF command inside a FOREACH works. | |
| #if defined(IF_INSIDE_FOREACH_THEN_EXECUTED) && \ | |
| !defined(IF_INSIDE_FOREACH_ELSE_EXECUTED) | |
| cmPassed("IF inside a FOREACH block works"); | |
| #else | |
| cmFailed("IF inside a FOREACH block is broken"); | |
| #endif | |
| #if defined(GENERATED_HEADER_INCLUDED) | |
| cmPassed("Generated header included by non-generated source works."); | |
| #else | |
| cmFailed("Generated header included by non-generated source failed."); | |
| #endif | |
| if (SHOULD_BE_ZERO == 0) { | |
| cmPassed("cmakedefine01 is working for 0"); | |
| } else { | |
| cmFailed("cmakedefine01 is not working for 0"); | |
| } | |
| if (SHOULD_BE_ONE == 1) { | |
| cmPassed("cmakedefine01 is working for 1"); | |
| } else { | |
| cmFailed("cmakedefine01 is not working for 1"); | |
| } | |
| if (SHOULD_BE_ZERO_AND_INDENTED == 0) { | |
| cmPassed("cmakedefine01 is working for 0 and indented"); | |
| } else { | |
| cmFailed("cmakedefine01 is not working for 0 and indented"); | |
| } | |
| if (SHOULD_BE_ONE_AND_INDENTED == 1) { | |
| cmPassed("cmakedefine01 is working for 1 and indented"); | |
| } else { | |
| cmFailed("cmakedefine01 is not working for 1 and indented"); | |
| } | |
| #ifdef FORCE_TEST | |
| cmFailed("CMake SET CACHE FORCE"); | |
| #else | |
| cmPassed("CMake SET CACHE FORCE"); | |
| #endif | |
| #ifdef COMPLEX_TEST_LINK_STATIC | |
| if (TestLinkGetType()) { | |
| cmPassed("Link to static over shared worked."); | |
| } else { | |
| cmFailed("Link to static over shared failed."); | |
| } | |
| #endif | |
| #if defined(A_VALUE) && A_VALUE == 10 | |
| cmPassed("Single-character executable A worked."); | |
| #else | |
| cmFailed("Single-character executable A failed."); | |
| #endif | |
| // ---------------------------------------------------------------------- | |
| // Summary | |
| std::cout << "Passed: " << cm_passed << "\n"; | |
| if (cm_failed) { | |
| std::cout << "Failed: " << cm_failed << "\n"; | |
| return cm_failed; | |
| } | |
| return 0; | |
| } |