]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
QVTKOpenGLNativeWidget is available from VTK8.2
[clitk.git] / vv / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.4)
2
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 #=========================================================
12
13 # Look for OpenGL2 version
14 if (VTK_RENDERING_BACKEND STREQUAL "OpenGL2")
15   add_definitions(-DVTK_OPENGL2)
16 endif ()
17
18 #List of vv tools to compile
19 set(vv_TOOLS
20   vvToolMedianFilter
21   vvToolRigidReg
22   vvToolCropImage
23   vvToolBinarize
24   vvToolImageArithm
25   vvToolMIP
26   vvToolConvert ## with dummy vvToolConvert.ui
27   vvToolROIManager
28   vvToolSegmentation
29   ## these ones are for tests (not working)
30   # vvToolTest
31   # vvToolFoo
32   # vvToolFooWithWidgetBase
33   # vvToolPlastimatch
34   # vvToolConnectedComponentLabeling
35   ## these ones are old ones
36   # vvToolExtractPatient
37   # vvToolExtractLung
38   # vvToolStructureSetManager
39 )
40 #List of vv tools to compile
41 #Ensure compatibility with QVTKOpenGL for VTK < v8.1 and QVTKOpenGLNativeWidget for others
42 set(vv_TOOLS_VTK7
43   vvToolProfile
44   vvToolHistogram
45 )
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)
60
61 #=========================================================
62 # List of vv source files
63
64 # in COMMON_WITH_UI -> must have .h and .cxx and .ui
65 set(vv_COMMON_WITH_UI
66   vvInfoPanel
67   vvMainWindow
68   vvLinkPanel
69   vvOverlayPanel
70   vvLandmarksPanel
71   vvProgressDialog
72   vvDeformationDialog
73   vvStructSelector
74   vvIntensityValueSlider
75   vvLabelImageLoaderWidget
76   vvToolWidgetBase
77   vvToolSimpleInputSelectorWidget
78   vvToolInputSelectorWidget
79   vvRegisterForm
80 )
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
84   vvMainWindow
85   vvSegmentationDialog
86   vvSurfaceViewerDialog
87 )
88
89 # All others sources
90 set(vv_SRCS
91   vvQProgressDialogITKCommand.cxx
92   vvQDicomSeriesSelector.cxx
93   QTreePushButton.cxx
94   vvMainWindowBase.cxx
95   vvImageWarp.cxx
96   vvDeformableRegistration.cxx
97   vtkVOXImageWriter.cxx
98   vvInteractorStyleNavigator.cxx
99   vvSlicer.cxx
100   vvLandmarks.cxx
101   vvLandmarksGlyph.cxx
102   vvClipPolyData.cxx
103   vvGlyphSource.cxx
104   vvGlyph2D.cxx
105   vvSlicerManager.cxx
106   vvSlicerManagerCommand.cxx
107   vvToolHistogramCommand.cxx
108   vvUtils.cxx
109 #  vvMaximumIntensityProjection.cxx 
110  vvMesh.cxx
111   vvMeshActor.cxx
112   vvMeshReader.cxx
113   vvMidPosition.cxx
114   vvImageContour.cxx
115   vvBinaryImageOverlayActor.cxx
116   vvStructureSetActor.cxx
117   vvSaveState.cxx
118   vvReadState.cxx
119   vvROIActor.cxx
120   vvBlendImageActor.cxx
121   vvToolManager.cxx
122   vvToolCreatorBase.cxx
123   vvToolBaseBase.cxx
124 )
125
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)
132 else()
133   find_package(Qt4 REQUIRED)
134 endif()
135
136 if(vv_QT_VERSION VERSION_GREATER "4")
137   link_directories(${QT5Widgets_LIBRARIES})
138   link_directories(${QT5Network_LIBRARIES})
139   link_directories(${QT5Designer_LIBRARIES})
140 else()
141   link_directories(${QT_LIBRARY_DIR})
142 endif()
143
144 if(vv_QT_VERSION VERSION_GREATER "4")
145   qt5_wrap_cpp(vv_SRCS
146     vvMainWindowBase.h
147     QTreePushButton.h
148     vvDocumentation.h
149     vvHelpDialog.h
150     vvQDicomSeriesSelector.h
151     vvSlicerManager.h
152     vvSlicer.h
153     vvStructureSetActor.h
154     vvROIActor.h
155     vvToolCreatorBase.h
156     )
157 else()
158   QT4_WRAP_CPP(vv_SRCS
159     vvMainWindowBase.h
160     QTreePushButton.h
161     vvDocumentation.h
162     vvHelpDialog.h
163     vvQDicomSeriesSelector.h
164     vvSlicerManager.h
165     vvSlicer.h
166     vvStructureSetActor.h
167     vvROIActor.h
168     vvToolCreatorBase.h
169     )
170 endif()
171
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
178     )
179 else()
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
185     )
186 endif()
187
188 if(vv_QT_VERSION VERSION_GREATER "4")
189   QT5_add_resources(vv_SRCS vvIcons.qrc)
190 else()
191   QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
192 endif()
193
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
200         )
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)
207   else()
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)
213   endif()
214 endif(CLITK_USE_PACS_CONNECTION)
215   
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")
224     endforeach(tool)
225   endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
226   
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)
233       else()
234         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
235         QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
236       endif()
237   endforeach(tool)
238
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.2.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)
246         else()
247           QT4_WRAP_CPP(vv_SRCS ${tool}.h)
248           QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
249         endif()
250       else()
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)
254         else()
255           QT4_WRAP_CPP(vv_SRCS ${tool}.h)
256           QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}VTK7.ui)
257         endif()
258       endif()
259   endforeach(tool)
260   
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)
266       else()
267         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
268       endif()
269   endforeach(tool)
270   
271   # if Windows and Qt was built as a static lib then don't set QT_DLL flag
272   set(QT_STATIC 0)
273   if(WIN32)
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")
278           set(QT_STATIC 1)
279         endif(${QT_CORE_PRL} MATCHES "static")
280       endif(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
281     else()
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")
285           set(QT_STATIC 1)
286         endif(${QT_CORE_PRL} MATCHES "static")
287       endif(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
288     endif()
289   endif(WIN32)
290   if(NOT QT_STATIC)
291     add_definitions(-DQT_DLL)
292   endif(NOT QT_STATIC)
293
294   add_definitions(-DQT_THREAD_SUPPORT)
295   if(vv_QT_VERSION VERSION_GREATER "4")
296     include_directories(
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}
304     )
305   else()
306     include_directories(
307       ${QT_INCLUDES}
308       ${QT_INCLUDE_DIR}
309       ${QT_QTGUI_INCLUDE_DIR}
310       ${QT_QTCORE_INCLUDE_DIR}
311       ${CMAKE_CURRENT_BINARY_DIR}
312       ${CMAKE_CURRENT_SOURCE_DIR}
313     )
314   endif()
315 #=========================================================
316
317 #=========================================================
318 #support for parallel deformable registration with OpenMP
319 if(NOT APPLE)
320 if(CMAKE_COMPILER_IS_GNUCC)
321   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
322 endif(CMAKE_COMPILER_IS_GNUCC)
323 endif(NOT APPLE)
324 #=========================================================
325
326 #=========================================================
327 include_directories(
328   ../common
329   ../tools
330   ../segmentation
331   )
332
333 #=========================================================
334 #Add each tool's dependencies
335 foreach(tool ${vv_TOOLS} ${vv_TOOLS_VTK7})
336   set(toolLibs ${toolLibs} ${${tool}_LIBS})
337 endforeach(tool)
338
339 #=========================================================
340 #Add Foundation Libraries (this should be after our libraries, since we depend
341 #on them)
342 if(VTK_VERSION VERSION_GREATER "6.2.0")
343 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} ${VTK_LIBRARIES})
344 else()
345 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
346 endif()
347
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 #=========================================================
355
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
359 #
360 if(APPLE)
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}
368     ${Security_LIBRARY}
369     )
370   message(STATUS "===== ${APPLE_FRAMEWORKS}")
371 endif()
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})
376 else()
377 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} ${QT_LIBRARIES} ${APPLE_FRAMEWORKS})
378 endif()
379 # QtNetwork is required by vvRegisterForm ${QT_QTNETWORK_LIBRARY}
380
381 #-----------------------------------------------------------------------------
382 # For retina displays, see
383 # http://public.kitware.com/pipermail/vtkusers/2015-February/090117.html
384 if(APPLE)
385   set(vv_SRCS ${vv_SRCS} vvOSXHelper.mm)
386 endif()
387
388 add_library(vvLib ${vv_SRCS} ${vv_UI_CXX})
389 target_link_libraries(vvLib ${vvExternalLibs})
390
391 if(WIN32)
392   add_executable(vv WIN32 vv.cxx vvIcon.rc)
393 else(WIN32)
394   add_executable(vv vv.cxx)
395 endif(WIN32)
396
397 target_link_libraries(vv vvLib)
398
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)
402
403 #=========================================================
404
405 #=========================================================
406 # CPack options
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")
416 if(NIGHTLY)
417   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
418 else(NIGHTLY)
419   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
420 endif(NIGHTLY)
421 set(CPACK_STRIP_FILES TRUE)
422
423 if(WIN32)
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")
428 if(NIGHTLY)
429   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
430 else(NIGHTLY)
431   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
432 endif(NIGHTLY)
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)
440 else(WIN32)
441   set(CPACK_GENERATOR "STGZ")
442   set(CPACK_SOURCE_GENERATOR "TGZ")
443 endif(WIN32)
444 include(CPack)
445 #=========================================================
446 #=========================================================
447 configure_file(vvConfiguration.h.in vvConfiguration.h)
448 #=========================================================