CMakeLists.txt 24.7 KB
Newer Older
1
2
3
4
5
PROJECT(Slicer3)

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
IF(COMMAND CMAKE_POLICY)
  CMAKE_POLICY(SET CMP0003 NEW)
6
  CMAKE_POLICY(SET CMP0012 NEW)
7
8
ENDIF(COMMAND CMAKE_POLICY)
MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY)
9

10

11
#-----------------------------------------------------------------------------
12
#
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
set(Slicer3_INSTALL_BIN_DIR "bin")
set(Slicer3_INSTALL_LIB_DIR "lib/Slicer3")
set(Slicer3_INSTALL_INCLUDE_DIR "include/Slicer3")
set(Slicer3_INSTALL_SHARE_DIR "share/Slicer3")
set(Slicer3_INSTALL_ITKFACTORIES_DIR "${Slicer3_INSTALL_LIB_DIR}/ITKFactories")

set(Slicer3_INSTALL_PLUGINS_BIN_DIR "${Slicer3_INSTALL_LIB_DIR}/Plugins")
set(Slicer3_INSTALL_PLUGINS_LIB_DIR "${Slicer3_INSTALL_LIB_DIR}/Plugins")
set(Slicer3_INSTALL_PLUGINS_INCLUDE_DIR "${Slicer3_INSTALL_INCLUDE_DIR}/Plugins")
set(Slicer3_INSTALL_PLUGINS_SHARE_DIR "${Slicer3_INSTALL_SHARE_DIR}/Plugins")
set(Slicer3_INSTALL_PLUGINS_CACHE_DIR "${Slicer3_INSTALL_LIB_DIR}/PluginsCache")

set(Slicer3_INSTALL_MODULES_BIN_DIR "${Slicer3_INSTALL_LIB_DIR}/Modules")
set(Slicer3_INSTALL_MODULES_LIB_DIR "${Slicer3_INSTALL_LIB_DIR}/Modules")
set(Slicer3_INSTALL_MODULES_INCLUDE_DIR "${Slicer3_INSTALL_INCLUDE_DIR}/Modules")
set(Slicer3_INSTALL_MODULES_SHARE_DIR "${Slicer3_INSTALL_SHARE_DIR}/Modules")

set(Slicer3_HOME "${Slicer3_BINARY_DIR}")

#-----------------------------------------------------------------------------
33
34
# Disable the warnings that DevStudio 2005 emits wrt to sprintf, strcpu, etc.
#
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security
# warnings (copied from ITK's CMake files so that ITK templated code will compile
# correctly).
IF(WIN32)
  IF(NOT BORLAND)
    IF(NOT CYGWIN)
      IF(NOT MINGW)
        ADD_DEFINITIONS(
          -D_CRT_FAR_MAPPINGS_NO_DEPRECATE
          -D_CRT_IS_WCTYPE_NO_DEPRECATE
          -D_CRT_MANAGED_FP_NO_DEPRECATE
          -D_CRT_NONSTDC_NO_DEPRECATE
          -D_CRT_SECURE_NO_DEPRECATE
          -D_CRT_SECURE_NO_DEPRECATE_GLOBALS
          -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE
          -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE
          -D_CRT_VCCLRIT_NO_DEPRECATE
          -D_SCL_SECURE_NO_DEPRECATE
          )
      ENDIF(NOT MINGW)
    ENDIF(NOT CYGWIN)
  ENDIF(NOT BORLAND)
ENDIF(WIN32)

59

60
# include a test for endianness (used to be done by default)
barre's avatar
barre committed
61

62
63
64
65
include(${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
test_big_endian(CMAKE_WORDS_BIGENDIAN)

#-----------------------------------------------------------------------------
66
67
68
69
# avoid linker bug in Mac OS 10.5
# see:
# http://wiki.finkproject.org/index.php/Fink:Packaging:Preparing_for_10.5#OpenGL_Bug
#
70
71
72
73
if(APPLE)
  set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib")
  set(CMAKE_EXE_LINKER_FLAGS "-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib")
endif(APPLE)
74

75
76
#-----------------------------------------------------------------------------
# Slicer version number.
77
#
78
set(Slicer3_VERSION_MAJOR "3")
79
set(Slicer3_VERSION_MINOR "5")
80
81
82
83
84
if(NOT Slicer3_VERSION_PATCH)
  set(Slicer3_VERSION_PATCH "0")
endif(NOT Slicer3_VERSION_PATCH)
set(Slicer3_VERSION "${Slicer3_VERSION_MAJOR}.${Slicer3_VERSION_MINOR}")
set(Slicer3_VERSION_FULL "${Slicer3_VERSION}.${Slicer3_VERSION_PATCH}")
85

86
87
#-----------------------------------------------------------------------------
# Build shared lib by default
88
#
89
90
option(BUILD_SHARED_LIBS "Build Slicer3 with shared libraries." ON)

91
92
93
94
95
96
97
98
99
100
101
#-----------------------------------------------------------------------------
# Append the library version information to the library target properties.
#
OPTION(Slicer3_WITH_LIBRARY_VERSION "Build with library version information" OFF)
IF(Slicer3_WITH_LIBRARY_VERSION)
  SET(Slicer3_LIBRARY_PROPERTIES ${Slicer3_LIBRARY_PROPERTIES}
    VERSION ${Slicer3_VERSION_FULL}
    SOVERSION ${Slicer3_VERSION}
  )
ENDIF(Slicer3_WITH_LIBRARY_VERSION)

102
103
#-----------------------------------------------------------------------------
# Slicer3 macros
pieper's avatar
pieper committed
104
#
105
106
107
108
109
set(Slicer3_CMAKE_DIR "${Slicer3_SOURCE_DIR}/CMake" CACHE INTERNAL "")
add_subdirectory(CMake)
# Make sure VTK_CMAKE_DIR is at the beginning so that VTK's FindTCL is
# used before CMake's FindTCL.
set(CMAKE_MODULE_PATH "${VTK_CMAKE_DIR}" ${CMAKE_MODULE_PATH} "${Slicer3_CMAKE_DIR}")
pieper's avatar
pieper committed
110

111
include("${Slicer3_CMAKE_DIR}/Slicer3PersistenceMacros.cmake")
hliu's avatar
hliu committed
112

113
114
115
# See http://www.cmake.org/Wiki/CMakeMacroParseArguments
include("${Slicer3_CMAKE_DIR}/Slicer3ParseArgumentsMacro.cmake")

116
117
118
## QT
INCLUDE(${Slicer3_CMAKE_DIR}/Slicer3FindQT.cmake)

119
120
#-----------------------------------------------------------------------------
# Top level slicer3 configurations
121
#
122
123
124
125
126
# If CMake >= 2.6.0
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")

127
128
129

# Do NOT force into the cache, as plugins need to override locally and scoping
# becomes an issue.
130
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/ 
131
#  CACHE PATH "Single output directory for building all libraries." FORCE)
132
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/ 
133
134
135
136
#  CACHE PATH "Single output directory for building all executables." FORCE)

#-----------------------------------------------------------------------------
# Slicer include and libraries subdirectory
137
#
138
139
140
slicer3_set_persistent_property(Slicer3_Libs_LIBRARIES "")
slicer3_set_persistent_property(Slicer3_Base_LIBRARIES "")
slicer3_set_persistent_property(Slicer3_Modules_LIBRARIES "")
141
slicer3_set_persistent_property(Slicer3_QTModules_LIBRARIES "")
142

143
144
145
slicer3_set_persistent_property(Slicer3_Libs_INCLUDE_DIRS "")
slicer3_set_persistent_property(Slicer3_Base_INCLUDE_DIRS "")
slicer3_set_persistent_property(Slicer3_Modules_INCLUDE_DIRS "")
146
slicer3_set_persistent_property(Slicer3_QTModules_INCLUDE_DIRS "")
pieper's avatar
pieper committed
147

148
149
150
151
152
153
154
#-----------------------------------------------------------------------------
# Get sytem name and architecture
#
SET(Slicer3_BUILD NA)
INCLUDE(${Slicer3_CMAKE_DIR}/DiscoverSystemNameAndBits.cmake)
MESSAGE(STATUS "Slicer3_BUILD:${Slicer3_BUILD}")

155
#-----------------------------------------------------------------------------
pieper's avatar
pieper committed
156
# Add the testing directories
157
#
158
159
160
161
OPTION(BUILD_TESTING "Test the project" ON)
SET(Slicer3_BUILD_TESTING ${BUILD_TESTING})
SET(LAUNCH_EXE ${Slicer3_BINARY_DIR}/Slicer3 --launch)
IF(Slicer3_BUILD_TESTING)
162
163
164
165
166
  #IF (NOT BUILDNAME)
  #  SET(BUILDNAME "${Slicer3_BUILD}" CACHE STRING "Name of build on the dashboard")
  #ELSE()
  #  SET(BUILDNAME "${BUILDNAME}" CACHE STRING "Name of build on the dashboard")
  #ENDIF()
167
168
169
170
171
  ENABLE_TESTING()
  INCLUDE(CTest)
  SET(CXX_TEST_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
  MARK_AS_ADVANCED(TCL_TCLSH DART_ROOT)
ENDIF(Slicer3_BUILD_TESTING)
hliu's avatar
hliu committed
172

173
174
175
176
177
178
179
180
#-----------------------------------------------------------------------------
# By default, build with KWWidget
#
option(Slicer3_USE_KWWIDGETS "Build Slicer3 with KWWidgets." ON)

#-----------------------------------------------------------------------------
# Since modules are KWWidgets based, unset there variables
IF (NOT Slicer3_USE_KWWIDGETS)
181
182
183
184
  # Since the module Logic is shared between QTModules and regular Modules,
  # the associated BIN and LIB directory shouldn't be unset
  #UNSET(Slicer3_INSTALL_MODULES_BIN_DIR)
  #UNSET(Slicer3_INSTALL_MODULES_LIB_DIR)
185
186
187
188
  UNSET(Slicer3_INSTALL_MODULES_INCLUDE_DIR)
  UNSET(Slicer3_INSTALL_MODULES_SHARE_DIR)
ENDIF (NOT Slicer3_USE_KWWIDGETS)

189
#-----------------------------------------------------------------------------
190
191
192
193
194
# Libs
# - ITK
# - KWWidgets (pulls in VTK)
#

195
196
197
198
# Relax some constraints related to the build settings file. This was
# preventing people from using the same compiler but with a different generator,
# or just the same compiler installed in a non-standard location.

199
200
201
IF (Slicer3_USE_KWWIDGETS)
  set(SKIP_KWWidgets_BUILD_SETTINGS_FILE 1)
ENDIF(Slicer3_USE_KWWIDGETS)
202
203
set(SKIP_VTK_BUILD_SETTINGS_FILE 1)
set(SKIP_ITK_BUILD_SETTINGS_FILE 1)
204
set(SKIP_Teem_BUILD_SETTINGS_FILE 1)
205
206

#-----------------------------------------------------------------------------
207
## Python
208
209
option(Slicer3_USE_PYTHON "Integrate a python interpreter into Slicer." OFF)
if(Slicer3_USE_PYTHON)
210
  find_package(PythonLibs)
211
endif(Slicer3_USE_PYTHON)
212

213
#-----------------------------------------------------------------------------
214
## ITK
215
216
217
218
219
find_package(ITK REQUIRED)
if(NOT ITK_FOUND)
  message(FATAL_ERROR "Need ITK to build")
endif(NOT ITK_FOUND)
include(${ITK_USE_FILE})
220

221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#-----------------------------------------------------------------------------
IF (Slicer3_USE_KWWIDGETS)
  ## KWWidgets
  FIND_PACKAGE(KWWidgets REQUIRED)
  IF(NOT KWWidgets_FOUND)
    MESSAGE(FATAL_ERROR "Need KWWidgets to build")
  ENDIF(NOT KWWidgets_FOUND)
  INCLUDE(${KWWidgets_USE_FILE})
ELSE(Slicer3_USE_KWWIDGETS)
  FIND_PACKAGE(VTK REQUIRED)
  IF(NOT VTK_FOUND)
    MESSAGE(FATAL_ERROR "Need VTK to build with ")
  ELSE(NOT VTK_FOUND)
    IF(NOT VTK_USE_QVTK)
      MESSAGE("Please make sure VTK is build with VTK_USE_GUISUPPORT and VTK_USE_QVTK enabled")
    ENDIF(NOT VTK_USE_QVTK)
  ENDIF(NOT VTK_FOUND)
  INCLUDE(${VTK_USE_FILE})
ENDIF (Slicer3_USE_KWWIDGETS)

241
242
243
#-----------------------------------------------------------------------------
# Slicer3 is built with cvs head
#
244
245
option(Slicer3_USE_VTK_CVSHEAD "Slicer3 is configurated with cvs head." OFF)
mark_as_advanced(Slicer3_USE_VTK_CVSHEAD)
246

247
#-----------------------------------------------------------------------------
248
249
250
251
252
#
# Call macro defined in ${PROJECT_SOURCE_DIR}/CMake/Slicer3FindQT.cmake
#
SLICER3_SETUP_QT()

253
254
255
256
257
258
259
260
#-----------------------------------------------------------------------------
# Alert the user if both Slicer3_USE_QT and Slicer3_USE_KWWIDGETS are OFF
IF(NOT Slicer3_USE_QT AND NOT Slicer3_USE_KWWIDGETS)
  MESSAGE(FATAL_ERROR "Both Slicer3_USE_QT and Slicer3_USE_KWWIDGETS are OFF. Please, choose one")
ENDIF(NOT Slicer3_USE_QT AND NOT Slicer3_USE_KWWIDGETS)

#-----------------------------------------------------------------------------
# If Slicer3_USE_QT is ON and Slicer3_USE_KWWIDGETS is OFF, complain if VTK_WRAP_TCL is ON
261
# Note: Later on we will expect VTK_WRAP_PYTHON to be ON
262
263
264
265
266
267
IF(Slicer3_USE_QT AND NOT Slicer3_USE_KWWIDGETS)
  IF(VTK_WRAP_TCL)
    MESSAGE(FATAL_ERROR "For now, if Slicer3_USE_QT is ON and Slicer3_USE_KWWIDGETS is OFF, we expect VTK_WRAP_TCL to be OFF")
  ENDIF(VTK_WRAP_TCL)
ENDIF(Slicer3_USE_QT AND NOT Slicer3_USE_KWWIDGETS)

268
269
270
271
272
273
274
275
276
277
278
279
280
281
#-----------------------------------------------------------------------------
# Add Slicer3_USE_PYTHONQT option if Slicer3_USE_QT is ON
IF(Slicer3_USE_QT)
  option(Slicer3_USE_PYTHONQT "Integrate a python-QT interpreter into Slicer." OFF)
  IF(Slicer3_USE_PYTHONQT)
    IF(NOT VTK_WRAP_PYTHON)
      MESSAGE(FATAL_ERROR "Since both Slicer3_USE_QT and Slicer3_USE_PYTHONQT are ON, VTK_WRAP_PYTHON is expected to be ON. Disable Slicer3_USE_PYTHONQT or re-configure VTK with python wrapping.")
    ENDIF(NOT VTK_WRAP_PYTHON)
    # Enable qCTKWidgets python wrapping
    # Note that qVTKWidgets and qMRMLWidgets python wrapping will be automatically enabled
    SET(qCTKWidgets_WRAP_PYTHON ON)
  ENDIF(Slicer3_USE_PYTHONQT)
ENDIF(Slicer3_USE_QT)  

282
#-----------------------------------------------------------------------------
283
## Teem
284
285
286
287
288
find_package(Teem REQUIRED)
if(NOT Teem_FOUND)
  message(FATAL_ERROR "Need Teem to build")
endif(NOT Teem_FOUND)
include(${Teem_USE_FILE})
289

290
#-----------------------------------------------------------------------------
291
292
293
294
295
## SlicerLibCurl
find_package(SLICERLIBCURL REQUIRED)
if(SLICERLIBCURL_FOUND)
  include(${SLICERLIBCURL_USE_FILE})
endif(SLICERLIBCURL_FOUND)
296
297

#-----------------------------------------------------------------------------
298
299
300
## BatchMake
option(Slicer3_USE_BatchMake "Build Slicer3 with BatchMake support." OFF)
if(Slicer3_USE_BatchMake)
301
302
  find_package(BatchMake REQUIRED)
  include(${BatchMake_USE_FILE})
303
endif(Slicer3_USE_BatchMake)
304

305
#-----------------------------------------------------------------------------
306
307
## MIDAS
option(Slicer3_USE_MIDAS "Build Slicer3 with MIDAS support." OFF)
308

309
#-----------------------------------------------------------------------------
310
311
312
313
314
315
## OpenIGTLink (Built in Slicer3-lib)
option(Slicer3_USE_OPENIGTLINK "Build Slicer3 with OpenIGTLink support." OFF)
if(Slicer3_USE_OPENIGTLINK)
  find_package(OpenIGTLink REQUIRED)
  include(${OpenIGTLink_USE_FILE})
endif(Slicer3_USE_OPENIGTLINK)
hliu's avatar
hliu committed
316

317
318
#-----------------------------------------------------------------------------
# Need some Tcl/Tk info
319
320
321
322
323
324
325
326
327
328
329
330
IF (VTK_WRAP_TCL)
  include("${VTK_CMAKE_DIR}/vtkTclTkMacros.cmake")
  VTK_GET_TCL_TK_VERSION(TCL_TK_MAJOR_VERSION TCL_TK_MINOR_VERSION)
  set(TCL_TK_VERSION_DOT "${TCL_TK_MAJOR_VERSION}.${TCL_TK_MINOR_VERSION}")
  set(TCL_TK_VERSION "${TCL_TK_MAJOR_VERSION}${TCL_TK_MINOR_VERSION}")
  IF(Slicer3_USE_KWWIDGETS)
    include("${KWWidgets_CMAKE_DIR}/KWWidgetsTclTkMacros.cmake")
    incr_tcl_get_version(INCR_TCL_MAJOR_VERSION INCR_TCL_MINOR_VERSION)
    set(INCR_TCL_VERSION_DOT "${INCR_TCL_MAJOR_VERSION}.${INCR_TCL_MINOR_VERSION}")
    set(INCR_TCL_VERSION "${INCR_TCL_MAJOR_VERSION}${INCR_TCL_MINOR_VERSION}")
  ENDIF(Slicer3_USE_KWWIDGETS)
ENDIF (VTK_WRAP_TCL)
331

332
#-----------------------------------------------------------------------------
barre's avatar
barre committed
333
334
335
# Generate the default setup paths scripts.
# Generate some useful scripts that can be used to setup various environment 
# variables and launch the executable properly against external packages.
336
#
337
338
339
340
341
IF (Slicer3_USE_KWWIDGETS)
  include("${KWWidgets_CMAKE_DIR}/KWWidgetsPathsMacros.cmake")
  set(extra_dirs
    "${Teem_DIR}/bin"
    "${BatchMake_DIR}/bin"
342
    "${OpenIGTLink_DIR}/bin"
343
344
345
346
347
348
349
350
    "${Slicer3_HOME}/${Slicer3_INSTALL_PLUGINS_BIN_DIR}"
    "${Slicer3_HOME}/${Slicer3_INSTALL_PLUGINS_LIB_DIR}"
    "${Slicer3_HOME}/${Slicer3_INSTALL_MODULES_BIN_DIR}"
    "${Slicer3_HOME}/${Slicer3_INSTALL_MODULES_LIB_DIR}"
    )
  kwwidgets_generate_setup_paths_scripts(
    "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" "Slicer3SetupPaths"
    "${extra_dirs}"
351
  )
352
ENDIF (Slicer3_USE_KWWIDGETS)
barre's avatar
barre committed
353

354
#-----------------------------------------------------------------------------
barre's avatar
barre committed
355
356
357
358
359
# VTK 5.0 does not have VTK_CMAKE_DIR
# Alternatively you could use KWWidget's wrapping, which encapsulate
# the differences between various VTK versions:
#  INCLUDE("${KWWidgets_CMAKE_DIR}/KWWidgetsWrappingMacros.cmake")
#  KWWidgets_WRAP_TCL(${LIB_NAME} LIB_TCL_SRCS "${LIB_SRCS}" "")
360
#
361
362
363
364
365
366
IF (Slicer3_USE_KWWIDGETS)
  if(NOT VTK_CMAKE_DIR)
    set(VTK_CMAKE_DIR "${VTK_SOURCE_DIR}/CMake")
  endif(NOT VTK_CMAKE_DIR)
  include("${VTK_CMAKE_DIR}/vtkWrapTcl.cmake")
ENDIF (Slicer3_USE_KWWIDGETS)
367

368
369
#-----------------------------------------------------------------------------
# Check versions of VTK to track CVS HEAD
370
#
371
372
373
374
375
376
377
378
379
380
381
382
383
384
IF (Slicer3_USE_KWWIDGETS)
  find_package(VTK REQUIRED)
  if(EXISTS ${VTK_CMAKE_DIR}/VTKVersionMacros.cmake)
    include(${VTK_CMAKE_DIR}/VTKVersionMacros.cmake)
  else(EXISTS ${VTK_CMAKE_DIR}/VTKVersionMacros.cmake)
    #MESSAGE("Using local version of VTKVersionMacros for compatibility.")
    include(${Slicer3_SOURCE_DIR}/Scripts/VTKVersionMacros.cmake)
  endif(EXISTS ${VTK_CMAKE_DIR}/VTKVersionMacros.cmake)

  vtk_get_source_revision_and_date(VTKsource_revision VTKsource_date)
  if(VTKsource_revision LESS 1.2196)
    message(FATAL_ERROR "Sorry, your VTK library was last updated on ${VTKsource_date}. Its source revision, according to vtkKWWidgetsVersion.h, is ${VTKsource_revision}. Please update to a newer revision.")
  endif(VTKsource_revision LESS 1.2196)
ENDIF (Slicer3_USE_KWWIDGETS)
385

386
387
#-----------------------------------------------------------------------------
# These packages may exist within the Slicer3 source tree
lorensen's avatar
lorensen committed
388
#
389
390
391
392
393
394
set(GenerateCLP_DIR ${Slicer3_BINARY_DIR}/Libs/GenerateCLP)
set(GenerateLM_DIR ${Slicer3_BINARY_DIR}/Libs/GenerateLM)
set(ModuleDescriptionParser_DIR ${Slicer3_BINARY_DIR}/Libs/ModuleDescriptionParser)
set(LoadableModule_DIR ${Slicer3_BINARY_DIR}/Libs/LoadableModule)
set(vtkITK_DIR ${Slicer3_BINARY_DIR}/Libs/vtkITK)
set(TCLAP_DIR ${Slicer3_BINARY_DIR}/Libs/tclap)
395

jcfr's avatar
jcfr committed
396
397
398
399
400
401
402
403
404
405
406
407
408
409
#-----------------------------------------------------------------------------
# Qt Loadable Modules
#
IF(Slicer3_USE_QT)
  OPTION(Slicer3_BUILD_QTLOADABLEMODULES "Build Slicer3 QT Loadable Modules" ON)
  IF(Slicer3_BUILD_QTLOADABLEMODULES)
    ADD_DEFINITIONS(-DSlicer3_BUILD_QTLOADABLEMODULES)
    set(Slicer3_INSTALL_QTLOADABLEMODULES_BIN_DIR "${Slicer3_INSTALL_LIB_DIR}/QTLoadableModules")
    set(Slicer3_INSTALL_QTLOADABLEMODULES_LIB_DIR "${Slicer3_INSTALL_LIB_DIR}/QTLoadableModules")
    set(Slicer3_INSTALL_QTLOADABLEMODULES_INCLUDE_DIR "${Slicer3_INSTALL_INCLUDE_DIR}/QTLoadableModules")
    set(Slicer3_INSTALL_QTLOADABLEMODULES_SHARE_DIR "${Slicer3_INSTALL_SHARE_DIR}/QTLoadableModules")
  ENDIF(Slicer3_BUILD_QTLOADABLEMODULES)
ENDIF(Slicer3_USE_QT)

410
411
412
# --------------------------------------------------------------------------
# Configure and install headers

413
CONFIGURE_FILE(
414
415
416
417
  ${CMAKE_CURRENT_SOURCE_DIR}/vtkSlicerConfigure.h.in 
  ${CMAKE_CURRENT_BINARY_DIR}/vtkSlicerConfigure.h
  )

418
419
420
421
422
423
CONFIGURE_FILE(
  ${CMAKE_CURRENT_SOURCE_DIR}/vtkSlicerVersionConfigure.h.in 
  ${CMAKE_CURRENT_BINARY_DIR}/vtkSlicerVersionConfigure.h
  )

CONFIGURE_FILE(
424
425
  ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/runValgrind.sh.in 
  ${CMAKE_CURRENT_BINARY_DIR}/Scripts/runValgrind.sh
426
427
  )

428
CONFIGURE_FILE(
429
430
431
432
  ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/computeCodeCoverageLocally.sh.in 
  ${CMAKE_CURRENT_BINARY_DIR}/Scripts/computeCodeCoverageLocally.sh
  )

433
CONFIGURE_FILE(
434
435
436
  ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/runExperimentalOffScreen.sh.in 
  ${CMAKE_CURRENT_BINARY_DIR}/Scripts/runExperimentalOffScreen.sh
  )
437

438
439
440
441
442
443
INCLUDE_DIRECTORIES(
  "${CMAKE_CURRENT_SOURCE_DIR}"
  "${CMAKE_CURRENT_BINARY_DIR}"
  )

INSTALL(FILES 
444
445
446
447
  "${CMAKE_CURRENT_BINARY_DIR}/vtkSlicerConfigure.h"
  DESTINATION ${Slicer3_INSTALL_INCLUDE_DIR} COMPONENT Development
  )

448
449
450
451
452
INSTALL(FILES 
  "${CMAKE_CURRENT_BINARY_DIR}/vtkSlicerVersionConfigure.h"
  DESTINATION ${Slicer3_INSTALL_INCLUDE_DIR} COMPONENT Development
  )

453
454
455
456
457
458
459
460
#-----------------------------------------------------------------------------
# Generate Slicer3Version.txt

INCLUDE(${Slicer3_CMAKE_DIR}/Slicer3TodayMacro.cmake)

# Get build time
TODAY(Slicer3_BUILDDATE)

461
# Note that Slicer_BUILD is set above
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493

SET(Slicer3_WC_URL NA)
SET(Slicer3_WC_REVISION 0)

# Get SVN info
FIND_PACKAGE(Subversion)
IF(NOT Subversion_FOUND)
  MESSAGE(FATAL_ERROR "error: Install SVN and try to re-configure")
ENDIF(NOT Subversion_FOUND)

# Case where Slicer is checkout using SVN
IF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.svn)
  Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} Slicer3)
  CONFIGURE_FILE(
    ${CMAKE_CURRENT_SOURCE_DIR}/Slicer3Version.txt.in 
    ${Slicer3_HOME}/lib/Slicer3/Slicer3Version.txt
    )
ENDIF()

# Case where Slicer is checkout using Git-SVN
IF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
  FIND_PACKAGE(Git)
  IF(NOT Git_FOUND)
    MESSAGE(FATAL_ERROR "error: Failed to locate Git")
  ENDIF(NOT Git_FOUND)
  Git_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} Slicer3)
  CONFIGURE_FILE(
    ${CMAKE_CURRENT_SOURCE_DIR}/Slicer3Version.txt.in
    ${Slicer3_HOME}/lib/Slicer3/Slicer3Version.txt
    )
ENDIF()

494

495
#-----------------------------------------------------------------------------
pieper's avatar
pieper committed
496
497
# Subdirectories
#
498
499
add_subdirectory(Libs)
add_subdirectory(Base)
500
add_subdirectory(Resources)
501

502
#-----------------------------------------------------------------------------
503
# At this point, let's not have the applications and modules guess which
504
505
# include paths or libraries they need, but use Slicer3_*_LIBRARIES and
# Slicer3_*_INCLUDE_DIRS instead. As far as modules are concerned, both
506
507
508
509
510
# variables are actually set automatically by the import script when building
# against a Slicer3 build or installed tree. When in-source, we need to
# set both variables now. Retrieve them from the persistent property cache
# since they were collected in each subdir (which makes it impossible to
# use normal variables, since a new scope is created in each subdir).
511
512
513
#
slicer3_get_persistent_property(Slicer3_Libs_LIBRARIES Slicer3_Libs_LIBRARIES)
slicer3_get_persistent_property(Slicer3_Base_LIBRARIES Slicer3_Base_LIBRARIES)
514

515
516
slicer3_get_persistent_property(Slicer3_Libs_INCLUDE_DIRS Slicer3_Libs_INCLUDE_DIRS)
slicer3_get_persistent_property(Slicer3_Base_INCLUDE_DIRS Slicer3_Base_INCLUDE_DIRS)
pieper's avatar
pieper committed
517

518
519
520
521
522
#-----------------------------------------------------------------------------
# Module Logic

INCLUDE("${Slicer3_CMAKE_DIR}/Slicer3ModuleLogicMacros.cmake")

523
524
525
526
527
528
529
530
531
IF (NOT Slicer3_USE_KWWIDGETS)
  # Loop through Modules subdirectory and try to include Logic subdirectory if it exists
  FILE(GLOB modules_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} Modules/*)
  FOREACH(subdir ${modules_subdirs})
    IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/Logic)
      ADD_SUBDIRECTORY(${subdir}/Logic)
    ENDIF()
  ENDFOREACH()
ENDIF()
532
533


534
535
536
537
#-----------------------------------------------------------------------------
# Modules and CLI
#
option(Slicer3_BUILD_CLI "Build Slicer3 CLI Plugins" ON)
538
539
540
IF (Slicer3_USE_KWWIDGETS)
  option(Slicer3_BUILD_MODULES "Build Slicer3 Modules" ON)
ENDIF (Slicer3_USE_KWWIDGETS)
541

barre's avatar
barre committed
542
include("${Slicer3_CMAKE_DIR}/Slicer3PluginsMacros.cmake")
pieper's avatar
pieper committed
543

544
545
546
547
548
549
550
551
552
553
554
555
556
IF (Slicer3_USE_KWWIDGETS)
  include("${Slicer3_CMAKE_DIR}/Slicer3ModulesMacros.cmake")
  
  if(Slicer3_BUILD_MODULES)
    add_subdirectory(Modules)
  else(Slicer3_BUILD_MODULES)
    # if Slicer3_BUILD_CLI is ON, we still need at least the CommandLineModule
    # so that we can have CLI, without all the other modules
    if(Slicer3_BUILD_CLI)
      add_subdirectory(Modules/CommandLineModule)
    endif(Slicer3_BUILD_CLI)
  endif(Slicer3_BUILD_MODULES)
ENDIF (Slicer3_USE_KWWIDGETS)
557
#-----------------------------------------------------------------------------
jcfr's avatar
jcfr committed
558
# Qt Loadable Modules
559
#
jcfr's avatar
jcfr committed
560
561
562
IF(Slicer3_USE_QT AND Slicer3_BUILD_QTLOADABLEMODULES)
  add_subdirectory(QTModules)
ENDIF(Slicer3_USE_QT AND Slicer3_BUILD_QTLOADABLEMODULES)
563

564
565
566
567
#-----------------------------------------------------------------------------
# Applications need to be built after Modules to capture the TractTracing in
# the correct ordering.
#
568
add_subdirectory(Applications)
569

570
571
572
#-----------------------------------------------------------------------------
# Testing
#
573
574
575
if(Slicer3_BUILD_TESTING)
  add_subdirectory(Testing)
endif(Slicer3_BUILD_TESTING)
pieper's avatar
pieper committed
576

577
# Install testing data
andy's avatar
andy committed
578

579
580
581
582
583
584
585
586
install(DIRECTORY
  Testing
  DESTINATION ${Slicer3_INSTALL_SHARE_DIR} COMPONENT Development
  PATTERN ".svn" EXCLUDE
  PATTERN "CMakeLists.txt" EXCLUDE
  )

#-----------------------------------------------------------------------------
587
# Launcher for slicer
588
#
589

590
591
# let's build the launcher for Kww, KwwAndQt and also QtOnly slicer ...
ADD_SUBDIRECTORY(Utilities/Launcher)
592

593
594
595
596
597
# Compute Slicer3_QT_PLUGIN_PATH used to configure launch.tcl.in
SET(Slicer3_QT_PLUGIN_PATH "")
IF(Slicer3_USE_QT)
  SET(designer_launcher_project_name SlicerQT)
  GET_TARGET_PROPERTY(output_directory ${designer_launcher_project_name} LIBRARY_OUTPUT_DIRECTORY)
598
  SET(Slicer3_QT_PLUGIN_PATH ${output_directory})
599
600
ENDIF(Slicer3_USE_QT)

601
602
603
604
605
606
607
608
CONFIGURE_FILE(
  ${Slicer3_SOURCE_DIR}/launch.tcl.in
  "${Slicer3_BINARY_DIR}/${Slicer3_INSTALL_LIB_DIR}/launch.tcl"
  )
INSTALL(
  FILES "${Slicer3_BINARY_DIR}/${Slicer3_INSTALL_LIB_DIR}/launch.tcl"
  DESTINATION ${Slicer3_INSTALL_LIB_DIR}
  )
609

610
611
612
613
614
615
616
617
#-----------------------------------------------------------------------------
# Launcher for QTDesigner
#

IF (Slicer3_USE_QT)
  add_subdirectory(Utilities/Designer)
ENDIF (Slicer3_USE_QT)

618
#-----------------------------------------------------------------------------
619
# Package slicer
620
#
621
add_subdirectory(Utilities/Package)
andy's avatar
andy committed
622

623
#-----------------------------------------------------------------------------
624
# Documentation
625
#
626
627
628
629
option(BUILD_DOCUMENTATION "Build Slicer3 Documentation" OFF)
if(BUILD_DOCUMENTATION)
  add_subdirectory(Utilities/Doxygen)
endif(BUILD_DOCUMENTATION)
andy's avatar
andy committed
630

631
632
633
634
635
636
637
#-----------------------------------------------------------------------------
# Setup file for setting custom ctest vars
CONFIGURE_FILE(
  ${Slicer3_SOURCE_DIR}/CTestCustom.cmake.in
  ${Slicer3_BINARY_DIR}/CTestCustom.cmake
  @ONLY
  )
638

639

640
#-----------------------------------------------------------------------------
641
642
# Set up for building against a Slicer3 build tree and a Slicer3 installation 
#
643
644
include(${Slicer3_SOURCE_DIR}/GenerateSlicer3Config.cmake)

645
646
647
configure_file(${Slicer3_SOURCE_DIR}/CTestConfig.cmake
  ${Slicer3_BINARY_DIR}/${Slicer3_INSTALL_LIB_DIR}/CTestConfig.cmake COPYONLY IMMEDIATE)

648
649
650
configure_file(${Slicer3_SOURCE_DIR}/UseSlicer3.cmake.in
  ${Slicer3_BINARY_DIR}/UseSlicer3.cmake COPYONLY IMMEDIATE)

651
652
653
654
655
configure_file(${Slicer3_SOURCE_DIR}/CMake/RemoveTemporaryFiles.cmake.in
  ${Slicer3_BINARY_DIR}/CMake/RemoveTemporaryFiles.cmake @ONLY IMMEDIATE)
configure_file(${Slicer3_SOURCE_DIR}/CMake/Slicer3SampleBuildTest.cmake.in
  ${Slicer3_BINARY_DIR}/CMake/Slicer3SampleBuildTest.cmake @ONLY)

656
657
install(FILES
  #   ${Slicer3_BINARY_DIR}/Slicer3BuildSettings.cmake
658
  ${Slicer3_SOURCE_DIR}/CTestConfig.cmake
659
660
  ${Slicer3_BINARY_DIR}/UseSlicer3.cmake
  ${Slicer3_BINARY_DIR}/Utilities/Slicer3Config.cmake
hayes's avatar
hayes committed
661
  ${Slicer3_BINARY_DIR}/lib/Slicer3/Slicer3Version.txt
662
  DESTINATION ${Slicer3_INSTALL_LIB_DIR}
663
664
  COMPONENT Development
  )