]> Creatis software - crea.git/blob - cmake/CREAMacro_FindAndUseLibraries.cmake
DFCH: boost 1.49 requires: add_definitions(-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED)...
[crea.git] / cmake / CREAMacro_FindAndUseLibraries.cmake
1
2
3 MACRO(CREA_FIND_AND_USE_LIBRARIES)
4
5 IF(INCLUDE_CTEST)
6         include(CTest) 
7 ENDIF(INCLUDE_CTEST)
8
9
10 set(USE_DEBUG_LIB "" CACHE BOOL "Use Debug Libraries" )
11
12 #-----------------------------------------------------------------------------
13 # If one can invoke this macro then crea has already been found !!
14 # However if one whishes to link against crea and crea was built 
15 # with wx or vtk then we have to find them.
16 # This USE_CREA var is made to resolve this dependency.
17 IF(USE_CREA)
18   IF(CREA_BUILT_WITH_WX)
19     SET(USE_WXWIDGETS ON)
20   ENDIF(CREA_BUILT_WITH_WX)
21   IF(CREA_BUILT_WITH_VTK)
22     SET(USE_VTK ON)
23   ENDIF(CREA_BUILT_WITH_VTK)
24 ENDIF(USE_CREA)
25 #-----------------------------------------------------------------------------
26
27
28 #-----------------------------------------------------------------------------
29 IF(USE_QT4)
30   IF(NOT QT_FOUND)      
31   
32         INCLUDE(${CREA_CMAKE_DIR}/CREAMacro_FindAndUseQt.cmake)
33         #FIND_PACKAGE(Qt4 REQUIRED)     
34         
35     IF(QT_FOUND)
36       MESSAGE ( STATUS "=======================================")
37       MESSAGE ( STATUS "Looking for QT4... found")
38       MESSAGE ( STATUS "* Inc Dir = ${QT_INCLUDE_DIR}")
39       MESSAGE ( STATUS "* Version = ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}")
40       INCLUDE(${QT_USE_FILE})
41          
42       CREA_DEFINE( USE_QT )
43     #    SET(QT_LIBRARIES
44     #         ${QT_LIBRARIES}
45     #      ) 
46     #  MARK_AS_ADVANCED(Qt4_DIR)
47    ENDIF(QT_FOUND)
48   ENDIF(NOT QT_FOUND)
49 ENDIF(USE_QT4)
50 #-----------------------------------------------------------------------------
51
52 #-----------------------------------------------------------------------------
53 IF(USE_VTK)
54   INCLUDE(${CREA_CMAKE_DIR}/CREAMacro_FindAndUseVTK.cmake)
55   CREA_FIND_AND_USE_VTK()  
56 ENDIF(USE_VTK)
57 #-----------------------------------------------------------------------------
58
59 #-----------------------------------------------------------------------------
60 IF(USE_KWWIDGETS)
61   IF(NOT KWWidgets_FOUND)
62     # Search KWWidgets
63     FIND_PACKAGE(KWWidgets)
64     # If found
65     IF(KWWidgets_FOUND)
66       MESSAGE ( STATUS "=======================================")
67       MESSAGE ( STATUS "Looking for KWWidgets... found")
68       MESSAGE ( STATUS "* Dir     = ${KWWidgets_DIR}")
69       MESSAGE ( STATUS "* Version = ${KWWidgets_MAJOR_VERSION}.${KWWidgets_MINOR_VERSION}.${KWWidgets_BUILD_VERSION}")
70       IF (USE_VTK)
71          # KWWidgets must not search again for vtk !
72         SET(KWWidgets_NO_USE_VTK ON)
73       ENDIF (USE_VTK)
74
75       INCLUDE(${KWWidgets_USE_FILE})
76       CREA_DEFINE( USE_KWWIDGETS )
77       SET(KWWIDGETS_LIBRARIES
78         ${KWWidgets_LIBRARIES}
79         ) 
80       MARK_AS_ADVANCED(KWWidgets_DIR)
81     ELSE(KWWidgets_FOUND)
82       message(FATAL_ERROR "KWWidgets_DIR not found")
83     ENDIF(KWWidgets_FOUND)
84   ENDIF(NOT KWWidgets_FOUND)
85 ENDIF(USE_KWWIDGETS)
86 #-----------------------------------------------------------------------------
87
88 #  --- W A R N I N G :
89 #  Always let ITK *BEFORE* GDCM
90 #  It allows to use 'system installed gdcm' instead of 'itk embedded gdcm'
91 #
92
93 #-----------------------------------------------------------------------------
94 IF(USE_ITK)
95   IF(NOT ITK_FOUND)
96     # Search ITK
97     FIND_PACKAGE(ITK)
98     # If itk found
99     IF(ITK_FOUND)
100       MESSAGE ( STATUS "=======================================")
101       MESSAGE ( STATUS "Looking for ITK... found")
102       MESSAGE ( STATUS "* Dir     = ${ITK_DIR}")
103       MESSAGE ( STATUS "* Version = ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}")
104       SET(SKIP_ITK_BUILD_SETTINGS_FILE ON)
105       INCLUDE(${ITK_USE_FILE})
106       CREA_DEFINE( USE_ITK )
107       CREA_DEFINE( _USE_ITK_ )
108       SET(ITK_LIBRARIES
109         ITKCommon ITKIO ITKBasicFilters ITKAlgorithms
110         )  
111       MARK_AS_ADVANCED(ITK_DIR)
112     ELSE(ITK_FOUND)
113       message(FATAL_ERROR "ITK_DIR not found")
114     ENDIF(ITK_FOUND)
115   ENDIF(NOT ITK_FOUND)
116 ENDIF(USE_ITK)
117 #-----------------------------------------------------------------------------
118
119
120 #-----------------------------------------------------------------------------
121
122 IF(USE_GDCM)
123   IF (USE_GDCM2)
124     MESSAGE(ERROR "CANNOT USE BOTH gdcm AND gdcm2 !")
125   ENDIF (USE_GDCM2)
126
127   IF(NOT GDCM_FOUND)
128     # Search GDCM
129     FIND_PACKAGE(GDCM)
130     # If gdcm found
131     IF(GDCM_FOUND)
132       INCLUDE(${GDCM_USE_FILE})
133       CREA_DEFINE( USE_GDCM )
134
135       MESSAGE ( STATUS "=======================================")
136       MESSAGE ( STATUS "Looking for GDCM... found")
137       MESSAGE ( STATUS "* Dir       = ${GDCM_DIR}")
138       MESSAGE ( STATUS "* Version   = ${GDCM_MAJOR_VERSION}.${GDCM_MINOR_VERSION}.${GDCM_BUILD_VERSION}")
139       MESSAGE ( STATUS "* Namespace = ${GDCM_NAME_SPACE}")
140
141       # Test that GDCM_NAME_SPACE is **NOT** "gdcm" or will conflict with 
142       # embedded gdcm in ITK and will result in hard seg faults !
143       IF(USE_ITK)
144         IF (GDCM_NAME_SPACE STREQUAL "gdcm")
145           MESSAGE(FATAL_ERROR "GDCM_NAME_SPACE value is 'gdcm' which conflicts with ITK embededd gdcm namespace : rebuild gdcm with another GDCM_NAME_SPACE value")
146         ENDIF (GDCM_NAME_SPACE STREQUAL "gdcm")
147       ENDIF(USE_ITK)
148
149       MARK_AS_ADVANCED(GDCM_DIR)
150
151       SET(GDCM_LIBRARIES
152         ${GDCM_LIBRARIES} 
153         )
154
155       # TODO : Test that GDCM was built with option "vtkgdcm"
156       IF(USE_GDCM_VTK)
157         IF(USE_VTK)
158           SET(GDCM_LIBRARIES
159             ${GDCM_LIBRARIES}
160             vtkgdcm  
161             )
162         ENDIF(USE_VTK)
163       ENDIF(USE_GDCM_VTK)
164
165     ELSE(GDCM_FOUND)     
166           MESSAGE(FATAL_ERROR "GDCM not found....")
167     ENDIF(GDCM_FOUND)
168
169   ENDIF(NOT GDCM_FOUND)
170 ENDIF(USE_GDCM)
171
172 #-----------------------------------------------------------------------------
173
174 IF(USE_GDCM2)
175   IF (USE_GDCM)
176     MESSAGE(ERROR "CANNOT USE BOTH gdcm AND gdcm2 !")
177   ENDIF (USE_GDCM)
178
179   IF(NOT USE_ITK) # JPR : ITK vs GDCM (avoid cmake break)
180     # Search GDCM2
181     FIND_PACKAGE(GDCM REQUIRED)
182     INCLUDE(${GDCM_USE_FILE})
183
184       IF(NOT ${GDCM_MAJOR_VERSION} EQUAL 2)
185         MESSAGE(FATAL_ERROR "gdcm version 2 needed. found ${GDCM_MAJOR_VERSION}.${GDCM_MINOR_VERSION}.${GDCM_BUILD_VERSION}. Set GDCM_DIR to the gdcm version 2 directory")
186       ENDIF(NOT ${GDCM_MAJOR_VERSION} EQUAL 2)
187       
188       CREA_DEFINE( USE_GDCM2 )
189           MARK_AS_ADVANCED(GDCM_DIR)
190       CREA_DEFINE_WITH_VAL( GDCM_NAME_SPACE gdcm )
191       
192       MESSAGE ( STATUS "=======================================")
193       MESSAGE ( STATUS "Looking for GDCM2... found")
194       MESSAGE ( STATUS "* Dir       = ${GDCM_DIR}")
195       MESSAGE ( STATUS "* Version   = ${GDCM_MAJOR_VERSION}.${GDCM_MINOR_VERSION}.${GDCM_BUILD_VERSION}")
196       MESSAGE ( STATUS "* Namespace = ${GDCM_NAME_SPACE}")
197       
198       # Test that GDCM_NAME_SPACE is **NOT** "gdcm" or will conflict with 
199       # embedded gdcm in ITK and will result in hard seg faults !
200                    INCLUDE_DIRECTORIES(${GDCM_INCLUDE_DIR})      
201                         LINK_DIRECTORIES( ${GDCM_LIBRARY_DIR}) 
202
203       SET(GDCM2_LIBRARIES
204         ${GDCM_LIBRARIES} 
205         )
206
207       IF(USE_GDCM_VTK)
208         IF(USE_VTK)
209                 IF(WIN32)
210                   SET(GDCM_LIBRARIES
211                         ${GDCM_LIBRARIES}
212                         vtkgdcm
213                         #gdcm2vtk
214                      )
215                 ELSE(WIN32)
216                     SET(GDCM_LIBRARIES
217                         ${GDCM_LIBRARIES}
218                         vtkgdcm
219                         )
220                 ENDIF(WIN32)
221                 
222         ENDIF(USE_VTK)
223       ENDIF(USE_GDCM_VTK)
224   ENDIF(NOT USE_ITK) # JPR : ITK vs GDCM (avoid cmake break)
225
226 ENDIF(USE_GDCM2)
227
228 #-----------------------------------------------------------------------------
229
230 #-----------------------------------------------------------------------------
231
232 #-----------------------------------------------------------------------------
233 IF(USE_WXWIDGETS)
234   IF(NOT wxWidgets_FOUND)
235     INCLUDE(${CREA_CMAKE_DIR}/CREAMacro_FindAndUseWxWidgets.cmake)
236     CREA_FIND_WXWIDGETS(${USE_DEBUG_LIB})
237     CREA_USE_WXWIDGETS()
238   ENDIF(NOT wxWidgets_FOUND)
239 ENDIF(USE_WXWIDGETS)
240 #-----------------------------------------------------------------------------
241
242
243
244 #-----------------------------------------------------------------------------
245 IF(USE_DOXYGEN) 
246   IF(NOT DOXYGEN)
247     MESSAGE ( STATUS "=======================================")
248     FIND_PACKAGE(Doxygen REQUIRED)
249     #  MESSAGE(STATUS "Looking for doxygen... - found ${DOXYGEN}")
250     #  IF(DOXYGEN)
251     #    
252     #  ELSE(DOXYGEN)
253     #    MESSAGE(FATAL_ERROR "Doxygen not found. Required to build the doxygen documentation")
254   ENDIF(NOT DOXYGEN)
255 ENDIF(USE_DOXYGEN)
256 #-----------------------------------------------------------------------------
257
258
259 #-----------------------------------------------------------------------------
260 IF(USE_LATEX)
261         IF (NOT LATEX_COMPILER)
262                 FIND_PACKAGE(LATEX REQUIRED)
263                 MESSAGE ( STATUS "=======================================")
264                 MESSAGE(STATUS "Looking for latex... - found ${LATEX_COMPILER}")
265                 IF (NOT LATEX_FOUND)
266                    MESSAGE(FATAL_ERROR "LATEX_COMPILER NOT FOUND. Example:latex  (MacOS:/opt/local/bin/latex)")
267                 ENDIF (NOT LATEX_FOUND)
268         ENDIF (NOT LATEX_COMPILER)
269   
270 ENDIF(USE_LATEX) 
271 #-----------------------------------------------------------------------------
272
273 #-----------------------------------------------------------------------------
274 IF(USE_TTH) 
275   IF (NOT TTH_EXECUTABLE)
276     FIND_FILE( TTH_EXECUTABLE NAME tth tth.exe PATHS . $ENV{CREATIS}/tth_exe/ ~/Creatis/tth ~/Creatis/tth_linux $ENV{TTH}) 
277
278     IF (NOT TTH_EXECUTABLE)
279       MESSAGE(FATAL_ERROR "TTH not found (LATEX_tth_CONVERTER). Required to build the HTML documentation from tex source")
280     ELSE (NOT  TTH_EXECUTABLE)
281       MESSAGE ( STATUS "=======================================")
282       MESSAGE ( STATUS "Looking for tth... - found ${TTH_EXECUTABLE}")
283     ENDIF(NOT TTH_EXECUTABLE)
284     MARK_AS_ADVANCED( TTH_EXECUTABLE )
285   ENDIF(NOT TTH_EXECUTABLE)
286 ENDIF(USE_TTH)
287 #-----------------------------------------------------------------------------
288 #-----------------------------------------------------------------------------
289 IF(USE_BOOST)
290   IF(NOT Boost_FOUND)
291       FIND_PACKAGE(Boost COMPONENTS filesystem  signals date_time regex REQUIRED)
292     IF(Boost_FOUND)
293       MESSAGE ( STATUS "=======================================")
294       MESSAGE ( STATUS "Looking for boost C++ library... - found in ${Boost_INCLUDE_DIR}")
295       INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})         
296                         LINK_DIRECTORIES( ${Boost_LIBRARY_DIRS})
297           IF(WIN32)
298                 CREA_DEFINE( USE_BOOST )
299                 ADD_DEFINITIONS(-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED)
300                 SET(BOOST_LIBRARIES
301                         ${Boost_LIBRARIES}
302                         )
303 # FCY with cmake boost, it's useless. 
304 # But if it is not working, uncomment   
305 #
306 #       IF(USE_DEBUG_LIB)
307 #                       SET(BOOST_LIBRARIES
308 #                               boost_signals-vc90-mt-gd-1_40
309 #                               boost_filesystem-vc90-mt-gd-1_40
310 #                               boost_date_time-vc90-mt-gd-1_40                    
311 #                          #what about boost_thread? JPR
312 #                       )
313 #               ELSE(NOT USE_DEBUG_LIB)
314 #                       SET(BOOST_LIBRARIES
315 #                               boost_signals-vc90-mt-1_40
316 #                               boost_filesystem-vc90-mt-1_40
317 #                               boost_date_time-vc90-mt-1_40
318 #                       )
319 #               ENDIF(USE_DEBUG_LIB)    
320           ENDIF(WIN32)
321       IF(NOT WIN32)
322
323                   SET(BOOST_LIBRARIES
324
325                         ${Boost_LIBRARIES}
326                         boost_system-mt
327                         boost_thread-mt     
328                         boost_program_options-mt
329
330 #EED 03 mars 2011
331 #EED                    boost_signals-mt
332 #EED                    boost_filesystem-mt
333 #EED                    boost_date_time-mt
334 #EED                    boost_system-mt
335 #EED                    boost_program_options-mt
336 #EED                    boost_regex-mt
337 #EED                    boost_thread-mt     
338
339                         )
340       ENDIF(NOT WIN32)
341
342           MARK_AS_ADVANCED(Boost_INCLUDE_DIR)
343           MARK_AS_ADVANCED(Boost_LIBRARY_DIRS)
344      
345     ELSE(Boost_FOUND)
346       MESSAGE( STATUS "boost C++ library not found - Set Boost_INCLUDE_DIR to the directory containing boost headers")
347     ENDIF(Boost_FOUND)
348   ENDIF(NOT Boost_FOUND)
349  
350
351 ENDIF(USE_BOOST)
352 #-----------------------------------------------------------
353
354 IF(USE_XERCES)
355
356         # FIND xerces
357         IF(WIN32)
358         
359                 SET(XERCES_LIB_DIR $ENV{XERCES_DIR})
360         
361                 IF(NOT XERCES_LIB_DIR)  
362                   MESSAGE(FATAL_ERROR "XERCES_DIR not found")  
363                 ELSE(NOT XERCES_LIB_DIR)
364                   
365                 INCLUDE_DIRECTORIES( ${XERCES_LIB_DIR}/include )                
366                 LINK_DIRECTORIES(  ${XERCES_LIB_DIR}/lib )
367                   
368                 ENDIF(NOT XERCES_LIB_DIR)       
369                 
370                 IF(USE_DEBUG_LIB)
371                         set(XERCES_LIBRARIES  xerces-c_3D)
372                 ELSE(USE_DEBUG_LIB)
373                         set(XERCES_LIBRARIES  xerces-c_3)
374                 ENDIF(USE_DEBUG_LIB)
375                 
376                 MARK_AS_ADVANCED(XERCES_LIB_DIR)
377         ENDIF(WIN32)
378
379
380         IF(UNIX)
381                 IF(APPLE)
382                         SET(XERCES_LIBRARIES xerces-c )
383                          INCLUDE_DIRECTORIES( /opt/local/include )
384                          LINK_DIRECTORIES(  /opt/local/lib ) 
385 #JCP 10/01/11                    
386                 ELSE(NOT APPLE) 
387                         SET(XERCES_LIBRARIES xerces-c )
388                          INCLUDE_DIRECTORIES( /usr/local/include )
389                          LINK_DIRECTORIES(  /usr/local/lib /usr/lib) 
390                         #FIND_PACKAGE(Xerces)
391                         # Use if found
392                         #IF(Xerces_FOUND)
393                          #  INCLUDE_DIRECTORIES( ${XERCES_INCLUDE_DIR} ) 
394                         #ENDIF(Xerces_FOUND)            
395                 ENDIF(APPLE)
396         ENDIF(UNIX)     
397   
398 ENDIF(USE_XERCES)
399
400
401 ENDMACRO(CREA_FIND_AND_USE_LIBRARIES)