complex.cxx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. #include "cmTestConfigure.h"
  2. #include "ExtraSources/file1.h"
  3. #include "file2.h"
  4. #include "sharedFile.h"
  5. #include "cmStandardIncludes.h"
  6. #include "cmSystemTools.h"
  7. int cm_passed = 0;
  8. int cm_failed = 0;
  9. // ======================================================================
  10. void cmFailed(const char* Message, const char* m2= "")
  11. {
  12. std::cerr << "Failed: " << Message << m2 << "\n";
  13. cm_failed++;
  14. }
  15. // ======================================================================
  16. void cmPassed(const char* Message, const char* m2="")
  17. {
  18. std::cout << "Passed: " << Message << m2 << "\n";
  19. cm_passed++;
  20. }
  21. // ======================================================================
  22. void TestAndRemoveFile(const char* filename)
  23. {
  24. if (!cmSystemTools::FileExists(filename))
  25. {
  26. cmFailed("Could not find file: ", filename);
  27. }
  28. else
  29. {
  30. if (!cmSystemTools::RemoveFile(filename))
  31. {
  32. 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);
  33. }
  34. else
  35. {
  36. cmPassed("Find and remove file: ", filename);
  37. }
  38. }
  39. }
  40. // ======================================================================
  41. void TestDir(const char* filename)
  42. {
  43. if (!cmSystemTools::FileExists(filename))
  44. {
  45. cmFailed("Could not find dir: ", filename);
  46. }
  47. else
  48. {
  49. if (!cmSystemTools::FileIsDirectory(filename))
  50. {
  51. cmFailed("Unable to check if file is a directory: ", filename);
  52. }
  53. else
  54. {
  55. cmPassed("Find dir: ", filename);
  56. }
  57. }
  58. }
  59. // ======================================================================
  60. int main()
  61. {
  62. if(sharedFunction() != 1)
  63. {
  64. cmFailed("Call to sharedFunction from shared library failed.");
  65. }
  66. else
  67. {
  68. cmPassed("Call to sharedFunction from shared library worked.");
  69. }
  70. if(file1() != 1)
  71. {
  72. cmFailed("Call to file1 function from library failed.");
  73. }
  74. else
  75. {
  76. cmPassed("Call to file1 function returned 1.");
  77. }
  78. if(file2() != 1)
  79. {
  80. cmFailed("Call to file2 function from library failed.");
  81. }
  82. else
  83. {
  84. cmPassed("Call to file2 function returned 1.");
  85. }
  86. // ----------------------------------------------------------------------
  87. // Test ADD_DEFINITIONS
  88. #ifndef CMAKE_IS_FUN
  89. cmFailed("CMake is not fun, so it is broken and should be fixed.");
  90. #else
  91. cmPassed("CMAKE_IS_FUN is defined.");
  92. #endif
  93. // ----------------------------------------------------------------------
  94. // Test SET, VARIABLE_REQUIRES
  95. #ifdef SHOULD_NOT_BE_DEFINED
  96. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED is defined.");
  97. #else
  98. cmPassed("SHOULD_NOT_BE_DEFINED is not defined.");
  99. #endif
  100. #ifndef SHOULD_BE_DEFINED
  101. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED is not defined.\n");
  102. #else
  103. cmPassed("SHOULD_BE_DEFINED is defined.");
  104. #endif
  105. #ifndef ONE_VAR
  106. cmFailed("cmakedefine is broken, ONE_VAR is not defined.");
  107. #else
  108. cmPassed("ONE_VAR is defined.");
  109. #endif
  110. #ifndef ONE_VAR_IS_DEFINED
  111. cmFailed("cmakedefine, SET or VARIABLE_REQUIRES is broken, "
  112. "ONE_VAR_IS_DEFINED is not defined.");
  113. #else
  114. cmPassed("ONE_VAR_IS_DEFINED is defined.");
  115. #endif
  116. #ifdef ZERO_VAR
  117. cmFailed("cmakedefine is broken, ZERO_VAR is defined.");
  118. #else
  119. cmPassed("ZERO_VAR is not defined.");
  120. #endif
  121. #ifndef STRING_VAR
  122. cmFailed("the CONFIGURE_FILE command is broken, STRING_VAR is not defined.");
  123. #else
  124. if(strcmp(STRING_VAR, "CMake is great") != 0)
  125. {
  126. cmFailed("the SET or CONFIGURE_FILE command is broken. STRING_VAR == ",
  127. STRING_VAR);
  128. }
  129. else
  130. {
  131. cmPassed("STRING_VAR == ", STRING_VAR);
  132. }
  133. #endif
  134. // ----------------------------------------------------------------------
  135. // Test various IF/ELSE combinations
  136. #ifdef SHOULD_NOT_BE_DEFINED_AND
  137. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_AND is defined.");
  138. #else
  139. cmPassed("SHOULD_NOT_BE_DEFINED_AND is not defined.");
  140. #endif
  141. #ifndef SHOULD_BE_DEFINED_AND
  142. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_AND is not defined.\n");
  143. #else
  144. cmPassed("SHOULD_BE_DEFINED_AND is defined.");
  145. #endif
  146. #ifdef SHOULD_NOT_BE_DEFINED_OR
  147. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_OR is defined.");
  148. #else
  149. cmPassed("SHOULD_NOT_BE_DEFINED_OR is not defined.");
  150. #endif
  151. #ifndef SHOULD_BE_DEFINED_OR
  152. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_OR is not defined.\n");
  153. #else
  154. cmPassed("SHOULD_BE_DEFINED_OR is defined.");
  155. #endif
  156. #ifdef SHOULD_NOT_BE_DEFINED_MATCHES
  157. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_MATCHES is defined.");
  158. #else
  159. cmPassed("SHOULD_NOT_BE_DEFINED_MATCHES is not defined.");
  160. #endif
  161. #ifndef SHOULD_BE_DEFINED_MATCHES
  162. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_MATCHES is not defined.\n");
  163. #else
  164. cmPassed("SHOULD_BE_DEFINED_MATCHES is defined.");
  165. #endif
  166. #ifdef SHOULD_NOT_BE_DEFINED_COMMAND
  167. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_COMMAND is defined.");
  168. #else
  169. cmPassed("SHOULD_NOT_BE_DEFINED_COMMAND is not defined.");
  170. #endif
  171. #ifndef SHOULD_BE_DEFINED_COMMAND
  172. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_COMMAND is not defined.\n");
  173. #else
  174. cmPassed("SHOULD_BE_DEFINED_COMMAND is defined.");
  175. #endif
  176. // ----------------------------------------------------------------------
  177. // Test FOREACH
  178. #ifndef FOREACH_VAR1
  179. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  180. "FOREACH_VAR1 is not defined.");
  181. #else
  182. if(strcmp(FOREACH_VAR1, "VALUE1") != 0)
  183. {
  184. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  185. "FOREACH_VAR1 == ", FOREACH_VAR1);
  186. }
  187. else
  188. {
  189. cmPassed("FOREACH_VAR1 == ", FOREACH_VAR1);
  190. }
  191. #endif
  192. #ifndef FOREACH_VAR2
  193. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  194. "FOREACH_VAR2 is not defined.");
  195. #else
  196. if(strcmp(FOREACH_VAR2, "VALUE2") != 0)
  197. {
  198. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  199. "FOREACH_VAR2 == ", FOREACH_VAR2);
  200. }
  201. else
  202. {
  203. cmPassed("FOREACH_VAR2 == ", FOREACH_VAR2);
  204. }
  205. #endif
  206. // ----------------------------------------------------------------------
  207. // Test FIND_FILE, FIND_PATH and various GET_FILENAME_COMPONENT combinations
  208. #ifndef FILENAME_VAR_PATH_NAME
  209. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  210. "FILENAME_VAR_PATH_NAME is not defined.");
  211. #else
  212. if(strcmp(FILENAME_VAR_PATH_NAME, "Complex") != 0)
  213. {
  214. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  215. "FILENAME_VAR_PATH_NAME == ", FILENAME_VAR_PATH_NAME);
  216. }
  217. else
  218. {
  219. cmPassed("FILENAME_VAR_PATH_NAME == ", FILENAME_VAR_PATH_NAME);
  220. }
  221. #endif
  222. #ifndef FILENAME_VAR_NAME
  223. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  224. "FILENAME_VAR_NAME is not defined.");
  225. #else
  226. if(strcmp(FILENAME_VAR_NAME, "VarTests.cmake") != 0)
  227. {
  228. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  229. "FILENAME_VAR_NAME == ", FILENAME_VAR_NAME);
  230. }
  231. else
  232. {
  233. cmPassed("FILENAME_VAR_NAME == ", FILENAME_VAR_NAME);
  234. }
  235. #endif
  236. #ifndef FILENAME_VAR_EXT
  237. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  238. "FILENAME_VAR_EXT is not defined.");
  239. #else
  240. if(strcmp(FILENAME_VAR_EXT, ".cmake") != 0)
  241. {
  242. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  243. "FILENAME_VAR_EXT == ", FILENAME_VAR_EXT);
  244. }
  245. else
  246. {
  247. cmPassed("FILENAME_VAR_EXT == ", FILENAME_VAR_EXT);
  248. }
  249. #endif
  250. #ifndef FILENAME_VAR_NAME_WE
  251. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  252. "FILENAME_VAR_NAME_WE is not defined.");
  253. #else
  254. if(strcmp(FILENAME_VAR_NAME_WE, "VarTests") != 0)
  255. {
  256. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  257. "FILENAME_VAR_NAME_WE == ", FILENAME_VAR_NAME_WE);
  258. }
  259. else
  260. {
  261. cmPassed("FILENAME_VAR_NAME_WE == ", FILENAME_VAR_NAME_WE);
  262. }
  263. #endif
  264. #ifndef PATH_VAR_NAME
  265. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  266. "PATH_VAR_NAME is not defined.");
  267. #else
  268. if(strcmp(PATH_VAR_NAME, "Complex") != 0)
  269. {
  270. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  271. "PATH_VAR_NAME == ", PATH_VAR_NAME);
  272. }
  273. else
  274. {
  275. cmPassed("PATH_VAR_NAME == ", PATH_VAR_NAME);
  276. }
  277. #endif
  278. // ----------------------------------------------------------------------
  279. // Test LOAD_CACHE
  280. #ifndef CACHE_TEST_VAR1
  281. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  282. "CACHE_TEST_VAR1 is not defined.");
  283. #else
  284. if(strcmp(CACHE_TEST_VAR1, "foo") != 0)
  285. {
  286. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  287. "CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1);
  288. }
  289. else
  290. {
  291. cmPassed("CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1);
  292. }
  293. #endif
  294. #ifndef CACHE_TEST_VAR2
  295. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  296. "CACHE_TEST_VAR2 is not defined.");
  297. #else
  298. if(strcmp(CACHE_TEST_VAR2, "bar") != 0)
  299. {
  300. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  301. "CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2);
  302. }
  303. else
  304. {
  305. cmPassed("CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2);
  306. }
  307. #endif
  308. #ifndef CACHE_TEST_VAR3
  309. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  310. "CACHE_TEST_VAR3 is not defined.");
  311. #else
  312. if(strcmp(CACHE_TEST_VAR3, "1") != 0)
  313. {
  314. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  315. "CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3);
  316. }
  317. else
  318. {
  319. cmPassed("CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3);
  320. }
  321. #endif
  322. #ifdef CACHE_TEST_VAR_EXCLUDED
  323. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command or cmakedefine is broken, "
  324. "CACHE_TEST_VAR_EXCLUDED is defined (should not have been loaded).");
  325. #else
  326. cmPassed("CACHE_TEST_VAR_EXCLUDED is not defined.");
  327. #endif
  328. #ifndef CACHE_TEST_VAR_INTERNAL
  329. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  330. "CACHE_TEST_VAR_INTERNAL is not defined.");
  331. #else
  332. if(strcmp(CACHE_TEST_VAR_INTERNAL, "bar") != 0)
  333. {
  334. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  335. "CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL);
  336. }
  337. else
  338. {
  339. cmPassed("CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL);
  340. }
  341. #endif
  342. // ----------------------------------------------------------------------
  343. // A post-build custom-command has been attached to the lib (see Library/).
  344. // It runs ${CREATE_FILE_EXE} which will create a file.
  345. TestAndRemoveFile(BINARY_DIR "/Library/postbuild.txt");
  346. // ----------------------------------------------------------------------
  347. // A custom target has been created (see Library/).
  348. // It runs ${CREATE_FILE_EXE} which will create a file.
  349. TestAndRemoveFile(BINARY_DIR "/Library/custom_target1.txt");
  350. // ----------------------------------------------------------------------
  351. // A directory has been created.
  352. TestDir(BINARY_DIR "/make_dir");
  353. // ----------------------------------------------------------------------
  354. // Test OUTPUT_REQUIRED_FILES
  355. // The files required by 'complex' have been output to a file.
  356. // The contents of this file is not tested (absolute paths).
  357. TestAndRemoveFile(BINARY_DIR "/Executable/complex-required.txt");
  358. // ----------------------------------------------------------------------
  359. // Summary
  360. std::cout << "Passed: " << cm_passed << "\n";
  361. if(cm_failed)
  362. {
  363. std::cout << "Failed: " << cm_failed << "\n";
  364. return cm_failed;
  365. }
  366. return 0;
  367. }