]> 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 #=========================================================
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 link_directories(${QT_LIBRARY_DIR})
111
112
113 QT4_WRAP_CPP(vv_SRCS
114   vvMainWindowBase.h
115   QTreePushButton.h
116   vvDocumentation.h
117   vvHelpDialog.h
118   vvQDicomSeriesSelector.h
119   vvSlicerManager.h
120   vvStructureSetActor.h
121   vvROIActor.h
122   vvToolCreatorBase.h
123   )
124
125 QT4_WRAP_UI(vv_UI_CXX
126   qt_ui/vvHelpDialog.ui
127   qt_ui/vvDocumentation.ui
128   qt_ui/vvDicomSeriesSelector.ui
129   qt_ui/vvDummyWindow.ui #For testing
130   )
131
132 QT4_ADD_RESOURCES(vv_SRCS vvIcons.qrc)
133
134 # Add the autotools in the header vvToolsList.h for initialization of the dummy
135 # variables in vv.cxx for the tools contained in vvLib
136 if(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
137   file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
138   foreach(tool ${vv_TOOLS})
139     file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "#include \"${tool}.h\"\n")
140     file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "extern const vvToolCreator<${tool}> *dummy${tool};\n")
141     file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h "const vvToolCreator<${tool}> *dummy${tool}2 = dummy${tool};\n\n")
142   endforeach(tool)
143 endif(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt IS_NEWER_THAN ${CMAKE_CURRENT_BINARY_DIR}/vvToolsList.h)
144
145 # Add the autotools and the common files ui
146 foreach(tool ${vv_TOOLS} ${vv_COMMON_WITH_UI})
147     set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
148     QT4_WRAP_CPP(vv_SRCS ${tool}.h)
149     QT4_WRAP_UI(vv_UI_CXX qt_ui/${tool}.ui)
150 endforeach(tool)
151
152 # Add the common source files
153 foreach(tool ${vv_COMMON})
154     set(vv_SRCS ${vv_SRCS} ${tool}.cxx)
155     QT4_WRAP_CPP(vv_SRCS ${tool}.h)
156 endforeach(tool)
157
158 # if Windows and Qt was built as a static lib then don't set QT_DLL flag
159 set(QT_STATIC 0)
160 if(WIN32)
161   if(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
162     file(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
163     if(${QT_CORE_PRL} MATCHES "static")
164       set(QT_STATIC 1)
165     endif(${QT_CORE_PRL} MATCHES "static")
166   endif(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
167 endif(WIN32)
168 if(NOT QT_STATIC)
169   add_definitions(-DQT_DLL)
170 endif(NOT QT_STATIC)
171
172 add_definitions(-DQT_THREAD_SUPPORT)
173
174 include_directories(
175   ${QT_INCLUDES}
176   ${QT_INCLUDE_DIR}
177   ${QT_QTGUI_INCLUDE_DIR}
178   ${QT_QTCORE_INCLUDE_DIR}
179   ${CMAKE_CURRENT_BINARY_DIR}
180   ${CMAKE_CURRENT_SOURCE_DIR}
181 )
182 #=========================================================
183
184 #=========================================================
185 #support for parallel deformable registration with OpenMP
186 if(NOT APPLE)
187 if(CMAKE_COMPILER_IS_GNUCC)
188   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
189 endif(CMAKE_COMPILER_IS_GNUCC)
190 endif(NOT APPLE)
191 #=========================================================
192
193 #=========================================================
194 include_directories(
195   ../common
196   ../tools
197   ../segmentation
198   )
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 # Avoid linker bug in Mac OS 10.5
223 # See http://wiki.finkproject.org/index.php/Fink:Packaging:Preparing_for_10.5#OpenGL_Bug
224 #
225 if(APPLE)
226   find_library(CoreFoundation_LIBRARY CoreFoundation REQUIRED)
227   find_library(ApplicationServices_LIBRARY ApplicationServices REQUIRED)
228   find_library(SystemConfiguration_LIBRARY SystemConfiguration REQUIRED)
229   find_library(Security_LIBRARY Security REQUIRED)
230   set(APPLE_FRAMEWORKS ${CoreFoundation_LIBRARY}
231     ${ApplicationServices_LIBRARY}
232     ${SystemConfiguration_LIBRARY}
233     ${Security_LIBRARY}
234     )
235   message(STATUS "===== ${APPLE_FRAMEWORKS}")
236 endif()
237 #=========================================================
238 #Create binary and libs for tests
239 set(vvExternalLibs clitkSegmentationGgoLib ${toolLibs} ${foundationLibraries} ${vvCxImage} ${QT_LIBRARIES} ${QT_QTNETWORK_LIBRARY} ${APPLE_FRAMEWORKS})
240 # QtNetwork is required by vvRegisterForm
241
242 add_library(vvLib ${vv_SRCS} ${vv_UI_CXX})
243 target_link_libraries(vvLib ${vvExternalLibs})
244
245 if(WIN32)
246   add_executable(vv WIN32 vv.cxx vvIcon.rc)
247 else(WIN32)
248   add_executable(vv vv.cxx)
249 endif(WIN32)
250
251 target_link_libraries(vv vvLib)
252
253 #=========================================================
254 # Install options (also used by CPack)
255 install(TARGETS vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
256
257 #=========================================================
258
259 #=========================================================
260 # CPack options
261 set(CPACK_PACKAGE_NAME "vv")
262 set(CPACK_SOURCE_PACKAGE_FILE_NAME "vv-src")
263 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !")
264 set(CPACK_PACKAGE_VENDOR "Creatis-CLB")
265 set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
266 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
267 set(CPACK_PACKAGE_VERSION_MAJOR "1")
268 set(CPACK_PACKAGE_VERSION_MINOR "3")
269 set(CPACK_PACKAGE_VERSION_PATCH "0")
270 if(NIGHTLY)
271   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv-nightly")
272 else(NIGHTLY)
273   set(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
274 endif(NIGHTLY)
275 set(CPACK_STRIP_FILES TRUE)
276
277 if(WIN32)
278   # There is a bug in NSI that does not handle full unix paths properly. Make
279   # sure there is at least one set of four (4) backlasshes.
280   set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
281   set(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
282 if(NIGHTLY)
283   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer (nightly)")
284 else(NIGHTLY)
285   set(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
286 endif(NIGHTLY)
287   set(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
288   set(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
289   set(CPACK_NSIS_CONTACT "vv@creatis.insa-lyon.fr")
290   set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\vv.lnk\\\" \\\"$INSTDIR\\\\bin\\\\vv.exe\\\" ")
291   set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\vv.lnk\\\" ")
292   #set(CPACK_NSIS_MODIFY_PATH ON) SR: buggy, wait for cmake updates for a fix
293   #set(CPACK_BINARY_ZIP ON)
294 else(WIN32)
295   set(CPACK_GENERATOR "STGZ")
296   set(CPACK_SOURCE_GENERATOR "TGZ")
297 endif(WIN32)
298 include(CPack)
299 #=========================================================
300 #=========================================================
301 configure_file(vvConfiguration.h.in vvConfiguration.h)
302 #=========================================================