1 cmake_minimum_required(VERSION 2.4)
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 #=========================================================
13 # Look for OpenGL2 version
14 if (VTK_RENDERING_BACKEND STREQUAL "OpenGL2")
15 add_definitions(-DVTK_OPENGL2)
18 #List of vv tools to compile
26 vvToolConvert ## with dummy vvToolConvert.ui
31 ## these ones are for tests (not working)
34 # vvToolFooWithWidgetBase
36 # vvToolConnectedComponentLabeling
37 ## these ones are old ones
38 # vvToolExtractPatient
40 # vvToolStructureSetManager
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)
57 #=========================================================
58 # List of vv source files
60 # in COMMON_WITH_UI -> must have .h and .cxx and .ui
72 vvIntensityValueSlider
73 vvLabelImageLoaderWidget
75 vvToolSimpleInputSelectorWidget
76 vvToolInputSelectorWidget
82 vvQProgressDialogITKCommand.cxx
83 vvQDicomSeriesSelector.cxx
87 vvDeformableRegistration.cxx
89 vvInteractorStyleNavigator.cxx
97 vvSlicerManagerCommand.cxx
98 vvToolHistogramCommand.cxx
100 # vvMaximumIntensityProjection.cxx
106 vvBinaryImageOverlayActor.cxx
107 vvStructureSetActor.cxx
111 vvBlendImageActor.cxx
113 vvToolCreatorBase.cxx
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)
124 find_package(Qt4 REQUIRED)
127 if(vv_QT_VERSION VERSION_GREATER "4")
128 link_directories(${QT5Widgets_LIBRARIES})
129 link_directories(${QT5Network_LIBRARIES})
130 link_directories(${QT5Designer_LIBRARIES})
132 link_directories(${QT_LIBRARY_DIR})
135 if(vv_QT_VERSION VERSION_GREATER "4")
141 vvQDicomSeriesSelector.h
144 vvStructureSetActor.h
154 vvQDicomSeriesSelector.h
157 vvStructureSetActor.h
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
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
179 if(vv_QT_VERSION VERSION_GREATER "4")
180 QT5_add_resources(vv_SRCS vvIcons.qrc)
182 QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
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
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)
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)
205 endif(CLITK_USE_PACS_CONNECTION)
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")
216 endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
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)
225 QT4_WRAP_CPP(vv_SRCS ${tool}.h)
226 QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
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)
236 QT4_WRAP_CPP(vv_SRCS ${tool}.h)
240 # if Windows and Qt was built as a static lib then don't set QT_DLL flag
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")
248 endif(${QT_CORE_PRL} MATCHES "static")
249 endif(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
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")
255 endif(${QT_CORE_PRL} MATCHES "static")
256 endif(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
260 add_definitions(-DQT_DLL)
263 add_definitions(-DQT_THREAD_SUPPORT)
264 if(vv_QT_VERSION VERSION_GREATER "4")
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}
278 ${QT_QTGUI_INCLUDE_DIR}
279 ${QT_QTCORE_INCLUDE_DIR}
280 ${CMAKE_CURRENT_BINARY_DIR}
281 ${CMAKE_CURRENT_SOURCE_DIR}
284 #=========================================================
286 #=========================================================
287 #support for parallel deformable registration with OpenMP
289 if(CMAKE_COMPILER_IS_GNUCC)
290 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
291 endif(CMAKE_COMPILER_IS_GNUCC)
293 #=========================================================
295 #=========================================================
302 #=========================================================
303 #Add each tool's dependencies
304 foreach(tool ${vv_TOOLS})
305 set(toolLibs ${toolLibs} ${${tool}_LIBS})
308 #=========================================================
309 #Add Foundation Libraries (this should be after our libraries, since we depend
311 if(VTK_VERSION VERSION_GREATER "6.2.0")
312 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} ${VTK_LIBRARIES})
314 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
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 #=========================================================
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
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}
339 message(STATUS "===== ${APPLE_FRAMEWORKS}")
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})
346 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} ${QT_LIBRARIES} ${APPLE_FRAMEWORKS})
348 # QtNetwork is required by vvRegisterForm ${QT_QTNETWORK_LIBRARY}
350 #-----------------------------------------------------------------------------
351 # For retina displays, see
352 # http://public.kitware.com/pipermail/vtkusers/2015-February/090117.html
354 set(vv_SRCS ${vv_SRCS} vvOSXHelper.mm)
357 add_library(vvLib ${vv_SRCS} ${vv_UI_CXX})
358 target_link_libraries(vvLib ${vvExternalLibs})
361 add_executable(vv WIN32 vv.cxx vvIcon.rc)
363 add_executable(vv vv.cxx)
366 target_link_libraries(vv vvLib)
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)
372 #=========================================================
374 #=========================================================
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")
386 set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
388 set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
390 set(CPACK_STRIP_FILES TRUE)
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")
398 set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
400 set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
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)
410 set(CPACK_GENERATOR "STGZ")
411 set(CPACK_SOURCE_GENERATOR "TGZ")
414 #=========================================================
415 #=========================================================
416 configure_file(vvConfiguration.h.in vvConfiguration.h)
417 #=========================================================