]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
Compile PACS stuff only if GDCM system is used
[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 #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   vvMesh.cxx
90   vvMeshActor.cxx
91   vvMeshReader.cxx
92   vvMidPosition.cxx
93   vvImageContour.cxx
94   vvBinaryImageOverlayActor.cxx
95   vvStructureSetActor.cxx
96   vvSaveState.cxx
97   vvReadState.cxx
98   vvROIActor.cxx
99   vvBlendImageActor.cxx
100   vvToolManager.cxx
101   vvToolCreatorBase.cxx
102   vvToolBaseBase.cxx
103 )
104
105 #=========================================================
106 # Qt related commands
107 FIND_PACKAGE(Qt4 REQUIRED)
108
109 QT4_WRAP_CPP(vv_SRCS 
110   vvMainWindowBase.h 
111   QTreePushButton.h 
112   vvDocumentation.h  
113   vvHelpDialog.h  
114   vvQDicomSeriesSelector.h 
115   vvSlicerManager.h
116   vvStructureSetActor.h
117   vvROIActor.h
118   vvToolCreatorBase.h
119   )
120
121 QT4_WRAP_UI(vv_UI_CXX 
122   qt_ui/vvHelpDialog.ui 
123   qt_ui/vvDocumentation.ui 
124   qt_ui/vvDicomSeriesSelector.ui
125   )
126
127 QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
128
129 # Add DICOM gui selector if the adequate GDCM is available
130 IF(CLITK_USE_SYSTEM_GDCM)
131   SET(vv_SRCS ${vv_SRCS}
132       vvQPacsConnection.cxx)
133   QT4_WRAP_CPP(vv_SRCS vvQPacsConnection.cxx)
134   QT4_WRAP_UI(vv_UI_CXX qt_ui/vvPacsConnection.ui)
135 ENDIF(CLITK_USE_SYSTEM_GDCM)
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   QT4_WRAP_CPP(vv_SRCS ${tool}.h)
152   QT4_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   QT4_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 ${QT_LIBRARY_DIR}/QtCore.prl)
165     FILE(READ ${QT_LIBRARY_DIR}/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 ${QT_LIBRARY_DIR}/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   ${QT_INCLUDES}
179   ${QT_INCLUDE_DIR}
180   ${QT_QTGUI_INCLUDE_DIR}
181   ${QT_QTCORE_INCLUDE_DIR}
182   ${CMAKE_CURRENT_BINARY_DIR}
183   ${CMAKE_CURRENT_SOURCE_DIR}
184 )
185 #=========================================================
186
187 #=========================================================
188 #support for parallel deformable registration with OpenMP
189 IF(NOT APPLE)
190 IF(CMAKE_COMPILER_IS_GNUCC)
191   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
192 ENDIF(CMAKE_COMPILER_IS_GNUCC)
193 ENDIF(NOT APPLE)
194 #=========================================================
195
196 #=========================================================
197 INCLUDE_DIRECTORIES(
198   ../common
199   ../tools
200   ../segmentation
201   )
202
203 LINK_DIRECTORIES(${QT_LIBRARY_DIR})
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
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 #Create binary and libs for tests
228 SET(vvExternalLibs ${QT_QTNETWORK_LIBRARY} clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage})
229 # QtNetwork is required by vvRegisterForm
230
231 ADD_LIBRARY(vvLib ${vv_SRCS} ${vv_UI_CXX})
232 TARGET_LINK_LIBRARIES(vvLib ${vvExternalLibs})
233
234 IF(WIN32)
235   ADD_EXECUTABLE(vv WIN32 vv.cxx vvIcon.rc)
236 ELSE(WIN32)
237   ADD_EXECUTABLE(vv vv.cxx)
238 ENDIF(WIN32)
239
240 TARGET_LINK_LIBRARIES(vv vvLib)
241
242 #=========================================================
243 # Install options (also used by CPack)
244 INSTALL (TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
245
246 #=========================================================
247
248 #=========================================================
249 # CPack options
250 SET(CPACK_PACKAGE_NAME "vv")
251 SET(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
252 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
253 SET(CPACK_PACKAGE_VENDOR "Creatis-CLB")
254 SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
255 SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
256 SET(CPACK_PACKAGE_VERSION_MAJOR "1")
257 SET(CPACK_PACKAGE_VERSION_MINOR "3")
258 SET(CPACK_PACKAGE_VERSION_PATCH "0")
259 IF(NIGHTLY)
260   SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
261 ELSE(NIGHTLY)
262   SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
263 ENDIF(NIGHTLY)
264 SET(CPACK_STRIP_FILES TRUE)
265
266 IF(WIN32)
267   # There is a bug in NSI that does not handle full unix paths properly. Make
268   # sure there is at least one set of four (4) backlasshes.
269   SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
270   SET(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
271 IF(NIGHTLY)
272   SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
273 ELSE(NIGHTLY)
274   SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
275 ENDIF(NIGHTLY)
276   SET(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
277   SET(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
278   SET(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
279   SET(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
280   SET(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
281   #SET(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
282   #SET(CPACK_BINARY_ZIP ON)
283 ELSE(WIN32)
284   SET(CPACK_GENERATOR "STGZ")
285   SET(CPACK_SOURCE_GENERATOR "TGZ") 
286 ENDIF(WIN32)
287 INCLUDE(CPack)
288 #=========================================================
289 #=========================================================
290 configure_file(vvConfiguration.h.in vvConfiguration.h)
291 #=========================================================