complex.cxx 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  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. #ifdef SHOULD_NOT_BE_DEFINED_EXISTS
  237. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EXISTS is defined.");
  238. #else
  239. cmPassed("SHOULD_NOT_BE_DEFINED_EXISTS is not defined.");
  240. #endif
  241. #ifndef SHOULD_BE_DEFINED_EXISTS
  242. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EXISTS is not defined.\n");
  243. #else
  244. cmPassed("SHOULD_BE_DEFINED_EXISTS is defined.");
  245. #endif
  246. #ifdef SHOULD_NOT_BE_DEFINED_EXISTS2
  247. cmFailed("IF or SET is broken, SHOULD_NOT_BE_DEFINED_EXISTS2 is defined.");
  248. #else
  249. cmPassed("SHOULD_NOT_BE_DEFINED_EXISTS2 is not defined.");
  250. #endif
  251. #ifndef SHOULD_BE_DEFINED_EXISTS2
  252. cmFailed("IF or SET is broken, SHOULD_BE_DEFINED_EXISTS2 is not defined.\n");
  253. #else
  254. cmPassed("SHOULD_BE_DEFINED_EXISTS2 is defined.");
  255. #endif
  256. // ----------------------------------------------------------------------
  257. // Test FOREACH
  258. #ifndef FOREACH_VAR1
  259. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  260. "FOREACH_VAR1 is not defined.");
  261. #else
  262. if(strcmp(FOREACH_VAR1, "VALUE1") != 0)
  263. {
  264. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  265. "FOREACH_VAR1 == ", FOREACH_VAR1);
  266. }
  267. else
  268. {
  269. cmPassed("FOREACH_VAR1 == ", FOREACH_VAR1);
  270. }
  271. #endif
  272. #ifndef FOREACH_VAR2
  273. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  274. "FOREACH_VAR2 is not defined.");
  275. #else
  276. if(strcmp(FOREACH_VAR2, "VALUE2") != 0)
  277. {
  278. cmFailed("the FOREACH, SET or CONFIGURE_FILE command is broken, "
  279. "FOREACH_VAR2 == ", FOREACH_VAR2);
  280. }
  281. else
  282. {
  283. cmPassed("FOREACH_VAR2 == ", FOREACH_VAR2);
  284. }
  285. #endif
  286. // ----------------------------------------------------------------------
  287. // Test FIND_FILE, FIND_PATH and various GET_FILENAME_COMPONENT combinations
  288. #ifndef FILENAME_VAR_PATH_NAME
  289. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  290. "FILENAME_VAR_PATH_NAME is not defined.");
  291. #else
  292. if(strcmp(FILENAME_VAR_PATH_NAME, "Complex") != 0)
  293. {
  294. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  295. "FILENAME_VAR_PATH_NAME == ", FILENAME_VAR_PATH_NAME);
  296. }
  297. else
  298. {
  299. cmPassed("FILENAME_VAR_PATH_NAME == ", FILENAME_VAR_PATH_NAME);
  300. }
  301. #endif
  302. #ifndef FILENAME_VAR_NAME
  303. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  304. "FILENAME_VAR_NAME is not defined.");
  305. #else
  306. if(strcmp(FILENAME_VAR_NAME, "VarTests.cmake") != 0)
  307. {
  308. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  309. "FILENAME_VAR_NAME == ", FILENAME_VAR_NAME);
  310. }
  311. else
  312. {
  313. cmPassed("FILENAME_VAR_NAME == ", FILENAME_VAR_NAME);
  314. }
  315. #endif
  316. #ifndef FILENAME_VAR_EXT
  317. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  318. "FILENAME_VAR_EXT is not defined.");
  319. #else
  320. if(strcmp(FILENAME_VAR_EXT, ".cmake") != 0)
  321. {
  322. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  323. "FILENAME_VAR_EXT == ", FILENAME_VAR_EXT);
  324. }
  325. else
  326. {
  327. cmPassed("FILENAME_VAR_EXT == ", FILENAME_VAR_EXT);
  328. }
  329. #endif
  330. #ifndef FILENAME_VAR_NAME_WE
  331. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  332. "FILENAME_VAR_NAME_WE is not defined.");
  333. #else
  334. if(strcmp(FILENAME_VAR_NAME_WE, "VarTests") != 0)
  335. {
  336. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  337. "FILENAME_VAR_NAME_WE == ", FILENAME_VAR_NAME_WE);
  338. }
  339. else
  340. {
  341. cmPassed("FILENAME_VAR_NAME_WE == ", FILENAME_VAR_NAME_WE);
  342. }
  343. #endif
  344. #ifndef PATH_VAR_NAME
  345. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  346. "PATH_VAR_NAME is not defined.");
  347. #else
  348. if(strcmp(PATH_VAR_NAME, "Complex") != 0)
  349. {
  350. cmFailed("the FIND_FILE or GET_FILENAME_COMPONENT command is broken, "
  351. "PATH_VAR_NAME == ", PATH_VAR_NAME);
  352. }
  353. else
  354. {
  355. cmPassed("PATH_VAR_NAME == ", PATH_VAR_NAME);
  356. }
  357. #endif
  358. // ----------------------------------------------------------------------
  359. // Test LOAD_CACHE
  360. #ifndef CACHE_TEST_VAR1
  361. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  362. "CACHE_TEST_VAR1 is not defined.");
  363. #else
  364. if(strcmp(CACHE_TEST_VAR1, "foo") != 0)
  365. {
  366. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  367. "CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1);
  368. }
  369. else
  370. {
  371. cmPassed("CACHE_TEST_VAR1 == ", CACHE_TEST_VAR1);
  372. }
  373. #endif
  374. #ifndef CACHE_TEST_VAR2
  375. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  376. "CACHE_TEST_VAR2 is not defined.");
  377. #else
  378. if(strcmp(CACHE_TEST_VAR2, "bar") != 0)
  379. {
  380. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  381. "CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2);
  382. }
  383. else
  384. {
  385. cmPassed("CACHE_TEST_VAR2 == ", CACHE_TEST_VAR2);
  386. }
  387. #endif
  388. #ifndef CACHE_TEST_VAR3
  389. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  390. "CACHE_TEST_VAR3 is not defined.");
  391. #else
  392. if(strcmp(CACHE_TEST_VAR3, "1") != 0)
  393. {
  394. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  395. "CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3);
  396. }
  397. else
  398. {
  399. cmPassed("CACHE_TEST_VAR3 == ", CACHE_TEST_VAR3);
  400. }
  401. #endif
  402. #ifdef CACHE_TEST_VAR_EXCLUDED
  403. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command or cmakedefine is broken, "
  404. "CACHE_TEST_VAR_EXCLUDED is defined (should not have been loaded).");
  405. #else
  406. cmPassed("CACHE_TEST_VAR_EXCLUDED is not defined.");
  407. #endif
  408. #ifndef CACHE_TEST_VAR_INTERNAL
  409. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  410. "CACHE_TEST_VAR_INTERNAL is not defined.");
  411. #else
  412. std::vector<std::string> v;
  413. std::vector<std::string> v2;
  414. v = v2;
  415. std::string cachetest = CACHE_TEST_VAR_INTERNAL;
  416. v.push_back(cachetest);
  417. v2 = v;
  418. std::string x(5,'x');
  419. std::string copy = cachetest;
  420. cachetest.find("bar");
  421. cachetest.rfind("bar");
  422. copy.append(cachetest);
  423. copy = cachetest.substr(0, cachetest.size());
  424. if(cachetest != "bar")
  425. {
  426. cmFailed("the LOAD_CACHE or CONFIGURE_FILE command is broken, "
  427. "CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL);
  428. }
  429. else
  430. {
  431. cmPassed("CACHE_TEST_VAR_INTERNAL == ", CACHE_TEST_VAR_INTERNAL);
  432. }
  433. #endif
  434. // ----------------------------------------------------------------------
  435. // A post-build custom-command has been attached to the lib (see Library/).
  436. // It runs ${CREATE_FILE_EXE} which will create a file.
  437. //
  438. // WARNING: if you run 'complex' manually, this *will* fail, because
  439. // the file was removed the last time 'complex' was run, and it is
  440. // only created during a build.
  441. TestAndRemoveFile(BINARY_DIR "/Library/postbuild.txt");
  442. // ----------------------------------------------------------------------
  443. // A custom target has been created (see Library/).
  444. // It runs ${CREATE_FILE_EXE} which will create a file.
  445. //
  446. // WARNING: if you run 'complex' manually, this *will* fail, because
  447. // the file was removed the last time 'complex' was run, and it is
  448. // only created during a build.
  449. TestAndRemoveFile(BINARY_DIR "/Library/custom_target1.txt");
  450. // ----------------------------------------------------------------------
  451. // A directory has been created.
  452. TestDir(BINARY_DIR "/make_dir");
  453. // ----------------------------------------------------------------------
  454. // Test OUTPUT_REQUIRED_FILES
  455. // The files required by 'complex' have been output to a file.
  456. // The contents of this file is not tested (absolute paths).
  457. //
  458. // WARNING: if you run 'complex' manually, this *will* fail, because
  459. // the file was removed the last time 'complex' was run, and it is
  460. // only created during a build.
  461. TestAndRemoveFile(BINARY_DIR "/Executable/Temp/complex-required.txt");
  462. // ----------------------------------------------------------------------
  463. // Summary
  464. std::cout << "Passed: " << cm_passed << "\n";
  465. if(cm_failed)
  466. {
  467. std::cout << "Failed: " << cm_failed << "\n";
  468. return cm_failed;
  469. }
  470. return 0;
  471. }