CMakeLists.txt 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. # this test creates a static library and an executable
  2. # the source to the library is then changed
  3. # and the build is done on the executable and if things
  4. # are working the executable should relink with the new
  5. # value. The subdir Project contains the CMakelists.txt
  6. # and source files for the test project.
  7. cmake_minimum_required (VERSION 2.6)
  8. project(BuildDepends)
  9. # This entire test takes place during the initial
  10. # configure step. It should not run again when the
  11. # project is built.
  12. set(CMAKE_SUPPRESS_REGENERATION 1)
  13. # Xcode needs some help with the fancy dependencies in this test.
  14. if("${CMAKE_GENERATOR}" MATCHES "Xcode")
  15. set(HELP_XCODE 1)
  16. endif("${CMAKE_GENERATOR}" MATCHES "Xcode")
  17. function(help_xcode_depends)
  18. if(HELP_XCODE)
  19. file(GLOB_RECURSE MACRO_OBJS
  20. ${BuildDepends_BINARY_DIR}/Project/zot_macro_*.o*
  21. )
  22. if(MACRO_OBJS)
  23. message("Helping Xcode by removing objects [${MACRO_OBJS}]")
  24. file(REMOVE ${MACRO_OBJS})
  25. endif(MACRO_OBJS)
  26. endif(HELP_XCODE)
  27. endfunction(help_xcode_depends)
  28. file(MAKE_DIRECTORY ${BuildDepends_BINARY_DIR}/Project)
  29. message("Creating Project/foo.cxx")
  30. write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx
  31. "const char* foo() { return \"foo\";}" )
  32. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot.hxx.in
  33. "static const char* zot = \"zot\";\n")
  34. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_custom.hxx.in
  35. "static const char* zot_custom = \"zot_custom\";\n")
  36. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
  37. "static const char* zot_macro_dir = \"zot_macro_dir\";\n")
  38. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
  39. "static const char* zot_macro_tgt = \"zot_macro_tgt\";\n")
  40. help_xcode_depends()
  41. message("Building project first time")
  42. try_compile(RESULT
  43. ${BuildDepends_BINARY_DIR}/Project
  44. ${BuildDepends_SOURCE_DIR}/Project
  45. testRebuild
  46. OUTPUT_VARIABLE OUTPUT)
  47. if(HELP_XCODE)
  48. try_compile(RESULT
  49. ${BuildDepends_BINARY_DIR}/Project
  50. ${BuildDepends_SOURCE_DIR}/Project
  51. testRebuild
  52. OUTPUT_VARIABLE OUTPUT)
  53. try_compile(RESULT
  54. ${BuildDepends_BINARY_DIR}/Project
  55. ${BuildDepends_SOURCE_DIR}/Project
  56. testRebuild
  57. OUTPUT_VARIABLE OUTPUT)
  58. endif(HELP_XCODE)
  59. if(NOT RESULT)
  60. message(SEND_ERROR "Could not build test project: ${OUTPUT}")
  61. endif(NOT RESULT)
  62. set(bar ${BuildDepends_BINARY_DIR}/Project/bar${CMAKE_EXECUTABLE_SUFFIX})
  63. if(EXISTS
  64. "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}" )
  65. message("found debug")
  66. set(bar
  67. "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}")
  68. endif(EXISTS
  69. "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}")
  70. set(zot ${BuildDepends_BINARY_DIR}/Project/zot${CMAKE_EXECUTABLE_SUFFIX})
  71. if(EXISTS
  72. "${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}" )
  73. message("found debug")
  74. set(zot
  75. "${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}")
  76. endif(EXISTS
  77. "${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}")
  78. message("Running ${bar} ")
  79. execute_process(COMMAND ${bar} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
  80. string(REGEX REPLACE "[\r\n]" " " out "${out}")
  81. message("Run result: ${runResult} Output: \"${out}\"")
  82. if("${out}" STREQUAL "foo ")
  83. message("Worked!")
  84. else("${out}" STREQUAL "foo ")
  85. message(SEND_ERROR "Project did not initially build properly: ${out}")
  86. endif("${out}" STREQUAL "foo ")
  87. message("Running ${zot} ")
  88. execute_process(COMMAND ${zot} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
  89. string(REGEX REPLACE "[\r\n]" " " out "${out}")
  90. message("Run result: ${runResult} Output: \"${out}\"")
  91. set(VALUE_UNCHANGED "[zot] [zot_custom] [zot_macro_dir] [zot_macro_tgt] ")
  92. if("${out}" STREQUAL "${VALUE_UNCHANGED}")
  93. message("Worked!")
  94. else("${out}" STREQUAL "${VALUE_UNCHANGED}")
  95. message(SEND_ERROR "Project did not initially build properly: ${out}")
  96. endif("${out}" STREQUAL "${VALUE_UNCHANGED}")
  97. message("Waiting 3 seconds...")
  98. # any additional argument will cause ${bar} to wait forever
  99. execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out)
  100. message("Modifying Project/foo.cxx")
  101. write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx
  102. "const char* foo() { return \"foo changed\";}" )
  103. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot.hxx.in
  104. "static const char* zot = \"zot changed\";\n")
  105. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_custom.hxx.in
  106. "static const char* zot_custom = \"zot_custom changed\";\n")
  107. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
  108. "static const char* zot_macro_dir = \"zot_macro_dir changed\";\n")
  109. file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
  110. "static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n")
  111. help_xcode_depends()
  112. message("Building project second time")
  113. try_compile(RESULT
  114. ${BuildDepends_BINARY_DIR}/Project
  115. ${BuildDepends_SOURCE_DIR}/Project
  116. testRebuild
  117. OUTPUT_VARIABLE OUTPUT)
  118. # Xcode is in serious need of help here
  119. if(HELP_XCODE)
  120. try_compile(RESULT
  121. ${BuildDepends_BINARY_DIR}/Project
  122. ${BuildDepends_SOURCE_DIR}/Project
  123. testRebuild
  124. OUTPUT_VARIABLE OUTPUT)
  125. try_compile(RESULT
  126. ${BuildDepends_BINARY_DIR}/Project
  127. ${BuildDepends_SOURCE_DIR}/Project
  128. testRebuild
  129. OUTPUT_VARIABLE OUTPUT)
  130. endif(HELP_XCODE)
  131. if(NOT RESULT)
  132. message(SEND_ERROR "Could not build test project: ${OUTPUT}")
  133. endif(NOT RESULT)
  134. if(EXISTS
  135. "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}" )
  136. message("found debug")
  137. endif(EXISTS
  138. "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}")
  139. if(EXISTS
  140. "${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}" )
  141. message("found debug")
  142. endif(EXISTS
  143. "${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}")
  144. message("Running ${bar} ")
  145. execute_process(COMMAND ${bar} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
  146. string(REGEX REPLACE "[\r\n]" " " out "${out}")
  147. message("Run result: ${runResult} Output: \"${out}\"")
  148. if("${out}" STREQUAL "foo changed ")
  149. message("Worked!")
  150. else("${out}" STREQUAL "foo changed ")
  151. message(SEND_ERROR "Project did not rebuild properly!")
  152. endif("${out}" STREQUAL "foo changed ")
  153. message("Running ${zot} ")
  154. execute_process(COMMAND ${zot} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
  155. string(REGEX REPLACE "[\r\n]" " " out "${out}")
  156. message("Run result: ${runResult} Output: \"${out}\"")
  157. set(VALUE_CHANGED
  158. "[zot changed] [zot_custom changed] [zot_macro_dir changed] [zot_macro_tgt changed] "
  159. )
  160. if("${out}" STREQUAL "${VALUE_CHANGED}")
  161. message("Worked!")
  162. else("${out}" STREQUAL "${VALUE_CHANGED}")
  163. message(SEND_ERROR "Project did not rebuild properly!")
  164. endif("${out}" STREQUAL "${VALUE_CHANGED}")