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