Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
MITKDashboardDriverScript.cmake
Go to the documentation of this file.
1 
2 #
3 # Included from a dashboard script, this cmake file will drive the configure and build
4 # steps of MITK
5 #
6 
7 #-----------------------------------------------------------------------------
8 # The following variable are expected to be define in the top-level script:
9 set(expected_variables
10  CTEST_NOTES_FILES
11  CTEST_SITE
12  CTEST_DASHBOARD_ROOT
13  CTEST_CMAKE_COMMAND
14  CTEST_CMAKE_GENERATOR
15  WITH_MEMCHECK
16  WITH_COVERAGE
17  WITH_DOCUMENTATION
18  CTEST_BUILD_CONFIGURATION
19  CTEST_TEST_TIMEOUT
20  CTEST_BUILD_FLAGS
21  TEST_TO_EXCLUDE_REGEX
22  CTEST_SOURCE_DIRECTORY
23  CTEST_BINARY_DIRECTORY
24  CTEST_BUILD_NAME
25  SCRIPT_MODE
26  CTEST_COVERAGE_COMMAND
27  CTEST_MEMORYCHECK_COMMAND
28  CTEST_GIT_COMMAND
29  PROJECT_BUILD_DIR
30  )
31 
32 foreach(var ${expected_variables})
33  if(NOT DEFINED ${var})
34  message(FATAL_ERROR "Variable ${var} should be defined in top-level script !")
35  endif()
36 endforeach()
37 
38 string(REPLACE " " "%20" _build_name_escaped "${CTEST_BUILD_NAME}")
39 
40 # Check if "mbits" is reachable
41 file(DOWNLOAD "http://mbits" "${CTEST_SCRIPT_DIRECTORY}/mbits.html" TIMEOUT 2 STATUS _status)
42 list(GET _status 0 _status_code)
43 if(_status_code EQUAL 0) # successful completion
44  set(MBITS_AVAILABLE 1)
45 else()
46  set(MBITS_AVAILABLE 0)
47 endif()
48 
49 #
50 # Site specific options
51 #
52 if(NOT CDASH_ADMIN_URL_PREFIX AND MBITS_AVAILABLE)
53  set(CDASH_ADMIN_URL_PREFIX "http://mbits")
54 endif()
55 
56 if(NOT DEFINED GIT_BRANCH OR GIT_BRANCH STREQUAL "")
57  set(GIT_BRANCH "")
58 else()
59  set(GIT_BRANCH "-b ${GIT_BRANCH}")
60 endif()
61 
62 # Should binary directory be cleaned?
63 set(empty_binary_directory FALSE)
64 
65 # Attempt to build and test also if 'ctest_update' returned an error
66 set(initial_force_build FALSE)
67 
68 # Set model options
69 set(model "")
70 if(SCRIPT_MODE STREQUAL "experimental")
71  set(empty_binary_directory FALSE)
72  set(initial_force_build TRUE)
73  set(model Experimental)
74 elseif(SCRIPT_MODE STREQUAL "continuous")
75  set(empty_binary_directory FALSE)
76  set(initial_force_build FALSE)
77  set(model Continuous)
78 elseif(SCRIPT_MODE STREQUAL "nightly")
79  set(empty_binary_directory TRUE)
80  set(initial_force_build TRUE)
81  set(model Nightly)
82 else()
83  message(FATAL_ERROR "Unknown script mode: '${SCRIPT_MODE}'. Script mode should be either 'experimental', 'continuous' or 'nightly'")
84 endif()
85 
86 #message("script_mode:${SCRIPT_MODE}")
87 #message("model:${model}")
88 #message("empty_binary_directory:${empty_binary_directory}")
89 #message("force_build:${initial_force_build}")
90 
91 set(CTEST_CONFIGURATION_TYPE ${CTEST_BUILD_CONFIGURATION})
92 
93 if(empty_binary_directory)
94  message("Clean \"${CTEST_BINARY_DIRECTORY}\"")
95  ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
96 endif()
97 
98 if(NOT DEFINED CTEST_CHECKOUT_DIR)
99  set(CTEST_CHECKOUT_DIR ${CTEST_SOURCE_DIRECTORY})
100 endif()
101 
102 if(NOT EXISTS "${CTEST_CHECKOUT_DIR}")
103  set(CTEST_CHECKOUT_COMMAND "\"${CTEST_GIT_COMMAND}\" clone ${GIT_BRANCH} ${GIT_REPOSITORY} \"${CTEST_CHECKOUT_DIR}\"")
104 endif()
105 
106 set(CTEST_UPDATE_TYPE "git")
107 set(CTEST_UPDATE_COMMAND "${CTEST_GIT_COMMAND}")
108 
109 #----------------------------------------------------------------------
110 # Utility macros
111 #----------------------------------------------------------------------
112 
113 function(func_build_target target build_dir)
114  set(CTEST_BUILD_TARGET ${target})
115  ctest_build(BUILD "${build_dir}" APPEND
116  RETURN_VALUE res
117  NUMBER_ERRORS num_errors
118  NUMBER_WARNINGS num_warnings)
119  ctest_submit(PARTS Build RETRY_DELAY 3 RETRY_COUNT 3)
120 
121  if(num_errors)
122  math(EXPR build_errors "${build_errors} + ${num_errors}")
123  set(build_errors ${build_errors} PARENT_SCOPE)
124  endif()
125  if(num_warnings)
126  math(EXPR build_warnings "${build_warnings} + ${num_warnings}")
127  set(build_warnings ${build_warnings} PARENT_SCOPE)
128  endif()
129 endfunction()
130 
131 function(func_test label build_dir)
132  if(NOT TESTING_PARALLEL_LEVEL)
133  set(TESTING_PARALLEL_LEVEL 8)
134  endif()
135 
136  if(label MATCHES "Unlabeled")
137  set(_include_label EXCLUDE_LABEL .*)
138  else()
139  set(_include_label INCLUDE_LABEL ${label})
140  endif()
141 
142  ctest_test(BUILD "${build_dir}"
143  ${_include_label}
144  PARALLEL_LEVEL ${TESTING_PARALLEL_LEVEL}
145  EXCLUDE ${TEST_TO_EXCLUDE_REGEX}
146  RETURN_VALUE res
147  )
148  ctest_submit(PARTS Test RETRY_DELAY 3 RETRY_COUNT 3)
149 
150  if(res)
151  math(EXPR test_errors "${test_errors} + 1")
152  set(test_errors ${test_errors} PARENT_SCOPE)
153  endif()
154 
155  if(ARG3)
156  set(WITH_COVERAGE ${ARG3})
157  endif()
158  if(ARG4)
159  set(WITH_MEMCHECK ${ARG4})
160  endif()
161 
162  if(WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
163  message("----------- [ Coverage ${label} ] -----------")
164  ctest_coverage(BUILD "${build_dir}" LABELS ${label})
165  ctest_submit(PARTS Coverage RETRY_DELAY 3 RETRY_COUNT 3)
166  endif()
167 
168  if(WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
169  if(NOT CTEST_MEMORYCHECK_SUPPRESSIONS_FILE)
170  if(EXISTS "${CTEST_SOURCE_DIRECTORY}/CMake/valgrind.supp")
171  set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE "${CTEST_SOURCE_DIRECTORY}/CMake/valgrind.supp")
172  endif()
173  endif()
174  if(NOT CTEST_MEMORYCHECK_COMMAND_OPTIONS)
175  set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "-q --tool=memcheck --leak-check=yes --show-reachable=no --show-possibly-lost=no --workaround-gcc296-bugs=yes --num-callers=50")
176  endif()
177  ctest_memcheck(BUILD "${build_dir}" INCLUDE_LABEL ${label})
178  ctest_submit(PARTS MemCheck RETRY_DELAY 3 RETRY_COUNT 3)
179  endif()
180 
181 endfunction()
182 
183 macro(finalize_submission)
184 
185  # Note should be at the end
186  ctest_submit(PARTS Notes RETRY_DELAY 3 RETRY_COUNT 3)
187 
188  # Send status to the "CDash Web Admin"
189  if(CDASH_ADMIN_URL_PREFIX)
190  set(cdash_admin_url "${CDASH_ADMIN_URL_PREFIX}/cdashadmin-web/index.php?pw=4da12ca9c06d46d3171d7f73974c900f")
191  string(REGEX REPLACE ".*\\?project=(.*)&?" "\\1" _ctest_project "${CTEST_DROP_LOCATION}")
192  file(DOWNLOAD
193  "${cdash_admin_url}&action=submit&name=${_build_name_escaped}&hasTestErrors=${test_errors}&hasBuildErrors=${build_errors}&hasBuildWarnings=${build_warnings}&ctestDropSite=${CTEST_DROP_SITE}&ctestProject=${_ctest_project}"
194  "${CTEST_BINARY_DIRECTORY}/cdashadmin.txt"
195  STATUS status
196  )
197  list(GET status 0 error_code)
198  list(GET status 1 error_msg)
199  if(error_code)
200  message(FATAL_ERROR "error: Failed to communicate with cdashadmin-web - ${error_msg}")
201  endif()
202  endif()
203 
204 endmacro()
205 
206 macro(check_for_errors)
207 
208  set(_curr_target ${ARGV0})
209  if(build_errors AND _curr_target)
210  # try to remove the stamp file for external projects
211  set(_stamp_file "${CTEST_BINARY_DIRECTORY}/ep/src/${_curr_target}-stamp/${_curr_target}-configure")
212  if(EXISTS "${_stamp_file}")
213  file(REMOVE "${_stamp_file}")
214  endif()
215  endif()
216 
217  if(build_errors OR test_errors)
218  finalize_submission()
219  # this should return from run_ctest()
220  return()
221  endif()
222 
223 endmacro()
224 
225 #---------------------------------------------------------------------
226 # run_ctest macro
227 #---------------------------------------------------------------------
228 function(run_ctest)
229 
230  set(build_warnings 0)
231  set(build_errors 0)
232  set(test_errors 0)
233 
234  set(force_build ${initial_force_build})
235 
236  ctest_start(${model})
237 
238  if(MITK_EXTENSIONS)
239  foreach(extension ${MITK_EXTENSIONS})
240  if(extension MATCHES "([^|]+)\\|([^|]+)\\|(.+)")
241  set(extension_repo ${CMAKE_MATCH_1})
242  set(extension_tag ${CMAKE_MATCH_2})
243  set(extension_source_dir ${CMAKE_MATCH_3})
244  if(NOT EXISTS "${CTEST_DASHBOARD_ROOT}/${extension_source_dir}")
245  message("Clone ${extension_repo} (${extension_tag})")
246  execute_process(
247  COMMAND ${CTEST_GIT_COMMAND} clone -b ${extension_tag} ${extension_repo} ${extension_source_dir}
248  WORKING_DIRECTORY ${CTEST_DASHBOARD_ROOT})
249  else()
250  set(working_dir "${CTEST_DASHBOARD_ROOT}/${extension_source_dir}")
251  message("Update ${extension_repo} (${extension_tag})")
252  execute_process(
253  COMMAND ${CTEST_GIT_COMMAND} fetch origin ${extension_tag}
254  WORKING_DIRECTORY "${working_dir}"
255  RESULT_VARIABLE exit_code)
256 
257  if(exit_code EQUAL 0)
258  execute_process(
259  COMMAND ${CTEST_GIT_COMMAND} diff --quiet HEAD FETCH_HEAD
260  WORKING_DIRECTORY "${working_dir}"
261  RESULT_VARIABLE exit_code)
262 
263  if(NOT exit_code EQUAL 0)
264  execute_process(
265  COMMAND ${CTEST_GIT_COMMAND} reset --hard FETCH_HEAD
266  WORKING_DIRECTORY "${working_dir}")
267  set(force_build TRUE)
268  endif()
269  else()
270  message(FATAL_ERROR "Could not update ${extension_repo} (${extension_tag})")
271  endif()
272  endif()
273  endif()
274  endforeach()
275  endif()
276 
277  message("Update MITK")
278  ctest_update(SOURCE "${CTEST_CHECKOUT_DIR}" RETURN_VALUE res)
279 
280  if(res LESS 0)
281  # update error
282  math(EXPR build_errors "${build_errors} + 1")
283  endif()
284 
285  # force a build if this is the first run and the build dir is empty
286  if(NOT EXISTS "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt")
287  message("First time build - Initialize CMakeCache.txt")
288  set(res 1)
289 
290  # Write initial cache.
291  if(NOT DEFINED BUILD_TESTING)
292  set(BUILD_TESTING ON)
293  endif()
294 
295  # Write initial cache.
296  file(WRITE "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt" "
297 CTEST_USE_LAUNCHERS:BOOL=${CTEST_USE_LAUNCHERS}
298 CTEST_PROJECT_ADDITIONAL_TARGETS:INTERNAL=${CTEST_PROJECT_ADDITIONAL_TARGETS}
300 MITK_CTEST_SCRIPT_MODE:STRING=${SCRIPT_MODE}
301 CMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION}
302 WITH_COVERAGE:BOOL=${WITH_COVERAGE}
303 MITK_THIRDPARTY_DOWNLOAD_PREFIX_URL:STRING=${MITK_THIRDPARTY_DOWNLOAD_PREFIX_URL}
304 ${INITIAL_CMAKECACHE_OPTIONS}
305 ")
306  endif()
307 
308  if(res GREATER 0 OR force_build)
309 
310  # Clear the forced rerun request
311  if(CDASH_ADMIN_URL_PREFIX AND cdash_remove_rerun_url)
312  file(DOWNLOAD "${cdash_remove_rerun_url}" "${CTEST_BINARY_DIRECTORY}/tmp.txt")
313  file(REMOVE "${CTEST_BINARY_DIRECTORY}/tmp.txt")
314  endif()
315 
316  if(CTEST_PROJECT_NAME_SUPERBUILD)
317  set(ctest_project_name_orig ${CTEST_PROJECT_NAME})
318  set(CTEST_PROJECT_NAME ${CTEST_PROJECT_NAME_SUPERBUILD})
319  endif()
320 
321  message("----------- [ Configure SuperBuild ] -----------")
322 
323  set_property(GLOBAL PROPERTY SubProject SuperBuild)
324  set_property(GLOBAL PROPERTY Label SuperBuild)
325 
326  if(MITK_EXTENSIONS)
327  set(SUPERBUILD_CONFIG_OPTIONS -D MITK_EXTENSION_DIRS:STRING=${MITK_EXTENSION_DIRS})
328  endif()
329 
330  ctest_configure(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res OPTIONS "${SUPERBUILD_CONFIG_OPTIONS}")
331 
332  if(res)
333  math(EXPR build_errors "${build_errors} + 1")
334  endif()
335 
336  # Project.xml is generated during the superbuild configure step
337  ctest_submit(FILES "${CTEST_BINARY_DIRECTORY}/Project.xml" RETRY_DELAY 3 RETRY_COUNT 3)
338 
339  ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}")
340 
341  ctest_submit(PARTS Configure RETRY_DELAY 3 RETRY_COUNT 3)
342 
343  # submit the update results *after* the submitting the Configure info,
344  # otherwise CDash is somehow confused and cannot add the update info
345  # to the superbuild project
346  ctest_submit(PARTS Update RETRY_DELAY 3 RETRY_COUNT 3)
347 
348  check_for_errors()
349 
350  # To get CTEST_PROJECT_SUBPROJECTS and CTEST_PROJECT_EXTERNALS definition
351  include("${CTEST_BINARY_DIRECTORY}/CTestConfigSubProject.cmake")
352 
353  # Read in a list of super-build targets (SUPERBUILD_TARGETS). If an error
354  # occurs in one of the listed projects, the ctest superbuild make step stops
355  # and the error is reported in the dashboard. If this variable would be empty
356  # the errors are still reported but make would keep building external
357  # projects which leads to potentially more errors because of dependencies.
358  set(MITK_SUPERBUILD_TARGETS_FILE "${CTEST_BINARY_DIRECTORY}/SuperBuildTargets.cmake")
359  if(EXISTS "${MITK_SUPERBUILD_TARGETS_FILE}")
360  include("${MITK_SUPERBUILD_TARGETS_FILE}")
361  endif()
362 
363  # Build top level (either all or the supplied targets at
364  # superbuild level
365  if(SUPERBUILD_TARGETS)
366  foreach(superbuild_target ${SUPERBUILD_TARGETS})
367 
368  message("----------- [ Build ${superbuild_target} - SuperBuild ] -----------")
369  func_build_target(${superbuild_target} "${CTEST_BINARY_DIRECTORY}")
370  check_for_errors(${superbuild_target})
371 
372  # runs only tests that have a LABELS property matching "SuperBuild"
373  func_test("SuperBuild" "${CTEST_BINARY_DIRECTORY}")
374  check_for_errors()
375  endforeach()
376 
377  # HACK Unfortunately ctest_coverage ignores the build argument, back-up the original dirs
378  file(READ "${CTEST_BINARY_DIRECTORY}/CMakeFiles/TargetDirectories.txt" old_coverage_dirs)
379 
380  # explicitly build requested external projects as subprojects
381  foreach(external_project_with_build_dir ${CTEST_PROJECT_EXTERNALS})
382 
383  string(REPLACE "^^" ";" external_project_with_build_dir_list "${external_project_with_build_dir}")
384  list(GET external_project_with_build_dir_list 0 external_project_name)
385  list(GET external_project_with_build_dir_list 1 external_project_builddir)
386 
387  set_property(GLOBAL PROPERTY SubProject ${external_project_name})
388  set_property(GLOBAL PROPERTY Label ${external_project_name})
389 
390  message("----------- [ Build ${external_project_name} ] -----------")
391 
392  func_build_target("${external_project_name}" "${CTEST_BINARY_DIRECTORY}")
393  check_for_errors()
394 
395  # HACK Unfortunately ctest_coverage ignores the build argument, try to force it...
396  file(READ "${CTEST_BINARY_DIRECTORY}/${external_project_builddir}/CMakeFiles/TargetDirectories.txt" mitk_build_coverage_dirs)
397  file(APPEND "${CTEST_BINARY_DIRECTORY}/CMakeFiles/TargetDirectories.txt" "${mitk_build_coverage_dirs}")
398 
399  message("----------- [ Test ${external_project_name} ] -----------")
400 
401  # runs only tests that have a LABELS property matching "${external_project_name}"
402  func_test(${external_project_name} "${CTEST_BINARY_DIRECTORY}/${external_project_builddir}")
403 
404  # restore old coverage dirs
405  file(WRITE "${CTEST_BINARY_DIRECTORY}/CMakeFiles/TargetDirectories.txt" "${old_coverage_dirs}")
406 
407  endforeach()
408 
409  # switch back to SuperBuild label
410  set_property(GLOBAL PROPERTY SubProject SuperBuild)
411  set_property(GLOBAL PROPERTY Label SuperBuild)
412 
413  message("----------- [ Finish SuperBuild ] -----------")
414  else()
415  message("----------- [ Build SuperBuild ] -----------")
416  endif()
417 
418  # build everything at superbuild level which has not yet been built
419  func_build_target("" "${CTEST_BINARY_DIRECTORY}")
420  check_for_errors()
421 
422  # runs only tests that have a LABELS property matching "SuperBuild"
423  #func_test("SuperBuild" "${CTEST_BINARY_DIRECTORY}")
424 
425  set(build_dir "${CTEST_BINARY_DIRECTORY}/${PROJECT_BUILD_DIR}")
426  if(CTEST_PROJECT_NAME_SUPERBUILD)
427  set(CTEST_PROJECT_NAME ${ctest_project_name_orig})
428  endif()
429 
430  message("----------- [ Configure ${build_dir} ] -----------")
431  # Configure target
432  ctest_configure(BUILD "${build_dir}"
433  OPTIONS "-DCTEST_USE_LAUNCHERS=${CTEST_USE_LAUNCHERS}"
434  RETURN_VALUE res
435  )
436  ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}")
437  ctest_submit(PARTS Configure RETRY_DELAY 3 RETRY_COUNT 3)
438 
439  if(res)
440  math(EXPR build_errors "${build_errors} + 1")
441  endif()
442  check_for_errors()
443 
444  foreach(subproject ${CTEST_PROJECT_SUBPROJECTS})
445  set_property(GLOBAL PROPERTY SubProject ${subproject})
446  set_property(GLOBAL PROPERTY Label ${subproject})
447 
448  if(subproject MATCHES "Unlabeled")
449  message("----------- [ Build All (Unlabeled) ] -----------")
450  # Build target
451  func_build_target("" "${build_dir}")
452  else()
453  message("----------- [ Build ${subproject} ] -----------")
454  # Build target
455  func_build_target(${subproject} "${build_dir}")
456  endif()
457  check_for_errors()
458  endforeach()
459 
460  # HACK Unfortunately ctest_coverage ignores the build argument, try to force it...
461  file(READ ${build_dir}/CMakeFiles/TargetDirectories.txt mitk_build_coverage_dirs)
462  file(APPEND "${CTEST_BINARY_DIRECTORY}/CMakeFiles/TargetDirectories.txt" "${mitk_build_coverage_dirs}")
463 
464  foreach(subproject ${CTEST_PROJECT_SUBPROJECTS})
465  set_property(GLOBAL PROPERTY SubProject ${subproject})
466  set_property(GLOBAL PROPERTY Label ${subproject})
467  message("----------- [ Test ${subproject} ] -----------")
468 
469  # runs only tests that have a LABELS property matching "${subproject}"
470  func_test(${subproject} "${build_dir}")
471  endforeach()
472 
473  # Build any additional target which is not build by "all"
474  # i.e. the "package" target
475  if(CTEST_PROJECT_ADDITIONAL_TARGETS)
476  foreach(additional_target ${CTEST_PROJECT_ADDITIONAL_TARGETS})
477  set_property(GLOBAL PROPERTY SubProject ${additional_target})
478  set_property(GLOBAL PROPERTY Label ${additional_target})
479 
480  message("----------- [ Build ${additional_target} ] -----------")
481  func_build_target(${additional_target} "${build_dir}")
482  check_for_errors()
483 
484  message("----------- [ Test ${additional_target} ] -----------")
485  # runs only tests that have a LABELS property matching "${subproject}"
486  func_test(${additional_target} "${build_dir}")
487  endforeach()
488  endif()
489 
490  if(WITH_DOCUMENTATION)
491  message("----------- [ Build Documentation ] -----------")
492  set(ctest_use_launchers_orig ${CTEST_USE_LAUNCHERS})
493  set(CTEST_USE_LAUNCHERS 0)
494  # Build Documentation target
495  set_property(GLOBAL PROPERTY SubProject Documentation)
496  set_property(GLOBAL PROPERTY Label Documentation)
497  func_build_target("doc" "${build_dir}")
498  set(CTEST_USE_LAUNCHERS ${ctest_use_launchers_orig})
499  endif()
500 
501  set_property(GLOBAL PROPERTY SubProject SuperBuild)
502  set_property(GLOBAL PROPERTY Label SuperBuild)
503 
504  # Global coverage ...
505  if(WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
506  message("----------- [ Global coverage ] -----------")
507  ctest_coverage(BUILD "${build_dir}" APPEND)
508  ctest_submit(PARTS Coverage RETRY_DELAY 3 RETRY_COUNT 3)
509  endif()
510 
511  # Global dynamic analysis ...
512  if(WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
513  message("----------- [ Global memcheck ] -----------")
514  ctest_memcheck(BUILD "${build_dir}")
515  ctest_submit(PARTS MemCheck RETRY_DELAY 3 RETRY_COUNT 3)
516  endif()
517 
518  check_for_errors()
519  finalize_submission()
520 
521  endif()
522 
523  # Clear the CTEST_CHECKOUT_COMMAND variable to prevent continuous clients
524  # to try to checkout again
525  set(CTEST_CHECKOUT_COMMAND "")
526 
527 endfunction()
528 
529 run_ctest()
Follow Up Storage - Class to facilitate loading/accessing structured follow-up data.
Definition: testcase.h:28
static void Update(vtkPolyData *)
Definition: mitkSurface.cpp:31
#define BUILD_TESTING
static mitk::PlanarFigure::Pointer Clone(mitk::PlanarFigure::Pointer original)