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