|
1 |
| -############################################################################### |
2 |
| -# Find QHULL |
| 1 | +#.rst: |
| 2 | +# FindQhull |
| 3 | +# -------- |
| 4 | +# |
| 5 | +# Try to find QHULL library and headers. This module supports both old released versions |
| 6 | +# of QHULL ≤ 7.3.2 and newer development versions that ship with a modern config file, |
| 7 | +# but its limited to only the reentrant version of Qhull. |
| 8 | +# |
| 9 | +# PCL_QHULL_REQUIRED_TYPE can be used to select if you want static or shared libraries, but it defaults to "don't care". |
| 10 | +# |
| 11 | +# IMPORTED Targets |
| 12 | +# ^^^^^^^^^^^^^^^^ |
| 13 | +# |
| 14 | +# This module defines the :prop_tgt:`IMPORTED` targets: |
| 15 | +# |
| 16 | +# ``QHULL::QHULL`` |
| 17 | +# Defined if the system has QHULL. |
| 18 | +# |
| 19 | +# Result Variables |
| 20 | +# ^^^^^^^^^^^^^^^^ |
| 21 | +# |
| 22 | +# This module sets the following variables: |
| 23 | +# |
| 24 | +# :: |
| 25 | +# |
| 26 | +# QHULL_FOUND True in case QHULL is found, otherwise false |
| 27 | +# |
| 28 | +# Example usage |
| 29 | +# ^^^^^^^^^^^^^ |
| 30 | +# |
| 31 | +# :: |
| 32 | +# |
| 33 | +# find_package(QHULL REQUIRED) |
| 34 | +# |
| 35 | +# add_executable(foo foo.cc) |
| 36 | +# target_link_libraries(foo QHULL::QHULL) |
3 | 37 | #
|
4 |
| -# This sets the following variables: |
5 |
| -# QHULL_FOUND - True if QHULL was found. |
6 |
| -# QHULL_INCLUDE_DIRS - Directories containing the QHULL include files. |
7 |
| -# QHULL_LIBRARIES - Libraries needed to use QHULL. |
8 |
| -# QHULL_DEFINITIONS - Compiler flags for QHULL. |
9 |
| -# If QHULL_USE_STATIC is specified then look for static libraries ONLY else |
10 |
| -# look for shared ones |
11 | 38 |
|
12 |
| -if(QHULL_USE_STATIC) |
13 |
| - set(QHULL_RELEASE_NAME qhullstatic_r) |
14 |
| - set(QHULL_DEBUG_NAME qhullstatic_rd) |
15 |
| -else() |
16 |
| - set(QHULL_RELEASE_NAME qhull_r qhull) |
17 |
| - set(QHULL_DEBUG_NAME qhull_rd qhull_d) |
| 39 | +# Skip if QHULL::QHULL is already defined |
| 40 | +if(TARGET QHULL::QHULL) |
| 41 | + return() |
| 42 | +endif() |
| 43 | + |
| 44 | +# Try to locate QHull using modern cmake config (available on latest Qhull version). |
| 45 | +find_package(Qhull CONFIG QUIET) |
| 46 | + |
| 47 | +if(Qhull_FOUND) |
| 48 | + unset(Qhull_FOUND) |
| 49 | + set(QHULL_FOUND ON) |
| 50 | + set(HAVE_QHULL ON) |
| 51 | + |
| 52 | + message(STATUS "Found Qhull version ${Qhull_VERSION}") |
| 53 | + |
| 54 | + # Create interface library that effectively becomes an alias for the appropriate (static/dynamic) imported QHULL target |
| 55 | + add_library(QHULL::QHULL INTERFACE IMPORTED) |
| 56 | + |
| 57 | + if(TARGET Qhull::qhull_r AND TARGET Qhull::qhullstatic_r) |
| 58 | + if(PCL_QHULL_REQUIRED_TYPE MATCHES "DONTCARE") |
| 59 | + if(PCL_SHARED_LIBS) |
| 60 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhull_r) |
| 61 | + set(QHULL_LIBRARY_TYPE SHARED) |
| 62 | + else() |
| 63 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhullstatic_r) |
| 64 | + set(QHULL_LIBRARY_TYPE STATIC) |
| 65 | + endif() |
| 66 | + elseif(PCL_QHULL_REQUIRED_TYPE MATCHES "SHARED") |
| 67 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhull_r) |
| 68 | + set(QHULL_LIBRARY_TYPE SHARED) |
| 69 | + else() |
| 70 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhullstatic_r) |
| 71 | + set(QHULL_LIBRARY_TYPE STATIC) |
| 72 | + endif() |
| 73 | + elseif(TARGET Qhull::qhullstatic_r) |
| 74 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhullstatic_r) |
| 75 | + set(QHULL_LIBRARY_TYPE STATIC) |
| 76 | + else() |
| 77 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY INTERFACE_LINK_LIBRARIES Qhull::qhull_r) |
| 78 | + set(QHULL_LIBRARY_TYPE SHARED) |
| 79 | + endif() |
| 80 | + |
| 81 | + return() |
18 | 82 | endif()
|
19 | 83 |
|
20 | 84 | find_file(QHULL_HEADER
|
21 |
| - NAMES libqhull/libqhull.h qhull.h |
| 85 | + NAMES libqhull_r.h |
22 | 86 | HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}" "${QHULL_INCLUDE_DIR}"
|
23 | 87 | PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
24 |
| - PATH_SUFFIXES qhull src/libqhull libqhull include) |
| 88 | + PATH_SUFFIXES qhull_r src/libqhull_r libqhull_r include) |
25 | 89 |
|
26 | 90 | set(QHULL_HEADER "${QHULL_HEADER}" CACHE INTERNAL "QHull header" FORCE )
|
27 | 91 |
|
28 | 92 | if(QHULL_HEADER)
|
29 | 93 | get_filename_component(qhull_header ${QHULL_HEADER} NAME_WE)
|
30 |
| - if("${qhull_header}" STREQUAL "qhull") |
| 94 | + if("${qhull_header}" STREQUAL "qhull_r") |
31 | 95 | get_filename_component(QHULL_INCLUDE_DIR ${QHULL_HEADER} PATH)
|
32 |
| - elseif("${qhull_header}" STREQUAL "libqhull") |
| 96 | + elseif("${qhull_header}" STREQUAL "libqhull_r") |
33 | 97 | get_filename_component(QHULL_INCLUDE_DIR ${QHULL_HEADER} PATH)
|
34 | 98 | get_filename_component(QHULL_INCLUDE_DIR ${QHULL_INCLUDE_DIR} PATH)
|
35 | 99 | endif()
|
36 | 100 | else()
|
37 | 101 | set(QHULL_INCLUDE_DIR "QHULL_INCLUDE_DIR-NOTFOUND")
|
38 | 102 | endif()
|
39 | 103 |
|
40 |
| -find_library(QHULL_LIBRARY |
41 |
| - NAMES ${QHULL_RELEASE_NAME} |
| 104 | +find_library(QHULL_LIBRARY_SHARED |
| 105 | + NAMES qhull_r qhull |
42 | 106 | HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}"
|
43 | 107 | PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
44 | 108 | PATH_SUFFIXES project build bin lib)
|
45 | 109 |
|
46 |
| -get_filename_component(QHULL_LIBRARY_NAME "${QHULL_LIBRARY}" NAME) |
47 |
| - |
48 | 110 | find_library(QHULL_LIBRARY_DEBUG
|
49 |
| - NAMES ${QHULL_DEBUG_NAME} ${QHULL_RELEASE_NAME} |
| 111 | + NAMES qhull_rd qhull_d |
50 | 112 | HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}"
|
51 | 113 | PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull"
|
52 | 114 | PATH_SUFFIXES project build bin lib debug/lib)
|
53 | 115 |
|
54 |
| -if(NOT QHULL_LIBRARY_DEBUG) |
55 |
| - set(QHULL_LIBRARY_DEBUG ${QHULL_LIBRARY}) |
56 |
| -endif() |
57 |
| - |
58 |
| -get_filename_component(QHULL_LIBRARY_DEBUG_NAME "${QHULL_LIBRARY_DEBUG}" NAME) |
59 |
| - |
60 |
| -if(QHULL_INCLUDE_DIR AND QHULL_LIBRARY) |
61 |
| - |
62 |
| - # Include directories |
63 |
| - set(QHULL_INCLUDE_DIRS ${QHULL_INCLUDE_DIR}) |
64 |
| - unset(QHULL_INCLUDE_DIR) |
65 |
| - mark_as_advanced(QHULL_INCLUDE_DIRS) |
| 116 | +find_library(QHULL_LIBRARY_STATIC |
| 117 | + NAMES qhullstatic_r |
| 118 | + HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}" |
| 119 | + PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull" |
| 120 | + PATH_SUFFIXES project build bin lib) |
66 | 121 |
|
67 |
| - # Libraries |
68 |
| - set(QHULL_LIBRARIES optimized ${QHULL_LIBRARY} debug ${QHULL_LIBRARY_DEBUG}) |
69 |
| - unset(QHULL_LIBRARY) |
70 |
| - unset(QHULL_LIBRARY_DEBUG) |
71 |
| - mark_as_advanced(QHULL_LIBRARIES) |
| 122 | +find_library(QHULL_LIBRARY_DEBUG_STATIC |
| 123 | + NAMES qhullstatic_rd |
| 124 | + HINTS "${QHULL_ROOT}" "$ENV{QHULL_ROOT}" |
| 125 | + PATHS "$ENV{PROGRAMFILES}/QHull" "$ENV{PROGRAMW6432}/QHull" |
| 126 | + PATH_SUFFIXES project build bin lib debug/lib) |
72 | 127 |
|
| 128 | +if(QHULL_LIBRARY_SHARED AND QHULL_LIBRARY_STATIC) |
| 129 | + if(PCL_QHULL_REQUIRED_TYPE MATCHES "DONTCARE") |
| 130 | + if(PCL_SHARED_LIBS) |
| 131 | + set(QHULL_LIBRARY_TYPE SHARED) |
| 132 | + set(QHULL_LIBRARY ${QHULL_LIBRARY_SHARED}) |
| 133 | + else() |
| 134 | + set(QHULL_LIBRARY_TYPE STATIC) |
| 135 | + set(QHULL_LIBRARY ${QHULL_LIBRARY_STATIC}) |
| 136 | + endif() |
| 137 | + elseif(PCL_QHULL_REQUIRED_TYPE MATCHES "SHARED") |
| 138 | + set(QHULL_LIBRARY_TYPE SHARED) |
| 139 | + set(QHULL_LIBRARY ${QHULL_LIBRARY_SHARED}) |
| 140 | + else() |
| 141 | + set(QHULL_LIBRARY_TYPE STATIC) |
| 142 | + set(QHULL_LIBRARY ${QHULL_LIBRARY_STATIC}) |
| 143 | + endif() |
| 144 | +elseif(QHULL_LIBRARY_STATIC) |
| 145 | + set(QHULL_LIBRARY_TYPE STATIC) |
| 146 | + set(QHULL_LIBRARY ${QHULL_LIBRARY_STATIC}) |
| 147 | +elseif(QHULL_LIBRARY_SHARED) |
| 148 | + set(QHULL_LIBRARY_TYPE SHARED) |
| 149 | + set(QHULL_LIBRARY ${QHULL_LIBRARY_SHARED}) |
73 | 150 | endif()
|
74 | 151 |
|
75 | 152 | include(FindPackageHandleStandardArgs)
|
76 | 153 | find_package_handle_standard_args(Qhull
|
77 | 154 | FOUND_VAR QHULL_FOUND
|
78 |
| - REQUIRED_VARS QHULL_LIBRARIES QHULL_INCLUDE_DIRS |
| 155 | + REQUIRED_VARS QHULL_LIBRARY QHULL_INCLUDE_DIR |
79 | 156 | )
|
80 | 157 |
|
81 | 158 | if(QHULL_FOUND)
|
82 | 159 | set(HAVE_QHULL ON)
|
83 |
| - if(NOT QHULL_USE_STATIC) |
84 |
| - add_definitions("-Dqh_QHpointer") |
85 |
| - if(MSVC) |
86 |
| - add_definitions("-Dqh_QHpointer_dllimport") |
| 160 | + add_library(QHULL::QHULL ${QHULL_LIBRARY_TYPE} IMPORTED) |
| 161 | + set_target_properties(QHULL::QHULL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${QHULL_INCLUDE_DIR}") |
| 162 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY IMPORTED_CONFIGURATIONS "RELEASE") |
| 163 | + set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "CXX") |
| 164 | + set_target_properties(QHULL::QHULL PROPERTIES INTERFACE_COMPILE_DEFINITIONS "qh_QHpointer") |
| 165 | + if(MSVC) |
| 166 | + set_target_properties(QHULL::QHULL PROPERTIES INTERFACE_COMPILE_DEFINITIONS "qh_QHpointer_dllimport") |
| 167 | + endif() |
| 168 | + if(WIN32 AND NOT (PCL_QHULL_REQUIRED_TYPE MATCHES "STATIC")) |
| 169 | + set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_IMPLIB_RELEASE "${QHULL_LIBRARY}") |
| 170 | + else() |
| 171 | + set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_LOCATION_RELEASE "${QHULL_LIBRARY}") |
| 172 | + endif() |
| 173 | + if(QHULL_LIBRARY_DEBUG) |
| 174 | + set_property(TARGET QHULL::QHULL APPEND PROPERTY IMPORTED_CONFIGURATIONS "DEBUG") |
| 175 | + if(WIN32 AND NOT (PCL_QHULL_REQUIRED_TYPE MATCHES "STATIC")) |
| 176 | + set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_IMPLIB_DEBUG "${QHULL_LIBRARY_DEBUG}") |
| 177 | + else() |
| 178 | + set_target_properties(QHULL::QHULL PROPERTIES IMPORTED_LOCATION_DEBUG "${QHULL_LIBRARY_DEBUG}") |
87 | 179 | endif()
|
88 | 180 | endif()
|
89 |
| - message(STATUS "QHULL found (include: ${QHULL_INCLUDE_DIRS}, lib: ${QHULL_LIBRARIES})") |
| 181 | + message(STATUS "QHULL found (include: ${QHULL_INCLUDE_DIR}, lib: ${QHULL_LIBRARY})") |
90 | 182 | endif()
|
0 commit comments