]> Creatis software - crea.git/blob - cmake/CREAMacro_FindAndUseLibraries.cmake
e5976cd3a823da0f8fc19be0049044f760fc04d4
[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
100 IF(USE_ITK)
101   IF(NOT ITK_FOUND)
102     # Search ITK
103     FIND_PACKAGE(ITK)
104     # If itk found
105     IF(ITK_FOUND)
106       MESSAGE ( STATUS "=======================================")
107       MESSAGE ( STATUS "Looking for ITK... found")
108       MESSAGE ( STATUS "* Dir     = ${ITK_DIR}")
109       MESSAGE ( STATUS "* Version = ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}")
110       SET(SKIP_ITK_BUILD_SETTINGS_FILE ON)
111       INCLUDE(${ITK_USE_FILE})
112       CREA_DEFINE( USE_ITK )
113       CREA_DEFINE( _USE_ITK_ )
114                 If (${ITK_VERSION_MAJOR} MATCHES "4"  OR  ${ITK_VERSION_MAJOR} MATCHES "5"  )
115                         MESSAGE ( STATUS "* Version = ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}")
116                         SET(ITK_LIBRARIES ${ITK_LIBRARIES}) 
117                         MESSAGE ( STATUS "${ITK_LIBRARIES}")
118                 ELSEIF()
119                         SET(ITK_LIBRARIES ITKCommon ITKIO ITKBasicFilters ITKAlgorithms)
120                 ENDIF()
121       MARK_AS_ADVANCED(ITK_DIR)
122     ELSE(ITK_FOUND)
123       message(FATAL_ERROR "ITK_DIR not found")
124     ENDIF(ITK_FOUND)
125   ENDIF(NOT ITK_FOUND)
126 ENDIF(USE_ITK)
127 #-----------------------------------------------------------------------------
128
129
130 #-----------------------------------------------------------------------------
131
132 IF(USE_GDCM)
133   IF (USE_GDCM2)
134     MESSAGE(ERROR "CANNOT USE BOTH gdcm AND gdcm2 !")
135   ENDIF (USE_GDCM2)
136
137   IF(NOT GDCM_FOUND)
138     # Search GDCM
139     FIND_PACKAGE(GDCM)
140     # If gdcm found
141     IF(GDCM_FOUND)
142       INCLUDE(${GDCM_USE_FILE})
143       CREA_DEFINE( USE_GDCM )
144
145       MESSAGE ( STATUS "=======================================")
146       MESSAGE ( STATUS "Looking for GDCM... found")
147       MESSAGE ( STATUS "* Dir       = ${GDCM_DIR}")
148       MESSAGE ( STATUS "* Version   = ${GDCM_MAJOR_VERSION}.${GDCM_MINOR_VERSION}.${GDCM_BUILD_VERSION}")
149       MESSAGE ( STATUS "* Namespace = ${GDCM_NAME_SPACE}")
150
151       # Test that GDCM_NAME_SPACE is **NOT** "gdcm" or will conflict with 
152       # embedded gdcm in ITK and will result in hard seg faults !
153       IF(USE_ITK)
154         IF (GDCM_NAME_SPACE STREQUAL "gdcm")
155           MESSAGE(FATAL_ERROR "GDCM_NAME_SPACE value is 'gdcm' which conflicts with ITK embededd gdcm namespace : rebuild gdcm with another GDCM_NAME_SPACE value")
156         ENDIF (GDCM_NAME_SPACE STREQUAL "gdcm")
157       ENDIF(USE_ITK)
158
159       MARK_AS_ADVANCED(GDCM_DIR)
160
161       SET(GDCM_LIBRARIES
162         ${GDCM_LIBRARIES} 
163         )
164
165       # TODO : Test that GDCM was built with option "vtkgdcm"
166       IF(USE_GDCM_VTK)
167         IF(USE_VTK)
168           SET(GDCM_LIBRARIES
169             ${GDCM_LIBRARIES}
170             vtkgdcm  
171             )
172         ENDIF(USE_VTK)
173       ENDIF(USE_GDCM_VTK)
174
175     ELSE(GDCM_FOUND)     
176           MESSAGE(FATAL_ERROR "GDCM not found....")
177     ENDIF(GDCM_FOUND)
178
179   ENDIF(NOT GDCM_FOUND)
180 ENDIF(USE_GDCM)
181
182 #-----------------------------------------------------------------------------
183
184 IF(USE_GDCM2)
185   IF (USE_GDCM)
186     MESSAGE(ERROR "CANNOT USE BOTH gdcm AND gdcm2 !")
187   ENDIF (USE_GDCM)
188
189 #  IF(NOT USE_ITK) # JPR : ITK vs GDCM (avoid cmake break)
190     # Search GDCM2
191
192     FIND_PACKAGE(GDCM REQUIRED)
193     INCLUDE(${GDCM_USE_FILE})
194
195       IF(NOT ${GDCM_MAJOR_VERSION} EQUAL 2)
196         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")
197       ENDIF(NOT ${GDCM_MAJOR_VERSION} EQUAL 2)
198       
199       CREA_DEFINE( USE_GDCM2 )
200           MARK_AS_ADVANCED(GDCM_DIR)
201       CREA_DEFINE_WITH_VAL( GDCM_NAME_SPACE gdcm )
202       
203       MESSAGE ( STATUS "=======================================")
204       MESSAGE ( STATUS "Looking for GDCM2... found")
205       MESSAGE ( STATUS "* Dir       = ${GDCM_DIR}")
206       MESSAGE ( STATUS "* Version   = ${GDCM_MAJOR_VERSION}.${GDCM_MINOR_VERSION}.${GDCM_BUILD_VERSION}")
207       MESSAGE ( STATUS "* Namespace = ${GDCM_NAME_SPACE}")
208       
209       # Test that GDCM_NAME_SPACE is **NOT** "gdcm" or will conflict with 
210       # embedded gdcm in ITK and will result in hard seg faults !
211                    INCLUDE_DIRECTORIES(${GDCM_INCLUDE_DIRS})     
212                         LINK_DIRECTORIES( ${GDCM_LIBRARY_DIRS}) 
213                         
214       SET(GDCM2_LIBRARIES
215         ${GDCM_LIBRARIES} 
216         )
217
218       IF(USE_GDCM_VTK)
219         IF(USE_VTK)
220                 IF(WIN32)
221                   SET(GDCM_LIBRARIES
222                         ${GDCM_LIBRARIES}
223                         vtkgdcm
224                         gdcmIOD
225                         gdcmMSFF
226                         gdcmexpat
227                         gdcmCommon
228                         gdcmMEXD
229                         gdcmexpat
230                         gdcmDSED
231                         gdcmDICT
232                         gdcmjpeg8
233                         gdcmjpeg12
234                         gdcmjpeg16
235                         socketxx
236                         gdcmopenjpeg
237                         gdcmcharls
238                      )
239                 ELSE(WIN32)
240                     SET(GDCM_LIBRARIES
241                         ${GDCM_LIBRARIES}
242                         vtkgdcm
243                         gdcmIOD
244                         )
245                 ENDIF(WIN32)
246                 
247         ENDIF(USE_VTK)
248       ENDIF(USE_GDCM_VTK)
249  # ENDIF(NOT USE_ITK) # JPR : ITK vs GDCM (avoid cmake break)
250
251 ENDIF(USE_GDCM2)
252
253 #-----------------------------------------------------------------------------
254
255 #-----------------------------------------------------------------------------
256
257 #-------------------- JFGA ---
258 IF(USE_WT)
259         MESSAGE (  "======================================= JFGA ------------USE WT CREAMacro_FindAndUseLibraries.cmake")
260         INCLUDE(${CREA_CMAKE_DIR}/CREAMacro_FindAndUseWt.cmake)
261         CREA_FINDANDUSEWT()
262 ENDIF(USE_WT)
263
264 #-----------------------------------------------------------------------------
265 IF(USE_WXWIDGETS)
266   IF(NOT wxWidgets_FOUND)
267         
268     INCLUDE(${CREA_CMAKE_DIR}/CREAMacro_FindAndUseWxWidgets.cmake)
269     CREA_FIND_WXWIDGETS(${USE_DEBUG_LIB})
270     CREA_USE_WXWIDGETS()
271         
272                 
273  
274   ENDIF(NOT wxWidgets_FOUND)
275 ENDIF(USE_WXWIDGETS)
276 #-----------------------------------------------------------------------------
277
278
279
280 #-----------------------------------------------------------------------------
281 IF(USE_DOXYGEN) 
282   IF(NOT DOXYGEN)
283     MESSAGE ( STATUS "=======================================")
284     FIND_PACKAGE(Doxygen REQUIRED)
285     #  MESSAGE(STATUS "Looking for doxygen... - found ${DOXYGEN}")
286     #  IF(DOXYGEN)
287     #    
288     #  ELSE(DOXYGEN)
289     #    MESSAGE(FATAL_ERROR "Doxygen not found. Required to build the doxygen documentation")
290   ENDIF(NOT DOXYGEN)
291 ENDIF(USE_DOXYGEN)
292 #-----------------------------------------------------------------------------
293
294
295 #-----------------------------------------------------------------------------
296 IF(USE_LATEX)
297         IF (NOT LATEX_COMPILER)
298                 FIND_PACKAGE(LATEX REQUIRED)
299                 MESSAGE ( STATUS "=======================================")
300                 MESSAGE(STATUS "Looking for latex... - found ${LATEX_COMPILER}")
301                 IF (NOT LATEX_FOUND)
302                    MESSAGE(FATAL_ERROR "LATEX_COMPILER NOT FOUND. Example:latex  (MacOS:/opt/local/bin/latex)")
303                 ENDIF (NOT LATEX_FOUND)
304         ENDIF (NOT LATEX_COMPILER)
305   
306 ENDIF(USE_LATEX) 
307 #-----------------------------------------------------------------------------
308
309 #-----------------------------------------------------------------------------
310 IF(USE_TTH) 
311   IF (NOT TTH_EXECUTABLE)
312     FIND_FILE( TTH_EXECUTABLE NAME tth tth.exe PATHS . $ENV{CREATIS}/tth_exe/ ~/Creatis/tth ~/Creatis/tth_linux $ENV{TTH}) 
313
314     IF (NOT TTH_EXECUTABLE)
315       MESSAGE(FATAL_ERROR "TTH not found (LATEX_tth_CONVERTER). Required to build the HTML documentation from tex source")
316     ELSE (NOT  TTH_EXECUTABLE)
317       MESSAGE ( STATUS "=======================================")
318       MESSAGE ( STATUS "Looking for tth... - found ${TTH_EXECUTABLE}")
319     ENDIF(NOT TTH_EXECUTABLE)
320     MARK_AS_ADVANCED( TTH_EXECUTABLE )
321   ENDIF(NOT TTH_EXECUTABLE)
322 ENDIF(USE_TTH)
323 #-----------------------------------------------------------------------------
324 #-----------------------------------------------------------------------------
325 IF(USE_BOOST)
326   IF(NOT Boost_FOUND)
327         add_definitions( -DBOOST_ALL_NO_LIB )
328         add_definitions( -DBOOST_ALL_DYN_LINK )
329         IF (MINGW)
330                 IF(APPLE)
331                         FIND_PACKAGE(Boost COMPONENTS filesystem-mgw71 system-mgw71 signals-mgw71 date_time-mgw71 thread-mgw71 regex-mgw71 program_options-mgw71 REQUIRED)
332                 ELSE(APPLE)
333                         set( Boost_INCLUDE_DIR $ENV{BOOST_ROOT}/include/boost-1_69)
334                         FIND_PACKAGE(Boost COMPONENTS filesystem-mgw73-mt-x64-1_69  system-mgw73-mt-x64-1_69  date_time-mgw73-mt-x64-1_69 thread-mgw73-mt-x64-1_69 regex-mgw73-mt-x64-1_69 program_options-mgw73-mt-x64-1_69  REQUIRED)
335                 ENDIF(APPLE)
336         ELSE (MINGW)
337 #               FIND_PACKAGE(Boost COMPONENTS filesystem system signals date_time thread regex program_options REQUIRED)
338 #EED 2022-07-23
339 #               FIND_PACKAGE(Boost COMPONENTS filesystem system  date_time thread regex program_options REQUIRED)
340                 FIND_PACKAGE(Boost COMPONENTS filesystem system  date_time  regex program_options REQUIRED)
341         ENDIF(MINGW)
342     IF(Boost_FOUND) 
343           ADD_DEFINITIONS(-DBOOST_FILESYSTEM_VERSION=3)
344           ADD_DEFINITIONS(-DBOOST_MAYOR_VERSION=${Boost_MAJOR_VERSION})
345           ADD_DEFINITIONS(-DBOOST_MINOR_VERSION=${Boost_MINOR_VERSION})
346       MESSAGE ( STATUS "=======================================")
347       MESSAGE ( STATUS "Looking for boost C++ library... - found in ${Boost_INCLUDE_DIR}")
348       INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})         
349           LINK_DIRECTORIES( ${Boost_LIBRARY_DIRS})
350           IF(WIN32)
351                 CREA_DEFINE( USE_BOOST )
352                 ADD_DEFINITIONS(-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED)
353                 SET(BOOST_LIBRARIES
354                         ${Boost_LIBRARIES}
355                         )
356                         
357 # FCY with cmake boost, it's useless. 
358 # But if it is not working, uncomment   
359 #
360 #       IF(USE_DEBUG_LIB)
361 #                       SET(BOOST_LIBRARIES
362 #                               boost_signals-vc90-mt-gd-1_40
363 #                               boost_filesystem-vc90-mt-gd-1_40
364 #                               boost_date_time-vc90-mt-gd-1_40                    
365 #                          #what about boost_thread? JPR
366 #                       )
367 #               ELSE(NOT USE_DEBUG_LIB)
368 #                       SET(BOOST_LIBRARIES
369 #                               boost_signals-vc90-mt-1_40
370 #                               boost_filesystem-vc90-mt-1_40
371 #                               boost_date_time-vc90-mt-1_40
372 #                       )
373 #               ENDIF(USE_DEBUG_LIB)    
374           ENDIF(WIN32)
375       IF(NOT WIN32)
376 message("EED 2021 CREAMacro_FindAndUseLibraries " ${Boost_LIBRARIES} )
377
378                   SET(BOOST_LIBRARIES
379
380                         ${Boost_LIBRARIES}
381 #EED 10 Fev 2014
382 #EED                    boost_system-mt
383 #EED                    boost_thread-mt     
384 #EED                    boost_program_options-mt
385
386 #EED 03 mars 2011
387 #EED                    boost_signals-mt
388 #EED                    boost_filesystem-mt
389 #EED                    boost_date_time-mt
390 #EED                    boost_system-mt
391 #EED                    boost_program_options-mt
392 #EED                    boost_regex-mt
393 #EED                    boost_thread-mt     
394
395                         )
396       ENDIF(NOT WIN32)
397
398           MARK_AS_ADVANCED(Boost_INCLUDE_DIR)
399           MARK_AS_ADVANCED(Boost_LIBRARY_DIRS)
400      
401     ELSE(Boost_FOUND)
402       MESSAGE( STATUS "boost C++ library not found - Set Boost_INCLUDE_DIR to the directory containing boost headers")
403     ENDIF(Boost_FOUND)
404   ENDIF(NOT Boost_FOUND)
405  
406
407 ENDIF(USE_BOOST)
408 #-----------------------------------------------------------
409
410 IF(USE_XERCES)
411
412         # FIND xerces
413         IF(WIN32)
414         
415                 SET(XERCES_LIB_DIR $ENV{XERCES_DIR})
416         
417                 IF(NOT XERCES_LIB_DIR)  
418                   MESSAGE(FATAL_ERROR "XERCES_DIR not found")  
419                 ELSE(NOT XERCES_LIB_DIR)
420                   
421                 INCLUDE_DIRECTORIES( ${XERCES_LIB_DIR}/include )                
422                 LINK_DIRECTORIES(  ${XERCES_LIB_DIR}/lib )
423                   
424                 ENDIF(NOT XERCES_LIB_DIR)       
425                 
426                 IF(APPLE)
427                         IF(USE_DEBUG_LIB)
428                                 set(XERCES_LIBRARIES  xerces-c_3D)
429                         ELSE(USE_DEBUG_LIB)
430                                 set(XERCES_LIBRARIES  xerces-c_3)
431                         ENDIF(USE_DEBUG_LIB)
432                 ELSEIF(APPLE)
433                         IF(USE_DEBUG_LIB)
434                                 #EED 2019-07-03                 set(XERCES_LIBRARIES  xerces-c_3D)
435                                 set(XERCES_LIBRARIES  xerces-c)
436                         ELSE(USE_DEBUG_LIB)
437                                 #EED 2019-07-03                 set(XERCES_LIBRARIES  xerces-c_3)
438                                 set(XERCES_LIBRARIES  xerces-c)
439                         ENDIF(USE_DEBUG_LIB)
440                 ENDIF(APPLE)
441                 
442                 MARK_AS_ADVANCED(XERCES_LIB_DIR)
443         ENDIF(WIN32)
444
445
446         IF(UNIX)
447                 IF(APPLE)
448                         SET(XERCES_LIBRARIES xerces-c )
449                          INCLUDE_DIRECTORIES( /opt/local/include )
450                          LINK_DIRECTORIES(  /opt/local/lib ) 
451 #JCP 10/01/11                    
452                 ELSE(NOT APPLE) 
453                         SET(XERCES_LIBRARIES xerces-c )
454                          INCLUDE_DIRECTORIES( /usr/local/include )
455                          LINK_DIRECTORIES(  /usr/local/lib /usr/lib) 
456                         #FIND_PACKAGE(Xerces)
457                         # Use if found
458                         #IF(Xerces_FOUND)
459                          #  INCLUDE_DIRECTORIES( ${XERCES_INCLUDE_DIR} ) 
460                         #ENDIF(Xerces_FOUND)            
461                 ENDIF(APPLE)
462         ENDIF(UNIX)     
463   
464 ENDIF(USE_XERCES)
465
466
467 ENDMACRO(CREA_FIND_AND_USE_LIBRARIES)