complex.cxx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  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_NOT
  137. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_NOT is defined.");
  138. #else
  139. cmPassed("SHOULD_NOT_BE_DEFINED_NOT is not defined.");
  140. #endif
  141. #ifndef SHOULD_BE_DEFINED_NOT
  142. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_NOT is not defined.\n");
  143. #else
  144. cmPassed("SHOULD_BE_DEFINED_NOT is defined.");
  145. #endif
  146. #ifdef SHOULD_NOT_BE_DEFINED_NOT2
  147. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_NOT2 is defined.");
  148. #else
  149. cmPassed("SHOULD_NOT_BE_DEFINED_NOT2 is not defined.");
  150. #endif
  151. #ifndef SHOULD_BE_DEFINED_NOT2
  152. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_NOT2 is not defined.\n");
  153. #else
  154. cmPassed("SHOULD_BE_DEFINED_NOT2 is defined.");
  155. #endif
  156. #ifdef SHOULD_NOT_BE_DEFINED_AND
  157. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_AND is defined.");
  158. #else
  159. cmPassed("SHOULD_NOT_BE_DEFINED_AND is not defined.");
  160. #endif
  161. #ifndef SHOULD_BE_DEFINED_AND
  162. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_AND is not defined.\n");
  163. #else
  164. cmPassed("SHOULD_BE_DEFINED_AND is defined.");
  165. #endif
  166. #ifdef SHOULD_NOT_BE_DEFINED_AND2
  167. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_AND2 is defined.");
  168. #else
  169. cmPassed("SHOULD_NOT_BE_DEFINED_AND2 is not defined.");
  170. #endif
  171. #ifndef SHOULD_BE_DEFINED_AND2
  172. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_AND2 is not defined.\n");
  173. #else
  174. cmPassed("SHOULD_BE_DEFINED_AND2 is defined.");
  175. #endif
  176. #ifdef SHOULD_NOT_BE_DEFINED_OR
  177. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_OR is defined.");
  178. #else
  179. cmPassed("SHOULD_NOT_BE_DEFINED_OR is not defined.");
  180. #endif
  181. #ifndef SHOULD_BE_DEFINED_OR
  182. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_OR is not defined.\n");
  183. #else
  184. cmPassed("SHOULD_BE_DEFINED_OR is defined.");
  185. #endif
  186. #ifdef SHOULD_NOT_BE_DEFINED_OR2
  187. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_OR2 is defined.");
  188. #else
  189. cmPassed("SHOULD_NOT_BE_DEFINED_OR2 is not defined.");
  190. #endif
  191. #ifndef SHOULD_BE_DEFINED_OR2
  192. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_OR2 is not defined.\n");
  193. #else
  194. cmPassed("SHOULD_BE_DEFINED_OR2 is defined.");
  195. #endif
  196. #ifdef SHOULD_NOT_BE_DEFINED_MATCHES
  197. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_MATCHES is defined.");
  198. #else
  199. cmPassed("SHOULD_NOT_BE_DEFINED_MATCHES is not defined.");
  200. #endif
  201. #ifndef SHOULD_BE_DEFINED_MATCHES
  202. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_MATCHES is not defined.\n");
  203. #else
  204. cmPassed("SHOULD_BE_DEFINED_MATCHES is defined.");
  205. #endif
  206. #ifdef SHOULD_NOT_BE_DEFINED_MATCHES2
  207. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_MATCHES2 is defined.");
  208. #else
  209. cmPassed("SHOULD_NOT_BE_DEFINED_MATCHES2 is not defined.");
  210. #endif
  211. #ifndef SHOULD_BE_DEFINED_MATCHES2
  212. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_MATCHES2 is not defined.\n");
  213. #else
  214. cmPassed("SHOULD_BE_DEFINED_MATCHES2 is defined.");
  215. #endif
  216. #ifdef SHOULD_NOT_BE_DEFINED_COMMAND
  217. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_COMMAND is defined.");
  218. #else
  219. cmPassed("SHOULD_NOT_BE_DEFINED_COMMAND is not defined.");
  220. #endif
  221. #ifndef SHOULD_BE_DEFINED_COMMAND
  222. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_COMMAND is not defined.\n");
  223. #else
  224. cmPassed("SHOULD_BE_DEFINED_COMMAND is defined.");
  225. #endif
  226. #ifdef SHOULD_NOT_BE_DEFINED_COMMAND2
  227. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_COMMAND2 is defined.");
  228. #else
  229. cmPassed("SHOULD_NOT_BE_DEFINED_COMMAND2 is not defined.");
  230. #endif
  231. #ifndef SHOULD_BE_DEFINED_COMMAND2
  232. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_COMMAND2 is not defined.\n");
  233. #else
  234. cmPassed("SHOULD_BE_DEFINED_COMMAND2 is defined.");
  235. #endif
  236. // ----------------------------------------------------------------------
  237. // Test FOREACH
  238. #ifndef FOREACH_VAR1
  239. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  240. "FOREACH_VAR1 is not defined.");
  241. #else
  242. if(strcmp(FOREACH_VAR1, "VALUE1") != 0)
  243. {
  244. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  245. "FOREACH_VAR1 == ", FOREACH_VAR1);
  246. }
  247. else
  248. {
  249. cmPassed("FOREACH_VAR1 == ", FOREACH_VAR1);
  250. }
  251. #endif
  252. #ifndef FOREACH_VAR2
  253. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  254. "FOREACH_VAR2 is not defined.");
  255. #else
  256. if(strcmp(FOREACH_VAR2, "VALUE2") != 0)
  257. {
  258. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  259. "FOREACH_VAR2 == ", FOREACH_VAR2);
  260. }
  261. else
  262. {
  263. cmPassed("FOREACH_VAR2 == ", FOREACH_VAR2);
  264. }
  265. #endif
  266. // ----------------------------------------------------------------------
  267. // Test FIND_FILE, FIND_PATH and various GET_FILENAME_COMPONENT combinations
  268. #ifndef FILENAME_VAR_PATH_NAME
  269. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  270. "FILENAME_VAR_PATH_NAME is not defined.");
  271. #else
  272. if(strcmp(FILENAME_VAR_PATH_NAME, "Complex") != 0)
  273. {
  274. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  275. "FILENAME_VAR_PATH_NAME == ", FILENAME_VAR_PATH_NAME);
  276. }
  277. else
  278. {
  279. cmPassed("FILENAME_VAR_PATH_NAME == ", FILENAME_VAR_PATH_NAME);
  280. }
  281. #endif
  282. #ifndef FILENAME_VAR_NAME
  283. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  284. "FILENAME_VAR_NAME is not defined.");
  285. #else
  286. if(strcmp(FILENAME_VAR_NAME, "VarTests.cmake") != 0)
  287. {
  288. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  289. "FILENAME_VAR_NAME == ", FILENAME_VAR_NAME);
  290. }
  291. else
  292. {
  293. cmPassed("FILENAME_VAR_NAME == ", FILENAME_VAR_NAME);
  294. }
  295. #endif
  296. #ifndef FILENAME_VAR_EXT
  297. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  298. "FILENAME_VAR_EXT is not defined.");
  299. #else
  300. if(strcmp(FILENAME_VAR_EXT, ".cmake") != 0)
  301. {
  302. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  303. "FILENAME_VAR_EXT == ", FILENAME_VAR_EXT);
  304. }
  305. else
  306. {
  307. cmPassed("FILENAME_VAR_EXT == ", FILENAME_VAR_EXT);
  308. }
  309. #endif
  310. #ifndef FILENAME_VAR_NAME_WE
  311. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  312. "FILENAME_VAR_NAME_WE is not defined.");
  313. #else
  314. if(strcmp(FILENAME_VAR_NAME_WE, "VarTests") != 0)
  315. {
  316. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  317. "FILENAME_VAR_NAME_WE == ", FILENAME_VAR_NAME_WE);
  318. }
  319. else
  320. {
  321. cmPassed("FILENAME_VAR_NAME_WE == ", FILENAME_VAR_NAME_WE);
  322. }
  323. #endif
  324. #ifndef PATH_VAR_NAME
  325. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  326. "PATH_VAR_NAME is not defined.");
  327. #else
  328. if(strcmp(PATH_VAR_NAME, "Complex") != 0)
  329. {
  330. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  331. "PATH_VAR_NAME == ", PATH_VAR_NAME);
  332. }
  333. else
  334. {
  335. cmPassed("PATH_VAR_NAME == ", PATH_VAR_NAME);
  336. }
  337. #endif
  338. // ----------------------------------------------------------------------
  339. // Test LOAD_CACHE
  340. #ifndef CACHE_TEST_VAR1
  341. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  342. "CACHE_TEST_VAR1 is not defined.");
  343. #else
  344. if(strcmp(CACHE_TEST_VAR1, "foo") != 0)
  345. {
  346. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  347. "CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1);
  348. }
  349. else
  350. {
  351. cmPassed("CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1);
  352. }
  353. #endif
  354. #ifndef CACHE_TEST_VAR2
  355. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  356. "CACHE_TEST_VAR2 is not defined.");
  357. #else
  358. if(strcmp(CACHE_TEST_VAR2, "bar") != 0)
  359. {
  360. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  361. "CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2);
  362. }
  363. else
  364. {
  365. cmPassed("CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2);
  366. }
  367. #endif
  368. #ifndef CACHE_TEST_VAR3
  369. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  370. "CACHE_TEST_VAR3 is not defined.");
  371. #else
  372. if(strcmp(CACHE_TEST_VAR3, "1") != 0)
  373. {
  374. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  375. "CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3);
  376. }
  377. else
  378. {
  379. cmPassed("CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3);
  380. }
  381. #endif
  382. #ifdef CACHE_TEST_VAR_EXCLUDED
  383. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command or cmakedefine is broken, "
  384. "CACHE_TEST_VAR_EXCLUDED is defined (should not have been loaded).");
  385. #else
  386. cmPassed("CACHE_TEST_VAR_EXCLUDED is not defined.");
  387. #endif
  388. #ifndef CACHE_TEST_VAR_INTERNAL
  389. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  390. "CACHE_TEST_VAR_INTERNAL is not defined.");
  391. #else
  392. if(strcmp(CACHE_TEST_VAR_INTERNAL, "bar") != 0)
  393. {
  394. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  395. "CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL);
  396. }
  397. else
  398. {
  399. cmPassed("CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL);
  400. }
  401. #endif
  402. // ----------------------------------------------------------------------
  403. // A post-build custom-command has been attached to the lib (see Library/).
  404. // It runs ${CREATE_FILE_EXE} which will create a file.
  405. TestAndRemoveFile(BINARY_DIR "/Library/postbuild.txt");
  406. // ----------------------------------------------------------------------
  407. // A custom target has been created (see Library/).
  408. // It runs ${CREATE_FILE_EXE} which will create a file.
  409. TestAndRemoveFile(BINARY_DIR "/Library/custom_target1.txt");
  410. // ----------------------------------------------------------------------
  411. // A directory has been created.
  412. TestDir(BINARY_DIR "/make_dir");
  413. // ----------------------------------------------------------------------
  414. // Test OUTPUT_REQUIRED_FILES
  415. // The files required by 'complex' have been output to a file.
  416. // The contents of this file is not tested (absolute paths).
  417. TestAndRemoveFile(BINARY_DIR "/Executable/complex-required.txt");
  418. // ----------------------------------------------------------------------
  419. // Summary
  420. std::cout << "Passed: " << cm_passed << "\n";
  421. if(cm_failed)
  422. {
  423. std::cout << "Failed: " << cm_failed << "\n";
  424. return cm_failed;
  425. }
  426. return 0;
  427. }