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