forked from dartsim/dart
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDARTConfig.cmake.in
More file actions
170 lines (140 loc) · 7.39 KB
/
DARTConfig.cmake.in
File metadata and controls
170 lines (140 loc) · 7.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
###############################################################################
# CMake config file for DART
#
# This sets the following variables:
# @PROJECT_NAME_UPPERCASE@_INCLUDE_DIRS - Directories containing the DART include files.
# @PROJECT_NAME_UPPERCASE@_LIBRARIES - Libraries needed to use DART.
# @PROJECT_NAME_UPPERCASE@_VERSION - DART version.
#
# and the following `IMPORTED` targets:
# dart - Main target.
# dart-<C> - Target for specific component (e.g., dart-collision-bullet).
# Specify CMake minimum required version
if(NOT CMAKE_MINIMUM_REQUIRED_VERSION)
cmake_minimum_required(VERSION 3.22.1)
else()
# Support if() IN_LIST operator
if(POLICY CMP0057)
cmake_policy(SET CMP0057 NEW)
endif()
endif()
#===============================================================================
# Helper Function Definitions
#===============================================================================
@PACKAGE_INIT@
#===============================================================================
function(@PROJECT_NAME@_traverse_components output_variable)
set(output_components)
foreach(component ${ARGN})
# We should be able to elminate the <C>_VISITED property by detecting
# whether the <C>_FOUND property is DEFINED. Unfortunately, DEFINED checks
# whether or not define_property() was called, not whether the variable was
# set. The exact behavior seems to vary between CMake versions, so we use
# an extra variable instead.
get_property(is_visited DIRECTORY PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_VISITED")
set_property(DIRECTORY PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_VISITED" TRUE)
if(NOT is_visited)
set(component_include
"${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@_${component}Component.cmake")
set(target_include
"${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@_${component}Targets.cmake")
if(EXISTS "${component_include}" AND EXISTS "${target_include}")
include("${component_include}")
set_property(DIRECTORY
PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_INCLUDE_DIRS"
${@PROJECT_NAME@_${component}_INCLUDE_DIRS})
set_property(DIRECTORY
PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_DEFINITIONS"
${@PROJECT_NAME@_${component}_DEFINITIONS})
set_property(DIRECTORY
PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_LIBRARIES"
${@PROJECT_NAME@_${component}_LIBRARIES})
set_property(DIRECTORY
PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_DEPENDENCIES"
${@PROJECT_NAME@_${component}_DEPENDENCIES})
@PROJECT_NAME@_traverse_components("${output_variable}"
${@PROJECT_NAME@_${component}_DEPENDENCIES})
include("${target_include}")
# This is not necessary in recent versions of cmake, which supports
# transitive includes via INTERFACE_INCLUDE_DIRECTORIES.
foreach(dependency ${@PROJECT_NAME@_${component}_DEPENDENCIES})
set_property(DIRECTORY APPEND
PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_INCLUDE_DIRS"
${@PROJECT_NAME@_${dependency}_INCLUDE_DIRS})
set_property(DIRECTORY APPEND
PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_DEFINITIONS"
${@PROJECT_NAME@_${dependency}_DEFINITIONS})
# LIBRARIES is automatically inherited via INTERFACE_LINK_LIBRARIES.
endforeach()
list(APPEND output_components "${component}")
else()
set_property(DIRECTORY PROPERTY "@PROJECT_NAME_UPPERCASE@_${component}_FOUND" FALSE)
endif()
endif()
endforeach()
set("${output_variable}" ${output_components} PARENT_SCOPE)
endfunction()
#===============================================================================
function(@PROJECT_NAME@_export_variable variable)
set("${variable}" ${${variable}} CACHE INTERNAL "")
endfunction()
#===============================================================================
function(@PROJECT_NAME@_export_property variable)
get_property(value DIRECTORY PROPERTY "${variable}")
set("${variable}" ${value} CACHE INTERNAL "")
endfunction()
#===============================================================================
function(@PROJECT_NAME@_export_notfound variable)
set("${variable}" "${variable}-NOTFOUND" CACHE INTERNAL "")
endfunction()
#===============================================================================
function(@PROJECT_NAME@_package_init)
@PROJECT_NAME@_traverse_components(required_components "${ARGN}")
set(@PROJECT_NAME_UPPERCASE@_INCLUDE_DIRS)
set(@PROJECT_NAME_UPPERCASE@_DEFINITIONS)
set(@PROJECT_NAME_UPPERCASE@_LIBRARIES)
foreach(component ${ARGN})
@PROJECT_NAME@_export_property("@PROJECT_NAME_UPPERCASE@_${component}_FOUND")
if(@PROJECT_NAME_UPPERCASE@_${component}_FOUND)
@PROJECT_NAME@_export_property("@PROJECT_NAME_UPPERCASE@_${component}_INCLUDE_DIRS")
@PROJECT_NAME@_export_property("@PROJECT_NAME_UPPERCASE@_${component}_DEFINITIONS")
@PROJECT_NAME@_export_property("@PROJECT_NAME_UPPERCASE@_${component}_LIBRARIES")
@PROJECT_NAME@_export_property("@PROJECT_NAME_UPPERCASE@_${component}_DEPENDENCIES")
list(APPEND @PROJECT_NAME_UPPERCASE@_INCLUDE_DIRS ${@PROJECT_NAME_UPPERCASE@_${component}_INCLUDE_DIRS})
list(APPEND @PROJECT_NAME_UPPERCASE@_DEFINITIONS ${@PROJECT_NAME_UPPERCASE@_${component}_DEFINITIONS})
list(APPEND @PROJECT_NAME_UPPERCASE@_LIBRARIES ${@PROJECT_NAME_UPPERCASE@_${component}_LIBRARIES})
else()
@PROJECT_NAME@_export_notfound("@PROJECT_NAME_UPPERCASE@_${component}_INCLUDE_DIRS")
@PROJECT_NAME@_export_notfound("@PROJECT_NAME_UPPERCASE@_${component}_DEFINITIONS")
@PROJECT_NAME@_export_notfound("@PROJECT_NAME_UPPERCASE@_${component}_LIBRARIES")
@PROJECT_NAME@_export_notfound("@PROJECT_NAME_UPPERCASE@_${component}_DEPENDENCIES")
endif()
endforeach()
@PROJECT_NAME@_export_variable(@PROJECT_NAME_UPPERCASE@_INCLUDE_DIRS)
@PROJECT_NAME@_export_variable(@PROJECT_NAME_UPPERCASE@_DEFINITIONS)
@PROJECT_NAME@_export_variable(@PROJECT_NAME_UPPERCASE@_LIBRARIES)
endfunction()
#===============================================================================
# Main
#===============================================================================
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
# Default component: dart
list(APPEND @PROJECT_NAME_UPPERCASE@_FIND_COMPONENTS dart)
# Components
if(@PROJECT_NAME_UPPERCASE@_FIND_COMPONENTS)
set_and_check(@PROJECT_NAME_UPPERCASE@_PACKAGE_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@")
set(@PROJECT_NAME_UPPERCASE@_INCLUDE_DIRS
${@PROJECT_NAME_UPPERCASE@_PACKAGE_INCLUDE_DIRS}
@PACKAGE_INCLUDE_DIRS@
CACHE INTERNAL "")
@PROJECT_NAME@_package_init(${@PROJECT_NAME_UPPERCASE@_FIND_COMPONENTS})
endif()
list(REMOVE_AT CMAKE_MODULE_PATH -1)
# Use find_package_handle_standard_args to generate output. This handles the
# REQUIRED keyword, sets @PROJECT_NAME_UPPERCASE@_FOUND, and generates the appropriate
# STATUS and FATAL_ERROR messages.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(@PROJECT_NAME_UPPERCASE@
FOUND_VAR @PROJECT_NAME_UPPERCASE@_FOUND
REQUIRED_VARS @PROJECT_NAME_UPPERCASE@_INCLUDE_DIRS @PROJECT_NAME_UPPERCASE@_LIBRARIES
HANDLE_COMPONENTS)