]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
Merge branch 'VTK6_Qt5' into VTK6_Qt5_Binarize
[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 endif(COMMAND cmake_policy)
8 #=========================================================
9
10
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   ## these ones are for tests (not working)
25   # vvToolTest
26   # vvToolFoo
27   # vvToolFooWithWidgetBase
28   # vvToolPlastimatch
29   # vvToolConnectedComponentLabeling
30   ## these ones are old ones
31   # vvToolExtractPatient
32   # vvToolExtractLung
33   # vvToolStructureSetManager
34 )
35 # dependencies of the tools
36 # Future issues : when tool depend on other tools ... how to manage that ?
37 #  >> add the relevant $_LIBS variable to the tool that has dependencies?
38 set(vvToolBinarize_LIBS clitkBinarizeImageLib)
39 set(vvToolResample_LIBS clitkResampleImageLib)
40 set(vvToolConvert_LIBS clitkImageConvertLib)
41 set(vvToolExtractPatient_LIBS clitkSegmentationGgoLib)
42 set(vvToolExtractLung_LIBS clitkSegmentationGgoLib)
43 set(vvToolCropImage_LIBS clitkCropImageLib)
44 set(vvToolMIP_LIBS clitkMIPLib)
45 set(vvToolMedianFilter_LIBS clitkMedianImageFilterLib)
46 set(vvToolImageArithm_LIBS clitkImageArithmImageLib)
47 set(vvToolROIManager_LIBS clitkDicomRTStruct)
48
49 #=========================================================
50 # List of vv source files
51
52 # in COMMON_WITH_UI -> must have .h and .cxx and .ui
53 set(vv_COMMON_WITH_UI
54   vvInfoPanel
55   vvMainWindow
56   vvLinkPanel
57   vvOverlayPanel
58   vvLandmarksPanel
59   vvProgressDialog
60   vvSegmentationDialog
61   vvSurfaceViewerDialog
62   vvDeformationDialog
63   vvStructSelector
64   vvIntensityValueSlider
65   vvLabelImageLoaderWidget
66   vvToolWidgetBase
67   vvToolSimpleInputSelectorWidget
68   vvToolInputSelectorWidget
69   vvRegisterForm
70 )
71
72 # All others sources
73 set(vv_SRCS
74   vvQProgressDialogITKCommand.cxx
75   vvQDicomSeriesSelector.cxx
76   QTreePushButton.cxx
77   vvMainWindowBase.cxx
78   vvImageWarp.cxx
79   vvDeformableRegistration.cxx
80   vtkVOXImageWriter.cxx
81   vvInteractorStyleNavigator.cxx
82   vvSlicer.cxx
83   vvLandmarks.cxx
84   vvLandmarksGlyph.cxx
85   vvClipPolyData.cxx
86   vvGlyphSource.cxx
87   vvGlyph2D.cxx
88   vvSlicerManager.cxx
89   vvSlicerManagerCommand.cxx
90   vvUtils.cxx
91 #  vvMaximumIntensityProjection.cxx
92   vvMesh.cxx
93   vvMeshActor.cxx
94   vvMeshReader.cxx
95   vvMidPosition.cxx
96   vvImageContour.cxx
97   vvBinaryImageOverlayActor.cxx
98   vvStructureSetActor.cxx
99   vvSaveState.cxx
100   vvReadState.cxx
101   vvROIActor.cxx
102   vvBlendImageActor.cxx
103   vvToolManager.cxx
104   vvToolCreatorBase.cxx
105   vvToolBaseBase.cxx
106 )
107
108 #=========================================================
109 # Qt related commands
110 find_package(Qt5Widgets REQUIRED)
111 find_package(Qt5Network REQUIRED)
112 find_package(Qt5Designer REQUIRED)
113 link_directories(${QT5Widgets_LIBRARIES})
114 link_directories(${QT5Network_LIBRARIES})
115 link_directories(${QT5Designer_LIBRARIES})
116
117 qt5_wrap_cpp(vv_SRCS
118   vvMainWindowBase.h
119   QTreePushButton.h
120   vvDocumentation.h
121   vvHelpDialog.h
122   vvQDicomSeriesSelector.h
123   vvSlicerManager.h
124   vvStructureSetActor.h
125   vvROIActor.h
126   vvToolCreatorBase.h
127   )
128
129 qt5_wrap_ui(vv_UI_CXX
130   qt_ui/vvHelpDialog.ui
131   qt_ui/vvDocumentation.ui
132   qt_ui/vvDicomSeriesSelector.ui
133   qt_ui/vvDummyWindow.ui #For testing
134   )
135
136 QT5_add_resources(vv_SRCS vvIcons.qrc)
137
138 # Add the autotools in the header vvToolsList.h for initialization of the dummy
139 # variables in vv.cxx for the tools contained in vvLib
140 if(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
141   file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
142   foreach(tool ${vv_TOOLS})
143     file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "#include \"${tool}.h\"\n")
144     file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "extern const vvToolCreator<${tool}> *dummy${tool};\n")
145     file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "const vvToolCreator<${tool}> *dummy${tool}2 = dummy${tool};\n\n")
146   endforeach(tool)
147 endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
148
149 # Add the autotools and the common files ui
150 foreach(tool ${vv_TOOLS} ${vv_COMMON_WITH_UI})
151     set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
152     QT5_WRAP_CPP(vv_SRCS ${tool}.h)
153     QT5_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
154 endforeach(tool)
155
156 # Add the common source files
157 foreach(tool ${vv_COMMON})
158     set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
159     QT5_WRAP_CPP(vv_SRCS ${tool}.h)
160 endforeach(tool)
161
162 # if Windows and Qt was built as a static lib then don't set QT_DLL flag
163 set(QT_STATIC 0)
164 if(WIN32)
165   if(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
166     file(READ ${Qt5Widgets_LIBRARIES}/QtCore.prl QT_CORE_PRL)
167     if(${QT_CORE_PRL} MATCHES "static")
168       set(QT_STATIC 1)
169     endif(${QT_CORE_PRL} MATCHES "static")
170   endif(EXISTS ${Qt5Widgets_LIBRARIES}/QtCore.prl)
171 endif(WIN32)
172 if(NOT QT_STATIC)
173   add_definitions(-DQT_DLL)
174 endif(NOT QT_STATIC)
175
176 add_definitions(-DQT_THREAD_SUPPORT)
177
178 include_directories(
179   ${Qt5Widgets_INCLUDE_DIRS}
180   ${Qt5GUI_INCLUDE_DIRS}
181   ${Qt5CORE_INCLUDE_DIRS}
182   ${Qt5Network_INCLUDE_DIRS}
183   ${Qt5Designer_INCLUDE_DIRS}
184   ${CMAKE_CURRENT_BINARY_DIR}
185   ${CMAKE_CURRENT_SOURCE_DIR}
186 )
187 #=========================================================
188
189 #=========================================================
190 #support for parallel deformable registration with OpenMP
191 if(NOT APPLE)
192 if(CMAKE_COMPILER_IS_GNUCC)
193   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
194 endif(CMAKE_COMPILER_IS_GNUCC)
195 endif(NOT APPLE)
196 #=========================================================
197
198 #=========================================================
199 include_directories(
200   ../common
201   ../tools
202   ../segmentation
203   )
204
205 #=========================================================
206 #Add each tool's dependencies
207 foreach(tool ${vv_TOOLS})
208   set(toolLibs ${toolLibs} ${${tool}_LIBS})
209 endforeach(tool)
210
211 #=========================================================
212 #Add Foundation Libraries (this should be after our libraries, since we depend
213 #on them)
214 #set(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
215 set(foundationLibraries clitkCommon ${ITK_LIBRARIES} ${VTK_LIBRARIES})
216
217 #=========================================================
218 # Use CxImage to create animated gifs
219 if(CLITK_EXPERIMENTAL)
220   set(vvCxImage clitkCxImage)
221   set(vv_SRCS ${vv_SRCS} vvAnimatedGIFWriter.cxx)
222   include_directories(${CLITK_SOURCE_DIR}/utilities/CxImage)
223   add_subdirectory(${CLITK_SOURCE_DIR}/utilities/CxImage ${PROJECT_BINARY_DIR}/utilities/CxImage)
224 endif(CLITK_EXPERIMENTAL)
225 #=========================================================
226
227 #-----------------------------------------------------------------------------
228 # Avoid linker bug in Mac OS 10.5
229 # See http://wiki.finkproject.org/index.php/Fink:Packaging:Preparing_for_10.5#OpenGL_Bug
230 #
231 if(APPLE)
232   find_library(CoreFoundation_LIBRARY CoreFoundation REQUIRED)
233   find_library(ApplicationServices_LIBRARY ApplicationServices REQUIRED)
234   find_library(SystemConfiguration_LIBRARY SystemConfiguration REQUIRED)
235   find_library(Security_LIBRARY Security REQUIRED)
236   set(APPLE_FRAMEWORKS ${CoreFoundation_LIBRARY}
237     ${ApplicationServices_LIBRARY}
238     ${SystemConfiguration_LIBRARY}
239     ${Security_LIBRARY}
240     )
241   message(STATUS "===== ${APPLE_FRAMEWORKS}")
242 endif()
243 #=========================================================
244 #Create binary and libs for tests
245 #set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} ${Qt5Widgets_LIBRARIES_DIRS} ${Qt5Network_LIBRARIES_DIRS} ${APPLE_FRAMEWORKS})
246 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} Qt5::Widgets Qt5::Network Qt5::Designer ${APPLE_FRAMEWORKS})
247 # QtNetwork is required by vvRegisterForm
248
249 add_library(vvLib ${vv_SRCS} ${vv_UI_CXX})
250 target_link_libraries(vvLib ${vvExternalLibs})
251
252 if(WIN32)
253   add_executable(vv WIN32 vv.cxx vvIcon.rc)
254 else(WIN32)
255   add_executable(vv vv.cxx)
256 endif(WIN32)
257
258 target_link_libraries(vv vvLib)
259
260 #=========================================================
261 # Install options (also used by CPack)
262 install(TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
263
264 #=========================================================
265
266 #=========================================================
267 # CPack options
268 set(CPACK_PACKAGE_NAME "vv")
269 set(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
270 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
271 set(CPACK_PACKAGE_VENDOR "Creatis-CLB")
272 set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
273 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
274 set(CPACK_PACKAGE_VERSION_MAJOR "1")
275 set(CPACK_PACKAGE_VERSION_MINOR "3")
276 set(CPACK_PACKAGE_VERSION_PATCH "0")
277 if(NIGHTLY)
278   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
279 else(NIGHTLY)
280   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
281 endif(NIGHTLY)
282 set(CPACK_STRIP_FILES TRUE)
283
284 if(WIN32)
285   # There is a bug in NSI that does not handle full unix paths properly. Make
286   # sure there is at least one set of four (4) backlasshes.
287   set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
288   set(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
289 if(NIGHTLY)
290   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
291 else(NIGHTLY)
292   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
293 endif(NIGHTLY)
294   set(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
295   set(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
296   set(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
297   set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
298   set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
299   #set(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
300   #set(CPACK_BINARY_ZIP ON)
301 else(WIN32)
302   set(CPACK_GENERATOR "STGZ")
303   set(CPACK_SOURCE_GENERATOR "TGZ")
304 endif(WIN32)
305 include(CPack)
306 #=========================================================
307 #=========================================================
308 configure_file(vvConfiguration.h.in vvConfiguration.h)
309 #=========================================================