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