]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CMakeLists.txt
Improved quitting Event Display with close button.
[u/mrichter/AliRoot.git] / CMakeLists.txt
index 1eac6237005b6158c86dc814e6b11dd8da55e5e7..be1159d7ac393dcaed2b674c88aba365b3ad116b 100644 (file)
@@ -1,4 +1,4 @@
-# -*- mode: cmake -*-
+# -*- mode: cmake -*-/usr/share/applications/thunderbird.desktop 
 
 # Top level CMakeList.txt file for the AliRoot Build System
 #
@@ -6,7 +6,7 @@
 #         Port of previous Makefile build to cmake
 
 
-cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
+cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
 
 #--------------------------------------------------------------------------------#
 # Set Basic CMake Configuration                                                  #
@@ -15,32 +15,40 @@ cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
 project(AliRoot CXX C Fortran)
 
 # Environment variables
-set(ALICE_ROOT $ENV{ALICE_ROOT})
 set(ALICE $ENV{ALICE})
-set(ALICE_INSTALL $ENV{ALICE_INSTALL})
-if(${ALICE_INSTALL} MATCHES ${CMAKE_BINARY_DIR})
-  message(FATAL_ERROR "Install dir should be different from build dir")
-endif(${ALICE_INSTALL} MATCHES ${CMAKE_BINARY_DIR})
-# Environment for SHUTTLE
-set(DIMDIR $ENV{DIMDIR})
-set(ODIR $ENV{ODIR})
-
 if(NOT ALICE)
   message(WARNING "Environment variable ALICE is not set")
 endif(NOT ALICE)
 
+set(ALICE_ROOT $ENV{ALICE_ROOT})
 if(NOT ALICE_ROOT)
   message(FATAL_ERROR "Please set ALICE_ROOT to the AliRoot source directory")
 endif(NOT ALICE_ROOT)
 
+set(ALICE_INSTALL $ENV{ALICE_INSTALL})
 # Set AliRoot Installation directory 
-if(NOT ALICE_INSTALL)
-  message(STATUS "AliRoot files will be installed in ${ALICE_ROOT}. You can specify a different location by setting ALICE_INSTALL environment variable")
-  set(ALICE_INSTALL ${ALICE_ROOT})
-else()
-  message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
-endif(NOT ALICE_INSTALL)
-set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL})
+# If CMAKE_INSTALL_PREFIX was not set, then we set it to ALICE_INSTALL. 
+# If ALICE_INSTALL was not defined, then it will default to the source directory
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+    if(ALICE_INSTALL)
+       message(STATUS "AliRoot files will be installed in ${ALICE_INSTALL}")
+    else()
+       message(STATUS "AliRoot files will be installed in ${ALICE_ROOT}. You
+       can specify a different location by passing -DCMAKE_INSTALL_PREFIX or
+       by setting ALICE_INSTALL environment variable")
+       set(ALICE_INSTALL ${ALICE_ROOT})
+       if(${ALICE_INSTALL} STREQUAL ${CMAKE_BINARY_DIR})
+           message(FATAL_ERROR "The install directory must differ from the
+           build directory")
+       endif()
+    endif()
+    set(CMAKE_INSTALL_PREFIX ${ALICE_INSTALL} CACHE STRING "Install dir" FORCE)
+endif()
+
+
+# Environment for SHUTTLE
+set(DIMDIR $ENV{DIMDIR})
+set(ODIR $ENV{ODIR})
 
 get_filename_component(PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}" REALPATH)
 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
@@ -87,6 +95,13 @@ find_package(AMORE)
 
 find_package(CPack)
 
+# ZeroMQ
+# ------------------------------
+find_package(ZeroMQ)
+
+# fastjet
+# ------------------------------
+find_package(FASTJET)
 
 #--------------------------------------------------------------------------------#
 # Environment/Compiler Configuration                                             #
@@ -126,7 +141,7 @@ set(BINLIBDIRS "-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
 
 # Standard Modules
 # ------------------------------
-set(ALIROOTMODULES STEER PHOS TRD TPC ZDC MUON PMD FMD TOF ITS ACORDE HMPID T0 BCM STRUCT VZERO THijing THbtp EMCAL THerwig TEPEMGEN FASTSIM TPHIC RAW MONITOR ANALYSIS JETAN HLT STAT TTherminator CORRFW DPMJET TDPMjet PWGPP PWG PWGCF PWGGA PWGHF PWGDQ PWGJE PWGLF PWGUD TRIGGER PYTHIA8 TAmpt OADB MFT TEvtGen)
+set(ALIROOTMODULES STEER PHOS TRD TPC ZDC MUON PMD FMD TOF ITS AD ACORDE HMPID T0 BCM STRUCT VZERO THijing THbtp EMCAL THerwig TEPEMGEN FASTSIM TPHIC RAW MONITOR ANALYSIS JETAN HLT STAT TTherminator CORRFW DPMJET TDPMjet STARLIGHT PWGPP PWG PWGCF PWGGA PWGHF PWGDQ PWGJE PWGLF PWGUD TRIGGER PYTHIA8 TAmpt OADB MFT TEvtGen FIT)
 
 if(THydjet)
   list(APPEND ALIROOTMODULES THydjet)
@@ -167,37 +182,70 @@ set(MODDIRS ${MODULES})
 
 # Libraries for Linking
 # ------------------------------
-set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
+set(ALILIBS MUON TPC PMD TRD FMD TOF ITS PHOS AD ACORDE HMPID VZERO ZDC STRUCT T0 EVGEN STEER TRIGGER MFT)
 set(LIBS ${ROOTCLIBS} ${ROOTPLIBS} ${SYSLIBS})
 
 # Configure ARVerion.h
 # ------------------------------
-if(Subversion_FOUND)
-  if(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
-  Subversion_WC_INFO(${PROJECT_SOURCE_DIR} PROJECT)
-  set(ALIROOT_SVN_REVISION ${PROJECT_WC_REVISION})
-  set(ALIROOT_SVN_BRANCH ${PROJECT_WC_URL})
-  string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${ALIROOT_SVN_BRANCH})
-
-  elseif(EXISTS ${PROJECT_SOURCE_DIR}/.git/ )
-    execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND git svn info OUTPUT_VARIABLE OUTPUTVAR)
-    string(REPLACE "\n" ";" OUTPUTVAR ${OUTPUTVAR})
-    foreach(f ${OUTPUTVAR})
-      if(${f} MATCHES URL)
-       string(REGEX MATCH "[^/]+$" ALIROOT_SVN_BRANCH ${f})
-      elseif(${f} MATCHES Revision)
-       string(REGEX MATCH "[^: ]+$" ALIROOT_SVN_REVISION ${f})
-      endif(${f} MATCHES URL)   
-    endforeach()
-  endif(EXISTS ${PROJECT_SOURCE_DIR}/.svn/ )
-
-  message(STATUS "Aliroot Revision - ${ALIROOT_SVN_REVISION} Branch - ${ALIROOT_SVN_BRANCH}")
-  if(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
-    file(REMOVE ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
-  endif(EXISTS ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h)
-  configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/ARVersion.h @ONLY)
-endif(Subversion_FOUND)
-string (REPLACE "-" "." ALIROOT_SVN_BRANCH_SPEC "${ALIROOT_SVN_BRANCH}")
+# If the sources were taken from Git
+# Sets 3 git variables
+#  - GIT_REFSPEC - complete name of the current reference
+#  - ALIROOT_BRANCH - name of the branch or tag extracted from the current reference
+#  - GIT_SHA1 - current hash in the long format
+#  - GIT_SHORT_SHA1 - current hash in the short format
+if(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
+ include(GetGitRevisionDescription)
+ find_package(Git)
+ if(GIT_FOUND)
+  get_git_head_revision(GIT_REFSPEC GIT_SHA1)
+
+  # GIT_REFSPEC is empty for detached mode = tags in detached mode or checkout to specific hash
+
+  # returns the closest reference to the current hash
+  # name of the current tag or heads/branch in the case of branches
+  git_describe(ALIROOT_GIT_TAG "--all" "--abbrev=0")
+
+  STRING(REGEX REPLACE "^(.+/)(.+)/(.*)$" "\\2" BRANCH_TYPE "${GIT_REFSPEC}" )
+
+  # the revision is not set in the case of a branch, it means we are doing development
+  # and the revision will trigger a reconfiguration
+  if(BRANCH_TYPE STREQUAL "heads")
+   set(ALIROOT_REVISION "ThisIsaBranchNoRevisionProvided")
+   STRING(REGEX REPLACE "^(.+/)(.+/)(.*)$" "\\3" SHORT_BRANCH "${GIT_REFSPEC}" )
+  else()
+   set(SHORT_BRANCH ${ALIROOT_GIT_TAG})
+   set(ALIROOT_REVISION ${GIT_SHA1})
+  endif()
+
+  set(ALIROOT_BRANCH ${SHORT_BRANCH})
+  
+  # generate the short version of the revision hash
+  execute_process(COMMAND git rev-parse --short ${GIT_SHA1} 
+                          WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} 
+                          OUTPUT_STRIP_TRAILING_WHITESPACE 
+                          RESULT_VARIABLE res
+                          OUTPUT_VARIABLE GIT_SHORT_SHA1)
+
+  # if the rev-parse fails we set the short sha to the long initial one
+  if(NOT res EQUAL 0)
+    set(GIT_SHORT_SHA1 ${GIT_SHA1})
+  endif()
+  
+  message(STATUS "Aliroot branch/tag: \"${ALIROOT_BRANCH}\" - Revision:  \"${GIT_SHORT_SHA1}\" ")
+
+ else()
+  message("Git not installed. I can't tell you which revision you are using!")
+  endif(GIT_FOUND)
+else()
+ message("AliRoot sources not downloaded from a Version Control System. I can't tell which revision you are using!")
+endif(EXISTS ${PROJECT_SOURCE_DIR}/.git/)
+
+configure_file(${PROJECT_SOURCE_DIR}/cmake/ARVersion.h.tmp ${CMAKE_INCLUDE_EXPORT_DIRECTORY}/FromTemplate/ARVersion.h @ONLY)
+
+string (REPLACE "-" "." ALIROOT_BRANCH_SPEC "${ALIROOT_BRANCH}")
 
 #--------------------------------------------------------------------------------#
 # Build Modules                                                                  #
@@ -231,8 +279,7 @@ add_custom_command(TARGET htmldoc
                   COMMAND mkdir -p html
                   COMMAND rm -rf html/roothtml
                   COMMAND rm -f html/picts
-                  COMMAND cd html &&
-                           aliroot -q -b \"mkhtml.C(0,1)\"
+                  COMMAND cd html && aliroot -q -b mkhtml.C\\\(0,1\\\)
                   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
 
 # Include Vc, which provides the static libVc and the relevant CMake macros
@@ -326,29 +373,32 @@ message("alimdc-rpm: Unknown architecture" )
 endif( ${ARCHITECTURE} MATCHES "linuxx8664gcc" )
 
 
+# Module version will be written in the generated header
+configure_file ("RAW/alimdc.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/RAW/alimdc.spec" @ONLY)
+
 add_custom_target( alimdc-rpm
-DEPENDS alimdc-static alimdc-specfile
+DEPENDS alimdc-static
 )
 
 add_custom_command(
 TARGET alimdc-rpm
 POST_BUILD 
-COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
-COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
-COMMAND mkdir -p ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
-COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${ALICE_ROOT}/alimdc-root/opt/alimdc/include
-COMMAND cp ${LIBPATH}/libAliMDC.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
-COMMAND cp ${ROOTALIBDIR}/libRoot.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
-COMMAND cp ${ROOTALIBDIR}/liblzma.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
-COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
-COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
-COMMAND cp ${ROOTALIBDIR}/libpcre.a ${ALICE_ROOT}/alimdc-root/opt/alimdc/lib
-COMMAND rm -rf ${ALICE_ROOT}/RPMS
-COMMAND mkdir -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/
-COMMAND rpmbuild --verbose --define "_topdir ${ALICE_ROOT}" --define "_tmppath ${ALICE_ROOT}" -bb ${ALIMDCSPECFILE} 
-COMMAND cp -p ${ALICE_ROOT}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
-COMMAND rm -rf ${ALICE_ROOT}/alimdc-root
-COMMAND rm -rf ${ALICE_ROOT}/RPMS
+COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
+COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
+COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
+COMMAND cp ${ALICE_ROOT}/RAW/mdc.h ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/include
+COMMAND cp ${LIBPATH}/libAliMDC.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
+COMMAND cp ${ROOTALIBDIR}/libRoot.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
+COMMAND cp ${ROOTALIBDIR}/liblzma.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
+COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
+COMMAND cp ${ROOTALIBDIR}/libfreetype.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
+COMMAND cp ${ROOTALIBDIR}/libpcre.a ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root/opt/alimdc/lib
+COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
+COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/
+COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_CURRENT_BINARY_DIR}" --define "%buildroot ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root" -bb ${ALIMDCSPECFILE} 
+COMMAND cp -p ${CMAKE_CURRENT_BINARY_DIR}/RPMS/${ALIMDCARCHDIR}/alimdc-*.rpm .
+COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/alimdc-root
+COMMAND rm -rf ${CMAKE_CURRENT_BINARY_DIR}/RPMS
 COMMAND echo "***** alimdc RPM created and put in ${CMAKE_BINARY_DIR} folder *****"
 )
 
@@ -358,64 +408,6 @@ COMMAND mkdir-p ${RAWDIRO}
 )
 
 
-add_custom_target( alimdc-specfile
-DEPENDS ${RAWDIRO}
-)
-
-add_custom_command( 
-TARGET alimdc-specfile
-POST_BUILD
-COMMAND rm -rf ${ALIMDCSPECFILE}
-COMMAND @echo "***** Making alimdc RPM spec-file ${ALIMDCSPECFILE} *****"
-COMMAND @echo '\# RPM specfile for alimdc static libs' >> ${ALIMDCSPECFILE} 
-COMMAND @echo '\# Package contains both ROOT and AliRoot' >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# static libs needed by mStreamRecorder' >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# in order to ROOT-ify the incoming raw' >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# data' >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# Example how-to build alimdc RPM:' >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# cd ${ALICE_ROOT}' >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# make alimdc-rpm' >> ${ALIMDCSPECFILE}
-COMMAND @echo "" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Summary: AliMDC static libraries" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Name: alimdc" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Version:  ${ALIROOT_SVN_BRANCH_SPEC}" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Release: ${ALIROOT_SVN_REVISION}" >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# Copyright: CERN Alice Off-line' >> ${ALIMDCSPECFILE}
-COMMAND @echo "License: CERN Alice Off-line" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Vendor: ALICE Core Off-line Group" >> ${ALIMDCSPECFILE}
-COMMAND @echo "URL: http://aliceinfo.cern.ch" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Group: Applications/Alice" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Prefix: /opt/%{name}" >> ${ALIMDCSPECFILE}
-COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${ALIMDCSPECFILE}
-COMMAND @echo "" >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# automatic dependencies' >> ${ALIMDCSPECFILE}
-COMMAND @echo "AutoReqProv: yes" >> ${ALIMDCSPECFILE}
-COMMAND @echo "" >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# list here required RPM packages for runtime' >> ${ALIMDCSPECFILE}
-COMMAND @echo "Requires: glibc" >> ${ALIMDCSPECFILE}
-COMMAND @echo "" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Provides: alimdc" >> ${ALIMDCSPECFILE}
-COMMAND @echo "" >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# description of the package' >> ${ALIMDCSPECFILE}
-COMMAND @echo "%description" >> ${ALIMDCSPECFILE}
-COMMAND @echo "Package contains both ROOT and AliRoot" >> ${ALIMDCSPECFILE}
-COMMAND @echo "static libs needed by mStreamRecorder" >> ${ALIMDCSPECFILE}
-COMMAND @echo "in order to ROOT-ify the incoming raw" >> ${ALIMDCSPECFILE}
-COMMAND @echo "data. The package version correspond to" >> ${ALIMDCSPECFILE}
-COMMAND @echo "the AliRoot one." >> ${ALIMDCSPECFILE}
-COMMAND @echo "" >> ${ALIMDCSPECFILE}
-COMMAND @echo '\# list of files to be installed' >> ${ALIMDCSPECFILE}
-COMMAND @echo "%files" >> ${ALIMDCSPECFILE}
-COMMAND @echo '%defattr (-,root,root)' >> ${ALIMDCSPECFILE}
-COMMAND @echo "%{prefix}/lib/libAliMDC.a" >> ${ALIMDCSPECFILE}
-COMMAND @echo "%{prefix}/lib/libRoot.a" >> ${ALIMDCSPECFILE}
-COMMAND @echo "%{prefix}/lib/libpcre.a" >> ${ALIMDCSPECFILE}
-COMMAND @echo "%{prefix}/lib/liblzma.a" >> ${ALIMDCSPECFILE}
-COMMAND @echo "%{prefix}/lib/libfreetype.a" >> ${ALIMDCSPECFILE}
-COMMAND @echo "%{prefix}/include/mdc.h" >> ${ALIMDCSPECFILE}
-)
-
-
 add_custom_target( alimdc-static
 DEPENDS ${LIBPATH} ${BINPATH} RAW-all-static STEER-all-static )
 
@@ -433,7 +425,7 @@ COMMAND ar t ${RAWDatabaseALIB} | xargs rm
 COMMAND ar t ${MDCALIB} | xargs rm 
 COMMAND ar t ${ESDALIB} | xargs rm 
 COMMAND ar t ${STEERBaseALIB} | xargs rm 
-COMMAND ${CMAKE_CXX_COMPILER} ${LDFLAGS} -o ${BINPATH}/alimdca ${LIBPATH}/alimdccxxo.a ${LIBPATH}/libAliMDC.a ${ROOTALIBDIR}/libRoot.a ${ROOTALIBDIR}/libfreetype.a ${ROOTALIBDIR}/libpcre.a ${ROOTALIBDIR}/liblzma.a -pthread -ldl -lz
+COMMAND ${CMAKE_CXX_COMPILER} ${LDFLAGS} -o ${BINPATH}/alimdca ${LIBPATH}/alimdccxxo.a ${LIBPATH}/libAliMDC.a ${ROOTALIBDIR}/libRoot.a ${ROOTALIBDIR}/libfreetype.a ${ROOTALIBDIR}/libpcre.a ${ROOTALIBDIR}/liblzma.a -pthread -lssl -ldl -lz
 COMMAND @echo "Target alimdc-static made"
 )