]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
for vvToolROIManager, add link with gdcm-vtk
[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(Qt4 REQUIRED)
110
111 QT4_WRAP_CPP(vv_SRCS 
112   vvMainWindowBase.h 
113   QTreePushButton.h 
114   vvDocumentation.h  
115   vvHelpDialog.h  
116   vvQDicomSeriesSelector.h 
117   vvSlicerManager.h
118   vvStructureSetActor.h
119   vvROIActor.h
120   vvToolCreatorBase.h
121   )
122
123 QT4_WRAP_UI(vv_UI_CXX 
124   qt_ui/vvHelpDialog.ui 
125   qt_ui/vvDocumentation.ui 
126   qt_ui/vvDicomSeriesSelector.ui 
127   qt_ui/vvDummyWindow.ui #For testing
128   )
129
130 QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
131
132 # Add the autotools in the header vvToolsList.h for initialization of the dummy
133 # variables in vv.cxx for the tools contained in vvLib
134 if(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
135   file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
136   foreach(tool ${vv_TOOLS})
137     FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "#include \"${tool}.h\"\n")
138     FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "extern const vvToolCreator<${tool}> *dummy${tool};\n")
139     FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "const vvToolCreator<${tool}> *dummy${tool}2 = dummy${tool};\n\n")
140   endforeach(tool)
141 endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
142
143 # Add the autotools and the common files ui
144 foreach(tool ${vv_TOOLS} ${vv_COMMON_WITH_UI})
145     SET(vv_SRCS ${vv_SRCS} ${tool}.cxx)
146     QT4_WRAP_CPP(vv_SRCS ${tool}.h)
147     QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
148 endforeach(tool)
149
150 # Add the common source files
151 foreach(tool ${vv_COMMON})
152     SET(vv_SRCS ${vv_SRCS} ${tool}.cxx)
153     QT4_WRAP_CPP(vv_SRCS ${tool}.h)
154 endforeach(tool)
155
156 # if Windows and Qt was built as a static lib then don't set QT_DLL flag
157 SET(QT_STATIC 0)
158 IF (WIN32)
159   IF(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
160     FILE(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
161     IF(${QT_CORE_PRL} MATCHES "static")
162       SET(QT_STATIC 1)
163     ENDIF(${QT_CORE_PRL} MATCHES "static")
164   ENDIF(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
165 ENDIF(WIN32)
166 IF(NOT QT_STATIC)
167   ADD_DEFINITIONS(-DQT_DLL)
168 ENDIF(NOT QT_STATIC)
169
170 ADD_DEFINITIONS(-DQT_THREAD_SUPPORT)
171
172 INCLUDE_DIRECTORIES(
173   ${QT_INCLUDES}
174   ${QT_INCLUDE_DIR}
175   ${QT_QTGUI_INCLUDE_DIR}
176   ${QT_QTCORE_INCLUDE_DIR}
177   ${CMAKE_CURRENT_BINARY_DIR}
178   ${CMAKE_CURRENT_SOURCE_DIR}
179 )
180 #=========================================================
181
182 #=========================================================
183 #support for parallel deformable registration with OpenMP
184 IF(NOT APPLE)
185 IF(CMAKE_COMPILER_IS_GNUCC)
186   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
187 ENDIF(CMAKE_COMPILER_IS_GNUCC)
188 ENDIF(NOT APPLE)
189 #=========================================================
190
191
192 #=========================================================
193 # for ITK4 + external GDCM (RT Struct)
194 IF (CLITK_USE_SYSTEM_GDCM)
195   FIND_PACKAGE(GDCM REQUIRED)
196   INCLUDE(${GDCM_USE_FILE})
197 ENDIF()
198
199
200 #=========================================================
201 INCLUDE_DIRECTORIES(
202   ../common
203   ../tools
204   ../segmentation
205   )
206
207 LINK_DIRECTORIES(${QT_LIBRARY_DIR})
208
209 #=========================================================
210 #Add each tool's dependencies
211 foreach(tool ${vv_TOOLS})
212   SET(toolLibs ${toolLibs} ${${tool}_LIBS})
213 endforeach(tool)
214
215 #=========================================================
216 #Add Foundation Libraries (this should be after our libraries, since we depend
217 #on them)
218 SET(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
219
220 #=========================================================
221 # Use CxImage to create animated gifs
222 IF(CLITK_EXPERIMENTAL)
223   SET(vvCxImage clitkCxImage)
224   SET(vv_SRCS ${vv_SRCS} vvAnimatedGIFWriter.cxx)
225   INCLUDE_DIRECTORIES(${CLITK_SOURCE_DIR}/utilities/CxImage)
226   ADD_SUBDIRECTORY(${CLITK_SOURCE_DIR}/utilities/CxImage ${PROJECT_BINARY_DIR}/utilities/CxImage)
227 ENDIF(CLITK_EXPERIMENTAL)
228 #=========================================================
229
230 #=========================================================
231 #Create binary and libs for tests
232 SET(vvExternalLibs ${QT_QTNETWORK_LIBRARY} clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage})
233 # QtNetwork is required by vvRegisterForm
234
235 ADD_LIBRARY(vvLib ${vv_SRCS} ${vv_UI_CXX})
236 TARGET_LINK_LIBRARIES(vvLib ${vvExternalLibs})
237
238 IF(WIN32)
239   ADD_EXECUTABLE(vv WIN32 vv.cxx vvIcon.rc)
240 ELSE(WIN32)
241   ADD_EXECUTABLE(vv vv.cxx)
242 ENDIF(WIN32)
243
244 #TARGET_LINK_LIBRARIES(vv vvLib)
245 TARGET_LINK_LIBRARIES(vv vvLib)
246
247
248 #=========================================================
249 # Install options (also used by CPack)
250 INSTALL (TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
251
252 #=========================================================
253
254 #=========================================================
255 # CPack options
256 SET(CPACK_PACKAGE_NAME "vv")
257 SET(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
258 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
259 SET(CPACK_PACKAGE_VENDOR "Creatis-CLB")
260 SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
261 SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
262 SET(CPACK_PACKAGE_VERSION_MAJOR "1")
263 SET(CPACK_PACKAGE_VERSION_MINOR "3")
264 SET(CPACK_PACKAGE_VERSION_PATCH "0")
265 IF(NIGHTLY)
266   SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
267 ELSE(NIGHTLY)
268   SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
269 ENDIF(NIGHTLY)
270 SET(CPACK_STRIP_FILES TRUE)
271
272 IF(WIN32)
273   # There is a bug in NSI that does not handle full unix paths properly. Make
274   # sure there is at least one set of four (4) backlasshes.
275   SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
276   SET(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
277 IF(NIGHTLY)
278   SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
279 ELSE(NIGHTLY)
280   SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
281 ENDIF(NIGHTLY)
282   SET(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
283   SET(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
284   SET(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
285   SET(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
286   SET(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
287   #SET(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
288   #SET(CPACK_BINARY_ZIP ON)
289 ELSE(WIN32)
290   SET(CPACK_GENERATOR "STGZ")
291   SET(CPACK_SOURCE_GENERATOR "TGZ") 
292 ENDIF(WIN32)
293 INCLUDE(CPack)
294 #=========================================================
295 #=========================================================
296 configure_file(vvConfiguration.h.in vvConfiguration.h)
297 #=========================================================