From fffaf6a51728f12a5b0b65db1c78d843dda367c2 Mon Sep 17 00:00:00 2001 From: agrigora Date: Tue, 30 Sep 2014 10:42:15 +0200 Subject: [PATCH] FindROOT + dictionary generating macro FindROOT module will search for ROOT inside ROOTSYS variable passed to cmake configuration. This is NOT an environment variable, but a CMake one. Dictionary generation is done using a macro. There is no need to add ROOT to LD_LIBRARY_PATH for cint to properly work. --- cmake/CMakeALICE.cmake | 31 ++++++++ cmake/FindROOT.cmake | 167 +++++++++++++++++++++++++-------------- cmake/FindROOT.cmake.old | 59 ++++++++++++++ 3 files changed, 199 insertions(+), 58 deletions(-) create mode 100644 cmake/CMakeALICE.cmake create mode 100644 cmake/FindROOT.cmake.old diff --git a/cmake/CMakeALICE.cmake b/cmake/CMakeALICE.cmake new file mode 100644 index 00000000000..e8d5d053b58 --- /dev/null +++ b/cmake/CMakeALICE.cmake @@ -0,0 +1,31 @@ +# General purpose functions + +# Generation of the dictionaries +# @DNAME Dictionary name +# @LDNAME LinkDef file name, ex: LinkDef.h +# @DHDRS Dictionary headers +# @DINCDIR Include folders that need to be passed to cint/cling +macro(generate_dictionary DNAME LDNAME DHDRS DINCDIRS) + # Creating the INCLUDE path for cint/cling + foreach( dir ${DINCDIRS}) + set(INCLUDE_PATH -I${dir} ${INCLUDE_PATH}) + endforeach() + + # Generate the dictionary + message(STATUS "Generating dictionary ${DNAME} for ${LDNAME}") + +# message(STATUS "${CMAKE_CURRENT_BINARY_DIR}/G__${DNAME}.cxx") +# message(STATUS "${CMAKE_CURRENT_BINARY_DIR}/G__${DNAME}.h") +# message(STATUS "bbb${INCLUDE_PATH}bbb") +# message(STATUS "${DHDRS} ${LDNAME}") +# message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}") + + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/G__${DNAME}.cxx ${CMAKE_CURRENT_BINARY_DIR}/G__${DNAME}.h + COMMAND LD_LIBRARY_PATH=${ROOT_LIBDIR}:$ENV{LD_LIBRARY_PATH} ${ROOT_CINT} + ARGS -f ${CMAKE_CURRENT_BINARY_DIR}/G__${DNAME}.cxx -c -p + ${INCLUDE_PATH} + ${DHDRS} ${LDNAME} + DEPENDS ${DHDRS} ${LDNAME} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) +endmacro(generate_dictionary) \ No newline at end of file diff --git a/cmake/FindROOT.cmake b/cmake/FindROOT.cmake index c22bb8c36f0..2fa32cd1098 100644 --- a/cmake/FindROOT.cmake +++ b/cmake/FindROOT.cmake @@ -1,59 +1,110 @@ -# AliRoot Build System Module to find and configure ROOT -# -# Author: Johny Jose m(johny.jose@cern.ch) -# Port of previous Makefile build to cmake - -cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR) - -# We don't care if ROOTSYS environment variable is set or not - -# all we care about is that we can find root-config in our path -# set(ROOTSYS $ENV{ROOTSYS} CACHE STRING "" FORCE) -# if(NOT ROOTSYS) -# message(FATAL_ERROR "Environment variable $ROOTSYS is not set !") -# else() -# get_filename_component(ROOTSYS "${ROOTSYS}" REALPATH) -# endif(NOT ROOTSYS) -find_program(ROOT_CONFIG NAMES root-config) -find_program(ROOTCINT NAMES rootcint) -if(NOT ROOT_CONFIG) - message(FATAL_ERROR "root-config is not installed on this system") -endif(NOT ROOT_CONFIG) -message(STATUS "Check for root-config: ${ROOT_CONFIG}") -message(STATUS "Check for rootcint: ${ROOTCINT}") -if(ROOT_CONFIG AND ROOTCINT) - set(ROOT_FOUND TRUE) - ALICE_RootConfig(ROOT_VERSION --version) - message(STATUS "ROOT ${ROOT_VERSION} found") - ALICE_RootConfig(ROOTLIBDIR --libdir) - ALICE_RootConfig(ROOTPLUGDIR --version) - string(REGEX REPLACE "(^.*/)[^/]+" "${ROOTLIBDIR}/\\1" ROOTPLUGDIR ${ROOTPLUGDIR}) - ALICE_RootConfig(ROOTINCDIR --incdir) - ALICE_RootConfig(ROOTCLIBS --glibs) - ALICE_RootConfig(ROOTHASALIEN --has-alien) - ALICE_RootConfig(ROOTHASXML --has-xml) - # ALICE_RootConfig(ROOTHASVC --has-vc) -# set(ROOTCLIBS "${ROOTCLIBS} -lThread -lMinuit -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lXMLParser -lProof -lProofPlayer -lMLP -lSpectrum -L${ROOTPLUGDIR}" ) - set(ROOTCLIBS "${ROOTCLIBS} -lThread -lMinuit -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lXMLParser -lProof -lProofPlayer -lMLP -lSpectrum" ) - # if(${ROOTHASVC} STREQUAL "yes") - # set(ROOTCLIBS "${ROOTCLIBS} -lVc") - # endif(${ROOTHASVC} STREQUAL "yes") - set(ROOTPLIBS $ENV{ROOTPLIBS}) - if(NOT $ENV{ROOTSYS}) - message(STATUS "ROOTSYS directory : ${ROOTSYS}") - else() - message(STATUS "ROOTSYS directory : not set - assume prefix build") - endif(NOT $ENV{ROOTSYS}) - message(STATUS "ROOT include directory: ${ROOTINCDIR}") - message(STATUS "ROOT library directory: ${ROOTLIBDIR}") - # message(STATUS "ROOT libraries: ${ROOTCLIBS}") - # message(STATUS "ROOT has Vc: ${ROOTHASVC}") - # message(STATUS "ROOT has XML: ${ROOTHASXML}") - set(ROOT6_ALPHA "5.99.1") - string(REGEX REPLACE "/0*" "." ROOT_DOTVERSION ${ROOT_VERSION}) - if(ROOT_DOTVERSION VERSION_GREATER ROOT6_ALPHA) - message(WARNING - "Compling and linking against ROOT6 alpha is highly experimental") - endif(ROOT_DOTVERSION VERSION_GREATER ROOT6_ALPHA) +# ************************************************************************** +# * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. * +# * * +# * Author: The ALICE Off-line Project. * +# * Contributors are mentioned in the code where appropriate. * +# * * +# * Permission to use, copy, modify and distribute this software and its * +# * documentation strictly for non-commercial purposes is hereby granted * +# * without fee, provided that the above copyright notice appears in all * +# * copies and that both the copyright notice and this permission notice * +# * appear in the supporting documentation. The authors make no claims * +# * about the suitability of this software for any purpose. It is * +# * provided "as is" without express or implied warranty. * +# ************************************************************************** + +# Checking for a proper ROOT installation based on the ROOTSYS variable +# received during configuration +# If proper root installation it is setting the following variables +# - ROOT_VERSION - ROOT version as reported by root-config +# - ROOT_VERSION_MAJOR +# - ROOT_VERSIOM_MINOR +# - ROOT_VERSION_PATCH +# - ROOT_CONFIG - path to root-config script +# - ROOT_CINT - path to rootcint executable +# - ROOT_FEATURES - list of build features for ROOT +# - ROOT_LIBDIR - full path to ROOT library folder +# - ROOT_LIBRARIES - libraries needed for the package to be used +# - ROOT_INCLUDE_DIRS - full path to ROOT include folder +# - ROOT_GLIBS - regular + GUI ROOT libraries + path to be used during linking +# - ROOT_HASALIEN - ROOT was built with AliEn support +# - ROOT_HASXML - ROOT was built with XML support + + +if(ROOTSYS) + message(STATUS "Checking for a proper ROOT installation in ${ROOTSYS}.") + + # Setting the LD_LiBRARY_PATH to point to ROOT lib folder + set(ROOT_LIBDIR ${ROOTSYS}/lib) + set(ROOT_INCLUDE_DIRS ${ROOTSYS}/include) + + # Check for root-config scripts + find_program(ROOT_CONFIG NAMES root-config PATHS ${ROOTSYS}/bin NO_DEFAULT_PATH) + + if(ROOT_CONFIG) + message(STATUS "Found root-config: ${ROOT_CONFIG}") + else() + message(FATAL_ERROR "Could not find root-config script.") + endif(ROOT_CONFIG) + + # Check for rootcint + find_program(ROOT_CINT NAMES rootcint PATHS ${ROOTSYS}/bin NO_DEFAULT_PATH) + if(ROOT_CINT) + message(STATUS "Found ${ROOT_CINT}") + else() + message(FATAL_ERROR "Could not find rootcint executable.") + endif(ROOT_CINT) + + # Checking ROOT version + execute_process(COMMAND ${ROOT_CONFIG} --version OUTPUT_VARIABLE ROOT_VERSION ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(error) + message(FATAL_ERROR "Error retrieving ROOT version : ${error}") + endif(error) + + # Extract major, minor, and patch versions from + string(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+.*" "\\1" ROOT_VERSION_MAJOR "${ROOT_VERSION}") + string(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" ROOT_VERSION_MINOR "${ROOT_VERSION}") + string(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+).*" "\\1" ROOT_VERSION_PATCH "${ROOT_VERSION}") + message(STATUS "Found ROOT version ${ROOT_VERSION_MAJOR}.${ROOT_VERSION_MINOR}.${ROOT_VERSION_PATCH}") + + # Print ROOT features + execute_process(COMMAND ${ROOT_CONFIG} --features OUTPUT_VARIABLE ROOT_FEATURES ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(error) + message(FATAL_ERROR "Error retrieving ROOT features : ${error}") + else() + message(STATUS "ROOT was build with the following features: ${ROOT_FEATURES}") + endif(error) + + # Checking for ROOT libdir + execute_process(COMMAND ${ROOT_CONFIG} --libdir OUTPUT_VARIABLE ROOT_LIBDIR ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(error) + message(FATAL_ERROR "Error retrieving ROOT libdir: ${error}") + endif(error) + + # Checking for ROOT incdir + execute_process(COMMAND ${ROOT_CONFIG} --incdir OUTPUT_VARIABLE ROOT_INCDIR ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(error) + message(FATAL_ERROR "Error retrieving ROOT incdir: ${error}") + endif(error) + + # Checking for glibs + execute_process(COMMAND ${ROOT_CONFIG} --glibs OUTPUT_VARIABLE ROOT_GLIBS ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(error) + message(FATAL_ERROR "Error retrieving ROOT glibs: ${error}") + endif(error) + + # Checking for glibs + execute_process(COMMAND ${ROOT_CONFIG} --has-alien OUTPUT_VARIABLE ROOT_HASALIEN ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(error) + message(FATAL_ERROR "Error checking if ROOT was build with AliEn support: ${error}") + endif(error) + + execute_process(COMMAND ${ROOT_CONFIG} --has-xml OUTPUT_VARIABLE ROOT_HASXML ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(error) + message(FATAL_ERROR "Error checking if ROOT was build with xml support: ${error}") + endif(error) + + set(ROOT_FOUND TRUE) else() - message(FATAL_ERROR "rootcint not found ! Please check your ROOT installation.") -endif(ROOT_CONFIG AND ROOTCINT) + message(FATAL_ERROR "ROOT installation not found! Please point to the ROOT installation using -DROOTSYS=ROOT_INSTALL_DIR.") +endif(ROOTSYS) \ No newline at end of file diff --git a/cmake/FindROOT.cmake.old b/cmake/FindROOT.cmake.old new file mode 100644 index 00000000000..a42adc690ad --- /dev/null +++ b/cmake/FindROOT.cmake.old @@ -0,0 +1,59 @@ +# AliRoot Build System Module to find and configure ROOT +# +# Author: Johny Jose m(johny.jose@cern.ch) +# Port of previous Makefile build to cmake + +cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR) + +# We don't care if ROOTSYS environment variable is set or not - +# all we care about is that we can find root-config in our path +# set(ROOTSYS $ENV{ROOTSYS} CACHE STRING "" FORCE) +# if(NOT ROOTSYS) +# message(FATAL_ERROR "Environment variable $ROOTSYS is not set !") +# else() +# get_filename_component(ROOTSYS "${ROOTSYS}" REALPATH) +# endif(NOT ROOTSYS) +find_program(ROOT_CONFIG NAMES root-config) +find_program(ROOTCINT NAMES rootcint) +if(NOT ROOT_CONFIG) + message(FATAL_ERROR "root-config is not installed on this system") +endif(NOT ROOT_CONFIG) +message(STATUS "Check for root-config: ${ROOT_CONFIG}") +message(STATUS "Check for rootcint: ${ROOTCINT}") +if(ROOT_CONFIG AND ROOTCINT) + set(ROOT_FOUND TRUE) + ALICE_RootConfig(ROOT_VERSION --version) + message(STATUS "ROOT ${ROOT_VERSION} found") + ALICE_RootConfig(ROOTLIBDIR --libdir) + ALICE_RootConfig(ROOTPLUGDIR --version) + string(REGEX REPLACE "(^.*/)[^/]+" "${ROOTLIBDIR}/\\1" ROOTPLUGDIR ${ROOTPLUGDIR}) + ALICE_RootConfig(ROOTINCDIR --incdir) + ALICE_RootConfig(ROOTCLIBS --glibs) + ALICE_RootConfig(ROOTHASALIEN --has-alien) + ALICE_RootConfig(ROOTHASXML --has-xml) + # ALICE_RootConfig(ROOTHASVC --has-vc) +# set(ROOTCLIBS "${ROOTCLIBS} -lThread -lMinuit -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lXMLParser -lProof -lProofPlayer -lMLP -lSpectrum -L${ROOTPLUGDIR}" ) + set(ROOTCLIBS "${ROOTCLIBS} -lThread -lMinuit -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lXMLParser -lProof -lProofPlayer -lMLP -lSpectrum" ) + # if(${ROOTHASVC} STREQUAL "yes") + # set(ROOTCLIBS "${ROOTCLIBS} -lVc") + # endif(${ROOTHASVC} STREQUAL "yes") + set(ROOTPLIBS $ENV{ROOTPLIBS}) + if(NOT $ENV{ROOTSYS}) + message(STATUS "ROOTSYS directory : ${ROOTSYS}") + else() + message(STATUS "ROOTSYS directory : not set - assume prefix build") + endif(NOT $ENV{ROOTSYS}) + message(STATUS "ROOT include directory: ${ROOTINCDIR}") + message(STATUS "ROOT library directory: ${ROOTLIBDIR}") + # message(STATUS "ROOT libraries: ${ROOTCLIBS}") + # message(STATUS "ROOT has Vc: ${ROOTHASVC}") + # message(STATUS "ROOT has XML: ${ROOTHASXML}") + set(ROOT6_ALPHA "5.99.1") + string(REGEX REPLACE "/0*" "." ROOT_DOTVERSION ${ROOT_VERSION}) + if(ROOT_DOTVERSION VERSION_GREATER ROOT6_ALPHA) + message(WARNING + "Compling and linking against ROOT6 alpha is highly experimental") + endif(ROOT_DOTVERSION VERSION_GREATER ROOT6_ALPHA) +else() + message(FATAL_ERROR "rootcint not found ! Please check your ROOT installation.") +endif(ROOT_CONFIG AND ROOTCINT) -- 2.43.0