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