]> git.uio.no Git - u/mrichter/AliRoot.git/blob - cmake/FindROOT.cmake
- change of ZDCC mothervolume to make space for AD geometry
[u/mrichter/AliRoot.git] / cmake / FindROOT.cmake
1 # **************************************************************************
2 # * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
3 # *                                                                        *
4 # * Author: The ALICE Off-line Project.                                    *
5 # * Contributors are mentioned in the code where appropriate.              *
6 # *                                                                        *
7 # * Permission to use, copy, modify and distribute this software and its   *
8 # * documentation strictly for non-commercial purposes is hereby granted   *
9 # * without fee, provided that the above copyright notice appears in all   *
10 # * copies and that both the copyright notice and this permission notice   *
11 # * appear in the supporting documentation. The authors make no claims     *
12 # * about the suitability of this software for any purpose. It is          *
13 # * provided "as is" without express or implied warranty.                  *
14 # **************************************************************************
15
16 # Checking for a proper ROOT installation based on the ROOTSYS variable
17 # received during configuration
18 # If proper root installation it is setting the following variables
19 # - ROOT_VERSION - ROOT version as reported by root-config
20 # - ROOT_VERSION_MAJOR
21 # - ROOT_VERSIOM_MINOR
22 # - ROOT_VERSION_PATCH
23 # - ROOT_CONFIG - path to root-config script
24 # - ROOT_CINT - path to rootcint executable
25 # - ROOT_LIBMAP - path to rlibmap executable
26 # - ROOT_FEATURES - list of build features for ROOT
27 # - ROOT_LIBDIR - full path to ROOT library folder
28 # - ROOT_ETCDIR - full path to the ROOT's configuration directory
29 # - ROOT_LIBRARIES - libraries needed for the package to be used
30 # - ROOT_GLIBRARIES - regular + GUI ROOT libraries + path to be used during linking
31 # - ROOT_INCLUDE_DIR - full path to ROOT include folder
32 # - ROOT_HASALIEN - ROOT was built with AliEn support
33 # - ROOT_HASOPENGL - ROOT was built with OpenGL support
34 # - ROOT_HASXML - ROOT was built with XML support
35 # - ROOT_FORTRAN - fortran compiler
36
37 set(ROOT_FOUND FALSE)
38
39 if(ROOTSYS)
40     message(STATUS "Checking for a proper ROOT installation in ${ROOTSYS}.")
41
42     # Setting defaults
43     set(ROOT_LIBDIR ${ROOTSYS}/lib)
44     set(ROOT_INCLUDE_DIR ${ROOTSYS}/include)
45
46     # Check for root-config scripts
47     find_program(ROOT_CONFIG NAMES root-config PATHS ${ROOTSYS}/bin NO_DEFAULT_PATH)
48
49     if(NOT ROOT_CONFIG)
50         message(FATAL_ERROR "Could not find root-config script.")
51     endif(NOT ROOT_CONFIG)
52     mark_as_advanced(ROOT_CONFIG)
53
54     # Check for rlibmap
55     find_program(ROOT_LIBMAP NAMES rlibmap rootcling PATHS ${ROOTSYS}/bin NO_DEFAULT_PATH)
56     if(ROOT_LIBMAP)
57         message(STATUS "Found ${ROOT_LIBMAP}")
58     else()
59         message(FATAL_ERROR "Could not find rlibmap executable.")
60     endif(ROOT_LIBMAP)
61     mark_as_advanced(ROOT_LIBMAP)
62
63     # Check for rootcint
64     find_program(ROOT_CINT NAMES rootcint PATHS ${ROOTSYS}/bin NO_DEFAULT_PATH)
65     if(ROOT_CINT)
66         message(STATUS "Found ${ROOT_CINT}")
67     else()
68         message(FATAL_ERROR "Could not find rootcint executable.")
69     endif(ROOT_CINT)
70     mark_as_advanced(ROOT_CINT)
71
72     # Checking ROOT version
73     execute_process(COMMAND ${ROOT_CONFIG} --version OUTPUT_VARIABLE ROOT_VERSION ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
74     if(error)
75         message(FATAL_ERROR "Error retrieving ROOT version : ${error}")
76     endif(error)
77     string(STRIP "${ROOT_VERSION}" ROOT_VERSION)
78
79     # Extract major, minor, and patch versions from
80     string(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+.*" "\\1" ROOT_VERSION_MAJOR "${ROOT_VERSION}")
81     string(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" ROOT_VERSION_MINOR "${ROOT_VERSION}")
82     string(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+).*" "\\1" ROOT_VERSION_PATCH "${ROOT_VERSION}")
83     message(STATUS "Found ROOT version ${ROOT_VERSION_MAJOR}.${ROOT_VERSION_MINOR}.${ROOT_VERSION_PATCH}")
84
85     # Print ROOT features
86     execute_process(COMMAND ${ROOT_CONFIG} --features OUTPUT_VARIABLE ROOT_FEATURES ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
87     if(error)
88         message(FATAL_ERROR "Error retrieving ROOT features : ${error}")
89     else()
90         message(STATUS "ROOT was built with the following features: ${ROOT_FEATURES}")
91     endif(error)
92     string(STRIP "${ROOT_FEATURES}" ROOT_FEATURES)
93
94     # Checking for ROOT libdir
95     execute_process(COMMAND ${ROOT_CONFIG} --libdir OUTPUT_VARIABLE ROOT_LIBDIR ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
96     if(error)
97         message(FATAL_ERROR "Error retrieving ROOT libdir: ${error}")
98     endif(error)
99     string(STRIP "${ROOT_LIBDIR}" ROOT_LIBDIR)
100
101     # Checking for ROOT etcdir
102     execute_process(COMMAND ${ROOT_CONFIG} --etcdir OUTPUT_VARIABLE ROOT_ETCDIR ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE)
103     if(error)
104         message(FATAL_ERROR "Error retrieving ROOT etcdir: ${error}")
105     endif(error)
106     string(STRIP "${ROOT_ETCDIR}" ROOT_ETCDIR)
107
108     # Checking for ROOT libs
109     execute_process(COMMAND ${ROOT_CONFIG} --noldflags --libs OUTPUT_VARIABLE ROOT_LIBS ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
110     if(error)
111         message(FATAL_ERROR "Error retrieving ROOT libdir: ${error}")
112     endif(error)
113     string(STRIP "${ROOT_LIBS}" ROOT_LIBS)
114
115     foreach(lib ${ROOT_LIBS})
116         string(REPLACE "-rdynamic" "" new_lib ${lib})
117         string(REPLACE "-l" "" lib ${new_lib})
118         set(ROOT_LIBRARIES ${ROOT_LIBRARIES} ${lib})
119     endforeach()
120     string(STRIP "${ROOT_LIBRARIES}" ROOT_LIBRARIES)
121     separate_arguments(ROOT_LIBRARIES)
122
123     # Checking for ROOT incdir
124     execute_process(COMMAND ${ROOT_CONFIG} --incdir OUTPUT_VARIABLE ROOT_INCDIR ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
125     if(error)
126         message(FATAL_ERROR "Error retrieving ROOT incdir: ${error}")
127     endif(error)
128     string(STRIP "${ROOT_INCDIR}" ROOT_INCDIR)
129     set(ROOT_INCLUDE_DIR ${ROOT_INCDIR})
130
131     # Checking for glibs
132     execute_process(COMMAND ${ROOT_CONFIG} --noldflags --glibs OUTPUT_VARIABLE ROOT_GLIBS ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
133     if(error)
134         message(FATAL_ERROR "Error retrieving ROOT glibs: ${error}")
135     endif(error)
136
137     # Checking for glibs
138     string(STRIP "${ROOT_GLIBS}" ROOT_GLIBS)
139
140     foreach(lib ${ROOT_GLIBS})
141         string(REPLACE "-rdynamic" "" new_lib "${lib}")
142         string(REPLACE "-l" "" lib "${new_lib}")
143         set(ROOT_GLIBRARIES ${ROOT_GLIBRARIES} ${lib})
144     endforeach()
145     string(STRIP "${ROOT_GLIBRARIES}" ROOT_GLIBRARIES)
146     separate_arguments(ROOT_GLIBRARIES)
147
148     # Checking for AliEn support
149     # If AliEn support is enabled we need to point to AliEn
150     execute_process(COMMAND ${ROOT_CONFIG} --has-alien OUTPUT_VARIABLE ROOT_HASALIEN ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
151     if(error)
152         message(FATAL_ERROR "Error checking if ROOT was built with AliEn support: ${error}")
153     endif(error)
154     
155     #if defined
156     if(ROOT_HASALIEN)
157         string(STRIP "${ROOT_HASALIEN}" ROOT_HASALIEN)
158         if(ROOT_HASALIEN STREQUAL "yes")
159             if(ALIEN)
160             add_definitions(-DWITHALIEN)
161
162             # AliEn might bring some system libraries, we need to use them
163             if(EXISTS "${ALIEN}/lib")
164                 link_directories(${ALIEN}/lib)
165             endif()
166
167             # api/lib should always exists
168             if(EXISTS "${ALIEN}/api/lib")
169                 link_directories(${ALIEN}/api/lib)
170             endif()
171
172             # include for AliEn
173             if(EXISTS "${ALIEN}/include")
174                 include_directories(SYSTEM ${ALIEN}/include)
175             endif()
176
177             # api/include always exists
178             if(EXISTS "${ALIEN}/api/include")
179                 include_directories(SYSTEM ${ALIEN}/api/include)
180             endif()
181
182             set(ROOT_HASALIEN TRUE)
183             else(ALIEN)
184             message(FATAL_ERROR "ROOT was built with AliEn support but no AliEn installation found. Please set \"ALIEN\" to point to your AliEn installation.")
185             endif(ALIEN)
186         else()
187             set(ROOT_HASALIEN FALSE)
188         endif()
189     endif(ROOT_HASALIEN)
190
191     # Checking for xml support
192     execute_process(COMMAND ${ROOT_CONFIG} --has-xml OUTPUT_VARIABLE ROOT_HASXML ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
193     if(error)
194         message(FATAL_ERROR "Error checking if ROOT was built with xml support: ${error}")
195     endif(error)
196     
197     # if defined
198     if(ROOT_HASXML)
199         string(STRIP "${ROOT_HASXML}" ROOT_HASXML)
200         if(ROOT_HASXML STREQUAL "yes")
201             add_definitions(-DWITHXML)
202             set(ROOT_HASXML TRUE)
203         else()
204             set(ROOT_HASXML FALSE)
205         endif()
206     endif(ROOT_HASXML)
207
208     # Checking for OpenGL support
209     execute_process(COMMAND ${ROOT_CONFIG} --has-opengl OUTPUT_VARIABLE ROOT_HASOPENGL ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
210     if(error)
211         message(FATAL_ERROR "Error checking if ROOT was built with OpenGL support: ${error}")
212     endif(error)
213     
214     if(ROOT_HASOPENGL)
215         string(STRIP "${ROOT_HASOPENGL}" ROOT_HASOPENGL)
216         if(ROOT_HASOPENGL STREQUAL "yes")
217             set(ROOT_HASOPENGL TRUE)
218         else()
219             set(ROOT_HASOPENGL FALSE)
220         endif()
221     endif()
222
223
224     # Checking for fortran compiler
225     execute_process(COMMAND ${ROOT_CONFIG} --f77 OUTPUT_VARIABLE ROOT_FORTRAN ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
226     if(error)
227         message(FATAL_ERROR "Error checking ROOT fortran compiler: ${error}")
228     endif(error)
229     string(STRIP "${ROOT_FORTRAN}" ROOT_FORTRAN)
230
231     # adding the libraries and the inc dir
232     link_directories(${ROOT_LIBDIR})
233     include_directories(SYSTEM ${ROOT_INCLUDE_DIR})
234     set(ROOT_FOUND TRUE)
235
236     # Workaround misssing XML, VMC, Minuit from ROOT static library
237     # Also adding libzma.a libfreetype.a libpcre.a
238     # To be removed where https://sft.its.cern.ch/jira/browse/ROOT-6904 issue is fixed
239     if(ALIROOT_STATIC)
240         message(WARNING "AliRoot static build enabled! libRootExtra.a will be created.\nPlease remove when ROOT https://sft.its.cern.ch/jira/browse/ROOT-6904 issue is fixed")
241
242         # ROOT needs xml2 but it is not built with the static version so we have to add it
243         find_package(LibXml2)
244
245         if(LIBXML2_FOUND)
246         
247             # adding SSL
248             find_package(OpenSSL)
249         
250             if(OPENSSL_FOUND)
251                 file(GLOB _extraroot "${ROOTSYS}/montercarlo/vmc/src/*.o" "${ROOTSYS}/tree/treeplayer/src/*.o" "${ROOTSYS}/io/xmlparser/src/*.o" "${ROOTSYS}/math/minuit2/src/*.o")
252                 add_library(RootExtra STATIC ${_extraroot})
253                 set_target_properties(RootExtra PROPERTIES COMPILE_FLAGS "${LIBXML2_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}")
254                 set_target_properties(RootExtra PROPERTIES LINKER_LANGUAGE CXX)
255                 target_link_libraries(RootExtra ${ROOT_LIBDIR}/libfreetype.a ${ROOT_LIBDIR}/libpcre.a ${ROOT_LIBDIR}/liblzma.a ${LIBXML2_LIBRARIES} ${OPENSSL_LIBRARIES})
256             else()
257                 message(FATAL_ERROR "OpenSSL not found. Coould not generate the static RootExtra. Please install Openssl")
258             endif()
259         else()
260             message(FATAL_ERROR "libxml2 not found. Can not generate the static RootExtra. Please install libxml2")
261         endif()
262     endif(ALIROOT_STATIC)
263 else()
264     message(FATAL_ERROR "ROOT installation not found! Please point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR.")
265 endif(ROOTSYS)