222 lines
6.7 KiB
CMake
222 lines
6.7 KiB
CMake
# - Find a ROOT installation through root-config.
|
|
#
|
|
# Defines ROOT_FOUND, ROOT_VERSION, ROOTSYS, ROOT_INCLUDE_DIR,
|
|
# ROOT_LIBRARY_DIR, ROOT_BINARY_DIR, ROOT_LIBRARIES, and ROOT_CINT_EXECUTABLE.
|
|
|
|
message(STATUS "Looking for ROOT...")
|
|
|
|
set(ROOT_DEFINITIONS "")
|
|
set(ROOT_INSTALLED_VERSION_TOO_OLD FALSE)
|
|
|
|
find_program(ROOT_CONFIG_EXECUTABLE
|
|
NAMES root-config
|
|
HINTS
|
|
"$ENV{ROOTSYS}/bin"
|
|
"${SIMPATH}/tools/root/bin"
|
|
)
|
|
|
|
if(NOT ROOT_CONFIG_EXECUTABLE)
|
|
message(FATAL_ERROR
|
|
"ROOT was not found. Set ROOTSYS or add root-config to PATH."
|
|
)
|
|
endif()
|
|
|
|
function(_root_config output_variable option)
|
|
execute_process(
|
|
COMMAND "${ROOT_CONFIG_EXECUTABLE}" "${option}"
|
|
RESULT_VARIABLE result
|
|
OUTPUT_VARIABLE output
|
|
ERROR_VARIABLE error
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if(NOT result EQUAL 0)
|
|
message(FATAL_ERROR
|
|
"root-config ${option} failed with exit code ${result}: ${error}"
|
|
)
|
|
endif()
|
|
set("${output_variable}" "${output}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
_root_config(ROOTSYS --prefix)
|
|
_root_config(ROOT_VERSION --version)
|
|
|
|
if(NOT ROOT_MIN_VERSION)
|
|
set(ROOT_MIN_VERSION "5.00.00")
|
|
endif()
|
|
|
|
string(REGEX MATCH "^[0-9]+[./][0-9]+([./][0-9]+)?"
|
|
ROOT_VERSION_NUMBER "${ROOT_VERSION}")
|
|
if(NOT ROOT_VERSION_NUMBER)
|
|
message(FATAL_ERROR "Could not parse ROOT version '${ROOT_VERSION}'")
|
|
endif()
|
|
|
|
string(REPLACE "/" "." ROOT_VERSION_NUMBER "${ROOT_VERSION_NUMBER}")
|
|
string(REPLACE "/" "." ROOT_MIN_VERSION_NUMBER "${ROOT_MIN_VERSION}")
|
|
if(ROOT_VERSION_NUMBER VERSION_LESS ROOT_MIN_VERSION_NUMBER)
|
|
set(ROOT_INSTALLED_VERSION_TOO_OLD TRUE)
|
|
message(FATAL_ERROR
|
|
"ROOT ${ROOT_VERSION} is too old; version ${ROOT_MIN_VERSION} or newer is required"
|
|
)
|
|
endif()
|
|
|
|
_root_config(ROOT_LIBRARY_DIR --libdir)
|
|
_root_config(ROOT_BINARY_DIR --bindir)
|
|
_root_config(ROOT_INCLUDE_DIR --incdir)
|
|
_root_config(ROOT_LIBRARIES --glibs)
|
|
|
|
if(NOT IS_DIRECTORY "${ROOT_LIBRARY_DIR}")
|
|
message(FATAL_ERROR
|
|
"root-config reported a missing library directory: ${ROOT_LIBRARY_DIR}"
|
|
)
|
|
endif()
|
|
if(NOT IS_DIRECTORY "${ROOT_INCLUDE_DIR}")
|
|
message(FATAL_ERROR
|
|
"root-config reported a missing include directory: ${ROOT_INCLUDE_DIR}"
|
|
)
|
|
endif()
|
|
|
|
set(ROOT_FOUND TRUE)
|
|
set(ROOT_INCLUDES "${ROOT_INCLUDE_DIR}")
|
|
set(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} "${ROOT_LIBRARY_DIR}")
|
|
|
|
find_program(ROOT_CINT_EXECUTABLE
|
|
NAMES rootcint rootcling
|
|
HINTS "${ROOT_BINARY_DIR}"
|
|
)
|
|
|
|
mark_as_advanced(
|
|
ROOT_CONFIG_EXECUTABLE
|
|
ROOT_CINT_EXECUTABLE
|
|
ROOT_LIBRARY_DIR
|
|
ROOT_INCLUDE_DIR
|
|
ROOT_DEFINITIONS
|
|
)
|
|
|
|
message(STATUS
|
|
"Looking for ROOT... found ${ROOTSYS} (version ${ROOT_VERSION})"
|
|
)
|
|
|
|
|
|
|
|
###########################################
|
|
#
|
|
# Macros for building ROOT dictionary
|
|
#
|
|
###########################################
|
|
|
|
MACRO (ROOT_GENERATE_DICTIONARY_OLD )
|
|
|
|
set(INFILES "")
|
|
|
|
foreach (_current_FILE ${ARGN})
|
|
|
|
IF (${_current_FILE} MATCHES "^.*\\.h$")
|
|
IF (${_current_FILE} MATCHES "^.*Link.*$")
|
|
set(LINKDEF_FILE ${_current_FILE})
|
|
ELSE (${_current_FILE} MATCHES "^.*Link.*$")
|
|
set(INFILES ${INFILES} ${_current_FILE})
|
|
ENDIF (${_current_FILE} MATCHES "^.*Link.*$")
|
|
ELSE (${_current_FILE} MATCHES "^.*\\.h$")
|
|
IF (${_current_FILE} MATCHES "^.*\\.cxx$")
|
|
set(OUTFILE ${_current_FILE})
|
|
ELSE (${_current_FILE} MATCHES "^.*\\.cxx$")
|
|
set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE})
|
|
ENDIF (${_current_FILE} MATCHES "^.*\\.cxx$")
|
|
ENDIF (${_current_FILE} MATCHES "^.*\\.h$")
|
|
|
|
endforeach (_current_FILE ${ARGN})
|
|
|
|
# MESSAGE("INFILES: ${INFILES}")
|
|
# MESSAGE("OutFILE: ${OUTFILE}")
|
|
# MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}")
|
|
# MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}")
|
|
|
|
STRING(REGEX REPLACE "(^.*).cxx" "\\1.h" bla "${OUTFILE}")
|
|
# MESSAGE("BLA: ${bla}")
|
|
SET (OUTFILES ${OUTFILE} ${bla})
|
|
|
|
ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES}
|
|
COMMAND ${ROOT_CINT_EXECUTABLE}
|
|
ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES})
|
|
|
|
# MESSAGE("ROOT_CINT_EXECUTABLE has created the dictionary ${OUTFILE}")
|
|
|
|
ENDMACRO (ROOT_GENERATE_DICTIONARY_OLD)
|
|
|
|
###########################################
|
|
#
|
|
# Macros for building ROOT dictionary
|
|
#
|
|
###########################################
|
|
|
|
MACRO (ROOT_GENERATE_DICTIONARY INFILES LINKDEF_FILE OUTFILE INCLUDE_DIRS_IN)
|
|
|
|
set(INCLUDE_DIRS)
|
|
|
|
foreach (_current_FILE ${INCLUDE_DIRS_IN})
|
|
set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE})
|
|
endforeach (_current_FILE ${INCLUDE_DIRS_IN})
|
|
|
|
|
|
# MESSAGE("INFILES: ${INFILES}")
|
|
# MESSAGE("OutFILE: ${OUTFILE}")
|
|
# MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}")
|
|
# MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}")
|
|
|
|
STRING(REGEX REPLACE "^(.*)\\.(.*)$" "\\1.h" bla "${OUTFILE}")
|
|
# MESSAGE("BLA: ${bla}")
|
|
SET (OUTFILES ${OUTFILE} ${bla})
|
|
|
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
|
ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES}
|
|
COMMAND LD_LIBRARY_PATH=${ROOT_LIBRARY_DIR} ROOTSYS=${ROOTSYS} ${ROOT_CINT_EXECUTABLE}
|
|
ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES} ${LINKDEF_FILE})
|
|
else (CMAKE_SYSTEM_NAME MATCHES Linux)
|
|
if (CMAKE_SYSTEM_NAME MATCHES Darwin)
|
|
ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES}
|
|
COMMAND DYLD_LIBRARY_PATH=${ROOT_LIBRARY_DIR} ROOTSYS=${ROOTSYS} ${ROOT_CINT_EXECUTABLE}
|
|
ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES} ${LINKDEF_FILE})
|
|
endif (CMAKE_SYSTEM_NAME MATCHES Darwin)
|
|
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
|
|
|
ENDMACRO (ROOT_GENERATE_DICTIONARY)
|
|
|
|
MACRO (GENERATE_ROOT_TEST_SCRIPT SCRIPT_FULL_NAME)
|
|
|
|
get_filename_component(path_name ${SCRIPT_FULL_NAME} PATH)
|
|
get_filename_component(file_extension ${SCRIPT_FULL_NAME} EXT)
|
|
get_filename_component(file_name ${SCRIPT_FULL_NAME} NAME_WE)
|
|
set(shell_script_name "${file_name}.sh")
|
|
|
|
#MESSAGE("PATH: ${path_name}")
|
|
#MESSAGE("Ext: ${file_extension}")
|
|
#MESSAGE("Name: ${file_name}")
|
|
#MESSAGE("Shell Name: ${shell_script_name}")
|
|
|
|
string(REPLACE ${PROJECT_SOURCE_DIR}
|
|
${PROJECT_BINARY_DIR} new_path ${path_name}
|
|
)
|
|
|
|
#MESSAGE("New PATH: ${new_path}")
|
|
|
|
file(MAKE_DIRECTORY ${new_path}/data)
|
|
|
|
CONVERT_LIST_TO_STRING(${LD_LIBRARY_PATH})
|
|
set(MY_LD_LIBRARY_PATH ${output})
|
|
set(my_script_name ${SCRIPT_FULL_NAME})
|
|
|
|
if(CMAKE_SYSTEM MATCHES Darwin)
|
|
configure_file(${PROJECT_SOURCE_DIR}/cmake/scripts/root_macro_macos.sh.in
|
|
${new_path}/${shell_script_name}
|
|
)
|
|
else(CMAKE_SYSTEM MATCHES Darwin)
|
|
configure_file(${PROJECT_SOURCE_DIR}/cmake/scripts/root_macro.sh.in
|
|
${new_path}/${shell_script_name}
|
|
)
|
|
endif(CMAKE_SYSTEM MATCHES Darwin)
|
|
|
|
execute_process(COMMAND /bin/chmod u+x "${new_path}/${shell_script_name}")
|
|
|
|
ENDMACRO (GENERATE_ROOT_TEST_SCRIPT)
|