CMakeLists.txt 21.1 KB
Newer Older
1
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
2

3 4 5 6 7 8 9
option(VTK_ENABLE_KITS "Build VTK using kits instead of modules." OFF)
mark_as_advanced(VTK_ENABLE_KITS)
if(VTK_ENABLE_KITS)
  # Kits use INTERFACE libraries which were introduced in 3.0.
  cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
endif()

10 11 12
foreach(p
    CMP0020 # CMake 2.8.11
    CMP0022 # CMake 2.8.12
13
    CMP0025 # CMake 3.0
14
    CMP0053 # CMake 3.1
15
    CMP0054 # CMake 3.1
16
    CMP0063 # CMake 3.3
17 18 19 20 21
    )
  if(POLICY ${p})
    cmake_policy(SET ${p} NEW)
  endif()
endforeach()
22

23 24 25 26 27 28 29
# Set a consistent MACOSX_RPATH default across all CMake versions.
# When CMake 2.8.12 is required, change this default to 1.
# When CMake 3.0.0 is required, remove this block (see CMP0042).
if(NOT DEFINED CMAKE_MACOSX_RPATH)
  set(CMAKE_MACOSX_RPATH 0)
endif()

30 31 32 33
if(CMAKE_SYSTEM_NAME STREQUAL "Android" AND CMAKE_VERSION VERSION_LESS 3.7)
  message(FATAL_ERROR "CMake 3.7 or above is required to build for Android")
endif()

34
project(VTK)
35

36 37 38 39 40 41 42 43
if (NOT CMAKE_VERSION VERSION_LESS "3.1")
  option(VTK_USE_CXX11_FEATURES "Build VTK using C++11 features (if available)"
         OFF)
else()
  set(VTK_USE_CXX11_FEATURES OFF)
endif()
if (VTK_USE_CXX11_FEATURES)
  set(CMAKE_CXX_STANDARD 11)
44 45
  set(CMAKE_CXX_STANDARD_REQUIRED True)
  set(CMAKE_CXX_EXTENSIONS False)
46 47
endif()

48 49 50 51 52
# Objective-C++ compile flags.
# CMake has no equivalent of CMAKE_CXX_FLAGS for Objective-C++ (bug #4756)
# so we provide this in case the user needs to specify flags specifically
# for Objective-C++ source files.  For example, to build with garbage
# collection support, the -fobjc-gc flag would be used.
53
IF(APPLE)
54
  SET(VTK_OBJCXX_FLAGS_DEFAULT "")
55 56
  SET(VTK_REQUIRED_OBJCXX_FLAGS ${VTK_OBJCXX_FLAGS_DEFAULT} CACHE STRING "Extra flags for Objective-C++ compilation")
  MARK_AS_ADVANCED(VTK_REQUIRED_OBJCXX_FLAGS)
57
ENDIF()
58

59 60 61 62
set(VTK_CMAKE_DIR "${VTK_SOURCE_DIR}/CMake")
set(CMAKE_MODULE_PATH ${VTK_CMAKE_DIR} ${CMAKE_MODULE_PATH})

include(vtkModuleMacros)
Brad King's avatar
Brad King committed
63
include(vtkExternalData)
64

65 66 67 68 69 70 71 72 73 74 75 76
#-----------------------------------------------------------------------------
# Forbid downloading resources from the network during a build. This helps
# when building on systems without network connectivity to determine which
# resources much be obtained manually and made available to the build.
option(VTK_FORBID_DOWNLOADS "Do not download source code or data from the network" OFF)
mark_as_advanced(VTK_FORBID_DOWNLOADS)
macro(vtk_download_attempt_check _name)
  if(VTK_FORBID_DOWNLOADS)
    message(SEND_ERROR "Attempted to download ${_name} when VTK_FORBID_DOWNLOADS is ON")
  endif()
endmacro()

77 78 79 80 81 82 83 84 85
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  message(STATUS "Setting build type to 'Debug' as none was specified.")
  set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
  # Set the possible values of build type for cmake-gui
  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
    "MinSizeRel" "RelWithDebInfo")
endif()

86
# Test input data staging directory.
87 88
file(RELATIVE_PATH vtk_reldir "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
set(VTK_TEST_DATA_DIR "${ExternalData_BINARY_ROOT}/${vtk_reldir}/Testing")
89

90 91 92
# Test input data directory.
set(VTK_TEST_INPUT_DIR "${VTK_SOURCE_DIR}/Testing/Data")

93 94 95
# Test output directory.
set(VTK_TEST_OUTPUT_DIR "${VTK_BINARY_DIR}/Testing/Temporary")

96 97
# Set up our directory structure for output libraries and binaries
if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
98
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${VTK_BINARY_DIR}/bin")
99 100 101
endif()
if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
  if(UNIX)
102
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${VTK_BINARY_DIR}/lib")
103
  else()
104
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${VTK_BINARY_DIR}/bin")
105 106 107
  endif()
endif()
if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
108
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${VTK_BINARY_DIR}/lib")
109 110 111 112 113 114
endif()
mark_as_advanced(CMAKE_RUNTIME_OUTPUT_DIRECTORY
  CMAKE_LIBRARY_OUTPUT_DIRECTORY
  CMAKE_ARCHIVE_OUTPUT_DIRECTORY
  )

115 116 117 118
include(vtkVersion)
set(VTK_VERSION
    "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}.${VTK_BUILD_VERSION}")

Ken Martin's avatar
Ken Martin committed
119 120 121 122
#-----------------------------------------------------------------------------
# Do we want examples built?
OPTION(BUILD_EXAMPLES "Build VTK examples." OFF)

123 124 125 126 127 128 129 130 131 132 133
#-----------------------------------------------------------------------------
if(NOT EXISTS "${VTK_SOURCE_DIR}/.ExternalData/README.rst")
  # This file is always present in version-controlled source trees
  # so we must have been extracted from a source tarball with no
  # data objects needed for testing.  Turn off tests by default
  # since enabling them requires network access or manual data
  # store configuration.
  option(BUILD_TESTING "Build the testing tree." OFF)
endif()
include(CTest)

134 135 136 137 138 139
option(VTK_IOS_BUILD "Build vtk.framework for iOS" OFF)
if (VTK_IOS_BUILD)
  include(vtkiOS)
  return()
endif()

Tim Thirion's avatar
Tim Thirion committed
140 141 142 143 144 145
option(VTK_ANDROID_BUILD "Build VTK for Android" OFF)
if (VTK_ANDROID_BUILD)
  include(vtkAndroid)
  return()
endif()

Ken Martin's avatar
Ken Martin committed
146 147
# some specific defaults for Andriod to give folks
# a reasonable starting point
Ken Martin's avatar
Ken Martin committed
148
if (ANDROID OR APPLE_IOS)
Ken Martin's avatar
Ken Martin committed
149 150 151 152 153 154 155 156 157
  SET( CMAKE_REQUIRE_LARGE_FILE_SUPPORT 2
       CACHE STRING "Result from TRY_RUN" FORCE)
  SET( CMAKE_REQUIRE_LARGE_FILE_SUPPORT__TRYRUN_OUTPUT ""
       CACHE STRING "Output from TRY_RUN" FORCE)
  SET( KWSYS_LFS_WORKS 2
     CACHE STRING "Result from TRY_RUN" FORCE)
  SET( KWSYS_LFS_WORKS__TRYRUN_OUTPUT ""
     CACHE STRING "Output from TRY_RUN" FORCE)

158
  # need int version for CPP
159
  if (OPENGL_ES_VERSION STREQUAL "2.0")
160 161
    set(OPENGL_ES_VERSION_INT 20)
  endif()
162
  if (OPENGL_ES_VERSION STREQUAL "3.0")
163 164 165
    set(OPENGL_ES_VERSION_INT 30)
  endif()

Ken Martin's avatar
Ken Martin committed
166
  if (APPLE_IOS)
167
    unset(OPENGL_INCLUDE_DIR CACHE)
168
    if (OPENGL_ES_VERSION STREQUAL "2.0")
169 170 171
      find_path(OPENGL_INCLUDE_DIR ES2/gl.h
                ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks/OpenGLES.framework/Headers
                ${_OPENGL_INCLUDE_DIR})
172
    elseif (OPENGL_ES_VERSION STREQUAL "3.0")
173 174 175 176
      find_path(OPENGL_INCLUDE_DIR ES3/gl.h
                ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks/OpenGLES.framework/Headers
                ${_OPENGL_INCLUDE_DIR})
    endif()
Ken Martin's avatar
Ken Martin committed
177 178 179 180 181 182
    find_library(OPENGL_gl_LIBRARY
       NAMES OpenGLES
       PATHS
         ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks
         ${_OPENGL_LIB_PATH}
       )
Tim Thirion's avatar
Tim Thirion committed
183 184 185 186 187
  elseif (ANDROID)
    unset(OPENGL_INCLUDE_DIR CACHE)
    unset(OPENGL_gl_LIBRARY CACHE)
    unset(OPENGL_egl_LIBRARY CACHE)

188 189 190 191 192 193
    if (OPENGL_ES_VERSION STREQUAL "2.0")
      find_path(OPENGL_INCLUDE_DIR GLES2/gl2.h)
      find_library(OPENGL_gl_LIBRARY NAMES GLESv2)
    elseif (OPENGL_ES_VERSION STREQUAL "3.0")
      find_path(OPENGL_INCLUDE_DIR GLES3/gl3.h)
      find_library(OPENGL_gl_LIBRARY NAMES GLESv3)
Tim Thirion's avatar
Tim Thirion committed
194
    endif()
195
    find_library(OPENGL_egl_LIBRARY NAMES EGL)
Ken Martin's avatar
Ken Martin committed
196
  endif()
Ken Martin's avatar
Ken Martin committed
197 198 199
else()
  # Choose static or shared libraries.
  option(BUILD_SHARED_LIBS "Build VTK with shared libraries." ON)
Ken Martin's avatar
Ken Martin committed
200 201
endif()

Ken Martin's avatar
Ken Martin committed
202 203
# default to not using the system GLEW as ours has fixes in it right now
set(VTK_USE_SYSTEM_GLEW OFF CACHE BOOL "do not use a system glew" FORCE)
204

205
set(VTK_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
206

207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
#-----------------------------------------------------------------------------
# VTK installation structure
if(NOT VTK_INSTALL_RUNTIME_DIR)
  set(VTK_INSTALL_RUNTIME_DIR bin)
endif()
if(NOT VTK_INSTALL_LIBRARY_DIR)
  set(VTK_INSTALL_LIBRARY_DIR lib)
endif()
if(NOT VTK_INSTALL_ARCHIVE_DIR)
  set(VTK_INSTALL_ARCHIVE_DIR lib)
endif()
if(NOT VTK_INSTALL_INCLUDE_DIR)
  set(VTK_INSTALL_INCLUDE_DIR include/vtk-${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION})
endif()
if(NOT VTK_INSTALL_DATA_DIR)
  set(VTK_INSTALL_DATA_DIR share/vtk-${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION})
endif()
if(NOT VTK_INSTALL_DOC_DIR)
  set(VTK_INSTALL_DOC_DIR share/doc/vtk-${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION})
endif()
if(NOT VTK_INSTALL_PACKAGE_DIR)
  set(VTK_INSTALL_PACKAGE_DIR "lib/cmake/vtk-${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
endif()
230 231 232
if(NOT VTK_INSTALL_DOXYGEN_DIR)
  set(VTK_INSTALL_DOXYGEN_DIR ${VTK_INSTALL_DOC_DIR}/doxygen)
endif()
233 234 235 236 237 238 239
if(NOT VTK_INSTALL_TCL_DIR)
  # tclsh searches <prefix>/lib/tcltk and its subdirectories for pkgIndex.tcl files
  set(VTK_INSTALL_TCL_DIR lib/tcltk/vtk-${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION})
endif()
if(NOT VTK_INSTALL_EXPORT_NAME)
  set(VTK_INSTALL_EXPORT_NAME VTKTargets)
endif()
240 241 242
if(NOT VTK_MODULES_DIR)
  set(VTK_MODULES_DIR "${VTK_BINARY_DIR}/${VTK_INSTALL_PACKAGE_DIR}/Modules")
endif()
Zach's avatar
Zach committed
243 244 245
if(NOT VTK_WWW_DIR)
  set(VTK_WWW_DIR "${VTK_BINARY_DIR}/www")
endif()
246 247 248 249 250
if(NOT VTK_INSTALL_PYTHON_MODULE_DIR)
  set (VTK_INSTALL_PYTHON_MODULE_DIR "-NOTFOUND" CACHE
       PATH "Directory where python modules will be installed")
  mark_as_advanced(VTK_INSTALL_PYTHON_MODULE_DIR)
endif()
251 252 253 254 255
if(NOT VTK_BUILD_PYTHON_MODULE_DIR)
  set (VTK_BUILD_PYTHON_MODULE_DIR "-NOTFOUND" CACHE
       PATH "Directory where python modules will be put inside the build tree")
  mark_as_advanced(VTK_BUILD_PYTHON_MODULE_DIR)
endif()
256 257 258 259 260
if (CMAKE_CROSSCOMPILING AND NOT COMPILE_TOOLS_IMPORTED)
  # if CMAKE_CROSSCOMPILING is true, we need to import build-tools targets.
  find_package(VTKCompileTools REQUIRED)
  set (COMPILE_TOOLS_IMPORTED TRUE)
endif()
Alexander Neundorf's avatar
 
Alexander Neundorf committed
261

262 263 264 265
#-----------------------------------------------------------------------------
# Add the Remote Subdirectory
add_subdirectory(Remote)

266 267 268 269 270
#-----------------------------------------------------------------------------
# Do we try to use system libraries by default?
option(VTK_USE_SYSTEM_LIBRARIES "Use the system's libraries by default." OFF)
mark_as_advanced(VTK_USE_SYSTEM_LIBRARIES)

271
#-----------------------------------------------------------------------------
272 273
# The third party macros are still used in one or two third party builds.
include(vtkThirdParty)
274

275
#-----------------------------------------------------------------------------
276 277
include(vtkCompilerExtras)
include(vtkBuildPath)
278

279 280 281 282 283 284 285
#-----------------------------------------------------------------------------
if(APPLE)
  mark_as_advanced(
    CMAKE_OSX_ARCHITECTURES
    CMAKE_OSX_DEPLOYMENT_TARGET
    CMAKE_OSX_SYSROOT
    )
286

287 288
  if (CMAKE_OSX_DEPLOYMENT_TARGET AND
      CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.6)
289 290
    message(FATAL_ERROR "Minimun OS X deployment target is 10.6, please update CMAKE_OSX_DEPLOYMENT_TARGET.")
  endif ()
291 292
endif()

293 294 295 296 297 298 299
#-----------------------------------------------------------------------------
# Minimum compiler version check: GCC >= 4.2
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
    CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.2)
  message(FATAL_ERROR "GCC 4.2 or later is required.")
endif ()

300
#-----------------------------------------------------------------------------
301
# Minimum compiler version check: LLVM Clang >= 3.0
302
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
303 304
    CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.0)
  message(FATAL_ERROR "LLVM Clang 3.0 or later is required.")
305 306 307
endif ()

#-----------------------------------------------------------------------------
308
# Minimum compiler version check: Apple Clang >= 3.0 (Xcode 4.2)
309
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND
310 311
    CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.0)
  message(FATAL_ERROR "Apple Clang 3.0 or later is required.")
312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
endif ()

#-----------------------------------------------------------------------------
# Minimum compiler version check: Microsoft C/C++ >= 15.0 (aka VS 2008 aka VS 9.0)
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND
    CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15.0)
  message(FATAL_ERROR "Microsoft Visual Studio 2008 or later is required.")
endif ()

#-----------------------------------------------------------------------------
# Minimum compiler version check: Intel C++ (ICC) >= 10.0
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND
    CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
  message(FATAL_ERROR "Intel C++ (ICC) 10.0 or later is required.")
endif ()

328 329
#-----------------------------------------------------------------------------
# Does VTK require support for 64 bit file systems
330
INCLUDE(CheckCXXSourceRuns)
331 332 333
FILE(READ "${VTK_CMAKE_DIR}/vtkRequireLargeFilesSupport.cxx"
  VTK_REQUIRE_LARGE_FILE_SUPPORT_FILE)
CHECK_CXX_SOURCE_RUNS("${VTK_REQUIRE_LARGE_FILE_SUPPORT_FILE}"
Alexander Neundorf's avatar
 
Alexander Neundorf committed
334 335
  CMAKE_REQUIRE_LARGE_FILE_SUPPORT "Support for 64 bit file systems")
SET(VTK_REQUIRE_LARGE_FILE_SUPPORT ${CMAKE_REQUIRE_LARGE_FILE_SUPPORT})
336

337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
#-----------------------------------------------------------------------------
# Does the const_reverse_iterator have the comparison operators? They were not
# present in older versions of gcc (ex: Apple fork of gcc 4.2).
include(CheckCXXSourceCompiles)
set(VTK_CONST_REVERSE_ITERATOR_COMPARISON_FILE
"#include <vector>
int main()
{
  std::vector<int> test;
  std::vector<int>::const_reverse_iterator it = test.rbegin();
  it != test.rend();
  return 0;
}")
check_cxx_source_compiles("${VTK_CONST_REVERSE_ITERATOR_COMPARISON_FILE}"
  VTK_CONST_REVERSE_ITERATOR_COMPARISON)

353 354
#-----------------------------------------------------------------------------
# Provide compatibility options.
355
option(VTK_LEGACY_REMOVE "Remove all legacy code completely." OFF)
356 357
option(VTK_LEGACY_SILENT "Silence all legacy code messages." OFF)
mark_as_advanced(VTK_LEGACY_REMOVE VTK_LEGACY_SILENT)
358

359
#-----------------------------------------------------------------------------
360 361
# VTK requires special compiler flags on some platforms.
include(vtkDetermineCompilerFlags)
362

363 364
# Tell VTK source files they are being built inside VTK.
add_definitions(-DVTK_IN_VTK)
365

366
#-----------------------------------------------------------------------------
367 368 369
if(BUILD_TESTING)
  include(vtkLegacyData)
endif()
370

371 372
# Provide an option for tests requiring "large" input data
option(VTK_USE_LARGE_DATA "Enable tests requiring \"large\" data" OFF)
373

374
#-----------------------------------------------------------------------------
375
# Platform configuration tests.
376
include(TestBigEndian)
377
TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)
378 379 380 381 382 383

include(FindThreads)
set(VTK_USE_WIN32_THREADS 0)
set(VTK_USE_PTHREADS 0)
set(VTK_HP_PTHREADS 0)
set(VTK_USE_SPROC 0)
384 385 386
# if win32 threads and pthreads are available figure out which
# one the compiler is setup to use.  If you can not figure it
# out default to pthreads.
387
if(CMAKE_USE_PTHREADS_INIT AND CMAKE_USE_WIN32_THREADS_INIT)
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406
  if(DEFINED VTK_THREAD_MODEL)
    set(output "${VTK_THREAD_MODEL}")
  else()
    execute_process(COMMAND "${CMAKE_C_COMPILER}" -v OUTPUT_VARIABLE output
      ERROR_VARIABLE output RESULT_VARIABLE result TIMEOUT 10)
  endif()
  if(output MATCHES "Thread model: posix")
    set(VTK_THREAD_MODEL "Thread model: posix" CACHE STRING
      "Thread model used by gcc.")
    set(CMAKE_USE_WIN32_THREADS_INIT 0)
  elseif(output MATCHES "Thread model: win32")
    set(VTK_THREAD_MODEL "Thread model: win32" CACHE STRING
      "Thread model used by gcc.")
    set(CMAKE_USE_PTHREADS_INIT 0)
  else()
    set(VTK_THREAD_MODEL "Thread model: posix" CACHE STRING
      "Thread model used by gcc.")
    set(CMAKE_USE_WIN32_THREADS_INIT 0)
  endif()
407
endif()
408
mark_as_advanced(VTK_THREAD_MODEL)
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425
if(CMAKE_USE_WIN32_THREADS_INIT)
  set(VTK_USE_WIN32_THREADS 1)
  set(CMAKE_THREAD_LIBS_INIT "")
elseif(CMAKE_USE_PTHREADS_INIT)
  set(VTK_USE_PTHREADS 1)
  if(CMAKE_HP_PTHREADS_INIT)
    set(VTK_HP_PTHREADS 1)
  endif()
elseif(CMAKE_USE_SPROC_INIT)
  set(VTK_USE_SPROC 1)
endif()
set(CMAKE_THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}" CACHE STRING "Thread library used.")
mark_as_advanced(CMAKE_THREAD_LIBS)
set(VTK_MAX_THREADS "64" CACHE STRING
  "Max number of threads vktMultiThreader will allocate.")
mark_as_advanced(VTK_MAX_THREADS)

426
include(CheckTypeSize)
Ken Martin's avatar
Ken Martin committed
427

Alexander Neundorf's avatar
 
Alexander Neundorf committed
428
# Socket tests etc.
429
#INCLUDE(Parallel/VTKParallelCMakeTests.cmake)
430

431
# Test for atomics and other compiler intrinsics
432
include(vtkTestBuiltins)
433

434 435
#-----------------------------------------------------------------------------
# Dispatch the build into the proper subdirectories.
436
SET(VTK_HAS_EXODUS 1)
437

Alexander Neundorf's avatar
 
Alexander Neundorf committed
438 439
#-----------------------------------------------------------------------------
# Configure files with settings for use by the build.
440

441 442 443 444 445 446
# Include the sockets test.
# FIXME: The test should be moved and rewritten.
include(VTKParallelCMakeTests)

# Add the option for build the Python wrapping to VTK.
option(VTK_WRAP_PYTHON "Should VTK Python wrapping be built?" OFF)
447
set(VTK_PYTHON_VERSION 2 CACHE STRING
448
    "Python version to use: 2, 2.x, 3, 3.x, or empty")
449 450 451 452

# Add the option for build the Python wrapping to VTK.
option(VTK_WRAP_JAVA "Should VTK Java wrapping be built?" OFF)

453 454 455 456 457 458 459 460
# Force reset of hints file location in cache if it was moved
if(VTK_WRAP_HINTS)
  if(NOT EXISTS ${VTK_WRAP_HINTS})
    set(VTK_WRAP_HINTS "VTK_WRAP_HINTS-NOTFOUND")
  endif()
endif()

find_file(VTK_WRAP_HINTS hints ${VTK_SOURCE_DIR}/Wrapping/Tools
461 462 463
  NO_CMAKE_FIND_ROOT_PATH)
mark_as_advanced(VTK_WRAP_HINTS)

464 465
if(BUILD_TESTING OR VTK_WRAP_PYTHON)
  # Need PYTHON_EXECUTABLE for HeaderTesting or python wrapping
466
  find_package(PythonInterp ${VTK_PYTHON_VERSION} QUIET)
467
  mark_as_advanced(PYTHON_EXECUTABLE)
468 469 470
endif()

if(VTK_WRAP_PYTHON)
471 472
  set(VTK_WRAP_PYTHON_EXE vtkWrapPython)
  set(VTK_WRAP_PYTHON_INIT_EXE vtkWrapPythonInit)
473 474
  # Force the WrappingPythonCore module to on if wrapping is on
  set(Module_vtkWrappingPythonCore ON CACHE BOOL "Core Python wrapping library"
475 476
    FORCE)
else()
477 478
  # if wrapping is not on then force WrappingPythonCore module to be off
  set(Module_vtkWrappingPythonCore OFF CACHE BOOL "Core Python wrapping library"
479
    FORCE)
480
endif()
481

482
if(VTK_WRAP_JAVA)
483
  set(VTK_WRAP_JAVA3_INIT_DIR "${VTK_SOURCE_DIR}/Wrapping/Java")
484
  # Wrapping executables.
485 486
  set(VTK_WRAP_JAVA_EXE  vtkWrapJava)
  set(VTK_PARSE_JAVA_EXE vtkParseJava)
487
  set(Module_vtkWrappingJava ON CACHE BOOL "Core Java wrapping library"
488
    FORCE)
489 490

  # Java package location.
491
  set(VTK_JAVA_JAR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vtk.jar)
492 493 494
  set(VTK_JAVA_HOME ${VTK_BINARY_DIR}/java/vtk)
  file(MAKE_DIRECTORY ${VTK_JAVA_HOME})
else()
495
  set(Module_vtkWrappingJava OFF CACHE BOOL "Core Java wrapping library"
496 497
    FORCE)
endif()
Alexander Neundorf's avatar
 
Alexander Neundorf committed
498

499 500 501 502 503 504 505 506
# Now for Tcl wrapping.
option(VTK_WRAP_TCL "Should VTK Tcl wrapping be built?" OFF)
if(VTK_WRAP_TCL)
  set(VTK_WRAP_TCL_EXE vtkWrapTcl)
  set(VTK_WRAP_TCL_INIT_EXE vtkWrapTclInit)
  set(VTK_TCL_EXE vtk)
  # Tcl package location.
  set(VTK_TCL_HOME ${VTK_BINARY_DIR}/Wrapping/Tcl)
507 508 509 510 511 512 513
  # Force the WrappingTcl module to on if wrapping is on
  set(Module_vtkWrappingTcl ON CACHE BOOL "Core Tcl wrapping library"
    FORCE)
else()
  # if wrapping is not on then force WrappingTcl module to be off
  set(Module_vtkWrappingTcl OFF CACHE BOOL "Core Tcl wrapping library"
    FORCE)
514
endif()
Alexander Neundorf's avatar
 
Alexander Neundorf committed
515

516 517 518
if(VTK_WRAP_PYTHON OR VTK_WRAP_TCL OR VTK_WRAP_JAVA)
  set(VTK_WRAP_HIERARCHY_EXE vtkWrapHierarchy)
endif()
519

520 521 522 523
# This is not normally necessary, but could be desirable in some circumstances.
option(VTK_MAKE_INSTANTIATORS "Should all modules build instantiators" OFF)
mark_as_advanced(VTK_MAKE_INSTANTIATORS)

524
#----------------------------------------------------------------------
525
# Load the module DAG, assess all modules etc.
526
include(vtkModuleTop)
527

528 529 530 531 532
# Now build the Python wrapping if necessary.
if(VTK_WRAP_PYTHON)
  add_subdirectory(Wrapping/Python)
endif()

533 534 535 536
if(BUILD_TESTING)
  add_subdirectory(Testing/Install)
endif()

537 538 539 540
if(BUILD_EXAMPLES)
  add_subdirectory(Examples)
endif()

541 542 543 544 545 546
# The doxygen documentation needs to be aware of all modules.
option(BUILD_DOCUMENTATION "Build the VTK documentation" OFF)
if(BUILD_DOCUMENTATION)
  add_subdirectory(Utilities/Doxygen)
endif()

547 548 549 550 551 552 553
# If python wrapping and testing is enabled then add driver scripts to run
# tests.  Note: Many pythong tests used to be automatically converted from TCL
# scripts. Hence the name vtkTclTest2Py
if(BUILD_TESTING AND VTK_WRAP_PYTHON)
  add_subdirectory(Utilities/vtkTclTest2Py)
endif()

554 555 556 557 558 559 560 561
# Configure the CTestCustom.cmake file now that everything is done.
set(memcheck_excluded_tests "  # These tests do not run any VTK code\n")
foreach(vtk-module ${VTK_MODULES_ALL})
  set(memcheck_excluded_tests
    "${memcheck_excluded_tests}  ${vtk-module}-HeaderTest\n")
endforeach()
configure_file("${VTK_CMAKE_DIR}/CTestCustom.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake" @ONLY)
562 563 564

#-----------------------------------------------------------------------------
# Export all targets at once from the build tree in their final configuration.
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579
get_property(_vtk_targets GLOBAL PROPERTY VTK_TARGETS)
get_property(_vtk_compiletools_targets GLOBAL PROPERTY VTK_COMPILETOOLS_TARGETS)
set (_vtk_all_targets ${_vtk_targets} ${_vtk_compiletools_targets})
if (_vtk_all_targets)
  list(REMOVE_DUPLICATES _vtk_all_targets)
  export(TARGETS ${_vtk_all_targets} FILE ${VTK_BINARY_DIR}/VTKTargets.cmake)
endif()
# Add a virtual target that can be used to build all compile tools.
add_custom_target(vtkCompileTools)
if (_vtk_compiletools_targets)
  list(REMOVE_DUPLICATES _vtk_compiletools_targets)
  export(TARGETS ${_vtk_compiletools_targets}
         FILE ${VTK_BINARY_DIR}/VTKCompileToolsConfig.cmake)
  add_dependencies(vtkCompileTools ${_vtk_compiletools_targets})
endif()
580

581 582 583
unset(_vtk_targets)
unset(_vtk_compiletools_targets)
unset(_vtk_all_targets)
Brad King's avatar
Brad King committed
584 585 586 587

# Create target to download data from the VTKData group.  This must come after
# all tests have been added that reference the group, so we put it last.
ExternalData_Add_Target(VTKData)
588 589 590 591 592 593 594 595
if(VTK_DATA_EXCLUDE_FROM_ALL)
  set_property(TARGET VTKData PROPERTY EXCLUDE_FROM_ALL 1)
  if(BUILD_TESTING AND NOT VTK_DATA_EXCLUDE_FROM_ALL_NO_WARNING)
    message(WARNING "VTK_DATA_EXCLUDE_FROM_ALL is ON so test data "
      "(needed because BUILD_TESTING is ON) may not be available "
      "without manually building the 'VTKData' target.")
  endif()
endif()