Update timestamps for new AMANDA simulation (17/02/2015)
[u/mrichter/AliRoot.git] / test / continuous-build.cmake
1 #****Macros****
2 find_program(UNAME NAMES uname)
3 macro(getuname name flag)
4   exec_program("${UNAME}" ARGS "${flag}" OUTPUT_VARIABLE "${name}")
5 endmacro(getuname)
6
7 #****Configuration Variables****
8 #Set Project Name
9 set(CTEST_PROJECT_NAME "AliRoot")
10 set(ALICE_ROOT $ENV{ALICE_ROOT})
11 set(ALICE_INSTALL $ENV{ALICE_INSTALL})
12
13 if(NOT ALICE_INSTALL)
14 message(FATAL_ERROR "Please set environment variable ALICE_INSTALL to the AliRoot installation directory")
15 endif(NOT ALICE_INSTALL)
16 if(NOT ALICE_ROOT)
17 message(FATAL_ERROR "Please set environment variable ALICE_ROOT to the AliRoot source directory")
18 endif(NOT ALICE_ROOT)
19
20 #Set hostname of current machine
21 find_program(HOSTNAME_CMD NAMES hostname)
22 exec_program(${HOSTNAME_CMD} ARGS OUTPUT_VARIABLE HOSTNAME)
23 set(CTEST_SITE "${HOSTNAME}")
24
25 #Set build name
26 getuname(osname -s)
27 getuname(osrel  -r)
28 getuname(cpu    -m)
29 set(CTEST_BUILD_NAME        "${osname}-${cpu}-prod")
30
31 #Detect SVN and Make
32 find_program(CTEST_SVN_COMMAND NAMES svn)
33 find_program(MAKE NAMES make)
34 find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
35 set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --error-limit=yes --leak-resolution=low")
36
37 #AliRoot Repository and build settings
38 set(ALICE_REPO "https://alisoft.cern.ch/AliRoot/trunk")
39 set(MODEL "Continuous")
40
41
42 #Set Nightly build start time
43 set(CTEST_NIGHTLY_START_TIME "00:00:00 EST")
44 set(CTEST_TEST_TIMEOUT 0)
45 #Default drop site
46 set(CTEST_DROP_METHOD "http")
47 set(CTEST_DROP_SITE "alirootbuildcmake.cern.ch")
48 set(CTEST_DROP_LOCATION "/submit.php?project=AliRoot")
49 set(CTEST_DROP_SITE_CDASH TRUE)
50
51 #Ctest custom settings
52 set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS "1000")
53 set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS "1000")
54 set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "5000")
55 set(CTEST_USE_LAUNCHERS ON)
56 set(BUILD_JOBS 1)
57
58 set(OLDREV 0)
59 set(NEWREV 0)
60 set(CYCLE 0)
61 set(CLEARCYCLE 5)
62 set(TESTCYCLE 2)
63 #Get Revision
64 execute_process(COMMAND svn info ${ALICE_ROOT} OUTPUT_VARIABLE _svn_out )
65 string(REGEX REPLACE "^.*Revision: ([^\n]*).*$" "\\1" ALIROOT_REVISION ${_svn_out})
66 set(OLDREV ${ALIROOT_REVISION})       
67 set(NEWREV ${ALIROOT_REVISION})       
68 message("Starting build of revision ${OLDREV}")
69 #Setup Directories
70 set(CTEST_BINARY_DIRECTORY  "${ALICE_INSTALL}")
71 set(CTEST_SOURCE_DIRECTORY  "${ALICE_ROOT}")
72 set(CTEST_DASHBOARD_ROOT    "$ENV{HOME}/Dashboards")
73 #  set(CTEST_CHECKOUT_COMMAND "${CTEST_SVN_COMMAND} co ${ALICE_REPO} $ENV{ALICE_ROOT}")
74 set(CTEST_UPDATE_COMMAND "${CTEST_SVN_COMMAND}")
75 set(CTEST_CMAKE_COMMAND "\"${CMAKE_EXECUTABLE_NAME}\" -D Continuous")
76 #CMake Generator
77 set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
78
79 message("Continuous Build Starting")
80
81 #****Testing Process****
82 while (${CTEST_ELAPSED_TIME} LESS 36000)
83   
84   set (START_TIME ${CTEST_ELAPSED_TIME})    
85   ctest_start (Continuous)
86       
87   #Build only if new revision of source is available
88   while(${OLDREV} EQUAL ${NEWREV} AND ${CYCLE} GREATER 0)
89     message("Checking for updates...")
90     message("Current revision : ${OLDREV}")
91     ctest_update(BUILD "${CTEST_SOURCE_DIRECTORY}")
92     execute_process(COMMAND svn info ${ALICE_ROOT} OUTPUT_VARIABLE _svn_out)
93     string(REGEX REPLACE "^.*Revision: ([^\n]*).*$" "\\1" ALIROOT_REVISION ${_svn_out})
94     set(NEWREV ${ALIROOT_REVISION})             
95     message("New revision : ${NEWREV}")
96     if(${OLDREV} EQUAL ${NEWREV})
97       message("Source not updated, no need to build source")
98       ctest_sleep(300)
99     endif(${OLDREV} EQUAL ${NEWREV})
100   endwhile()
101   ctest_submit (PARTS Update)
102   
103   #Keeping track of builds
104   set(OLDREV ${NEWREV})
105   math(EXPR CYCLE "${CYCLE} + 1")
106   message("Build #${CYCLE} ")
107   message("Revision : ${OLDREV}")
108   set (START_TIME ${CTEST_ELAPSED_TIME})    
109   math(EXPR CLEAR "${CYCLE}%${CLEARCYCLE}")
110
111   #Get CTest configuration
112   include("${CTEST_SOURCE_DIRECTORY}/CTestConfig.cmake")
113
114
115   #Clear build directory every CLEARCYCLE build
116   if(${CLEAR} EQUAL 0)
117     message("Clearing build directory")
118     ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
119   endif(${CLEAR} EQUAL 0) 
120
121   message(STATUS "Building source")
122   foreach(subproject ${CTEST_PROJECT_SUBPROJECTS})
123     set_property(GLOBAL PROPERTY SubProject ${subproject})
124     set_property(GLOBAL PROPERTY Label ${subproject})
125     #Configure
126     ctest_configure(BUILD "${CTEST_BINARY_DIRECTORY}")
127     ctest_submit(PARTS Configure)
128     set(CTEST_BUILD_TARGET "${subproject}-all")
129     set(CTEST_BUILD_COMMAND "${MAKE} -i -j${BUILD_JOBS} ${CTEST_BUILD_TARGET}") 
130     ctest_build(BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
131     ctest_submit(PARTS Build)
132   endforeach(subproject)
133
134   message("Building all")
135   set_property(GLOBAL PROPERTY SubProject)
136   set_property(GLOBAL PROPERTY Label)
137   set(CTEST_BUILD_TARGET "all")
138   ctest_build(BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
139   ctest_submit(PARTS BUILD)
140   #Test every other build
141
142   math(EXPR TEST "${CYCLE}%${TESTCYCLE}")
143   if(${TEST} EQUAL 0)
144     message(STATUS "Running tests")
145     ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}")
146   endif(${TEST} EQUAL 0)
147   ctest_submit ()
148   message("Build ${CYCLE} completed")
149 endwhile()
150
151
152
153