]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
Remove warning with VTK7.1
[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 #List of vv tools to compile
13 set(vv_TOOLS
14   vvToolMedianFilter
15   vvToolRigidReg
16   vvToolCropImage
17   vvToolBinarize
18   vvToolImageArithm
19   vvToolResample
20   vvToolMIP
21   vvToolConvert ## with dummy vvToolConvert.ui
22   vvToolROIManager
23   vvToolSegmentation
24   vvToolProfile
25   vvToolHistogram
26   ## these ones are for tests (not working)
27   # vvToolTest
28   # vvToolFoo
29   # vvToolFooWithWidgetBase
30   # vvToolPlastimatch
31   # vvToolConnectedComponentLabeling
32   ## these ones are old ones
33   # vvToolExtractPatient
34   # vvToolExtractLung
35   # vvToolStructureSetManager
36 )
37 # dependencies of the tools
38 # Future issues : when tool depend on other tools ... how to manage that ?
39 #  >> add the relevant $_LIBS variable to the tool that has dependencies?
40 set(vvToolBinarize_LIBS clitkBinarizeImageLib)
41 set(vvToolProfile_LIBS clitkProfileImageLib)
42 set(vvToolHistogram_LIBS clitkHistogramImageLib)
43 set(vvToolResample_LIBS clitkResampleImageLib)
44 set(vvToolConvert_LIBS clitkImageConvertLib)
45 set(vvToolExtractPatient_LIBS clitkSegmentationGgoLib)
46 set(vvToolExtractLung_LIBS clitkSegmentationGgoLib)
47 set(vvToolCropImage_LIBS clitkCropImageLib)
48 set(vvToolMIP_LIBS clitkMIPLib)
49 set(vvToolMedianFilter_LIBS clitkMedianImageFilterLib)
50 set(vvToolImageArithm_LIBS clitkImageArithmImageLib)
51 set(vvToolROIManager_LIBS clitkDicomRTStruct)
52
53 #=========================================================
54 # List of vv source files
55
56 # in COMMON_WITH_UI -> must have .h and .cxx and .ui
57 set(vv_COMMON_WITH_UI
58   vvInfoPanel
59   vvMainWindow
60   vvLinkPanel
61   vvOverlayPanel
62   vvLandmarksPanel
63   vvProgressDialog
64   vvSegmentationDialog
65   vvSurfaceViewerDialog
66   vvDeformationDialog
67   vvStructSelector
68   vvIntensityValueSlider
69   vvLabelImageLoaderWidget
70   vvToolWidgetBase
71   vvToolSimpleInputSelectorWidget
72   vvToolInputSelectorWidget
73   vvRegisterForm
74 )
75
76 # All others sources
77 set(vv_SRCS
78   vvQProgressDialogITKCommand.cxx
79   vvQDicomSeriesSelector.cxx
80   QTreePushButton.cxx
81   vvMainWindowBase.cxx
82   vvImageWarp.cxx
83   vvDeformableRegistration.cxx
84   vtkVOXImageWriter.cxx
85   vvInteractorStyleNavigator.cxx
86   vvSlicer.cxx
87   vvLandmarks.cxx
88   vvLandmarksGlyph.cxx
89   vvClipPolyData.cxx
90   vvGlyphSource.cxx
91   vvGlyph2D.cxx
92   vvSlicerManager.cxx
93   vvSlicerManagerCommand.cxx
94   vvToolHistogramCommand.cxx
95   vvUtils.cxx
96 #  vvMaximumIntensityProjection.cxx 
97  vvMesh.cxx
98   vvMeshActor.cxx
99   vvMeshReader.cxx
100   vvMidPosition.cxx
101   vvImageContour.cxx
102   vvBinaryImageOverlayActor.cxx
103   vvStructureSetActor.cxx
104   vvSaveState.cxx
105   vvReadState.cxx
106   vvROIActor.cxx
107   vvBlendImageActor.cxx
108   vvToolManager.cxx
109   vvToolCreatorBase.cxx
110   vvToolBaseBase.cxx
111 )
112
113 #=========================================================
114 # Qt related commands
115 if(vv_QT_VERSION VERSION_GREATER "4")
116   find_package(Qt5Widgets REQUIRED)
117   find_package(Qt5Network REQUIRED)
118   find_package(Qt5Designer REQUIRED)
119 else()
120   find_package(Qt4 REQUIRED)
121 endif()
122
123 if(vv_QT_VERSION VERSION_GREATER "4")
124   link_directories(${QT5Widgets_LIBRARIES})
125   link_directories(${QT5Network_LIBRARIES})
126   link_directories(${QT5Designer_LIBRARIES})
127 else()
128   link_directories(${QT_LIBRARY_DIR})
129 endif()
130
131 if(vv_QT_VERSION VERSION_GREATER "4")
132   qt5_wrap_cpp(vv_SRCS
133     vvMainWindowBase.h
134     QTreePushButton.h
135     vvDocumentation.h
136     vvHelpDialog.h
137     vvQDicomSeriesSelector.h
138     vvSlicerManager.h
139     vvSlicer.h
140     vvStructureSetActor.h
141     vvROIActor.h
142     vvToolCreatorBase.h
143     )
144 else()
145   QT4_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 endif()
158
159 if(vv_QT_VERSION VERSION_GREATER "4")
160   qt5_wrap_ui(vv_UI_CXX
161     qt_ui/vvHelpDialog.ui
162     qt_ui/vvDocumentation.ui
163     qt_ui/vvDicomSeriesSelector.ui
164     qt_ui/vvDummyWindow.ui #For testing
165     )
166 else()
167   QT4_WRAP_UI(vv_UI_CXX
168     qt_ui/vvHelpDialog.ui
169     qt_ui/vvDocumentation.ui
170     qt_ui/vvDicomSeriesSelector.ui
171     qt_ui/vvDummyWindow.ui #For testing
172     )
173 endif()
174
175 if(vv_QT_VERSION VERSION_GREATER "4")
176   QT5_add_resources(vv_SRCS vvIcons.qrc)
177 else()
178   QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
179 endif()
180
181 # Add DICOM SERVER gui selector if the adequate GDCM is available
182 if(CLITK_USE_PACS_CONNECTION)
183   SET(vv_SRCS ${vv_SRCS}
184     vvQPacsConnection.cxx
185         vvPacsSettingsDialog.cxx
186         vvDicomServerQueryFactory.cxx
187         )
188   if(vv_QT_VERSION VERSION_GREATER "4")
189     qt5_wrap_cpp(vv_SRCS vvQPacsConnection.h
190       vvPacsSettingsDialog.h)
191     qt5_wrap_ui(vv_UI_CXX 
192           qt_ui/vvPacsConnection.ui
193       qt_ui/vvPacsSettingsDialog.ui)
194   else()
195     QT4_WRAP_CPP(vv_SRCS vvQPacsConnection.h
196       vvPacsSettingsDialog.h)
197     QT4_WRAP_UI(vv_UI_CXX 
198           qt_ui/vvPacsConnection.ui
199       qt_ui/vvPacsSettingsDialog.ui)
200   endif()
201 endif(CLITK_USE_PACS_CONNECTION)
202   
203   # Add the autotools in the header vvToolsList.h for initialization of the dummy
204   # variables in vv.cxx for the tools contained in vvLib
205   if(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
206     file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
207     foreach(tool ${vv_TOOLS})
208       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "#include \"${tool}.h\"\n")
209       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "extern const vvToolCreator<${tool}> *dummy${tool};\n")
210       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "const vvToolCreator<${tool}> *dummy${tool}2 = dummy${tool};\n\n")
211     endforeach(tool)
212   endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
213   
214   # Add the autotools and the common files ui
215   foreach(tool ${vv_TOOLS} ${vv_COMMON_WITH_UI})
216       set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
217       if(vv_QT_VERSION VERSION_GREATER "4")
218         QT5_WRAP_CPP(vv_SRCS ${tool}.h)
219         QT5_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
220       else()
221         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
222         QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
223       endif()
224   endforeach(tool)
225   
226   # Add the common source files
227   foreach(tool ${vv_COMMON})
228       set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
229       if(vv_QT_VERSION VERSION_GREATER "4")
230         QT5_WRAP_CPP(vv_SRCS ${tool}.h)
231       else()
232         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
233       endif()
234   endforeach(tool)
235   
236   # if Windows and Qt was built as a static lib then don't set QT_DLL flag
237   set(QT_STATIC 0)
238   if(WIN32)
239     if(vv_QT_VERSION VERSION_GREATER "4")
240       if(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
241         file(READ ${Qt5Widgets_LIBRARIES}/QtCore.prl QT_CORE_PRL)
242         if(${QT_CORE_PRL} MATCHES "static")
243           set(QT_STATIC 1)
244         endif(${QT_CORE_PRL} MATCHES "static")
245       endif(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
246     else()
247       if(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
248         file(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
249         if(${QT_CORE_PRL} MATCHES "static")
250           set(QT_STATIC 1)
251         endif(${QT_CORE_PRL} MATCHES "static")
252       endif(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
253     endif()
254   endif(WIN32)
255   if(NOT QT_STATIC)
256     add_definitions(-DQT_DLL)
257   endif(NOT QT_STATIC)
258
259   add_definitions(-DQT_THREAD_SUPPORT)
260   if(vv_QT_VERSION VERSION_GREATER "4")
261     include_directories(
262       ${Qt5Widgets_INCLUDE_DIRS}
263       ${Qt5Gui_INCLUDE_DIRS}
264       ${Qt5Core_INCLUDE_DIRS}
265       ${Qt5Network_INCLUDE_DIRS}
266       ${Qt5Designer_INCLUDE_DIRS}
267       ${CMAKE_CURRENT_BINARY_DIR}
268       ${CMAKE_CURRENT_SOURCE_DIR}
269     )
270   else()
271     include_directories(
272       ${QT_INCLUDES}
273       ${QT_INCLUDE_DIR}
274       ${QT_QTGUI_INCLUDE_DIR}
275       ${QT_QTCORE_INCLUDE_DIR}
276       ${CMAKE_CURRENT_BINARY_DIR}
277       ${CMAKE_CURRENT_SOURCE_DIR}
278     )
279   endif()
280 #=========================================================
281
282 #=========================================================
283 #support for parallel deformable registration with OpenMP
284 if(NOT APPLE)
285 if(CMAKE_COMPILER_IS_GNUCC)
286   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
287 endif(CMAKE_COMPILER_IS_GNUCC)
288 endif(NOT APPLE)
289 #=========================================================
290
291 #=========================================================
292 include_directories(
293   ../common
294   ../tools
295   ../segmentation
296   )
297
298 #=========================================================
299 #Add each tool's dependencies
300 foreach(tool ${vv_TOOLS})
301   set(toolLibs ${toolLibs} ${${tool}_LIBS})
302 endforeach(tool)
303
304 #=========================================================
305 #Add Foundation Libraries (this should be after our libraries, since we depend
306 #on them)
307 if(VTK_VERSION VERSION_GREATER "6.2.0")
308 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} ${VTK_LIBRARIES})
309 else()
310 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
311 endif()
312
313 #=========================================================
314 # Use CxImage to create animated gifs
315 set(vvCxImage clitkCxImage)
316 set(vv_SRCS ${vv_SRCS} vvAnimatedGIFWriter.cxx)
317 include_directories(${CLITK_SOURCE_DIR}/utilities/CxImage)
318 add_subdirectory(${CLITK_SOURCE_DIR}/utilities/CxImage ${PROJECT_BINARY_DIR}/utilities/CxImage)
319 #=========================================================
320
321 #-----------------------------------------------------------------------------
322 # Avoid linker bug in Mac OS 10.5
323 # See http://wiki.finkproject.org/index.php/Fink:Packaging:Preparing_for_10.5#OpenGL_Bug
324 #
325 if(APPLE)
326   find_library(CoreFoundation_LIBRARY CoreFoundation REQUIRED)
327   find_library(ApplicationServices_LIBRARY ApplicationServices REQUIRED)
328   find_library(SystemConfiguration_LIBRARY SystemConfiguration REQUIRED)
329   find_library(Security_LIBRARY Security REQUIRED)
330   set(APPLE_FRAMEWORKS ${CoreFoundation_LIBRARY}
331     ${ApplicationServices_LIBRARY}
332     ${SystemConfiguration_LIBRARY}
333     ${Security_LIBRARY}
334     )
335   message(STATUS "===== ${APPLE_FRAMEWORKS}")
336 endif()
337 #=========================================================
338 #Create binary and libs for tests
339 if(vv_QT_VERSION VERSION_GREATER "4")
340 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} Qt5::Widgets Qt5::Network Qt5::Designer ${APPLE_FRAMEWORKS})
341 else()
342 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} ${QT_LIBRARIES} ${APPLE_FRAMEWORKS})
343 endif()
344 # QtNetwork is required by vvRegisterForm ${QT_QTNETWORK_LIBRARY}
345
346 #-----------------------------------------------------------------------------
347 # For retina displays, see
348 # http://public.kitware.com/pipermail/vtkusers/2015-February/090117.html
349 if(APPLE)
350   set(vv_SRCS ${vv_SRCS} vvOSXHelper.mm)
351 endif()
352
353 add_library(vvLib ${vv_SRCS} ${vv_UI_CXX})
354 target_link_libraries(vvLib ${vvExternalLibs})
355
356 if(WIN32)
357   add_executable(vv WIN32 vv.cxx vvIcon.rc)
358 else(WIN32)
359   add_executable(vv vv.cxx)
360 endif(WIN32)
361
362 target_link_libraries(vv vvLib)
363
364 #=========================================================
365 # Install options (also used by CPack)
366 install(TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
367
368 #=========================================================
369
370 #=========================================================
371 # CPack options
372 set(CPACK_PACKAGE_NAME "vv")
373 set(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
374 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
375 set(CPACK_PACKAGE_VENDOR "Creatis-CLB")
376 set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
377 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
378 set(CPACK_PACKAGE_VERSION_MAJOR "1")
379 set(CPACK_PACKAGE_VERSION_MINOR "3")
380 set(CPACK_PACKAGE_VERSION_PATCH "0")
381 if(NIGHTLY)
382   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
383 else(NIGHTLY)
384   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
385 endif(NIGHTLY)
386 set(CPACK_STRIP_FILES TRUE)
387
388 if(WIN32)
389   # There is a bug in NSI that does not handle full unix paths properly. Make
390   # sure there is at least one set of four (4) backlasshes.
391   set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
392   set(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
393 if(NIGHTLY)
394   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
395 else(NIGHTLY)
396   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
397 endif(NIGHTLY)
398   set(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
399   set(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
400   set(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
401   set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
402   set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
403   #set(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
404   #set(CPACK_BINARY_ZIP ON)
405 else(WIN32)
406   set(CPACK_GENERATOR "STGZ")
407   set(CPACK_SOURCE_GENERATOR "TGZ")
408 endif(WIN32)
409 include(CPack)
410 #=========================================================
411 #=========================================================
412 configure_file(vvConfiguration.h.in vvConfiguration.h)
413 #=========================================================