]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
Change permission right access when installing for cluster tools and vv
[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   vvToolMIP
20   vvToolConvert ## with dummy vvToolConvert.ui
21   vvToolROIManager
22   vvToolSegmentation
23   vvToolProfile
24   vvToolHistogram
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(vvToolHistogram_LIBS clitkHistogramImageLib)
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   vvToolHistogramCommand.cxx
93   vvUtils.cxx
94 #  vvMaximumIntensityProjection.cxx 
95  vvMesh.cxx
96   vvMeshActor.cxx
97   vvMeshReader.cxx
98   vvMidPosition.cxx
99   vvImageContour.cxx
100   vvBinaryImageOverlayActor.cxx
101   vvStructureSetActor.cxx
102   vvSaveState.cxx
103   vvReadState.cxx
104   vvROIActor.cxx
105   vvBlendImageActor.cxx
106   vvToolManager.cxx
107   vvToolCreatorBase.cxx
108   vvToolBaseBase.cxx
109 )
110
111 #=========================================================
112 # Qt related commands
113 if(vv_QT_VERSION VERSION_GREATER "4")
114   find_package(Qt5Widgets REQUIRED)
115   find_package(Qt5Network REQUIRED)
116   find_package(Qt5Designer REQUIRED)
117 else()
118   find_package(Qt4 REQUIRED)
119 endif()
120
121 if(vv_QT_VERSION VERSION_GREATER "4")
122   link_directories(${QT5Widgets_LIBRARIES})
123   link_directories(${QT5Network_LIBRARIES})
124   link_directories(${QT5Designer_LIBRARIES})
125 else()
126   link_directories(${QT_LIBRARY_DIR})
127 endif()
128
129 if(vv_QT_VERSION VERSION_GREATER "4")
130   qt5_wrap_cpp(vv_SRCS
131     vvMainWindowBase.h
132     QTreePushButton.h
133     vvDocumentation.h
134     vvHelpDialog.h
135     vvQDicomSeriesSelector.h
136     vvSlicerManager.h
137     vvSlicer.h
138     vvStructureSetActor.h
139     vvROIActor.h
140     vvToolCreatorBase.h
141     )
142 else()
143   QT4_WRAP_CPP(vv_SRCS
144     vvMainWindowBase.h
145     QTreePushButton.h
146     vvDocumentation.h
147     vvHelpDialog.h
148     vvQDicomSeriesSelector.h
149     vvSlicerManager.h
150     vvSlicer.h
151     vvStructureSetActor.h
152     vvROIActor.h
153     vvToolCreatorBase.h
154     )
155 endif()
156
157 if(vv_QT_VERSION VERSION_GREATER "4")
158   qt5_wrap_ui(vv_UI_CXX
159     qt_ui/vvHelpDialog.ui
160     qt_ui/vvDocumentation.ui
161     qt_ui/vvDicomSeriesSelector.ui
162     qt_ui/vvDummyWindow.ui #For testing
163     )
164 else()
165   QT4_WRAP_UI(vv_UI_CXX
166     qt_ui/vvHelpDialog.ui
167     qt_ui/vvDocumentation.ui
168     qt_ui/vvDicomSeriesSelector.ui
169     qt_ui/vvDummyWindow.ui #For testing
170     )
171 endif()
172
173 if(vv_QT_VERSION VERSION_GREATER "4")
174   QT5_add_resources(vv_SRCS vvIcons.qrc)
175 else()
176   QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
177 endif()
178
179 # Add DICOM SERVER gui selector if the adequate GDCM is available
180 if(CLITK_USE_PACS_CONNECTION)
181   SET(vv_SRCS ${vv_SRCS}
182     vvQPacsConnection.cxx
183         vvPacsSettingsDialog.cxx
184         vvDicomServerQueryFactory.cxx
185         )
186   if(vv_QT_VERSION VERSION_GREATER "4")
187     qt5_wrap_cpp(vv_SRCS vvQPacsConnection.h
188       vvPacsSettingsDialog.h)
189     qt5_wrap_ui(vv_UI_CXX 
190           qt_ui/vvPacsConnection.ui
191       qt_ui/vvPacsSettingsDialog.ui)
192   else()
193     QT4_WRAP_CPP(vv_SRCS vvQPacsConnection.h
194       vvPacsSettingsDialog.h)
195     QT4_WRAP_UI(vv_UI_CXX 
196           qt_ui/vvPacsConnection.ui
197       qt_ui/vvPacsSettingsDialog.ui)
198   endif()
199 endif(CLITK_USE_PACS_CONNECTION)
200   
201   # Add the autotools in the header vvToolsList.h for initialization of the dummy
202   # variables in vv.cxx for the tools contained in vvLib
203   if(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
204     file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
205     foreach(tool ${vv_TOOLS})
206       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "#include \"${tool}.h\"\n")
207       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "extern const vvToolCreator<${tool}> *dummy${tool};\n")
208       file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "const vvToolCreator<${tool}> *dummy${tool}2 = dummy${tool};\n\n")
209     endforeach(tool)
210   endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
211   
212   # Add the autotools and the common files ui
213   foreach(tool ${vv_TOOLS} ${vv_COMMON_WITH_UI})
214       set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
215       if(vv_QT_VERSION VERSION_GREATER "4")
216         QT5_WRAP_CPP(vv_SRCS ${tool}.h)
217         QT5_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
218       else()
219         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
220         QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
221       endif()
222   endforeach(tool)
223   
224   # Add the common source files
225   foreach(tool ${vv_COMMON})
226       set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
227       if(vv_QT_VERSION VERSION_GREATER "4")
228         QT5_WRAP_CPP(vv_SRCS ${tool}.h)
229       else()
230         QT4_WRAP_CPP(vv_SRCS ${tool}.h)
231       endif()
232   endforeach(tool)
233   
234   # if Windows and Qt was built as a static lib then don't set QT_DLL flag
235   set(QT_STATIC 0)
236   if(WIN32)
237     if(vv_QT_VERSION VERSION_GREATER "4")
238       if(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
239         file(READ ${Qt5Widgets_LIBRARIES}/QtCore.prl QT_CORE_PRL)
240         if(${QT_CORE_PRL} MATCHES "static")
241           set(QT_STATIC 1)
242         endif(${QT_CORE_PRL} MATCHES "static")
243       endif(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
244     else()
245       if(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
246         file(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
247         if(${QT_CORE_PRL} MATCHES "static")
248           set(QT_STATIC 1)
249         endif(${QT_CORE_PRL} MATCHES "static")
250       endif(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
251     endif()
252   endif(WIN32)
253   if(NOT QT_STATIC)
254     add_definitions(-DQT_DLL)
255   endif(NOT QT_STATIC)
256
257   add_definitions(-DQT_THREAD_SUPPORT)
258   if(vv_QT_VERSION VERSION_GREATER "4")
259     include_directories(
260       ${Qt5Widgets_INCLUDE_DIRS}
261       ${Qt5Gui_INCLUDE_DIRS}
262       ${Qt5Core_INCLUDE_DIRS}
263       ${Qt5Network_INCLUDE_DIRS}
264       ${Qt5Designer_INCLUDE_DIRS}
265       ${CMAKE_CURRENT_BINARY_DIR}
266       ${CMAKE_CURRENT_SOURCE_DIR}
267     )
268   else()
269     include_directories(
270       ${QT_INCLUDES}
271       ${QT_INCLUDE_DIR}
272       ${QT_QTGUI_INCLUDE_DIR}
273       ${QT_QTCORE_INCLUDE_DIR}
274       ${CMAKE_CURRENT_BINARY_DIR}
275       ${CMAKE_CURRENT_SOURCE_DIR}
276     )
277   endif()
278 #=========================================================
279
280 #=========================================================
281 #support for parallel deformable registration with OpenMP
282 if(NOT APPLE)
283 if(CMAKE_COMPILER_IS_GNUCC)
284   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
285 endif(CMAKE_COMPILER_IS_GNUCC)
286 endif(NOT APPLE)
287 #=========================================================
288
289 #=========================================================
290 include_directories(
291   ../common
292   ../tools
293   ../segmentation
294   )
295
296 #=========================================================
297 #Add each tool's dependencies
298 foreach(tool ${vv_TOOLS})
299   set(toolLibs ${toolLibs} ${${tool}_LIBS})
300 endforeach(tool)
301
302 #=========================================================
303 #Add Foundation Libraries (this should be after our libraries, since we depend
304 #on them)
305 if(VTK_VERSION VERSION_GREATER "6.2.0")
306 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} ${VTK_LIBRARIES})
307 else()
308 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
309 endif()
310
311 #=========================================================
312 # Use CxImage to create animated gifs
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 #=========================================================
318
319 #-----------------------------------------------------------------------------
320 # Avoid linker bug in Mac OS 10.5
321 # See http://wiki.finkproject.org/index.php/Fink:Packaging:Preparing_for_10.5#OpenGL_Bug
322 #
323 if(APPLE)
324   find_library(CoreFoundation_LIBRARY CoreFoundation REQUIRED)
325   find_library(ApplicationServices_LIBRARY ApplicationServices REQUIRED)
326   find_library(SystemConfiguration_LIBRARY SystemConfiguration REQUIRED)
327   find_library(Security_LIBRARY Security REQUIRED)
328   set(APPLE_FRAMEWORKS ${CoreFoundation_LIBRARY}
329     ${ApplicationServices_LIBRARY}
330     ${SystemConfiguration_LIBRARY}
331     ${Security_LIBRARY}
332     )
333   message(STATUS "===== ${APPLE_FRAMEWORKS}")
334 endif()
335 #=========================================================
336 #Create binary and libs for tests
337 if(vv_QT_VERSION VERSION_GREATER "4")
338 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} Qt5::Widgets Qt5::Network Qt5::Designer ${APPLE_FRAMEWORKS})
339 else()
340 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} ${QT_LIBRARIES} ${APPLE_FRAMEWORKS})
341 endif()
342 # QtNetwork is required by vvRegisterForm ${QT_QTNETWORK_LIBRARY}
343
344 #-----------------------------------------------------------------------------
345 # For retina displays, see
346 # http://public.kitware.com/pipermail/vtkusers/2015-February/090117.html
347 if(APPLE)
348   set(vv_SRCS ${vv_SRCS} vvOSXHelper.mm)
349 endif()
350
351 add_library(vvLib ${vv_SRCS} ${vv_UI_CXX})
352 target_link_libraries(vvLib ${vvExternalLibs})
353
354 if(WIN32)
355   add_executable(vv WIN32 vv.cxx vvIcon.rc)
356 else(WIN32)
357   add_executable(vv vv.cxx)
358 endif(WIN32)
359
360 target_link_libraries(vv vvLib)
361
362 #=========================================================
363 # Install options (also used by CPack)
364 install(TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
365
366 #=========================================================
367
368 #=========================================================
369 # CPack options
370 set(CPACK_PACKAGE_NAME "vv")
371 set(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
372 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
373 set(CPACK_PACKAGE_VENDOR "Creatis-CLB")
374 set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
375 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
376 set(CPACK_PACKAGE_VERSION_MAJOR "1")
377 set(CPACK_PACKAGE_VERSION_MINOR "3")
378 set(CPACK_PACKAGE_VERSION_PATCH "0")
379 if(NIGHTLY)
380   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
381 else(NIGHTLY)
382   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
383 endif(NIGHTLY)
384 set(CPACK_STRIP_FILES TRUE)
385
386 if(WIN32)
387   # There is a bug in NSI that does not handle full unix paths properly. Make
388   # sure there is at least one set of four (4) backlasshes.
389   set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
390   set(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
391 if(NIGHTLY)
392   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
393 else(NIGHTLY)
394   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
395 endif(NIGHTLY)
396   set(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
397   set(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
398   set(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
399   set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
400   set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
401   #set(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
402   #set(CPACK_BINARY_ZIP ON)
403 else(WIN32)
404   set(CPACK_GENERATOR "STGZ")
405   set(CPACK_SOURCE_GENERATOR "TGZ")
406 endif(WIN32)
407 include(CPack)
408 #=========================================================
409 #=========================================================
410 configure_file(vvConfiguration.h.in vvConfiguration.h)
411 #=========================================================