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