]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
43b71a1b34bd033b9404abae504f2d9670edc35c
[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   vvUtils.cxx
95 #  vvMaximumIntensityProjection.cxx 
96  vvMesh.cxx
97   vvMeshActor.cxx
98   vvMeshReader.cxx
99   vvMidPosition.cxx
100   vvImageContour.cxx
101   vvBinaryImageOverlayActor.cxx
102   vvStructureSetActor.cxx
103   vvSaveState.cxx
104   vvReadState.cxx
105   vvROIActor.cxx
106   vvBlendImageActor.cxx
107   vvToolManager.cxx
108   vvToolCreatorBase.cxx
109   vvToolBaseBase.cxx
110 )
111
112 #=========================================================
113 # Qt related commands
114 if(vv_QT_VERSION VERSION_GREATER "4")
115   find_package(Qt5Widgets REQUIRED)
116   find_package(Qt5Network REQUIRED)
117   find_package(Qt5Designer REQUIRED)
118 else()
119   find_package(Qt4 REQUIRED)
120 endif()
121
122 if(vv_QT_VERSION VERSION_GREATER "4")
123   link_directories(${QT5Widgets_LIBRARIES})
124   link_directories(${QT5Network_LIBRARIES})
125   link_directories(${QT5Designer_LIBRARIES})
126 else()
127   link_directories(${QT_LIBRARY_DIR})
128 endif()
129
130 if(vv_QT_VERSION VERSION_GREATER "4")
131   qt5_wrap_cpp(vv_SRCS
132     vvMainWindowBase.h
133     QTreePushButton.h
134     vvDocumentation.h
135     vvHelpDialog.h
136     vvQDicomSeriesSelector.h
137     vvSlicerManager.h
138     vvSlicer.h
139     vvStructureSetActor.h
140     vvROIActor.h
141     vvToolCreatorBase.h
142     )
143 else()
144   QT4_WRAP_CPP(vv_SRCS
145     vvMainWindowBase.h
146     QTreePushButton.h
147     vvDocumentation.h
148     vvHelpDialog.h
149     vvQDicomSeriesSelector.h
150     vvSlicerManager.h
151     vvSlicer.h
152     vvStructureSetActor.h
153     vvROIActor.h
154     vvToolCreatorBase.h
155     )
156 endif()
157
158 if(vv_QT_VERSION VERSION_GREATER "4")
159   qt5_wrap_ui(vv_UI_CXX
160     qt_ui/vvHelpDialog.ui
161     qt_ui/vvDocumentation.ui
162     qt_ui/vvDicomSeriesSelector.ui
163     qt_ui/vvDummyWindow.ui #For testing
164     )
165 else()
166   QT4_WRAP_UI(vv_UI_CXX
167     qt_ui/vvHelpDialog.ui
168     qt_ui/vvDocumentation.ui
169     qt_ui/vvDicomSeriesSelector.ui
170     qt_ui/vvDummyWindow.ui #For testing
171     )
172 endif()
173
174 if(vv_QT_VERSION VERSION_GREATER "4")
175   QT5_add_resources(vv_SRCS vvIcons.qrc)
176 else()
177   QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
178 endif()
179
180 # Add DICOM SERVER gui selector if the adequate GDCM is available
181 if(CLITK_USE_PACS_CONNECTION)
182   SET(vv_SRCS ${vv_SRCS}
183     vvQPacsConnection.cxx
184         vvPacsSettingsDialog.cxx
185         vvDicomServerQueryFactory.cxx
186         )
187   if(vv_QT_VERSION VERSION_GREATER "4")
188     qt5_wrap_cpp(vv_SRCS vvQPacsConnection.h
189       vvPacsSettingsDialog.h)
190     qt5_wrap_ui(vv_UI_CXX 
191           qt_ui/vvPacsConnection.ui
192       qt_ui/vvPacsSettingsDialog.ui)
193   else()
194     QT4_WRAP_CPP(vv_SRCS vvQPacsConnection.h
195       vvPacsSettingsDialog.h)
196     QT4_WRAP_UI(vv_UI_CXX 
197           qt_ui/vvPacsConnection.ui
198       qt_ui/vvPacsSettingsDialog.ui)
199   endif()
200 endif(CLITK_USE_PACS_CONNECTION)
201   
202   # Add the autotools in the header vvToolsList.h for initialization of the dummy
203   # variables in vv.cxx for the tools contained in vvLib
204   if(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
205     file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
206     foreach(tool ${vv_TOOLS})
207       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "#include \"${tool}.h\"\n")
208       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "extern const vvToolCreator<${tool}> *dummy${tool};\n")
209       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "const vvToolCreator<${tool}> *dummy${tool}2 = dummy${tool};\n\n")
210     endforeach(tool)
211   endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
212   
213   # Add the autotools and the common files ui
214   foreach(tool ${vv_TOOLS} ${vv_COMMON_WITH_UI})
215       set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
216       if(vv_QT_VERSION VERSION_GREATER "4")
217         QT5_WRAP_CPP(vv_SRCS ${tool}.h)
218         QT5_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
219       else()
220         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
221         QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
222       endif()
223   endforeach(tool)
224   
225   # Add the common source files
226   foreach(tool ${vv_COMMON})
227       set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
228       if(vv_QT_VERSION VERSION_GREATER "4")
229         QT5_WRAP_CPP(vv_SRCS ${tool}.h)
230       else()
231         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
232       endif()
233   endforeach(tool)
234   
235   # if Windows and Qt was built as a static lib then don't set QT_DLL flag
236   set(QT_STATIC 0)
237   if(WIN32)
238     if(vv_QT_VERSION VERSION_GREATER "4")
239       if(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
240         file(READ ${Qt5Widgets_LIBRARIES}/QtCore.prl QT_CORE_PRL)
241         if(${QT_CORE_PRL} MATCHES "static")
242           set(QT_STATIC 1)
243         endif(${QT_CORE_PRL} MATCHES "static")
244       endif(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
245     else()
246       if(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
247         file(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
248         if(${QT_CORE_PRL} MATCHES "static")
249           set(QT_STATIC 1)
250         endif(${QT_CORE_PRL} MATCHES "static")
251       endif(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
252     endif()
253   endif(WIN32)
254   if(NOT QT_STATIC)
255     add_definitions(-DQT_DLL)
256   endif(NOT QT_STATIC)
257
258   add_definitions(-DQT_THREAD_SUPPORT)
259   if(vv_QT_VERSION VERSION_GREATER "4")
260     include_directories(
261       ${Qt5Widgets_INCLUDE_DIRS}
262       ${Qt5Gui_INCLUDE_DIRS}
263       ${Qt5Core_INCLUDE_DIRS}
264       ${Qt5Network_INCLUDE_DIRS}
265       ${Qt5Designer_INCLUDE_DIRS}
266       ${CMAKE_CURRENT_BINARY_DIR}
267       ${CMAKE_CURRENT_SOURCE_DIR}
268     )
269   else()
270     include_directories(
271       ${QT_INCLUDES}
272       ${QT_INCLUDE_DIR}
273       ${QT_QTGUI_INCLUDE_DIR}
274       ${QT_QTCORE_INCLUDE_DIR}
275       ${CMAKE_CURRENT_BINARY_DIR}
276       ${CMAKE_CURRENT_SOURCE_DIR}
277     )
278   endif()
279 #=========================================================
280
281 #=========================================================
282 #support for parallel deformable registration with OpenMP
283 if(NOT APPLE)
284 if(CMAKE_COMPILER_IS_GNUCC)
285   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
286 endif(CMAKE_COMPILER_IS_GNUCC)
287 endif(NOT APPLE)
288 #=========================================================
289
290 #=========================================================
291 include_directories(
292   ../common
293   ../tools
294   ../segmentation
295   )
296
297 #=========================================================
298 #Add each tool's dependencies
299 foreach(tool ${vv_TOOLS})
300   set(toolLibs ${toolLibs} ${${tool}_LIBS})
301 endforeach(tool)
302
303 #=========================================================
304 #Add Foundation Libraries (this should be after our libraries, since we depend
305 #on them)
306 if(VTK_VERSION VERSION_GREATER "6.2.0")
307 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} ${VTK_LIBRARIES})
308 else()
309 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
310 endif()
311
312 #=========================================================
313 # Use CxImage to create animated gifs
314 set(vvCxImage clitkCxImage)
315 set(vv_SRCS ${vv_SRCS} vvAnimatedGIFWriter.cxx)
316 include_directories(${CLITK_SOURCE_DIR}/utilities/CxImage)
317 add_subdirectory(${CLITK_SOURCE_DIR}/utilities/CxImage ${PROJECT_BINARY_DIR}/utilities/CxImage)
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 #=========================================================