ALIROOT-5769: Better handling of the error (R. Preghenella)
[u/mrichter/AliRoot.git] / CMakeLists.txt
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 #--------------------------------------------------------------------------#
17 # Set Basic CMake Configuration                                            #
18 #--------------------------------------------------------------------------#
19
20 cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
21
22 project(AliRoot CXX C)
23
24 message(STATUS "CMake platform: ${CMAKE_SYSTEM}")
25 message(STATUS "Build folder: ${AliRoot_BINARY_DIR}")
26 message(STATUS "Source folder: ${AliRoot_SOURCE_DIR}")
27 message(STATUS "Installation folder: ${CMAKE_INSTALL_PREFIX}")
28
29 # You can change the build type using 
30 # cmake -DCMAKE_BUILD_TYPE=DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL ...
31 if (NOT CMAKE_BUILD_TYPE)
32   set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
33 endif(NOT CMAKE_BUILD_TYPE)
34 message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
35
36
37 if(CMAKE_INSTALL_PREFIX STREQUAL "${AliRoot_SOURCE_DIR}")
38     message(FATAL_ERROR "Please choose a different installation point than the source tree!")
39 endif()
40
41 # Path to additonal modules
42 set(CMAKE_MODULE_PATH "${AliRoot_SOURCE_DIR}/cmake")
43
44 # AliRoot version extracted from Git repository
45 # Sets 4 git variables
46 #  - GIT_REFSPEC - complete name of the current reference
47 #  - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
48 #  - GIT_SHA1 - current hash in the long format
49 #  - GIT_SHORT_SHA1 - current hash in the short format
50 #  - ALIROOT_VERSION = ALIROOT_BRANCH
51 #  - ALIROOT_REVISION = GIT_SHORT_SHA1
52 include(CheckGitVersion)
53
54 #       - CLANG_MAJOR.CLANG_MINOR or
55 #       - GCC_MAJOR.GCC_MINOR.GCC_PATCH
56 include(CheckCompiler)
57
58 # Shared library suffix
59 if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
60   set(CMAKE_SHARED_LIBRARY_SUFFIX .so)
61 endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
62
63 # Checking first for DIM, DATE, AMORE and daqDA 
64 # in case ROOT Extra static library needs to be enabled
65
66 # DATE
67 # date-config needs DIMDIR and ODIR set
68 if(DATE_CONFIG)
69     if(DIMDIR AND ODIR)
70         find_package(DATE)
71     else()
72         message(FATAL_ERROR "DATE enabled but no DIMDIR and ODIR set. Please set DIMDIR and ODIR")
73     endif()
74 endif()
75
76 # daqDA
77 if(daqDA)
78     find_package(daqDA)
79 endif(daqDA)
80
81 # AMORE
82 if(AMORE_CONFIG)
83     if(ROOTSYS)
84         find_package(AMORE)
85     else()
86         message(FATAL_ERROR "AMORE enabled but no ROOTSYS defined")
87     endif()
88 endif(AMORE_CONFIG)
89
90 # id DARPM we enable DA if it is not set
91 if(DARPM)
92     if(NOT DA)
93         set(DA ON)
94     endif(NOT DA)
95 endif(DARPM)
96
97 # DA is enabled
98 if(DA)
99     if(NOT DIMDIR AND NOT ODIR)
100         set(DA FALSE)
101         message(FATAL_ERROR "Das enabled but no DIMDIR and ODIR set. Please set DIMDIR to DIM installation and ODIR to platform (default linux)")
102     endif()
103
104     if(NOT DATE_FOUND)
105         set(DA FALSE)
106         message(FATAL_ERROR "DAs enabled but no DATE support found. Please point to your date installation using \"DATE_CONFIG\" variable")
107     endif()
108
109     if(NOT daqDA_FOUND)
110         set(DA FALSE)
111         message(FATAL_ERROR "DAs enabled but no daqDA support found. Please point to your daqDA installation using \"daqDA\" variable")
112     endif()
113
114     if(NOT AMORE_FOUND)
115         set(DA FALSE)
116         message(FATAL_ERROR "DAs enabled but no AMORE support found. Please point to your AMORE installation using \"AMORE_CONFIG\" variable")
117     endif()
118     
119     # Enable static libraries
120     set(ALIROOT_STATIC TRUE)
121     message(STATUS "DAs enabled")
122 endif(DA)
123
124 # MDC rpm creation enables the static build
125 if(MDCRPM)
126     set(ALIROOT_STATIC TRUE)
127     message(STATUS "AliMDC RPM enabled. AliRoot static build enabled")
128 endif(MDCRPM)
129
130 # ROOT configuration mandatory
131 # FindRoot has to be after the enabling of DA due to libRootExtra
132 # Do not put it above DA
133 if(ROOTSYS)
134     find_package(ROOT REQUIRED)
135
136     # ROOT must be build with XML2 support
137     if(NOT ROOT_HASXML)
138         message(FATAL_ERROR "ROOT was not build with xml2 support. Please reinstall or rebuild ROOT with xml2 support")
139     endif(NOT ROOT_HASXML)
140 else()
141     message(FATAL_ERROR "ROOT installation not found!\nPlease point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR")
142 endif(ROOTSYS)
143
144 # ROOT dictionaries and maps
145 include(CMakeALICE)
146
147
148 # If no Fortran, i.e on Windows
149 # We need to specify ROOT fortran
150 # (f95 comes before gfortran in default module)
151 include(CheckLanguage)
152
153 if(ROOT_FORTRAN)
154     message(STATUS "Using the Fortran compiler defined by ROOT configuration: ${ROOT_FORTRAN}")
155     set(CMAKE_Fortran_COMPILER ${ROOT_FORTRAN})
156 else()
157     message(STATUS "Using default system Fortran compiler")
158 endif(ROOT_FORTRAN)
159
160 check_language(Fortran)
161 if(CMAKE_Fortran_COMPILER)
162     enable_language(Fortran OPTIONAL)
163 else()
164     message(STATUS "No Fortran support. Disabling LHAPDF, PHYTIA6, MICROCERN, etc.")
165 endif()
166
167 # Optional: Doxygen for reference doc generation
168 find_package(Doxygen)
169 if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
170     message(STATUS "Doxygen ${DOXYGEN_VERSION} and Graphviz found: ${DOXYGEN_EXECUTABLE}, ${DOXYGEN_DOT_EXECUTABLE}")
171     set(CAN_GENERATE_DOC TRUE)
172 else()
173     message(STATUS "Doxygen and Graphviz not found. Disabling support for documentation generation")
174 endif(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
175
176 # FastJet
177 find_package(FASTJET)
178
179 # ZEROMQ
180 find_package(ZeroMQ)
181
182 # Generating the AliRoot-config.cmake file
183 configure_file(${PROJECT_SOURCE_DIR}/cmake/AliRoot-config.cmake.in ${CMAKE_BINARY_DIR}/version/AliRoot-config.cmake @ONLY)
184 install(FILES ${PROJECT_BINARY_DIR}/version/AliRoot-config.cmake DESTINATION etc)
185
186 # General flags -> Should be moved into a configuration file
187 set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
188 set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE)
189
190 # AliRoot base modules
191 add_subdirectory(STEER)
192 add_subdirectory(RAW)
193 add_subdirectory(ANALYSIS)
194
195 # Include Vc own cmake
196 include(Vc/Vc.cmake)
197 add_subdirectory(Vc)
198
199 # AliRoot common macros
200 add_subdirectory(macros)
201
202 # AliRoot modules
203 add_subdirectory(ACORDE)
204 add_subdirectory(AD)
205 add_subdirectory(BCM)
206 add_subdirectory(EMCAL)
207 add_subdirectory(EPOS)
208 add_subdirectory(EVE)
209 add_subdirectory(EVGEN)
210 add_subdirectory(FASTSIM)
211 add_subdirectory(FIT)
212 add_subdirectory(FMD)
213 add_subdirectory(HLT)
214 add_subdirectory(HMPID)
215 add_subdirectory(ITS)
216 add_subdirectory(MFT)
217 add_subdirectory(MONITOR)
218 add_subdirectory(MUON)
219 add_subdirectory(PHOS)
220 add_subdirectory(PMD)
221 add_subdirectory(PYTHIA8)
222 add_subdirectory(STARLIGHT)
223 add_subdirectory(STAT)
224 add_subdirectory(STRUCT)
225 add_subdirectory(T0)
226 add_subdirectory(TDPMjet)
227 add_subdirectory(TEvtGen)
228 add_subdirectory(THerwig)
229 add_subdirectory(TOF)
230 add_subdirectory(TPC)
231 add_subdirectory(TRD)
232 add_subdirectory(TRIGGER)
233 add_subdirectory(TTherminator)
234 add_subdirectory(VZERO)
235 add_subdirectory(ZDC)
236 add_subdirectory(doxygen)
237
238 # Fortran modules
239 if(CMAKE_Fortran_COMPILER)
240   add_subdirectory(DIME)
241   add_subdirectory(DPMJET)
242   add_subdirectory(HERWIG)
243   add_subdirectory(HIJING)
244   add_subdirectory(LHAPDF)
245   add_subdirectory(MICROCERN)
246   add_subdirectory(PYTHIA6)
247   add_subdirectory(TEPEMGEN)
248   add_subdirectory(THbtp)
249   add_subdirectory(THijing)
250   add_subdirectory(THydjet)
251   add_subdirectory(TPHIC)
252   add_subdirectory(TUHKMgen)
253   add_subdirectory(TAmpt)
254 endif(CMAKE_Fortran_COMPILER)
255
256 add_subdirectory(data)
257 add_subdirectory(GRP)
258 add_subdirectory(OCDB)
259 add_subdirectory(QAref)
260
261 # Enable SHUTTLE compilation
262 # Check if DIMDIR and ODIR are set
263 if(SHUTTLE)
264     if(ROOT_HASALIEN STREQUAL "no")
265         message(FATAL_ERROR "Shuttle needs ROOT build with AliEn support. Please build ROOT with AliEn support. Do not forget to set ALIEN to your AliEn installation")
266     endif()
267     
268     if(DIMDIR AND ODIR AND ALIEN)
269         add_subdirectory(SHUTTLE)
270     else()
271         message(FATAL_ERROR "SHUTTLE enabled! Please specify DIMDIR, ODIR and ALIEN")
272     endif()
273 endif(SHUTTLE)
274
275 add_subdirectory(ALIROOT)