183 lines
6.5 KiB
CMake
183 lines
6.5 KiB
CMake
#.rst:
|
|
# FindQhull
|
|
# --------
|
|
#
|
|
# Try to find QHULL library and headers. This module supports both old released versions
|
|
# of QHULL ≤ 7.3.2 and newer development versions that ship with a modern config file,
|
|
# but its limited to only the reentrant version of Qhull.
|
|
#
|
|
# PCL_QHULL_REQUIRED_TYPE can be used to select if you want static or shared libraries, but it defaults to "don't care".
|
|
#
|
|
# IMPORTED Targets
|
|
# ^^^^^^^^^^^^^^^^
|
|
#
|
|
# This module defines the :prop_tgt:`IMPORTED` targets:
|
|
#
|
|
# ``QHULL::QHULL``
|
|
# Defined if the system has QHULL.
|
|
#
|
|
# Result Variables
|
|
# ^^^^^^^^^^^^^^^^
|
|
#
|
|
# This module sets the following variables:
|
|
#
|
|
# ::
|
|
#
|
|
# QHULL_FOUND True in case QHULL is found, otherwise false
|
|
#
|
|
# Example usage
|
|
# ^^^^^^^^^^^^^
|
|
#
|
|
# ::
|
|
#
|
|
# find_package(QHULL REQUIRED)
|
|
#
|
|
# add_executable(foo foo.cc)
|
|
# target_link_libraries(foo QHULL::QHULL)
|
|
#
|
|
|
|
# Skip if QHULL::QHULL is already defined
|
|
if(TARGET QHULL::QHULL)
|
|
return()
|
|
endif()
|
|
|
|
# Try to locate QHull using modern cmake config (available on latest Qhull version).
|
|
find_package(Qhull CONFIG QUIET)
|
|
|
|
if(Qhull_FOUND)
|
|
unset(Qhull_FOUND)
|
|
set(QHULL_FOUND ON)
|
|
set(HAVE_QHULL ON)
|
|
|
|
message(STATUS "Found Qhull version ${Qhull_VERSION}")
|
|
|
|
# Create interface library that effectively becomes an alias for the appropriate (static/dynamic) imported QHULL target
|
|
add_library(QHULL::QHULL INTERFACE IMPORTED)
|
|
|
|
if(TARGET Qhull::qhull_r AND TARGET Qhull::qhullstatic_r)
|
|
if(PCL_QHULL_REQUIRED_TYPE MATCHES "SHARED")
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhull_r)
|
|
set(QHULL_LIBRARY_TYPE SHARED)
|
|
elseif(PCL_QHULL_REQUIRED_TYPE MATCHES "STATIC")
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhullstatic_r)
|
|
set(QHULL_LIBRARY_TYPE STATIC)
|
|
else()
|
|
if(PCL_SHARED_LIBS)
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhull_r)
|
|
set(QHULL_LIBRARY_TYPE SHARED)
|
|
else()
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhullstatic_r)
|
|
set(QHULL_LIBRARY_TYPE STATIC)
|
|
endif()
|
|
endif()
|
|
elseif(TARGET Qhull::qhullstatic_r)
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhullstatic_r)
|
|
set(QHULL_LIBRARY_TYPE STATIC)
|
|
else()
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhull_r)
|
|
set(QHULL_LIBRARY_TYPE SHARED)
|
|
endif()
|
|
|
|
return()
|
|
endif()
|
|
|
|
find_file(QHULL_HEADER
|
|
NAMES libqhull_r.h
|
|
HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}" "${QHULL_INCLUDE_DIR}"
|
|
PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
|
PATH_SUFFIXES qhull_r src/libqhull_r libqhull_r include)
|
|
|
|
set(QHULL_HEADER "${QHULL_HEADER}" CACHE INTERNAL "QHull header" FORCE )
|
|
|
|
if(QHULL_HEADER)
|
|
get_filename_component(qhull_header ${QHULL_HEADER} NAME_WE)
|
|
if("${qhull_header}" STREQUAL "qhull_r")
|
|
get_filename_component(QHULL_INCLUDE_DIR ${QHULL_HEADER} PATH)
|
|
elseif("${qhull_header}" STREQUAL "libqhull_r")
|
|
get_filename_component(QHULL_INCLUDE_DIR ${QHULL_HEADER} PATH)
|
|
get_filename_component(QHULL_INCLUDE_DIR ${QHULL_INCLUDE_DIR} PATH)
|
|
endif()
|
|
else()
|
|
set(QHULL_INCLUDE_DIR "QHULL_INCLUDE_DIR-NOTFOUND")
|
|
endif()
|
|
|
|
find_library(QHULL_LIBRARY_SHARED
|
|
NAMES qhull_r qhull
|
|
HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}"
|
|
PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
|
PATH_SUFFIXES project build bin lib)
|
|
|
|
find_library(QHULL_LIBRARY_DEBUG
|
|
NAMES qhull_rd qhull_d
|
|
HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}"
|
|
PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
|
PATH_SUFFIXES project build bin lib debug/lib)
|
|
|
|
find_library(QHULL_LIBRARY_STATIC
|
|
NAMES qhullstatic_r
|
|
HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}"
|
|
PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
|
PATH_SUFFIXES project build bin lib)
|
|
|
|
find_library(QHULL_LIBRARY_DEBUG_STATIC
|
|
NAMES qhullstatic_rd
|
|
HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}"
|
|
PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
|
PATH_SUFFIXES project build bin lib debug/lib)
|
|
|
|
if(QHULL_LIBRARY_SHARED AND QHULL_LIBRARY_STATIC)
|
|
if(PCL_QHULL_REQUIRED_TYPE MATCHES "SHARED")
|
|
set(QHULL_LIBRARY_TYPE SHARED)
|
|
set(QHULL_LIBRARY ${QHULL_LIBRARY_SHARED})
|
|
elseif(PCL_QHULL_REQUIRED_TYPE MATCHES "STATIC")
|
|
set(QHULL_LIBRARY_TYPE STATIC)
|
|
set(QHULL_LIBRARY ${QHULL_LIBRARY_STATIC})
|
|
else()
|
|
if(PCL_SHARED_LIBS)
|
|
set(QHULL_LIBRARY_TYPE SHARED)
|
|
set(QHULL_LIBRARY ${QHULL_LIBRARY_SHARED})
|
|
else()
|
|
set(QHULL_LIBRARY_TYPE STATIC)
|
|
set(QHULL_LIBRARY ${QHULL_LIBRARY_STATIC})
|
|
endif()
|
|
endif()
|
|
elseif(QHULL_LIBRARY_STATIC)
|
|
set(QHULL_LIBRARY_TYPE STATIC)
|
|
set(QHULL_LIBRARY ${QHULL_LIBRARY_STATIC})
|
|
elseif(QHULL_LIBRARY_SHARED)
|
|
set(QHULL_LIBRARY_TYPE SHARED)
|
|
set(QHULL_LIBRARY ${QHULL_LIBRARY_SHARED})
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(Qhull
|
|
FOUND_VAR QHULL_FOUND
|
|
REQUIRED_VARS QHULL_LIBRARY QHULL_INCLUDE_DIR
|
|
)
|
|
|
|
if(QHULL_FOUND)
|
|
set(HAVE_QHULL ON)
|
|
add_library(QHULL::QHULL ${QHULL_LIBRARY_TYPE} IMPORTED)
|
|
set_target_properties(QHULL::QHULL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${QHULL_INCLUDE_DIR}")
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY IMPORTED_CONFIGURATIONS "RELEASE")
|
|
set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX")
|
|
set_target_properties(QHULL::QHULL PROPERTIES INTERFACE_COMPILE_DEFINITIONS "qh_QHpointer")
|
|
if(MSVC)
|
|
set_target_properties(QHULL::QHULL PROPERTIES INTERFACE_COMPILE_DEFINITIONS "qh_QHpointer_dllimport")
|
|
endif()
|
|
if(WIN32 AND NOT (PCL_QHULL_REQUIRED_TYPE MATCHES "STATIC"))
|
|
set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_IMPLIB_RELEASE "${QHULL_LIBRARY}")
|
|
else()
|
|
set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_LOCATION_RELEASE "${QHULL_LIBRARY}")
|
|
endif()
|
|
if(QHULL_LIBRARY_DEBUG)
|
|
set_property(TARGET QHULL::QHULL APPEND PROPERTY IMPORTED_CONFIGURATIONS "DEBUG")
|
|
if(WIN32 AND NOT (PCL_QHULL_REQUIRED_TYPE MATCHES "STATIC"))
|
|
set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_IMPLIB_DEBUG "${QHULL_LIBRARY_DEBUG}")
|
|
else()
|
|
set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_LOCATION_DEBUG "${QHULL_LIBRARY_DEBUG}")
|
|
endif()
|
|
endif()
|
|
message(STATUS "QHULL found (include: ${QHULL_INCLUDE_DIR}, lib: ${QHULL_LIBRARY})")
|
|
endif()
|