]> Creatis software - clitk.git/blob - vv/CMakeLists.txt
Add GDCM lib
[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 INCLUDE_DIRECTORIES(
193   ../common
194   ../tools
195   ../segmentation
196   )
197
198 LINK_DIRECTORIES(${QT_LIBRARY_DIR})
199
200 #=========================================================
201 #Add each tool's dependencies
202 foreach(tool ${vv_TOOLS})
203   SET(toolLibs ${toolLibs} ${${tool}_LIBS})
204 endforeach(tool)
205
206 #=========================================================
207 #Add Foundation Libraries (this should be after our libraries, since we depend
208 #on them)
209 SET(foundationLibraries clitkCommon ${ITK_LIBRARIES} QVTK vtkHybrid)
210
211 #=========================================================
212 # Use CxImage to create animated gifs
213 IF(CLITK_EXPERIMENTAL)
214   SET(vvCxImage clitkCxImage)
215   SET(vv_SRCS ${vv_SRCS} vvAnimatedGIFWriter.cxx)
216   INCLUDE_DIRECTORIES(${CLITK_SOURCE_DIR}/utilities/CxImage)
217   ADD_SUBDIRECTORY(${CLITK_SOURCE_DIR}/utilities/CxImage ${PROJECT_BINARY_DIR}/utilities/CxImage)
218 ENDIF(CLITK_EXPERIMENTAL)
219 #=========================================================
220
221 #=========================================================
222 #Create binary and libs for tests
223 SET(vvExternalLibs ${QT_QTNETWORK_LIBRARY} clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage})
224 # QtNetwork is required by vvRegisterForm
225
226 ADD_LIBRARY(vvLib ${vv_SRCS} ${vv_UI_CXX})
227 TARGET_LINK_LIBRARIES(vvLib ${vvExternalLibs})
228
229 IF(WIN32)
230   ADD_EXECUTABLE(vv WIN32 vv.cxx vvIcon.rc)
231 ELSE(WIN32)
232   ADD_EXECUTABLE(vv vv.cxx)
233 ENDIF(WIN32)
234
235 TARGET_LINK_LIBRARIES(vv vvLib  ${CLITK_GDCM_LIBRARIES})
236
237 #=========================================================
238 # Install options (also used by CPack)
239 INSTALL (TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
240
241 #=========================================================
242
243 #=========================================================
244 # CPack options
245 SET(CPACK_PACKAGE_NAME "vv")
246 SET(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
247 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
248 SET(CPACK_PACKAGE_VENDOR "Creatis-CLB")
249 SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
250 SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
251 SET(CPACK_PACKAGE_VERSION_MAJOR "1")
252 SET(CPACK_PACKAGE_VERSION_MINOR "3")
253 SET(CPACK_PACKAGE_VERSION_PATCH "0")
254 IF(NIGHTLY)
255   SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
256 ELSE(NIGHTLY)
257   SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
258 ENDIF(NIGHTLY)
259 SET(CPACK_STRIP_FILES TRUE)
260
261 IF(WIN32)
262   # There is a bug in NSI that does not handle full unix paths properly. Make
263   # sure there is at least one set of four (4) backlasshes.
264   SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
265   SET(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
266 IF(NIGHTLY)
267   SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
268 ELSE(NIGHTLY)
269   SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
270 ENDIF(NIGHTLY)
271   SET(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
272   SET(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
273   SET(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
274   SET(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
275   SET(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
276   #SET(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
277   #SET(CPACK_BINARY_ZIP ON)
278 ELSE(WIN32)
279   SET(CPACK_GENERATOR "STGZ")
280   SET(CPACK_SOURCE_GENERATOR "TGZ") 
281 ENDIF(WIN32)
282 INCLUDE(CPack)
283 #=========================================================
284 #=========================================================
285 configure_file(vvConfiguration.h.in vvConfiguration.h)
286 #=========================================================