test.cmake 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. #!ctest -S
  2. if(NOT CTEST_SOURCE_DIRECTORY)
  3. get_filename_component(CTEST_SOURCE_DIRECTORY "${CMAKE_CURRENT_LIST_FILE}" PATH)
  4. endif()
  5. macro(read_argument name)
  6. if(NOT ${name})
  7. if(DEFINED ENV{${name}})
  8. set(${name} "$ENV{${name}}")
  9. elseif(${ARGC} GREATER 1)
  10. set(${name} "${ARGV1}")
  11. endif()
  12. endif()
  13. #message(STATUS "argument ${name}: '${${name}}'")
  14. endmacro()
  15. # Dashboard Model
  16. ################################################################################
  17. read_argument(dashboard_model "Experimental")
  18. set(is_continuous FALSE)
  19. set(is_experimental FALSE)
  20. set(is_nightly FALSE)
  21. if(${dashboard_model} STREQUAL "Continuous")
  22. set(is_continuous TRUE)
  23. elseif(${dashboard_model} STREQUAL "Experimental")
  24. set(is_experimental TRUE)
  25. elseif(${dashboard_model} STREQUAL "Nightly")
  26. set(is_nightly TRUE)
  27. else()
  28. message(FATAL_ERROR "Unknown dashboard_model '${dashboard_model}'. Please use one of Experimental, Continuous, Nightly.")
  29. endif()
  30. # Set build variables from environment variables
  31. ################################################################################
  32. read_argument(target_architecture)
  33. read_argument(skip_tests FALSE)
  34. read_argument(subset)
  35. read_argument(CXXFLAGS "")
  36. set(ENV{CXXFLAGS} "${CXXFLAGS}")
  37. # Set CMAKE_BUILD_TYPE from environment variable
  38. ################################################################################
  39. set(appveyor $ENV{APPVEYOR})
  40. if(appveyor)
  41. set(build_type "$ENV{CONFIGURATION}")
  42. if(NOT build_type)
  43. set(build_type "Release")
  44. endif()
  45. else()
  46. read_argument(build_type "Release")
  47. endif()
  48. # better make sure we get english output (this is vital for the implicit_type_conversion_failures tests)
  49. ################################################################################
  50. set(ENV{LANG} "en_US")
  51. # determine the git branch we're testing
  52. ################################################################################
  53. file(READ "${CTEST_SOURCE_DIRECTORY}/.git/HEAD" git_branch)
  54. string(STRIP "${git_branch}" git_branch) # -> ref: refs/heads/user/foobar
  55. string(REPLACE "ref: refs/heads/" "" git_branch "${git_branch}") # -> user/foobar
  56. if(NOT git_branch MATCHES "^[0-9a-f]+$") # an actual branch name, not a hash
  57. # read the associated hash
  58. if(EXISTS "${CTEST_SOURCE_DIRECTORY}/.git/refs/heads/${git_branch}")
  59. set(git_hash_file "${CTEST_SOURCE_DIRECTORY}/.git/refs/heads/${git_branch}")
  60. file(READ "${git_hash_file}" git_hash LIMIT 7)
  61. string(STRIP "${git_hash}" git_hash)
  62. endif()
  63. string(REGEX REPLACE "^.*/" "" git_branch "${git_branch}")
  64. else()
  65. # a long hash -> make it shorter
  66. string(SUBSTRING "${git_branch}" 0 7 git_hash)
  67. # try harder to find a branch name
  68. find_program(GIT git)
  69. unset(git_branch_out)
  70. if(GIT)
  71. execute_process(COMMAND
  72. "${GIT}" branch -a --contains=${git_branch} -v --abbrev=0
  73. WORKING_DIRECTORY "${PROJECT_DIRECTORY}"
  74. OUTPUT_VARIABLE git_branch_out
  75. OUTPUT_STRIP_TRAILING_WHITESPACE
  76. )
  77. #message("${git_branch_out}")
  78. string(REPLACE "\n" ";" git_branch_out "${git_branch_out}")
  79. #message("${git_branch_out}")
  80. foreach(i IN LISTS git_branch_out)
  81. string(REGEX MATCH "[^() ]+ +${git_branch}" i "${i}")
  82. string(REGEX REPLACE "^.*/" "" i "${i}")
  83. string(REGEX REPLACE " *${git_branch}.*$" "" i "${i}")
  84. if(NOT "${i}" MATCHES "^ *$")
  85. set(git_branch "${i}")
  86. break()
  87. endif()
  88. endforeach()
  89. endif()
  90. if(git_branch MATCHES "^[0-9a-f]+$")
  91. # still just a hash -> make it empty because the hash is communicated via git_hash
  92. set(git_branch "")
  93. endif()
  94. endif()
  95. if(git_branch MATCHES "^gh-[0-9]+")
  96. # it's a feature branch referencing a GitHub issue number -> make it short
  97. string(REGEX MATCH "^gh-[0-9]+" git_branch "${git_branch}")
  98. endif()
  99. # determine the (short) hostname of the build machine
  100. ################################################################################
  101. set(travis_os $ENV{TRAVIS_OS_NAME})
  102. if(travis_os)
  103. set(CTEST_SITE "Travis CI")
  104. elseif(appveyor)
  105. set(CTEST_SITE "AppVeyor CI")
  106. else()
  107. execute_process(COMMAND hostname -s RESULT_VARIABLE ok OUTPUT_VARIABLE CTEST_SITE ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
  108. if(NOT ok EQUAL 0)
  109. execute_process(COMMAND hostname OUTPUT_VARIABLE CTEST_SITE ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
  110. endif()
  111. endif()
  112. # collect system information for the "Build Name" (and build setup, e.g. -j)
  113. ################################################################################
  114. find_program(UNAME uname)
  115. if(UNAME)
  116. execute_process(COMMAND ${UNAME} -s OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE)
  117. string(TOLOWER "${arch}" arch)
  118. execute_process(COMMAND ${UNAME} -m OUTPUT_VARIABLE chip OUTPUT_STRIP_TRAILING_WHITESPACE)
  119. string(TOLOWER "${chip}" chip)
  120. string(REPLACE "x86_64" "amd64" chip "${chip}")
  121. else()
  122. find_program(CMD cmd)
  123. if(CMD)
  124. execute_process(COMMAND cmd /D /Q /C ver OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE)
  125. string(REGEX REPLACE "^.*Windows[^0-9]*([.0-9]+).*$" "Windows \\1" arch "${arch}")
  126. else()
  127. string(TOLOWER "$ENV{TARGET_PLATFORM}" arch)
  128. if(arch)
  129. if("$ENV{WindowsSDKVersionOverride}")
  130. set(arch "${arch} SDK $ENV{WindowsSDKVersionOverride}")
  131. endif()
  132. else()
  133. string(TOLOWER "${CMAKE_SYSTEM_NAME}" arch)
  134. endif()
  135. endif()
  136. execute_process(COMMAND
  137. reg query "HKLM\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0" /v Identifier
  138. OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE processorId)
  139. if("${processorId}" MATCHES "(Intel|AMD)64")
  140. set(chip "amd64")
  141. elseif("${processorId}" MATCHES "x86")
  142. set(chip "x86")
  143. else()
  144. set(chip "unknown")
  145. endif()
  146. endif()
  147. # Determine the processor count (number_of_processors)
  148. ################################################################################
  149. read_argument(number_of_processors)
  150. if(NOT number_of_processors)
  151. if("${arch}" MATCHES "[Ww]indows" OR "${arch}" MATCHES "win7" OR "${arch}" MATCHES "mingw" OR "${arch}" MATCHES "msys")
  152. execute_process(COMMAND
  153. reg query "HKLM\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor"
  154. OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE number_of_processors)
  155. string(REGEX REPLACE "[^0-9]+" "," number_of_processors "${number_of_processors}")
  156. string(REGEX REPLACE "^.*," "" number_of_processors "${number_of_processors}")
  157. math(EXPR number_of_processors "1 + ${number_of_processors}")
  158. elseif("${arch}" STREQUAL "darwin")
  159. execute_process(COMMAND sysctl -n hw.ncpu OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE number_of_processors)
  160. else()
  161. execute_process(COMMAND grep -c processor /proc/cpuinfo OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE number_of_processors)
  162. endif()
  163. endif()
  164. # Determine the compiler version string
  165. ################################################################################
  166. set(compiler)
  167. macro(extract_msvc_compiler_info CL)
  168. if(CL)
  169. execute_process(COMMAND ${CL} /nologo -EP "${CTEST_SOURCE_DIRECTORY}/cmake/msvc_version.c" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE COMPILER_VERSION)
  170. string(STRIP "${COMPILER_VERSION}" COMPILER_VERSION)
  171. if("${CL}" MATCHES "amd64")
  172. set(COMPILER_VERSION "${COMPILER_VERSION} amd64")
  173. elseif("${CL}" MATCHES "ia64")
  174. set(COMPILER_VERSION "${COMPILER_VERSION} ia64")
  175. else()
  176. set(COMPILER_VERSION "${COMPILER_VERSION} x86")
  177. endif()
  178. set(compiler "MSVC")
  179. else()
  180. message(FATAL_ERROR "unknown compiler")
  181. endif()
  182. endmacro()
  183. macro(extract_gnuc_compiler_info CXX)
  184. string(REPLACE " " ";" CXX_AS_LIST "${CXX}")
  185. execute_process(COMMAND ${CXX_AS_LIST} --version OUTPUT_VARIABLE COMPILER_VERSION_COMPLETE ERROR_VARIABLE COMPILER_VERSION_COMPLETE OUTPUT_STRIP_TRAILING_WHITESPACE)
  186. string(REPLACE "\n" ";" COMPILER_VERSION "${COMPILER_VERSION_COMPLETE}")
  187. list(GET COMPILER_VERSION 0 COMPILER_VERSION)
  188. string(REPLACE "Open64 Compiler Suite: Version" "Open64" COMPILER_VERSION "${COMPILER_VERSION}")
  189. string(REPLACE "icpc" "ICC" COMPILER_VERSION "${COMPILER_VERSION}")
  190. string(REPLACE "gxx" "GCC" COMPILER_VERSION "${COMPILER_VERSION}")
  191. string(REPLACE "g++" "GCC" COMPILER_VERSION "${COMPILER_VERSION}")
  192. string(REPLACE ".exe" "" COMPILER_VERSION "${COMPILER_VERSION}")
  193. string(REPLACE " version" "" COMPILER_VERSION "${COMPILER_VERSION}")
  194. if(COMPILER_VERSION MATCHES "based on LLVM ")
  195. # e.g. "Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)"
  196. string(REGEX REPLACE ".*based on LLVM" "clang" COMPILER_VERSION "${COMPILER_VERSION}")
  197. string(REPLACE ")" "" COMPILER_VERSION "${COMPILER_VERSION}")
  198. endif()
  199. string(REGEX REPLACE " \\([^()]*\\)" "" COMPILER_VERSION "${COMPILER_VERSION}")
  200. string(REGEX REPLACE " \\[.*\\]" "" COMPILER_VERSION "${COMPILER_VERSION}")
  201. string(REGEX REPLACE "GCC-[0-9](\\.[0-9])?" "GCC" COMPILER_VERSION "${COMPILER_VERSION}")
  202. string(STRIP "${COMPILER_VERSION}" COMPILER_VERSION)
  203. if(COMPILER_VERSION_COMPLETE MATCHES "Free Software Foundation, Inc." AND NOT COMPILER_VERSION MATCHES "GCC")
  204. # it's GCC but without "GCC" in the COMPILER_VERSION string - fix it up
  205. string(REPLACE "cxx" "GCC" COMPILER_VERSION "${COMPILER_VERSION}")
  206. string(REPLACE "c++" "GCC" COMPILER_VERSION "${COMPILER_VERSION}")
  207. if(NOT COMPILER_VERSION MATCHES "GCC")
  208. set(COMPILER_VERSION "GCC (${COMPILER_VERSION})")
  209. endif()
  210. endif()
  211. if(COMPILER_VERSION MATCHES "clang")
  212. set(compiler "clang")
  213. elseif(COMPILER_VERSION MATCHES "ICC")
  214. set(compiler "ICC")
  215. elseif(COMPILER_VERSION MATCHES "Open64")
  216. set(compiler "Open64")
  217. elseif(COMPILER_VERSION MATCHES "GCC")
  218. if(WIN32)
  219. set(compiler "MinGW")
  220. else()
  221. set(compiler "GCC")
  222. endif()
  223. endif()
  224. endmacro()
  225. if("${arch}" MATCHES "[Ww]indows" OR "${arch}" MATCHES "win7" OR "${arch}" MATCHES "msys")
  226. find_program(CL cl)
  227. extract_msvc_compiler_info(${CL})
  228. elseif(arch MATCHES "mingw")
  229. if("$ENV{CXX}" MATCHES "g\\+\\+" OR "$ENV{CXX}" MATCHES "gxx")
  230. set(GXX "$ENV{CXX}")
  231. else()
  232. find_program(GXX NAMES "g++" "gxx")
  233. endif()
  234. if(GXX)
  235. extract_gnuc_compiler_info("${GXX}")
  236. else()
  237. find_program(CL cl)
  238. extract_msvc_compiler_info(${CL})
  239. endif()
  240. else()
  241. set(CXX "$ENV{CXX}")
  242. if(NOT CXX)
  243. unset(CXX)
  244. find_program(CXX NAMES c++ g++ clang++ icpc)
  245. if(NOT CXX)
  246. message(FATAL_ERROR "No C++ compiler found (arch: ${arch})")
  247. endif()
  248. endif()
  249. extract_gnuc_compiler_info("${CXX}")
  250. endif()
  251. # Build the CTEST_BUILD_NAME string
  252. ################################################################################
  253. if(DEFINED target_architecture)
  254. set(tmp ${target_architecture})
  255. else()
  256. execute_process(COMMAND cmake -Darch=${arch} -P ${CTEST_SOURCE_DIRECTORY}/print_target_architecture.cmake OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE tmp)
  257. string(REPLACE "-- " "" tmp "${tmp}")
  258. endif()
  259. if(build_type STREQUAL "Release")
  260. set(build_type_short "Rel")
  261. elseif(build_type STREQUAL "Debug")
  262. set(build_type_short "Deb")
  263. elseif(build_type STREQUAL "RelWithDebInfo")
  264. set(build_type_short "RDI")
  265. elseif(build_type STREQUAL "RelWithDebug")
  266. set(build_type_short "RWD")
  267. elseif(build_type STREQUAL "None")
  268. set(build_type_short "Non")
  269. else()
  270. set(build_type_short "${build_type}")
  271. endif()
  272. string(STRIP "${git_branch} ${COMPILER_VERSION} ${CXXFLAGS} ${build_type_short} ${tmp}" CTEST_BUILD_NAME)
  273. if(NOT is_nightly)
  274. # nightly builds shouldn't contain the git hash, since it makes expected builds impossible
  275. string(STRIP "${git_hash} ${CTEST_BUILD_NAME}" CTEST_BUILD_NAME)
  276. # instead make sure the hash is included in the notes
  277. if(DEFINED git_hash_file)
  278. list(APPEND CTEST_NOTES_FILES "${git_hash_file}")
  279. endif()
  280. endif()
  281. if(DEFINED subset)
  282. set(CTEST_BUILD_NAME "${CTEST_BUILD_NAME} ${subset}")
  283. endif()
  284. string(REPLACE " " " " CTEST_BUILD_NAME "${CTEST_BUILD_NAME}")
  285. # work around CDash limitations:
  286. string(REPLACE "/" "_" CTEST_BUILD_NAME "${CTEST_BUILD_NAME}")
  287. string(REPLACE "+" "x" CTEST_BUILD_NAME "${CTEST_BUILD_NAME}")
  288. # Determine build directory
  289. ################################################################################
  290. string(REGEX REPLACE "[][ ():, |!*]" "" CTEST_BINARY_DIRECTORY "${CTEST_BUILD_NAME}")
  291. set(CTEST_BINARY_DIRECTORY "${CTEST_SOURCE_DIRECTORY}/build-${dashboard_model}/${CTEST_BINARY_DIRECTORY}")
  292. # Give user feedback
  293. ################################################################################
  294. #message("src: ${CTEST_SOURCE_DIRECTORY}")
  295. #message("obj: ${CTEST_BINARY_DIRECTORY}")
  296. message("build name: ${CTEST_BUILD_NAME}")
  297. message("site: ${CTEST_SITE}")
  298. message("model: ${dashboard_model}")
  299. Set(CTEST_START_WITH_EMPTY_BINARY_DIRECTORY_ONCE TRUE)
  300. list(APPEND CTEST_NOTES_FILES "${CTEST_SOURCE_DIRECTORY}/.git/HEAD")
  301. # attach information on the OS
  302. ################################################################################
  303. if(arch STREQUAL "linux")
  304. execute_process(COMMAND lsb_release -idrc OUTPUT_VARIABLE os_ident)
  305. elseif(arch STREQUAL "darwin")
  306. execute_process(COMMAND system_profiler SPSoftwareDataType OUTPUT_VARIABLE os_ident)
  307. else()
  308. set(os_ident "${arch}")
  309. endif()
  310. file(WRITE "${CTEST_SOURCE_DIRECTORY}/os_ident.txt" "${os_ident}")
  311. list(APPEND CTEST_NOTES_FILES "${CTEST_SOURCE_DIRECTORY}/os_ident.txt")
  312. include(${CTEST_SOURCE_DIRECTORY}/CTestConfig.cmake)
  313. ctest_read_custom_files(${CTEST_SOURCE_DIRECTORY})
  314. set(CTEST_USE_LAUNCHERS TRUE)
  315. if(WIN32)
  316. set(MAKE_ARGS "-k")
  317. else()
  318. set(MAKE_ARGS "-j${number_of_processors} -l${number_of_processors} -k")
  319. endif()
  320. if(WIN32)
  321. if("${compiler}" STREQUAL "MSVC")
  322. find_program(NINJA ninja)
  323. find_program(JOM jom)
  324. if(NINJA)
  325. set(CTEST_CMAKE_GENERATOR "Ninja")
  326. set(CMAKE_MAKE_PROGRAM "${NINJA}")
  327. set(MAKE_ARGS "-k50")
  328. elseif(JOM)
  329. set(CTEST_CMAKE_GENERATOR "NMake Makefiles JOM")
  330. set(CMAKE_MAKE_PROGRAM "${JOM}")
  331. else()
  332. set(CTEST_CMAKE_GENERATOR "NMake Makefiles")
  333. set(CMAKE_MAKE_PROGRAM "nmake")
  334. set(MAKE_ARGS "-I")
  335. endif()
  336. elseif("${compiler}" STREQUAL "MinGW")
  337. set(CTEST_CMAKE_GENERATOR "MSYS Makefiles")
  338. set(CMAKE_MAKE_PROGRAM "make")
  339. else()
  340. message(FATAL_ERROR "unknown cmake generator required (compiler: ${compiler})")
  341. endif()
  342. else()
  343. set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
  344. set(CMAKE_MAKE_PROGRAM "make")
  345. endif()
  346. set(configure_options "-DCTEST_USE_LAUNCHERS=${CTEST_USE_LAUNCHERS}")
  347. list(APPEND configure_options "-DCMAKE_BUILD_TYPE=${build_type}")
  348. list(APPEND configure_options "-DBUILD_TESTING=TRUE")
  349. list(APPEND configure_options "-DBUILD_EXAMPLES=TRUE")
  350. list(APPEND configure_options "-DUSE_CCACHE=ON")
  351. list(APPEND configure_options "-DCMAKE_INSTALL_PREFIX=${CTEST_BINARY_DIRECTORY}/installed")
  352. if(DEFINED target_architecture)
  353. list(APPEND configure_options "-DTARGET_ARCHITECTURE=${target_architecture}")
  354. endif()
  355. if(NOT "$ENV{CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
  356. set(skip_tests TRUE) # cross-compiling, can't run the tests
  357. list(APPEND configure_options "-DCMAKE_TOOLCHAIN_FILE=${CTEST_SOURCE_DIRECTORY}/$ENV{CMAKE_TOOLCHAIN_FILE}")
  358. endif()
  359. if("${COMPILER_VERSION}" MATCHES "(GCC|Open64).*4\\.[01234567]\\."
  360. OR "${COMPILER_VERSION}" MATCHES "GCC 4.8.0"
  361. OR "${COMPILER_VERSION}" MATCHES "ICC 1[01234567]"
  362. OR "${COMPILER_VERSION}" MATCHES "clang 3\\.[0123](\\.[0-9])?$")
  363. message(FATAL_ERROR "Compiler too old for C++11 (${COMPILER_VERSION})")
  364. endif()
  365. if(chip STREQUAL "x86")
  366. set(arch_abi "x86 32-bit")
  367. elseif(chip STREQUAL "amd64")
  368. if(CXXFLAGS MATCHES "-m32")
  369. set(arch_abi "x86 32-bit")
  370. elseif(CXXFLAGS MATCHES "-mx32")
  371. set(arch_abi "x86 x32")
  372. else()
  373. set(arch_abi "x86 64-bit")
  374. endif()
  375. else()
  376. set(arch_abi "${chip}")
  377. endif()
  378. macro(go)
  379. # On Continuous builds this string may change and thus must be inside go()
  380. file(STRINGS "${CTEST_SOURCE_DIRECTORY}/Vc/version.h"
  381. Vc_VERSION_STRING
  382. REGEX "#define +Vc_VERSION_STRING "
  383. )
  384. string(REGEX REPLACE "\"$" "" Vc_VERSION_STRING "${Vc_VERSION_STRING}")
  385. string(REGEX REPLACE "^.*\"" "" Vc_VERSION_STRING "${Vc_VERSION_STRING}")
  386. set_property(GLOBAL PROPERTY Label other)
  387. CTEST_START (${dashboard_model} TRACK "${dashboard_model} ${Vc_VERSION_STRING} ${arch_abi}")
  388. set(res 0)
  389. if(NOT is_experimental)
  390. CTEST_UPDATE (SOURCE "${CTEST_SOURCE_DIRECTORY}" RETURN_VALUE res)
  391. if(res GREATER 0)
  392. ctest_submit(PARTS Update)
  393. endif()
  394. endif()
  395. # enter the following section for Continuous builds only if the CTEST_UPDATE above found changes
  396. if(NOT is_continuous OR res GREATER 0)
  397. CTEST_CONFIGURE (BUILD "${CTEST_BINARY_DIRECTORY}"
  398. OPTIONS "${configure_options}"
  399. APPEND
  400. RETURN_VALUE res)
  401. list(APPEND CTEST_NOTES_FILES
  402. #"${CTEST_BINARY_DIRECTORY}/CMakeFiles/CMakeOutput.log"
  403. "${CTEST_BINARY_DIRECTORY}/CMakeFiles/CMakeError.log"
  404. )
  405. ctest_submit(PARTS Notes Configure)
  406. unset(CTEST_NOTES_FILES) # less clutter in ctest -V output
  407. if(res EQUAL 0)
  408. set(test_results 0)
  409. if(travis_os)
  410. set(CTEST_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM} ${MAKE_ARGS}")
  411. ctest_build(
  412. BUILD "${CTEST_BINARY_DIRECTORY}"
  413. APPEND
  414. RETURN_VALUE res)
  415. ctest_submit(PARTS Build)
  416. if(NOT skip_tests)
  417. ctest_test(
  418. BUILD "${CTEST_BINARY_DIRECTORY}"
  419. APPEND
  420. RETURN_VALUE test_results
  421. PARALLEL_LEVEL ${number_of_processors})
  422. endif()
  423. ctest_submit(PARTS Test)
  424. else()
  425. if("${subset}" STREQUAL "sse")
  426. set(label_list other Scalar SSE)
  427. elseif("${subset}" STREQUAL "avx")
  428. set(label_list AVX AVX2)
  429. else()
  430. set(label_list other Scalar SSE AVX AVX2)
  431. endif()
  432. foreach(label ${label_list})
  433. set_property(GLOBAL PROPERTY Label ${label})
  434. set(CTEST_BUILD_TARGET "${label}")
  435. set(CTEST_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM} ${MAKE_ARGS} ${CTEST_BUILD_TARGET}")
  436. ctest_build(
  437. BUILD "${CTEST_BINARY_DIRECTORY}"
  438. APPEND
  439. RETURN_VALUE res)
  440. ctest_submit(PARTS Build)
  441. if(res EQUAL 0 AND NOT skip_tests)
  442. execute_process(
  443. COMMAND ${CMAKE_CTEST_COMMAND} -N -L "^${label}$"
  444. WORKING_DIRECTORY "${CTEST_BINARY_DIRECTORY}"
  445. OUTPUT_VARIABLE tmp
  446. OUTPUT_STRIP_TRAILING_WHITESPACE)
  447. if(tmp MATCHES "Total Tests: 0")
  448. message("No tests were defined. Skipping tests.")
  449. else()
  450. ctest_test(
  451. BUILD "${CTEST_BINARY_DIRECTORY}"
  452. APPEND
  453. RETURN_VALUE res
  454. PARALLEL_LEVEL ${number_of_processors}
  455. INCLUDE_LABEL "^${label}$")
  456. ctest_submit(PARTS Test)
  457. if(NOT res EQUAL 0)
  458. message("ctest_test returned non-zero result: ${res}")
  459. set(test_results ${res})
  460. endif()
  461. endif()
  462. endif()
  463. if(label STREQUAL "other" AND CTEST_CMAKE_GENERATOR MATCHES "Make")
  464. set(CTEST_BUILD_TARGET "install/fast")
  465. set(CTEST_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM} ${MAKE_ARGS} ${CTEST_BUILD_TARGET}")
  466. ctest_build(
  467. BUILD "${CTEST_BINARY_DIRECTORY}"
  468. APPEND
  469. RETURN_VALUE res)
  470. ctest_submit(PARTS Build)
  471. endif()
  472. endforeach()
  473. endif()
  474. endif()
  475. endif()
  476. endmacro()
  477. if(is_continuous)
  478. while(${CTEST_ELAPSED_TIME} LESS 64800)
  479. set(START_TIME ${CTEST_ELAPSED_TIME})
  480. go()
  481. ctest_sleep(${START_TIME} 1200 ${CTEST_ELAPSED_TIME})
  482. endwhile()
  483. else()
  484. if(EXISTS "${CTEST_BINARY_DIRECTORY}")
  485. CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY})
  486. endif()
  487. go()
  488. if(NOT test_results EQUAL 0)
  489. message(FATAL_ERROR "One or more tests failed.")
  490. endif()
  491. endif()