CMakeLists.txt 8.14 KB
Newer Older
pieper's avatar
pieper committed
1
PROJECT( Slicer3 )
andy's avatar
andy committed
2
CMAKE_MINIMUM_REQUIRED(VERSION 2.2)
3
4
MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY)

5
6
7
8
9
10
11
#
# Disable the warnings that DevStudio 2005 emits wrt to sprintf, strcpu, etc.
#
IF(CMAKE_COMPILER_2005)
  ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
ENDIF(CMAKE_COMPILER_2005)

12
13
14
15
16
17
18
19
20
21
#
# avoid linker bug in Mac OS 10.5
# see:
# http://wiki.finkproject.org/index.php/Fink:Packaging:Preparing_for_10.5#OpenGL_Bug
#
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)

22
23
24
#-----------------------------------------------------------------------------
# Slicer version number.
SET(Slicer3_VERSION_MAJOR "3")
25
SET(Slicer3_VERSION_MINOR "0")
26
27
28
IF(NOT Slicer3_VERSION_PATCH)
  SET(Slicer3_VERSION_PATCH "0")
ENDIF(NOT Slicer3_VERSION_PATCH)
29
30
31
SET(Slicer3_VERSION "${Slicer3_VERSION_MAJOR}.${Slicer3_VERSION_MINOR}")
SET(Slicer3_VERSION_FULL "${Slicer3_VERSION}.${Slicer3_VERSION_PATCH}")

32
33
34
35
#-----------------------------------------------------------------------------
# Build shared lib by default
OPTION(BUILD_SHARED_LIBS "Build Slicer3 with shared libraries." ON)

andy's avatar
andy committed
36
37
38
39
40
41
42
IF(BUILD_SHARED_LIBS)
  IF(WIN32 AND NOT UNIX)
    SET(SLICER3_LIB_INSTALL_DIR /bin)
  ELSE(WIN32 AND NOT UNIX)
    SET(SLICER3_LIB_INSTALL_DIR /lib)
  ENDIF(WIN32 AND NOT UNIX)
ENDIF(BUILD_SHARED_LIBS)
pieper's avatar
pieper committed
43
44
45
46
47

#
# Top level slicer3 configurations
#

48
SET (LIBRARY_OUTPUT_PATH ${Slicer3_BINARY_DIR}/bin/ 
pieper's avatar
pieper committed
49
50
51
52
        CACHE PATH 
        "Single output directory for building all libraries." 
        FORCE)
SET (EXECUTABLE_OUTPUT_PATH ${Slicer3_BINARY_DIR}/bin/ 
hliu's avatar
hliu committed
53

pieper's avatar
pieper committed
54
55
56
        CACHE PATH 
        "Single output directory for building all executables." 
        FORCE)
57
58
59
#
# Slicer libraries subdirectory
#
60
SET (SLICER_INSTALL_LIBRARIES_DIR "lib/Slicer3")
hliu's avatar
hliu committed
61

62
SET (SLICER_LIBRARIES_DIR "${Slicer3_BINARY_DIR}/${SLICER_INSTALL_LIBRARIES_DIR}")
63

pieper's avatar
pieper committed
64
65
66

# Add the testing directories

67
68
OPTION(BUILD_TESTING "Test the project" ON)
SET(Slicer3_BUILD_TESTING ${BUILD_TESTING})
69
SET(LAUNCH_EXE ${Slicer3_BINARY_DIR}/Slicer3 --launch)
pieper's avatar
pieper committed
70
71
IF(Slicer3_BUILD_TESTING)
    ENABLE_TESTING()
andy's avatar
andy committed
72
    INCLUDE (CTest)
73
    MARK_AS_ADVANCED(TCL_TCLSH DART_ROOT)
pieper's avatar
pieper committed
74
75
ENDIF(Slicer3_BUILD_TESTING)

hliu's avatar
hliu committed
76

77
78
79
80
81
82
#
# Libs
# - ITK
# - KWWidgets (pulls in VTK)
#

83
84
85
86
## Python
OPTION(USE_PYTHON "Integrate a python interpreter into Slicer." OFF)
IF (USE_PYTHON)
   FIND_PACKAGE(PythonLibs)
87
   ADD_DEFINITIONS(-DUSE_PYTHON)
88
89
90
ENDIF(USE_PYTHON)


91
## ITK
92
FIND_PACKAGE(ITK REQUIRED)
93
94
95
96
IF (NOT ITK_FOUND)
  MESSAGE (FATAL_ERROR "Need ITK to build")
ENDIF (NOT ITK_FOUND)

hliu's avatar
hliu committed
97

98
99
100
INCLUDE(${ITK_USE_FILE})


101
#
102
## KWWidgets
103
#
104
FIND_PACKAGE(KWWidgets REQUIRED)
105
106
107
108
IF (NOT KWWidgets_FOUND)
  MESSAGE (FATAL_ERROR "Need KWWidgets to build")
ENDIF (NOT KWWidgets_FOUND)

hliu's avatar
hliu committed
109

110
111
INCLUDE(${KWWidgets_USE_FILE})

112
113
114
#
# Teem
#
115
116
117
118
119
FIND_PACKAGE(TEEM REQUIRED)
IF (NOT TEEM_FOUND)
  MESSAGE (FATAL_ERROR "Need TEEMK to build")
ENDIF (NOT TEEM_FOUND)
INCLUDE(${TEEM_USE_FILE})
120

121

122
123
124
#
# BatchMake
#
125
OPTION(USE_BatchMake "Build Slicer3 with BatchMake support." OFF)
126
127
128
129
130
131
132
133
IF(USE_BatchMake)
  FIND_PACKAGE(BatchMake REQUIRED)
  INCLUDE(${BatchMake_USE_FILE})
ENDIF(USE_BatchMake)

#
# MIDAS
#
134
OPTION(USE_MIDAS "Build Slicer3 with MIDAS support." OFF)
135
136


hliu's avatar
hliu committed
137
#
138
# NaviTrack 
hliu's avatar
hliu committed
139
#
140
OPTION(USE_NAVITRACK "Build Slicer3 with NaviTrack support." OFF)
141
IF(USE_NAVITRACK)
142

143
144
  FIND_LIBRARY(NAVITRACK_LIB 
    NAMES NaviTrack
145
    PATHS ${NAVITRACK_LIB_DIR} 
146
  )
147
148
149
  IF(NAVITRACK_LIB-NOTFOUND)
    MESSAGE (FATAL_ERROR "Need NaviTrack to build")
  ENDIF(NAVITRACK_LIB-NOTFOUND)
hliu's avatar
hliu committed
150

151
  # include file for OpenTracker 2.0 
152
153
  FIND_PATH(NAVITRACK_INC "OpenTracker/OpenTracker.h" 
    ${NAVITRACK_INC_DIR}
154
155
  )

156
  IF(NAVITRACK_INC-NOTFOUND)
hliu's avatar
hliu committed
157
    MESSAGE (FATAL_ERROR "Need OpenTracker.h to build")
158
159
160
161
162
  ENDIF(NAVITRACK_INC-NOTFOUND)
ELSE(USE_NAVITRACK)
  SET(NAVITRACK_LIB "")
  SET(NAVITRACK_INC "")
ENDIF(USE_NAVITRACK)
hliu's avatar
hliu committed
163
164


hliu's avatar
hliu committed
165
166
167
168
#
# IGSTK
# Built in Slicer3-lib
#
169
OPTION(USE_IGSTK "Build Slicer3 with IGSTK support." OFF)
hliu's avatar
hliu committed
170
171
172
173
174
175
IF(USE_IGSTK)
  FIND_PACKAGE(IGSTK REQUIRED)
  INCLUDE(${IGSTK_USE_FILE})
ENDIF(USE_IGSTK)


barre's avatar
barre committed
176
177
178
179
180
# 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.

INCLUDE("${KWWidgets_CMAKE_DIR}/KWWidgetsPathsMacros.cmake")
barre's avatar
barre committed
181
KWWidgets_GENERATE_SETUP_PATHS_SCRIPTS(
182
183
  "${EXECUTABLE_OUTPUT_PATH}" "Slicer3SetupPaths" "${TEEM_DIR}/bin"
  "${BatchMake_DIR}/bin")
184
  
barre's avatar
barre committed
185
186

# VTK 5.0 does not have VTK_CMAKE_DIR
hliu's avatar
hliu committed
187

barre's avatar
barre committed
188
189
190
191
192
193
194
195
# 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}" "")

IF(NOT VTK_CMAKE_DIR)
  SET(VTK_CMAKE_DIR "${VTK_SOURCE_DIR}/CMake")
ENDIF(NOT VTK_CMAKE_DIR)
196
197
198
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE("${VTK_CMAKE_DIR}/vtkWrapTcl.cmake")

199
200
201
202
#
## check versions of VTK to track CVS HEAD
#

203
204
205
206
FIND_PACKAGE(VTK REQUIRED)
IF(EXISTS ${VTK_CMAKE_DIR}/VTKVersionMacros.cmake)
 INCLUDE(${VTK_CMAKE_DIR}/VTKVersionMacros.cmake)
ELSE(EXISTS ${VTK_CMAKE_DIR}/VTKVersionMacros.cmake)
207
 #MESSAGE("Using local version of VTKVersionMacros for compatibility.")
208
209
210
211
212
213
214
 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) 
215

lorensen's avatar
lorensen committed
216
217
218
219
220
221
#
# These packages exist within the Slicer3 source tree
#
SET(GenerateCLP_DIR ${Slicer3_BINARY_DIR}/Libs/GenerateCLP)
SET(ModuleDescriptionParser_DIR ${Slicer3_BINARY_DIR}/Libs/ModuleDescriptionParser)
SET(vtkITK_DIR ${Slicer3_BINARY_DIR}/Libs/vtkITK)
222
SET(TCLAP_DIR ${Slicer3_BINARY_DIR}/Libs/tclap)
pieper's avatar
pieper committed
223

224

pieper's avatar
pieper committed
225
226
227
228
#
# Subdirectories
#

229
230
OPTION(BUILD_CLI "Build Slicer3 CLI Plugins" ON)
MARK_AS_ADVANCED(BUILD_CLI)
pieper's avatar
pieper committed
231
SUBDIRS(
232
  Libs
233
234
235
)

SUBDIRS(
236
  Base
237
238
239
240
)

OPTION(BUILD_MODULES "Build Slicer3 Modules" ON)
MARK_AS_ADVANCED(BUILD_MODULES)
pieper's avatar
pieper committed
241

242
243
244
IF(BUILD_MODULES)
  SUBDIRS(Modules)
ENDIF(BUILD_MODULES)
pieper's avatar
pieper committed
245

246
247
248
249
250
251
## Applications need to be built after Modules to capture the TractTracing in
## the correct ordering.
SUBDIRS(
  Applications
  )

pieper's avatar
pieper committed
252
253
254
255
IF (Slicer3_BUILD_TESTING)
    SUBDIRS( Testing )
ENDIF (Slicer3_BUILD_TESTING)

256
257
258
# include a test for endianness (used to be done by default)
INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)
andy's avatar
andy committed
259

260
261
262
# Launcher for slicer
SUBDIRS(Utilities/Launcher)

263
264
# Package slicer
SUBDIRS(Utilities/Package)
andy's avatar
andy committed
265

266
# Documentation
andy's avatar
andy committed
267
268
269
270
OPTION(BUILD_DOCUMENTATION "Build Slicer3 Documentation" OFF)
IF(BUILD_DOCUMENTATION)
  SUBDIRS(Utilities/Doxygen)
ENDIF(BUILD_DOCUMENTATION)
andy's avatar
andy committed
271

272
# CMAke 2.4 does not have INSTALL(DIRECTORY ...) do it manually
hayes's avatar
hayes committed
273
#INSTALL(DIRECTORY "${Slicer3_BINARY_DIR}/Modules/Packages"
274
275
#  DESTINATION ${SLICER_INSTALL_LIBRARIES_DIR}/Modules)
INSTALL(CODE "EXECUTE_PROCESS\(COMMAND \"${CMAKE_COMMAND}\" -E copy_directory \"${SLICER_LIBRARIES_DIR}/Modules/Packages\" \"\${CMAKE_INSTALL_PREFIX}/${SLICER_INSTALL_LIBRARIES_DIR}/Modules/Packages\"\)")
276
277

CONFIGURE_FILE(
278
279
  ${Slicer3_SOURCE_DIR}/launch.tcl.in
  ${Slicer3_BINARY_DIR}/lib/launch.tcl
280
)
pieper's avatar
pieper committed
281
282

INSTALL(
pieper's avatar
pieper committed
283
  FILES ${Slicer3_BINARY_DIR}/lib/launch.tcl
284
  DESTINATION lib
pieper's avatar
pieper committed
285
)
286

287
288
289
# setup file for setting custom ctest vars
CONFIGURE_FILE(${Slicer3_SOURCE_DIR}/CTestCustom.cmake.in
  ${Slicer3_BINARY_DIR}/CTestCustom.cmake @ONLY)
290
291
292
293
294
295
296
297
298
299
300
301
302

# Set up for building against a Slicer3 build tree and a Slicer3 installation 
#
#
INCLUDE( ${Slicer3_SOURCE_DIR}/GenerateSlicer3Config.cmake)

CONFIGURE_FILE(${Slicer3_SOURCE_DIR}/UseSlicer3.cmake.in
               ${Slicer3_BINARY_DIR}/UseSlicer3.cmake COPYONLY IMMEDIATE)

INSTALL(FILES
#   ${Slicer3_BINARY_DIR}/Slicer3BuildSettings.cmake
   ${Slicer3_BINARY_DIR}/UseSlicer3.cmake
   ${Slicer3_BINARY_DIR}/Utilities/Slicer3Config.cmake
303
   DESTINATION lib/Slicer3
304
305
   COMPONENT Development
)