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