Skip to content

Commit f59c6bb

Browse files
committed
CMake: Make FindODE link against libccd when present
This fixes building against the macOS/Homebrew version of ODE.
1 parent 7f8d736 commit f59c6bb

File tree

1 file changed

+48
-39
lines changed

1 file changed

+48
-39
lines changed

cmake/modules/FindODE.cmake

Lines changed: 48 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,44 +21,46 @@
2121
# ODE::ODE_double - If available, this links against double-precision ODE
2222
#
2323

24-
if(NOT ODE_INCLUDE_DIR OR NOT ODE_LIBRARY_DIR)
25-
# Find the libode include files
26-
find_path(ODE_INCLUDE_DIR "ode/ode.h")
27-
28-
# Find the libode library built for release
29-
find_library(ODE_RELEASE_LIBRARY
30-
NAMES "ode" "libode")
31-
32-
# Find the libode library built for debug
33-
find_library(ODE_DEBUG_LIBRARY
34-
NAMES "oded" "liboded")
35-
36-
# Find the single-precision library built for release
37-
find_library(ODE_SINGLE_RELEASE_LIBRARY
38-
NAMES "ode_single" "libode_single")
39-
40-
# Find the single-precision library built for debug
41-
find_library(ODE_SINGLE_DEBUG_LIBRARY
42-
NAMES "ode_singled" "libode_singled")
43-
44-
# Find the double-precision library built for release
45-
find_library(ODE_DOUBLE_RELEASE_LIBRARY
46-
NAMES "ode_double" "libode_double" )
47-
48-
# Find the double-precision library built for debug
49-
find_library(ODE_DOUBLE_DEBUG_LIBRARY
50-
NAMES "ode_doubled" "libode_doubled")
51-
52-
unset(_ODE_LIB_PATHS)
53-
54-
mark_as_advanced(ODE_INCLUDE_DIR)
55-
mark_as_advanced(ODE_RELEASE_LIBRARY)
56-
mark_as_advanced(ODE_DEBUG_LIBRARY)
57-
mark_as_advanced(ODE_SINGLE_RELEASE_LIBRARY)
58-
mark_as_advanced(ODE_SINGLE_DEBUG_LIBRARY)
59-
mark_as_advanced(ODE_DOUBLE_RELEASE_LIBRARY)
60-
mark_as_advanced(ODE_DOUBLE_DEBUG_LIBRARY)
61-
endif()
24+
# Find the libode include files
25+
find_path(ODE_INCLUDE_DIR "ode/ode.h")
26+
27+
# Find the libode library built for release
28+
find_library(ODE_RELEASE_LIBRARY
29+
NAMES "ode" "libode")
30+
31+
# Find the libode library built for debug
32+
find_library(ODE_DEBUG_LIBRARY
33+
NAMES "oded" "liboded")
34+
35+
# Find the single-precision library built for release
36+
find_library(ODE_SINGLE_RELEASE_LIBRARY
37+
NAMES "ode_single" "libode_single")
38+
39+
# Find the single-precision library built for debug
40+
find_library(ODE_SINGLE_DEBUG_LIBRARY
41+
NAMES "ode_singled" "libode_singled")
42+
43+
# Find the double-precision library built for release
44+
find_library(ODE_DOUBLE_RELEASE_LIBRARY
45+
NAMES "ode_double" "libode_double")
46+
47+
# Find the double-precision library built for debug
48+
find_library(ODE_DOUBLE_DEBUG_LIBRARY
49+
NAMES "ode_doubled" "libode_doubled")
50+
51+
# Find libccd, which ODE sometimes links against, so we want to let the linker
52+
# know about it if it's present.
53+
find_library(ODE_LIBCCD_LIBRARY
54+
NAMES "ccd" "libccd")
55+
56+
mark_as_advanced(ODE_INCLUDE_DIR)
57+
mark_as_advanced(ODE_RELEASE_LIBRARY)
58+
mark_as_advanced(ODE_DEBUG_LIBRARY)
59+
mark_as_advanced(ODE_SINGLE_RELEASE_LIBRARY)
60+
mark_as_advanced(ODE_SINGLE_DEBUG_LIBRARY)
61+
mark_as_advanced(ODE_DOUBLE_RELEASE_LIBRARY)
62+
mark_as_advanced(ODE_DOUBLE_DEBUG_LIBRARY)
63+
mark_as_advanced(ODE_LIBCCD_LIBRARY)
6264

6365
# Define targets for both precisions (and unspecified)
6466
foreach(_precision _single _double "")
@@ -72,6 +74,11 @@ foreach(_precision _single _double "")
7274
set_target_properties(ODE::ODE${_precision} PROPERTIES
7375
INTERFACE_INCLUDE_DIRECTORIES "${ODE_INCLUDE_DIR}")
7476

77+
if(ODE_LIBCCD_LIBRARY)
78+
set_target_properties(ODE::ODE${_precision} PROPERTIES
79+
INTERFACE_LINK_LIBRARIES "${ODE_LIBCCD_LIBRARY}")
80+
endif()
81+
7582
if(EXISTS "${ODE${_PRECISION}_RELEASE_LIBRARY}")
7683
set_property(TARGET ODE::ODE${_precision} APPEND PROPERTY
7784
IMPORTED_CONFIGURATIONS RELEASE)
@@ -121,18 +128,20 @@ if(NOT TARGET ODE::ODE)
121128
foreach(_prop
122129
INTERFACE_INCLUDE_DIRECTORIES
123130
INTERFACE_COMPILE_DEFINITIONS
131+
INTERFACE_LINK_LIBRARIES
124132
IMPORTED_CONFIGURATIONS
125133
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE
126134
IMPORTED_LOCATION_RELEASE
127135
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG
128136
IMPORTED_LOCATION_DEBUG)
129137

130138
get_target_property(_value "${_copy_from}" "${_prop}")
131-
if(DEFINED _value)
139+
if(_value)
132140
set_target_properties(ODE::ODE PROPERTIES "${_prop}" "${_value}")
133141
endif()
134142
unset(_value)
135143
endforeach(_prop)
144+
unset(_prop)
136145
endif()
137146

138147
unset(_copy_from)

0 commit comments

Comments
 (0)