1###################################################################### 2## ctest_script.cmake 3## This file is part of the G+Smo library. 4## https://raw.githubusercontent.com/gismo/gismo/stable/cmake/ctest_script.cmake 5## 6## Author: Angelos Mantzaflaris 7###################################################################### 8 9###################################################################### 10## 11## To execute: 12## 13## ctest -S ctest_script.cmake 14## 15## The script creates sources and build folders in the same directory 16## 17## For more verbosity add the flag 18## 19## ctest -S /path/to/ctest_script.cmake -V 20## 21## or even -VV. 22## 23## Options can be passed by arguments (default options are displayed here): 24## NOTE: Line wrap can be done under Linux/macOS with \, under Windows with ^ 25## 26## ctest -S ctest_script.cmake -D CTEST_TEST_MODEL=Experimental \ 27## -D CTEST_CONFIGURATION_TYPE=Release -D CTEST_BUILD_JOBS=8 \ 28## -D CTEST_CMAKE_GENERATOR="Unix Makefiles" -D CNAME=gcc -D CXXNAME=g++ \ 29## -D CTEST_TEST_TIMEOUT=100 -D CTEST_MEMORYCHECK_TYPE=Valgrind \ 30## -D DO_COVERAGE=TRUE 31## 32## Different dashboard projects and subprojects are possible: 33## 34## ctest -S /path/to/ctest_script.cmake -D PROJECT_NAME=myGismo \ 35## -D CTEST_BUILD_JOBS=2 -D CTEST_CMAKE_GENERATOR="Unix Makefiles" \ 36## -D CTEST_TEST_TIMEOUT=100 -D LABELS_FOR_SUBPROJECTS='gismo;examples;unittests' \ 37## -D CTEST_SOURCE_DIRECTORY=./gismo_src -D CTEST_BINARY_DIRECTORY=./build 38## 39## On linux this script can be invoked in a cronjob. e.g.: 40## $ crontab -e 41## Add the line: 42## 0 3 * * * ctest -S /path/toctest_script.cmake -D CTEST_TEST_MODEL=Nightly -Q 43## save and exit. Now with 44## $ crontab -l 45## you can see the scheduled task. The script will 46## be executed every night at 03:00am. 47## 48###################################################################### 49 50###################################################################### 51## 52## Complete Options List: 53## 54## ctest parameters: (ctest -D ...) 55## CMAKE_ARGS 56## CNAME 57## CTEST_BINARY_DIRECTORY 58## CTEST_BUILD_JOBS 59## CTEST_BUILD_NAME 60## CTEST_CMAKE_GENERATOR 61## CTEST_CONFIGURATION_TYPE 62## CTEST_COVERAGE_COMMAND 63## CTEST_MEMORYCHECK_TYPE 64## CTEST_SITE 65## CTEST_SOURCE_DIRECTORY 66## CTEST_TEST_JOBS 67## CTEST_TEST_MODEL 68## CTEST_TEST_TIMEOUT 69## CXXNAME 70## DO_COVERAGE 71## DO_TESTS 72## DROP_LOCATION 73## DROP_METHOD 74## DROP_SITE 75## EMPTY_BINARY_DIRECTORY 76## GISMO_BRANCH 77## GISMO_SUBMODULES 78## LABELS_FOR_SUBPROJECTS 79## PROJECT_NAME 80## UPDATE_REPO 81## UPDATE_MODULES 82## UPDATE_TYPE 83## 84## Environment 85## CFLAGS 86## CXXFLAGS 87## LDFLAGS 88## 89###################################################################### 90 91cmake_minimum_required(VERSION 2.8.12) 92 93if (POLICY CMP0048)# CMake 3.0 94 cmake_policy(SET CMP0011 NEW) 95 cmake_policy(SET CMP0042 NEW) 96 cmake_policy(SET CMP0048 NEW) 97endif() 98 99if (POLICY CMP0054)# CMake 3.1 100 cmake_policy(SET CMP0054 NEW) 101endif() 102 103if (POLICY CMP0053)# CMake 3.1.3 104 cmake_policy(SET CMP0053 NEW) 105endif() 106 107if (POLICY CMP0063)# CMake 3.3 108 cmake_policy(SET CMP0063 NEW) 109endif() 110 111## ################################################################# 112## Configuration 113## ################################################################# 114 115#set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS "200" ) 116#set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS "500" ) 117#set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "104857600") # 100 MB 118#set(CTEST_CUSTOM_COVERAGE_EXCLUDE "") 119 120if (DEFINED KEEPCONFIG) 121 message(STATUS "Building in the current directory") 122endif() 123 124# Test model (Nightly, Continuous, Experimental) 125if (NOT DEFINED CTEST_TEST_MODEL) 126 set(CTEST_TEST_MODEL Experimental) 127endif() 128 129# Configuration type (Debug Release RelWithDebInfo MinSizeRel) 130if (NOT DEFINED CTEST_CONFIGURATION_TYPE AND NOT DEFINED KEEPCONFIG) 131 set(CTEST_CONFIGURATION_TYPE Release) 132endif() 133 134# Number of jobs for build/test (later on) 135#set(CTEST_BUILD_JOBS 8) 136#set(CTEST_TEST_JOBS 10) 137 138# Tip for C/C++ compilers 139# e.g. "cc/g++", "icc/icpc", "clang/clang++", "mpicc/mpic++", cl.exe/cl.exe 140#set(CNAME cc) 141#set(CXXNAME g++) 142 143# Test timeout in seconds 144if (NOT DEFINED CTEST_TEST_TIMEOUT) 145 set(CTEST_TEST_TIMEOUT 200) 146 #set(CTEST_TIMEOUT 200) 147endif() 148 149# Dynamic analysis 150#Valgrind, Purify, BoundsChecker. ThreadSanitizer, AddressSanitizer, 151#LeakSanitizer, MemorySanitizer, and UndefinedBehaviorSanitizer. 152if (NOT DEFINED CTEST_MEMORYCHECK_TYPE) 153 set(CTEST_MEMORYCHECK_TYPE "None") 154endif() 155 156# Coverage analysis - only GCC 157# if GCC was changed with CNAME/CXXNAME, CTEST_COVERAGE_COMMAND needs 158# also to be changed 159if (NOT DEFINED DO_COVERAGE) 160 set(DO_COVERAGE FALSE) 161endif() 162 163if (NOT DEFINED DO_TESTS) 164 set(DO_TESTS TRUE) 165endif() 166 167if(DEFINED CNAME) 168 find_program (CC NAMES ${CNAME}) 169 set(ENV{CC} ${CC}) 170endif() 171if(DEFINED CXXNAME) 172 find_program (CXX NAMES ${CXXNAME}) 173 set(ENV{CXX} ${CXX}) 174endif() 175 176# Other Environment variables and scripts 177#set(ENV{OMP_NUM_THREADS} 3) 178#set(ENV{CXXFLAGS} "-Ofast") 179#execute_process(COMMAND source "/path/to/iccvars.sh intel64") 180#set(ENV{LD_LIBRARY_PATH} /path/to/vendor/lib) 181#set(ENV{MAKEFLAGS} "-j12") 182 183# Build options 184if(NOT DEFINED CMAKE_ARGS) 185 set(CMAKE_ARGS 186 -DGISMO_WARNINGS=OFF 187 -DGISMO_COEFF_TYPE=double 188 -DGISMO_BUILD_LIB=ON 189 #-DCMAKE_CXX_STANDARD=11 190 -DGISMO_BUILD_EXAMPLES=ON 191 -DGISMO_BUILD_UNITTESTS=ON 192 #-DGISMO_WITH_OPENMP=ON 193 #-DGISMO_WITH_MPI=ON 194 #-DGISMO_WITH_SPECTRA=ON 195 #-DGISMO_WITH_IPOPT=ON -DIpOpt_DIR=/path/to/ipopt 196 #-DGISMO_WITH_PSOLID=ON -DParasolid_DIR=/path/to/parasolid 197 #-DGISMO_BUILD_AXL=ON -DAxel_DIR=/path/to/axel 198 -DGISMO_WITH_ONURBS=ON 199 -DGISMO_WITH_TRILINOS=OFF 200 -DGISMO_WITH_SPECTRA=OFF 201 -DGISMO_EXTRA_DEBUG=OFF 202 -DGISMO_BUILD_PCH=OFF 203 #-DGISMO_PLAINDOX=ON 204 -DNOSNIPPETS=OFF 205 ) 206endif() 207 208# Source folder (defaults inside the script directory) 209if(NOT DEFINED CTEST_SOURCE_DIRECTORY) 210 if(EXISTS ${CTEST_SCRIPT_DIRECTORY}/gismoConfig.cmake.in 211 AND EXISTS ${CTEST_SCRIPT_DIRECTORY}/../CMakeLists.txt) 212 get_filename_component(CTEST_SOURCE_DIRECTORY ${CTEST_SCRIPT_DIRECTORY} DIRECTORY) 213 else() 214 set(CTEST_SOURCE_DIRECTORY ${CTEST_SCRIPT_DIRECTORY}/gismo_src) 215 endif() 216endif() 217 218# Build folder (defaults next to source directory) 219if(NOT DEFINED CTEST_BINARY_DIRECTORY) 220 if (DEFINED KEEPCONFIG) 221 set(CTEST_BINARY_DIRECTORY ./) 222 else() 223 get_filename_component(base_dir ${CTEST_SOURCE_DIRECTORY} DIRECTORY) 224 get_filename_component(cnamewe "${CXXNAME}" NAME_WE) 225 set(CTEST_BINARY_DIRECTORY ${base_dir}/build_${CTEST_TEST_MODEL}${CTEST_CONFIGURATION_TYPE}_${cnamewe}) 226 endif() 227endif() 228 229if (DEFINED KEEPCONFIG) 230 ctest_read_custom_files(${CTEST_BINARY_DIRECTORY}) 231endif() 232 233# Empty previous directory before building (otherwise builds are incremental) 234if(EMPTY_BINARY_DIRECTORY) 235 ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY}) 236endif() 237 238# The Generator for CMake 239# ("Unix Makefiles", "Ninja", "Xcode", "NMake Makefiles", "NMake Makefiles JOM", 240# "MinGW Makefiles", "Visual Studio 12 2013", "Visual Studio 14 2015", 241# "Visual Studio 14 2015 Win64", and so on) 242if (NOT DEFINED CTEST_CMAKE_GENERATOR) 243 file(WRITE ${CTEST_BINARY_DIRECTORY}/cgtest/CMakeLists.txt "message(\"\${CMAKE_GENERATOR}\")\n") 244 execute_process(COMMAND ${CMAKE_COMMAND} -Wno-dev . 245 ERROR_VARIABLE CTEST_CMAKE_GENERATOR 246 OUTPUT_QUIET 247 WORKING_DIRECTORY ${CTEST_BINARY_DIRECTORY}/cgtest/ 248 ERROR_STRIP_TRAILING_WHITESPACE) 249endif() 250 251if(NOT DEFINED KEEPCONFIG) 252# Cleanup previous tests, settings and test data 253file(REMOVE_RECURSE ${CTEST_BINARY_DIRECTORY}/bin) 254file(REMOVE ${CTEST_BINARY_DIRECTORY}/CMakeCache.txt) 255file(REMOVE_RECURSE ${CTEST_BINARY_DIRECTORY}/Testing) 256endif() 257 258if (DO_COVERAGE) 259 if(NOT DEFINED CTEST_COVERAGE_COMMAND) 260 find_program(CTEST_COVERAGE_COMMAND NAMES gcov) 261 endif() 262 set(CTEST_CUSTOM_COVERAGE_EXCLUDE "${CTEST_SOURCE_DIRECTORY}/external/") 263 set(ENV{CXXFLAGS} "$ENV{CXXFLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage") 264 set(ENV{CFLAGS} "$ENV{CFLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage") 265endif() 266 267if ("x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xValgrind") 268 find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind) 269 set(MEMORYCHECK_SUPPRESSIONS_FILE "${CTEST_SOURCE_DIRECTORY}/cmake/valgrind_supp.txt") 270 set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1 --leak-check=yes -q") 271 #--tool=memcheck --show-reachable=yes --num-callers=50 --track-origins=yes --trace-children=yes 272endif() 273 274if("x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xAddressSanitizer") 275 #See https://github.com/google/sanitizers 276 set(ENV{CXXFLAGS} "$ENV{CXXFLAGS} -fsanitize=address -fno-omit-frame-pointer") 277 set(ENV{LDFLAGS} "$ENV{LDFLAGS} -fsanitize=address") 278 set(ENV{ASAN_OPTIONS} "symbolize=1:detect_leaks=1") 279 #find_program(LLVMSYM NAMES llvm-symbolizer) #needed in path 280 #set(ENV{ASAN_SYMBOLIZER_PATH} "${LLVMSYM}") 281endif() 282if("x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xLeakSanitizer")#part of AddressSanitizer 283 set(ENV{CXXFLAGS} "$ENV{CXXFLAGS} -fsanitize=leak -fno-omit-frame-pointer") 284 set(ENV{LDFLAGS} "$ENV{LDFLAGS} -fsanitize=leak") 285 #set(ENV{LSAN_OPTIONS} "suppressions="${CTEST_SOURCE_DIRECTORY}/cmake/asan_supp.txt") 286endif() 287if("x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xMemorySanitizer") 288 # Note: requires full code (including libc++) compiled with -fsanitize=memory 289 set(ENV{CXXFLAGS} "$ENV{CXXFLAGS} -fsanitize=memory -fno-omit-frame-pointer -fsanitize-memory-track-origins") 290 set(ENV{LDFLAGS} "$ENV{LDFLAGS} -fsanitize=memory -fsanitize-memory-track-origins") 291 set(ENV{MSAN_OPTIONS} "symbolize=1") 292 #find_program(LLVMSYM NAMES llvm-symbolizer) #needed in path 293 #set(ENV{MSAN_SYMBOLIZER_PATH} "${LLVMSYM}") 294endif() 295if("x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xThreadSanitizer") 296 set(ENV{CXXFLAGS} "$ENV{CXXFLAGS} -fsanitize=thread") 297 set(ENV{LDFLAGS} "$ENV{LDFLAGS} -fsanitize=thread") 298 #set(ENV{TSAN_OPTIONS} "report_bugs=1") 299endif() 300if("x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xUndefinedBehaviorSanitizer") 301 set(ENV{CXXFLAGS} "$ENV{CXXFLAGS} -fsanitize=undefined -fno-omit-frame-pointer") 302 set(ENV{LDFLAGS} "$ENV{LDFLAGS} -fsanitize=undefined") 303 set(ENV{UBSAN_OPTIONS} "print_stacktrace=1") 304endif() 305 306# Update G+Smo from remote (no effect on Continuous builds) 307if (NOT DEFINED UPDATE_REPO) 308 set(UPDATE_REPO ON) 309endif() 310 311# Update type (git, svn, wget or url) 312if (NOT DEFINED UPDATE_TYPE AND NOT DEFINED KEEPCONFIG) 313 set(UPDATE_TYPE git) 314endif() 315 316if (NOT DEFINED GISMO_BRANCH) #for initial checkout 317 set(GISMO_BRANCH stable) 318endif() 319 320# Update modules with fetch HEAD commits for all initialized 321# submodules 322if (NOT DEFINED UPDATE_MODULES) 323 set(UPDATE_MODULES OFF) 324endif() 325 326# For continuous builds, number of seconds to stay alive 327set(test_runtime 43200) #12h by default 328 329# Computer ID shown on the dashboard (will be set automatically) 330# set(CTEST_SITE "Server0407") 331 332# Ignore certain tests during test or memcheck 333#set(CTEST_CUSTOM_TESTS_IGNORE "") 334#set(CTEST_CUSTOM_MEMCHECK_IGNORE "") 335 336## ################################################################# 337## Test routines 338## ################################################################# 339 340#message(STATUS "Preserve full output (CTEST_FULL_OUTPUT)") 341 342if (NOT DEFINED KEEPCONFIG) 343 find_program(CTEST_UPDATE_COMMAND NAMES ${UPDATE_TYPE} ${UPDATE_TYPE}.exe) 344endif() 345 346# Initial checkout 347if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}" AND NOT DEFINED KEEPCONFIG) 348 if("x${UPDATE_TYPE}" STREQUAL "xgit") 349 if("x${UPDATE_PROT}" STREQUAL "xhttps") 350 set(gismo_url https://github.com/gismo/gismo.git) 351 else() #ssh 352 set(gismo_url git@github.com:gismo/gismo.git) 353 endif() 354 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} clone --depth 1 --branch ${GISMO_BRANCH} ${gismo_url} ${CTEST_SOURCE_DIRECTORY}) 355 unset(CTEST_CHECKOUT_COMMAND) 356 357 elseif("x${UPDATE_TYPE}" STREQUAL "xsvn") 358 if("x${GISMO_BRANCH}" STREQUAL "xstable") # stable 359 set(CTEST_CHECKOUT_COMMAND "${CTEST_UPDATE_COMMAND} checkout https://github.com/gismo/gismo.git/trunk ${CTEST_SOURCE_DIRECTORY}") 360 else() # branch 361 set(CTEST_CHECKOUT_COMMAND "${CTEST_UPDATE_COMMAND} checkout https://github.com/gismo/gismo.git/branches/${GISMO_BRANCH} ${CTEST_SOURCE_DIRECTORY}") 362 endif() 363 elseif("x${UPDATE_TYPE}" STREQUAL "xwget") 364 execute_process(COMMAND /bin/bash "-c" "wget --no-check-certificate -qO - https://github.com/gismo/gismo/archive/${GISMO_BRANCH}.tar.gz | tar -zxf -") 365 execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink gismo-${GISMO_BRANCH} ${CTEST_SOURCE_DIRECTORY}) 366 set(CTEST_CHECKOUT_COMMAND "${CMAKE_COMMAND} --version") 367 elseif("x${UPDATE_TYPE}" STREQUAL "xurl") 368 file(DOWNLOAD https://github.com/gismo/gismo/archive/${GISMO_BRANCH}.tar.gz ${CTEST_SCRIPT_DIRECTORY}/${GISMO_BRANCH}.tar.gz) 369 execute_process( 370 COMMAND ${CMAKE_COMMAND} -E tar xzf ${GISMO_BRANCH}.tar.gz 371 COMMAND ${CMAKE_COMMAND} -E create_symlink gismo-${GISMO_BRANCH} ${CTEST_SOURCE_DIRECTORY} 372 WORKING_DIRECTORY ${CTEST_SCRIPT_DIRECTORY} ) 373 set(CTEST_CHECKOUT_COMMAND "${CMAKE_COMMAND} --version") 374 endif() 375endif() 376 377if("x${UPDATE_TYPE}" STREQUAL "xgit") 378 379 if (NOT "x${GISMO_SUBMODULES}" STREQUAL "x") 380 foreach (submod ${GISMO_SUBMODULES}) 381 #string(TOUPPER ${submod} csubmod) 382 #set(SUBM_ARGS ${SUBM_ARGS} -D${csubmod}=ON) 383 if ("x${submod}" STREQUAL "xunsupported") 384 set(SUBM_ARGS ${SUBM_ARGS} -DGISMO_UNSUPPORTED=ON) 385 endif() 386 if ("x${submod}" STREQUAL "xmotor") 387 set(SUBM_ARGS ${SUBM_ARGS} -DGISMO_MOTOR=ON) 388 endif() 389 if ("x${submod}" STREQUAL "xgsElasticity") 390 set(SUBM_ARGS ${SUBM_ARGS} -DGISMO_ELASTICITY=ON)#GSELASTICITY=ON 391 endif() 392 if ("x${submod}" STREQUAL "xgsExastencils") 393 set(SUBM_ARGS ${SUBM_ARGS} -DGISMO_EXASTENCILS=ON) 394 endif() 395 endforeach() 396 endif() 397 398 foreach (submodule ${GISMO_SUBMODULES}) 399 if( NOT EXISTS "${CTEST_SOURCE_DIRECTORY}/extensions/${submodule}/.git" ) 400 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} submodule update --init extensions/${submodule} 401 WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY}) 402 endif() 403 if( NOT EXISTS "${CTEST_SOURCE_DIRECTORY}/extensions/${submodule}/.git" ) 404 message(SEND_ERROR "Problem fetching ${submodule}") 405 endif() 406 407 if(${UPDATE_MODULES}) 408 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} checkout master 409 WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY}/extensions/${submodule}) 410 endif() 411 endforeach() 412 if(${UPDATE_MODULES}) 413 set(CTEST_GIT_UPDATE_CUSTOM ${CTEST_UPDATE_COMMAND} pull) 414 unset(CTEST_GIT_UPDATE_OPTIONS) 415 endif() 416endif() 417 418if("${CTEST_CMAKE_GENERATOR}" MATCHES "Make" OR "${CTEST_CMAKE_GENERATOR}" MATCHES "Ninja") 419 set(CTEST_USE_LAUNCHERS 1) 420else() 421 set(CTEST_USE_LAUNCHERS 0) 422endif() 423 424set(ENV{CTEST_OUTPUT_ON_FAILURE} 1) 425set( $ENV{LC_MESSAGES} "en_EN") 426set(ENV{LC_ALL} C)# avoid non-ascii characters 427 428if(NOT DEFINED CTEST_TEST_MODEL AND DEFINED ENV{CTEST_TEST_MODEL}) 429 set(CTEST_TEST_MODEL $ENV{CTEST_TEST_MODEL}) 430endif() 431if(NOT DEFINED CTEST_CONFIGURATION_TYPE AND DEFINED ENV{CTEST_CONFIGURATION_TYPE}) 432 set(CTEST_CONFIGURATION_TYPE $ENV{CTEST_CONFIGURATION_TYPE}) 433endif() 434 435if(NOT DEFINED CTEST_SITE) 436 if(DEFINED ENV{CTEST_SITE}) 437 set(CTEST_SITE $ENV{CTEST_SITE}) 438 else() 439 find_program(HOSTNAME_CMD NAMES hostname) 440 execute_process(COMMAND ${HOSTNAME_CMD} OUTPUT_VARIABLE HOSTNAME OUTPUT_STRIP_TRAILING_WHITESPACE) 441 set(CTEST_SITE "${HOSTNAME}") 442 endif() 443endif() 444STRING(REPLACE " " "_" CTEST_SITE "${CTEST_SITE}") 445 446# Name of this build 447if(NOT DEFINED CTEST_BUILD_NAME) 448 # find_program(UNAME NAMES uname) 449 # execute_process(COMMAND "${UNAME}" "-s" OUTPUT_VARIABLE osname OUTPUT_STRIP_TRAILING_WHITESPACE) 450 # execute_process(COMMAND "${UNAME}" "-m" OUTPUT_VARIABLE "cpu" OUTPUT_STRIP_TRAILING_WHITESPACE) 451 # set(CTEST_BUILD_NAME "${osname}-${cpu} ${CTEST_CMAKE_GENERATOR}-${CTEST_CONFIGURATION_TYPE}-${CNAME}") 452 if(${UPDATE_MODULES}) 453 set(smHead "(head)") 454 endif() 455 get_filename_component(cxxnamewe "${CXXNAME}" NAME_WE) 456 set(CTEST_BUILD_NAME "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR} ${CTEST_CMAKE_GENERATOR}-${CTEST_CONFIGURATION_TYPE}-${cxxnamewe}${smHead}") 457endif() 458STRING(REPLACE " " "_" CTEST_BUILD_NAME "${CTEST_BUILD_NAME}") 459 460#Output details 461message("Site: ${CTEST_SITE}") 462message("Build Name: ${CTEST_BUILD_NAME}") 463string(TIMESTAMP TODAY "%Y-%m-%d") 464message("Date: ${TODAY}") 465 466if(NOT CTEST_BUILD_JOBS) 467 include(ProcessorCount) 468 ProcessorCount(NPROC) 469 #message("Number of processors: ${NPROC}") 470 if(${NPROC} EQUAL 0) 471 set(NPROC 1) 472 endif() 473 if(${NPROC} GREATER 40) 474 set(CTEST_BUILD_JOBS 20) 475 else() 476 math(EXPR CTEST_BUILD_JOBS "(1+${NPROC})>>1") 477 #message("CTEST_BUILD_JOBS ${CTEST_BUILD_JOBS}") 478 endif() 479endif() 480 481if(NOT DEFINED CTEST_TEST_JOBS) 482 set(CTEST_TEST_JOBS ${CTEST_BUILD_JOBS}) 483endif() 484 485if(${CTEST_CMAKE_GENERATOR} MATCHES "Unix Makefiles" 486 OR "${CTEST_CMAKE_GENERATOR}" MATCHES "Ninja") 487 set(CTEST_BUILD_FLAGS "-j ${CTEST_BUILD_JOBS}") 488 #message("Build flags: ${CTEST_BUILD_FLAGS}") 489endif() 490 491set(ENV{CTEST_USE_LAUNCHERS_DEFAULT} 1) 492 493macro(get_git_status res) 494 if(EXISTS "${CTEST_SOURCE_DIRECTORY}/.git" ) 495 # execute_process(COMMAND ${CTEST_UPDATE_COMMAND} rev-parse --verify HEAD 496 # WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY} 497 # OUTPUT_STRIP_TRAILING_WHITESPACE 498 # OUTPUT_VARIABLE gitHash) 499 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} log -1 500 WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY} 501 OUTPUT_STRIP_TRAILING_WHITESPACE 502 OUTPUT_VARIABLE commitMessage) 503 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} submodule status 504 WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY} 505 OUTPUT_STRIP_TRAILING_WHITESPACE 506 OUTPUT_VARIABLE submoduleHashes) 507 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} submodule summary 508 WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY} 509 OUTPUT_STRIP_TRAILING_WHITESPACE 510 OUTPUT_VARIABLE submoduleSummary) 511 set(${res} "${commitMessage}\n\nSubmodule status:\n${submoduleHashes}\n\nSubmodule summary:\n${submoduleSummary}\n") 512 endif() 513endmacro(get_git_status) 514 515macro(update_gismo ug_ucount) 516 # Reset CTestConfig variables 517 if(DEFINED PROJECT_NAME) 518 set(CTEST_PROJECT_NAME ${PROJECT_NAME}) 519 if(NOT DEFINED DROP_LOCATION) 520 set(DROP_LOCATION "/submit.php?project=${PROJECT_NAME}") 521 endif() 522 endif() 523 if(DEFINED DROP_LOCATION) 524 set(CTEST_DROP_LOCATION ${DROP_LOCATION}) 525 endif() 526 if(DEFINED DROP_SITE) 527 set(CTEST_DROP_SITE ${DROP_SITE}) 528 endif() 529 if(DEFINED DROP_METHOD) 530 set(CTEST_DROP_METHOD ${DROP_METHOD}) 531 endif() 532 if ("${CMAKE_VERSION}" VERSION_GREATER "3.9.99") 533 set(CTEST_LABELS_FOR_SUBPROJECTS ${LABELS_FOR_SUBPROJECTS}) #labels/subprojects 534 endif() 535 536 set(ug_updlog "0") 537 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} symbolic-ref -q HEAD 538 WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY} 539 RESULT_VARIABLE isdetached) 540 if(isdetached EQUAL 0 AND UPDATE_REPO) 541 ctest_update(SOURCE ${CTEST_SOURCE_DIRECTORY} RETURN_VALUE ${ug_ucount}) 542 ctest_submit(PARTS Update RETRY_COUNT 3 RETRY_DELAY 3) 543 endif() 544 set(ug_updlog " ${${ug_ucount}} gismo\n") 545 546 if(${UPDATE_MODULES}) 547 foreach (submodule ${GISMO_SUBMODULES}) 548 execute_process(COMMAND ${CTEST_UPDATE_COMMAND} checkout master 549 WORKING_DIRECTORY ${CTEST_SOURCE_DIRECTORY}/extensions/${submodule}) 550 ctest_update(SOURCE ${CTEST_SOURCE_DIRECTORY}/extensions/${submodule} RETURN_VALUE ug_upd_sm) 551 set(ug_updlog "${ug_updlog} ${ug_upd_sm} extensions/${submodule}\n") 552 if (${ug_upd_sm} GREATER 0) 553 math(EXPR ${ug_ucount} "${${ug_ucount}} + ${ug_upd_sm}") 554 endif() 555 if(${ug_upd_sm} LESS 0) 556 message(SEND_ERROR "Git update submodule error") 557 endif() 558 endforeach() 559 endif() 560 get_git_status(gitstatus) 561 file(WRITE ${CTEST_BINARY_DIRECTORY}/gitstatus.txt "Revision:\n${gitstatus}\nUpdates:\n${ug_updlog}") 562endmacro(update_gismo) 563 564macro(run_ctests) 565 set(narg ${ARGC}) 566 if (narg GREATER 0) 567 set(${ARGV0} 0) 568 endif() 569 570 # Reset CTestConfig variables 571 if(DEFINED PROJECT_NAME) 572 set(CTEST_PROJECT_NAME ${PROJECT_NAME}) 573 if(NOT DEFINED DROP_LOCATION) 574 set(DROP_LOCATION "/submit.php?project=${PROJECT_NAME}") 575 endif() 576 endif() 577 if(DEFINED DROP_LOCATION) 578 set(CTEST_DROP_LOCATION ${DROP_LOCATION}) 579 endif() 580 if(DEFINED DROP_SITE) 581 set(CTEST_DROP_SITE ${DROP_SITE}) 582 endif() 583 if(DEFINED DROP_METHOD) 584 set(CTEST_DROP_METHOD ${DROP_METHOD}) 585 endif() 586 if ("${CMAKE_VERSION}" VERSION_GREATER "3.9.99") 587 set(CTEST_LABELS_FOR_SUBPROJECTS ${LABELS_FOR_SUBPROJECTS}) #labels/subprojects 588 endif() 589 590 message("Configuring") 591 if(DEFINED KEEPCONFIG) 592 ctest_configure(RETURN_VALUE confResult) 593 else() 594 ctest_configure(OPTIONS "${CMAKE_ARGS};${SUBM_ARGS};-DCTEST_USE_LAUNCHERS=${CTEST_USE_LAUNCHERS};-DBUILD_TESTING=ON;-DDART_TESTING_TIMEOUT=${CTEST_TEST_TIMEOUT}" RETURN_VALUE confResult) 595 endif() 596 597 if(EXISTS ${CTEST_BINARY_DIRECTORY}/gitstatus.txt) 598 set(CTEST_NOTES_FILES ${CTEST_BINARY_DIRECTORY}/gitstatus.txt) 599 #list(APPEND CTEST_NOTES_FILES "file") 600 ctest_submit(PARTS Configure Notes RETRY_COUNT 3 RETRY_DELAY 3) 601 else() 602 ctest_submit(PARTS Configure RETRY_COUNT 3 RETRY_DELAY 3) 603 endif() 604 605 if (NOT confResult EQUAL 0) 606 message(SEND_ERROR "CMake Configuration failed.") 607 endif() 608 609 #"${CMAKE_VERSION}" VERSION_LESS "3.10" 610 if(NOT "x${LABELS_FOR_SUBPROJECTS}" STREQUAL "x") 611 612 foreach(subproject ${LABELS_FOR_SUBPROJECTS}) 613 message("Subproject ${subproject}") 614 if ("${CMAKE_VERSION}" VERSION_LESS "3.10") 615 set_property(GLOBAL PROPERTY SubProject ${subproject}) 616 set_property(GLOBAL PROPERTY Label ${subproject}) 617 endif() 618 ctest_build(TARGET ${subproject} APPEND) 619 ctest_submit(PARTS Build RETRY_COUNT 3 RETRY_DELAY 3) 620 if (DO_TESTS) 621 ctest_test(INCLUDE_LABEL "${subproject}" PARALLEL_LEVEL ${CTEST_TEST_JOBS} RETURN_VALUE testResult) 622 if (narg GREATER 0 AND NOT testResult EQUAL 0) 623 set(${ARGV0} -1) 624 endif() 625 ctest_submit(PARTS Test RETRY_COUNT 3 RETRY_DELAY 3) 626 endif() 627 628 if(DO_COVERAGE) 629 ctest_coverage(BUILD "${CTEST_BINARY_DIRECTORY}" LABELS "${subproject}" APPEND) 630 ctest_submit(PARTS Coverage RETRY_COUNT 3 RETRY_DELAY 3) 631 endif() 632 633 if(NOT "x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xNone") 634 ctest_memcheck(INCLUDE_LABEL "${subproject}" APPEND) 635 ctest_submit(PARTS MemCheck RETRY_COUNT 3 RETRY_DELAY 3) 636 endif() 637 638 endforeach() 639 640 else() # No subprojects 641 642 643 message("Building") 644 if("x${CTEST_CMAKE_GENERATOR}" STREQUAL "xNinja") 645 ctest_build(TARGET UnitTestPP APPEND) # for older versions of ninja 646 endif() 647 ctest_submit(PARTS Build RETRY_COUNT 3 RETRY_DELAY 3) 648 ctest_build(APPEND) 649 ctest_submit(PARTS Build RETRY_COUNT 3 RETRY_DELAY 3) 650 message("Building unittests") 651 ctest_build(TARGET unittests APPEND) 652 ctest_submit(PARTS Build RETRY_COUNT 3 RETRY_DELAY 3) 653 if (DO_TESTS) 654 message("Testing") 655 ctest_test(PARALLEL_LEVEL ${CTEST_TEST_JOBS} RETURN_VALUE testResult) 656 if (narg GREATER 0 AND NOT testResult EQUAL 0) 657 set(${ARGV0} -1) 658 endif() 659 ctest_submit(PARTS Test RETRY_COUNT 3 RETRY_DELAY 3) 660 endif() 661 662 if(DO_COVERAGE) 663 message("Running Coverage") 664 ctest_coverage(BUILD "${CTEST_BINARY_DIRECTORY}" APPEND) 665 ctest_submit(PARTS Coverage RETRY_COUNT 3 RETRY_DELAY 3) 666 endif() 667 668 if(NOT "x${CTEST_MEMORYCHECK_TYPE}" STREQUAL "xNone") 669 message("Running Memcheck") 670 ctest_memcheck() 671 ctest_submit(PARTS MemCheck RETRY_COUNT 3 RETRY_DELAY 3) 672 endif() 673 674 endif() 675endmacro(run_ctests) 676 677file(MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}") 678 679if(NOT "${CTEST_TEST_MODEL}" STREQUAL "Continuous") 680 681 ctest_start(${CTEST_TEST_MODEL}) 682 if(NOT "${CTEST_UPDATE_COMMAND}" STREQUAL "CTEST_UPDATE_COMMAND-NOTFOUND") 683 if(DEFINED KEEPCONFIG) 684 get_git_status(gitstatus) 685 file(WRITE ${CTEST_BINARY_DIRECTORY}/gitstatus.txt "Status:\n${gitstatus}") 686 else() 687 update_gismo(updcount) 688 endif() 689 endif() 690 run_ctests(res) 691 692 message("CDASH LINK:\nhttps://cdash-ci.inria.fr/index.php?project=${CTEST_PROJECT_NAME}&date=${TODAY}&filtercount=2&showfilters=1&filtercombine=and&field1=buildname&compare1=61&value1=${CTEST_BUILD_NAME}&field2=site&compare2=65&value2=${CTEST_SITE}") 693 694 if(NOT res EQUAL 0) 695 message(SEND_ERROR "Some Tests failed.") 696 endif() 697 698else() #continuous model 699 set(UPDATE_REPO ON) 700 while(${CTEST_ELAPSED_TIME} LESS ${test_runtime}) 701 set(START_TIME ${CTEST_ELAPSED_TIME}) 702 ctest_start(${CTEST_TEST_MODEL}) 703 update_gismo(updcount) 704 if( ${updcount} GREATER 0 ) 705 run_ctests() 706 endif() 707 ctest_sleep(${START_TIME} 300 ${CTEST_ELAPSED_TIME}) 708 endwhile() 709 710endif(NOT "${CTEST_TEST_MODEL}" STREQUAL "Continuous") 711