1 cmake_minimum_required(VERSION 2.4)
3 #=========================================================
4 # To avoid warning with some version
5 if(COMMAND cmake_policy)
6 cmake_policy(SET CMP0003 NEW)
7 cmake_policy(SET CMP0007 NEW)
8 endif(COMMAND cmake_policy)
9 #=========================================================
10 OPTION(CLITK_USE_PACS_CONNECTION "USE PACS CONNECTION" OFF)
11 #=========================================================
13 # Look for OpenGL2 version
14 if (VTK_RENDERING_BACKEND STREQUAL "OpenGL2")
15 add_definitions(-DVTK_OPENGL2)
18 #List of vv tools to compile
26 vvToolConvert ## with dummy vvToolConvert.ui
29 ## these ones are for tests (not working)
32 # vvToolFooWithWidgetBase
34 # vvToolConnectedComponentLabeling
35 ## these ones are old ones
36 # vvToolExtractPatient
38 # vvToolStructureSetManager
40 #List of vv tools to compile
41 #Ensure compatibility with QVTKOpenGL for VTK < v8.1 and QVTKOpenGLNativeWidget for others
46 # dependencies of the tools
47 # Future issues : when tool depend on other tools ... how to manage that ?
48 # >> add the relevant $_LIBS variable to the tool that has dependencies?
49 set(vvToolBinarize_LIBS clitkBinarizeImageLib)
50 set(vvToolProfile_LIBS clitkProfileImageLib)
51 set(vvToolHistogram_LIBS clitkHistogramImageLib)
52 set(vvToolConvert_LIBS clitkImageConvertLib)
53 set(vvToolExtractPatient_LIBS clitkSegmentationGgoLib)
54 set(vvToolExtractLung_LIBS clitkSegmentationGgoLib)
55 set(vvToolCropImage_LIBS clitkCropImageLib)
56 set(vvToolMIP_LIBS clitkMIPLib)
57 set(vvToolMedianFilter_LIBS clitkMedianImageFilterLib)
58 set(vvToolImageArithm_LIBS clitkImageArithmImageLib)
59 set(vvToolROIManager_LIBS clitkDicomRTStruct)
61 #=========================================================
62 # List of vv source files
64 # in COMMON_WITH_UI -> must have .h and .cxx and .ui
74 vvIntensityValueSlider
75 vvLabelImageLoaderWidget
77 vvToolSimpleInputSelectorWidget
78 vvToolInputSelectorWidget
81 # in COMMON_WITH_UI -> must have .h and .cxx and VTK7.ui
82 #Ensure compatibility with QVTKOpenGL for VTK < v8.1 and QVTKOpenGLNativeWidget for others
83 set(vv_COMMON_WITH_UI_VTK7
91 vvQProgressDialogITKCommand.cxx
92 vvQDicomSeriesSelector.cxx
96 vvDeformableRegistration.cxx
98 vvInteractorStyleNavigator.cxx
106 vvSlicerManagerCommand.cxx
107 vvToolHistogramCommand.cxx
109 # vvMaximumIntensityProjection.cxx
115 vvBinaryImageOverlayActor.cxx
116 vvStructureSetActor.cxx
120 vvBlendImageActor.cxx
122 vvToolCreatorBase.cxx
126 #=========================================================
127 # Qt related commands
128 if(vv_QT_VERSION VERSION_GREATER "4")
129 find_package(Qt5Widgets REQUIRED)
130 find_package(Qt5Network REQUIRED)
131 find_package(Qt5Designer REQUIRED)
133 find_package(Qt4 REQUIRED)
136 if(vv_QT_VERSION VERSION_GREATER "4")
137 link_directories(${QT5Widgets_LIBRARIES})
138 link_directories(${QT5Network_LIBRARIES})
139 link_directories(${QT5Designer_LIBRARIES})
141 link_directories(${QT_LIBRARY_DIR})
144 if(vv_QT_VERSION VERSION_GREATER "4")
150 vvQDicomSeriesSelector.h
153 vvStructureSetActor.h
163 vvQDicomSeriesSelector.h
166 vvStructureSetActor.h
172 if(vv_QT_VERSION VERSION_GREATER "4")
173 qt5_wrap_ui(vv_UI_CXX
174 qt_ui/vvHelpDialog.ui
175 qt_ui/vvDocumentation.ui
176 qt_ui/vvDicomSeriesSelector.ui
177 qt_ui/vvDummyWindow.ui #For testing
180 QT4_WRAP_UI(vv_UI_CXX
181 qt_ui/vvHelpDialog.ui
182 qt_ui/vvDocumentation.ui
183 qt_ui/vvDicomSeriesSelector.ui
184 qt_ui/vvDummyWindow.ui #For testing
188 if(vv_QT_VERSION VERSION_GREATER "4")
189 QT5_add_resources(vv_SRCS vvIcons.qrc)
191 QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
194 # Add DICOM SERVER gui selector if the adequate GDCM is available
195 if(CLITK_USE_PACS_CONNECTION)
196 SET(vv_SRCS ${vv_SRCS}
197 vvQPacsConnection.cxx
198 vvPacsSettingsDialog.cxx
199 vvDicomServerQueryFactory.cxx
201 if(vv_QT_VERSION VERSION_GREATER "4")
202 qt5_wrap_cpp(vv_SRCS vvQPacsConnection.h
203 vvPacsSettingsDialog.h)
204 qt5_wrap_ui(vv_UI_CXX
205 qt_ui/vvPacsConnection.ui
206 qt_ui/vvPacsSettingsDialog.ui)
208 QT4_WRAP_CPP(vv_SRCS vvQPacsConnection.h
209 vvPacsSettingsDialog.h)
210 QT4_WRAP_UI(vv_UI_CXX
211 qt_ui/vvPacsConnection.ui
212 qt_ui/vvPacsSettingsDialog.ui)
214 endif(CLITK_USE_PACS_CONNECTION)
216 # Add the autotools in the header vvToolsList.h for initialization of the dummy
217 # variables in vv.cxx for the tools contained in vvLib
218 if(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
219 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
220 foreach(tool ${vv_TOOLS} ${vv_TOOLS_VTK7})
221 file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "#include \"${tool}.h\"\n")
222 file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "extern const vvToolCreator<${tool}> *dummy${tool};\n")
223 file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "const vvToolCreator<${tool}> *dummy${tool}2 = dummy${tool};\n\n")
225 endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
227 # Add the autotools and the common files ui
228 foreach(tool ${vv_TOOLS} ${vv_COMMON_WITH_UI})
229 set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
230 if(vv_QT_VERSION VERSION_GREATER "4")
231 QT5_WRAP_CPP(vv_SRCS ${tool}.h)
232 QT5_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
234 QT4_WRAP_CPP(vv_SRCS ${tool}.h)
235 QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
239 #Special case for Main Window with QVTKWidget according VTK version
240 foreach(tool ${vv_TOOLS_VTK7} ${vv_COMMON_WITH_UI_VTK7})
241 set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
242 if(VTK_VERSION VERSION_GREATER "8.0.0")
243 if(vv_QT_VERSION VERSION_GREATER "4")
244 QT5_WRAP_CPP(vv_SRCS ${tool}.h)
245 QT5_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
247 QT4_WRAP_CPP(vv_SRCS ${tool}.h)
248 QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
251 if(vv_QT_VERSION VERSION_GREATER "4")
252 QT5_WRAP_CPP(vv_SRCS ${tool}.h)
253 QT5_WRAP_UI(vv_UI_CXX qt_ui/${tool}VTK7.ui)
255 QT4_WRAP_CPP(vv_SRCS ${tool}.h)
256 QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}VTK7.ui)
261 # Add the common source files
262 foreach(tool ${vv_COMMON})
263 set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
264 if(vv_QT_VERSION VERSION_GREATER "4")
265 QT5_WRAP_CPP(vv_SRCS ${tool}.h)
267 QT4_WRAP_CPP(vv_SRCS ${tool}.h)
271 # if Windows and Qt was built as a static lib then don't set QT_DLL flag
274 if(vv_QT_VERSION VERSION_GREATER "4")
275 if(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
276 file(READ ${Qt5Widgets_LIBRARIES}/QtCore.prl QT_CORE_PRL)
277 if(${QT_CORE_PRL} MATCHES "static")
279 endif(${QT_CORE_PRL} MATCHES "static")
280 endif(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
282 if(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
283 file(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
284 if(${QT_CORE_PRL} MATCHES "static")
286 endif(${QT_CORE_PRL} MATCHES "static")
287 endif(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
291 add_definitions(-DQT_DLL)
294 add_definitions(-DQT_THREAD_SUPPORT)
295 if(vv_QT_VERSION VERSION_GREATER "4")
297 ${Qt5Widgets_INCLUDE_DIRS}
298 ${Qt5Gui_INCLUDE_DIRS}
299 ${Qt5Core_INCLUDE_DIRS}
300 ${Qt5Network_INCLUDE_DIRS}
301 ${Qt5Designer_INCLUDE_DIRS}
302 ${CMAKE_CURRENT_BINARY_DIR}
303 ${CMAKE_CURRENT_SOURCE_DIR}
309 ${QT_QTGUI_INCLUDE_DIR}
310 ${QT_QTCORE_INCLUDE_DIR}
311 ${CMAKE_CURRENT_BINARY_DIR}
312 ${CMAKE_CURRENT_SOURCE_DIR}
315 #=========================================================
317 #=========================================================
318 #support for parallel deformable registration with OpenMP
320 if(CMAKE_COMPILER_IS_GNUCC)
321 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
322 endif(CMAKE_COMPILER_IS_GNUCC)
324 #=========================================================
326 #=========================================================
333 #=========================================================
334 #Add each tool's dependencies
335 foreach(tool ${vv_TOOLS} ${vv_TOOLS_VTK7})
336 set(toolLibs ${toolLibs} ${${tool}_LIBS})
339 #=========================================================
340 #Add Foundation Libraries (this should be after our libraries, since we depend
342 if(VTK_VERSION VERSION_GREATER "6.2.0")
343 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} ${VTK_LIBRARIES})
345 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
348 #=========================================================
349 # Use CxImage to create animated gifs
350 set(vvCxImage clitkCxImage)
351 set(vv_SRCS ${vv_SRCS} vvAnimatedGIFWriter.cxx)
352 include_directories(${CLITK_SOURCE_DIR}/utilities/CxImage)
353 add_subdirectory(${CLITK_SOURCE_DIR}/utilities/CxImage ${PROJECT_BINARY_DIR}/utilities/CxImage)
354 #=========================================================
356 #-----------------------------------------------------------------------------
357 # Avoid linker bug in Mac OS 10.5
358 # See http://wiki.finkproject.org/index.php/Fink:Packaging:Preparing_for_10.5#OpenGL_Bug
361 find_library(CoreFoundation_LIBRARY CoreFoundation REQUIRED)
362 find_library(ApplicationServices_LIBRARY ApplicationServices REQUIRED)
363 find_library(SystemConfiguration_LIBRARY SystemConfiguration REQUIRED)
364 find_library(Security_LIBRARY Security REQUIRED)
365 set(APPLE_FRAMEWORKS ${CoreFoundation_LIBRARY}
366 ${ApplicationServices_LIBRARY}
367 ${SystemConfiguration_LIBRARY}
370 message(STATUS "===== ${APPLE_FRAMEWORKS}")
372 #=========================================================
373 #Create binary and libs for tests
374 if(vv_QT_VERSION VERSION_GREATER "4")
375 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} Qt5::Widgets Qt5::Network Qt5::Designer ${APPLE_FRAMEWORKS})
377 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} ${QT_LIBRARIES} ${APPLE_FRAMEWORKS})
379 # QtNetwork is required by vvRegisterForm ${QT_QTNETWORK_LIBRARY}
381 #-----------------------------------------------------------------------------
382 # For retina displays, see
383 # http://public.kitware.com/pipermail/vtkusers/2015-February/090117.html
385 set(vv_SRCS ${vv_SRCS} vvOSXHelper.mm)
388 add_library(vvLib ${vv_SRCS} ${vv_UI_CXX})
389 target_link_libraries(vvLib ${vvExternalLibs})
392 add_executable(vv WIN32 vv.cxx vvIcon.rc)
394 add_executable(vv vv.cxx)
397 target_link_libraries(vv vvLib)
399 #=========================================================
400 # Install options (also used by CPack)
401 install(TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
403 #=========================================================
405 #=========================================================
407 set(CPACK_PACKAGE_NAME "vv")
408 set(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
409 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
410 set(CPACK_PACKAGE_VENDOR "Creatis-CLB")
411 set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
412 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
413 set(CPACK_PACKAGE_VERSION_MAJOR "1")
414 set(CPACK_PACKAGE_VERSION_MINOR "3")
415 set(CPACK_PACKAGE_VERSION_PATCH "0")
417 set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
419 set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
421 set(CPACK_STRIP_FILES TRUE)
424 # There is a bug in NSI that does not handle full unix paths properly. Make
425 # sure there is at least one set of four (4) backlasshes.
426 set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
427 set(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
429 set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
431 set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
433 set(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
434 set(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
435 set(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
436 set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
437 set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
438 #set(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
439 #set(CPACK_BINARY_ZIP ON)
441 set(CPACK_GENERATOR "STGZ")
442 set(CPACK_SOURCE_GENERATOR "TGZ")
445 #=========================================================
446 #=========================================================
447 configure_file(vvConfiguration.h.in vvConfiguration.h)
448 #=========================================================