259 lines
9.6 KiB
CMake
259 lines
9.6 KiB
CMake
# - Try to find the CLHEP High Energy Physics library and headers
|
|
# Usage of this module is as follows
|
|
#
|
|
# == Using any header-only components of CLHEP: ==
|
|
#
|
|
# find_package( CLHEP 2.0.4.2 )
|
|
# if(CLHEP_FOUND)
|
|
# include_directories(${CLHEP_INCLUDE_DIRS})
|
|
# add_executable(foo foo.cc)
|
|
# endif()
|
|
#
|
|
# == Using the binary CLHEP library ==
|
|
#
|
|
# find_package( CLHEP 2.0.4.2 )
|
|
# if(CLHEP_FOUND)
|
|
# include_directories(${CLHEP_INCLUDE_DIRS})
|
|
# add_executable(foo foo.cc)
|
|
# target_link_libraries(foo ${CLHEP_LIBRARIES})
|
|
# endif()
|
|
#
|
|
# You can provide a minimum version number that should be used.
|
|
# If you provide this version number and specify the REQUIRED attribute,
|
|
# this module will fail if it can't find a CLHEP of the specified version
|
|
# or higher. If you further specify the EXACT attribute, then this module
|
|
# will fail if it can't find a CLHEP with a version eaxctly as specified.
|
|
#
|
|
# ===========================================================================
|
|
# Variables used by this module which can be used to change the default
|
|
# behaviour, and hence need to be set before calling find_package:
|
|
#
|
|
# CLHEP_ROOT_DIR The preferred installation prefix for searching for
|
|
# CLHEP. Set this if the module has problems finding
|
|
# the proper CLHEP installation.
|
|
#
|
|
# If you don't supply CLHEP_ROOT_DIR, the module will search on the standard
|
|
# system paths. On UNIX, the module will also try to find the clhep-config
|
|
# program in the PATH, and if found will use the prefix supplied by this
|
|
# program as a HINT on where to find the CLHEP headers and libraries.
|
|
#
|
|
# You can re-run CMake with a different version of CLHEP_ROOT_DIR to
|
|
# force a new search for CLHEP using the new version of CLHEP_ROOT_DIR.
|
|
#
|
|
# ============================================================================
|
|
# Variables set by this module:
|
|
#
|
|
# CLHEP_FOUND System has CLHEP.
|
|
#
|
|
# CLHEP_INCLUDE_DIRS CLHEP include directories: not cached.
|
|
#
|
|
# CLHEP_LIBRARIES Link to these to use the CLHEP library: not cached.
|
|
#
|
|
# ===========================================================================
|
|
# If CLHEP is installed in a non-standard way, e.g. a non GNU-style install
|
|
# of <prefix>/{lib,include}, then this module may fail to locate the headers
|
|
# and libraries as needed. In this case, the following cached variables can
|
|
# be editted to point to the correct locations.
|
|
#
|
|
# CLHEP_INCLUDE_DIR The path to the CLHEP include directory: cached
|
|
#
|
|
# CLHEP_LIBRARY The path to the CLHEP library: cached
|
|
#
|
|
# You should not need to set these in the vast majority of cases
|
|
#
|
|
|
|
#============================================================================
|
|
# Copyright (C) 2010,2011 Ben Morgan <Ben.Morgan@warwick.ac.uk>
|
|
# Copyright (C) 2010,2011 University of Warwick
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright notice,
|
|
# this list of conditions and the following disclaimer.
|
|
#
|
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
|
# this list of conditions and the following disclaimer in the documentation
|
|
# and/or other materials provided with the distribution.
|
|
#
|
|
# * Neither the name of the University of Warwick nor the names of its
|
|
# contributors may be used to endorse or promote products derived from
|
|
# this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
#============================================================================
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Enable re-search if known CLHEP_ROOT_DIR changes?
|
|
#
|
|
if(NOT "${CLHEP_ROOT_DIR}" STREQUAL "${CLHEP_INTERNAL_ROOT_DIR}")
|
|
if(CLHEP_INTERNAL_ROOT_DIR AND NOT CLHEP_FIND_QUIETLY)
|
|
message(STATUS "CLHEP_ROOT_DIR Changed, Rechecking for CLHEP")
|
|
endif()
|
|
|
|
set(CLHEP_INTERNAL_ROOT_DIR ${CLHEP_ROOT_DIR}
|
|
CACHE INTERNAL "Last value supplied for where to locate CLHEP")
|
|
set(CLHEP_INCLUDE_DIR CLHEP_INCLUDE_DIR-NOTFOUND)
|
|
set(CLHEP_LIBRARY CLHEP_LIBRARY-NOTFOUND)
|
|
set(CLHEP_CONFIG_EXECUTABLE CLHEP_CONFIG_EXECUTABLE-NOTFOUND)
|
|
set(CLHEP_LIBRARIES )
|
|
set(CLHEP_INCLUDE_DIRS )
|
|
set(CLHEP_FOUND FALSE)
|
|
endif()
|
|
|
|
#----------------------------------------------------------------------------
|
|
# - If we already found CLHEP, be quiet
|
|
#
|
|
if(CLHEP_INCLUDE_DIR AND CLHEP_LIBRARY)
|
|
set(CLHEP_FIND_QUIETLY TRUE)
|
|
endif()
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Set up HINTS on where to look for CLHEP
|
|
# If we're on UNIX, see if we can find clhep-config and use its --prefix
|
|
# as an extra hint.
|
|
#
|
|
set(_clhep_root_hints ${CLHEP_ROOT_DIR})
|
|
|
|
if(UNIX)
|
|
# Try and find clhep-config in the user's path, but hint at the bin
|
|
# directory under CLHEP_ROOT_DIR because we'd ideally like to pick up
|
|
# the config program that matches the libraries/headers.
|
|
# We only use it as a fallback though.
|
|
find_program(CLHEP_CONFIG_EXECUTABLE clhep-config
|
|
HINTS ${_clhep_root_hints}/bin
|
|
DOC "Path to CLHEP's clhep-config program")
|
|
mark_as_advanced(CLHEP_CONFIG_EXECUTABLE)
|
|
|
|
if(CLHEP_CONFIG_EXECUTABLE)
|
|
execute_process(COMMAND ${CLHEP_CONFIG_EXECUTABLE} --prefix
|
|
OUTPUT_VARIABLE _clhep_config_prefix
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
list(APPEND _clhep_root_hints ${_clhep_config_prefix})
|
|
endif()
|
|
elseif(WIN32 AND NOT UNIX)
|
|
# Do we need to set suitable defaults?
|
|
endif()
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Find the CLHEP headers
|
|
# Use Units/defs.h as locator as this is pretty consistent through versions
|
|
find_path(CLHEP_INCLUDE_DIR CLHEP/Units/defs.h
|
|
HINTS ${_clhep_root_hints}
|
|
PATH_SUFFIXES include
|
|
DOC "Path to the CLHEP headers"
|
|
)
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Find the CLHEP library
|
|
# Prefer lib64 if available.
|
|
find_library(CLHEP_LIBRARY CLHEP
|
|
HINTS ${_clhep_root_hints}
|
|
PATH_SUFFIXES lib64 lib
|
|
DOC "Path to the CLHEP library"
|
|
)
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Extract the CLHEP version from defs.h
|
|
# Versions COMPATIBLE if RequestedVersion > FoundVersion
|
|
# Also check if versions exact
|
|
|
|
if(CLHEP_INCLUDE_DIR)
|
|
set(CLHEP_VERSION 0)
|
|
file(READ "${CLHEP_INCLUDE_DIR}/CLHEP/Units/defs.h" _CLHEP_DEFS_CONTENTS)
|
|
string(REGEX REPLACE ".*#define PACKAGE_VERSION \"([0-9.]+).*" "\\1"
|
|
CLHEP_VERSION "${_CLHEP_DEFS_CONTENTS}")
|
|
|
|
if(NOT CLHEP_FIND_QUIETLY)
|
|
message(STATUS "Found CLHEP Version ${CLHEP_VERSION}")
|
|
endif()
|
|
|
|
if(CLHEP_FIND_VERSION)
|
|
set(CLHEP_VERSIONING_TESTS CLHEP_VERSION_COMPATIBLE)
|
|
|
|
if("${CLHEP_VERSION}" VERSION_LESS "${CLHEP_FIND_VERSION}")
|
|
set(CLHEP_VERSION_COMPATIBLE FALSE)
|
|
else()
|
|
set(CLHEP_VERSION_COMPATIBLE TRUE)
|
|
|
|
if(CLHEP_FIND_VERSION_EXACT)
|
|
if("${CLHEP_VERSION}" VERSION_EQUAL "${CLHEP_FIND_VERSION}")
|
|
set(CLHEP_VERSION_EXACT TRUE)
|
|
endif()
|
|
list(APPEND CLHEP_VERSIONING_TESTS CLHEP_VERSION_EXACT)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Construct an error message for FPHSA
|
|
#
|
|
set(CLHEP_DEFAULT_MSG "Could NOT find CLHEP:\n")
|
|
|
|
if(NOT CLHEP_INCLUDE_DIR)
|
|
set(CLHEP_DEFAULT_MSG "${CLHEP_DEFAULT_MSG}CLHEP Header Path Not Found\n")
|
|
endif()
|
|
|
|
if(NOT CLHEP_LIBRARY)
|
|
set(CLHEP_DEFAULT_MSG "${CLHEP_DEFAULT_MSG}CLHEP Library Not Found\n")
|
|
endif()
|
|
|
|
if(CLHEP_FIND_VERSION)
|
|
if(NOT CLHEP_VERSION_COMPATIBLE)
|
|
set(CLHEP_DEFAULT_MSG "${CLHEP_DEFAULT_MSG}Incompatible versions, ${CLHEP_VERSION}(found) < ${CLHEP_FIND_VERSION}(required)\n")
|
|
endif()
|
|
|
|
if(CLHEP_FIND_VERSION_EXACT)
|
|
if(NOT CLHEP_VERSION_EXACT)
|
|
set(CLHEP_DEFAULT_MSG "${CLHEP_DEFAULT_MSG}Non-exact versions, ${CLHEP_VERSION}(found) != ${CLHEP_FIND_VERSION}(required)\n")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Handle the QUIETLY and REQUIRED arguments, setting CLHEP_FOUND to TRUE if
|
|
# all listed variables are TRUE
|
|
#
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(CLHEP
|
|
"${CLHEP_DEFAULT_MSG}"
|
|
CLHEP_LIBRARY
|
|
CLHEP_INCLUDE_DIR
|
|
${CLHEP_VERSIONING_TESTS}
|
|
)
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
# If we found CLHEP, set the needed non-cache variables
|
|
#
|
|
if(CLHEP_FOUND)
|
|
set(CLHEP_LIBRARIES ${CLHEP_LIBRARY})
|
|
set(CLHEP_INCLUDE_DIRS ${CLHEP_INCLUDE_DIR})
|
|
endif()
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Mark cache variables that can be adjusted as advanced
|
|
#
|
|
mark_as_advanced(CLHEP_INCLUDE_DIR CLHEP_LIBRARY)
|
|
|