-
Notifications
You must be signed in to change notification settings - Fork 1
/
FindUrho3D.cmake
186 lines (174 loc) · 8.23 KB
/
FindUrho3D.cmake
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#
# Copyright (c) 2008-2014 the Urho3D project.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# Find Urho3D library and include directories in the project root tree or installed location
# For project root tree detection to work, Urho3D library must be already been built
#
# URHO3D_FOUND
# URHO3D_INCLUDE_DIRS
# URHO3D_LIBRARIES
# URHO3D_LIBRARIES_REL
# URHO3D_LIBRARIES_DBG
#
if (URHO3D_FOUND)
return ()
endif ()
# If the URHO3D_LIB_TYPE build option changes then invalidate the found library cache
if (NOT URHO3D_LIB_TYPE STREQUAL URHO3D_FOUND_LIB_TYPE)
unset (URHO3D_LIBRARIES CACHE)
set (URHO3D_FOUND_LIB_TYPE ${URHO3D_LIB_TYPE} CACHE INTERNAL "Lib type when Urho3D library was last found")
# Urho3D prefers static library type by default while CMake prefers shared one, so we need to change CMake preference to agree with Urho3D
if (NOT URHO3D_LIB_TYPE STREQUAL SHARED)
list (REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
endif ()
endif ()
set (URHO3D_LIB_NAMES Urho3D)
if (WIN32)
set (URHO3D_LIB_NAMES_DBG Urho3D_d)
endif ()
if (CMAKE_PROJECT_NAME STREQUAL Urho3D AND PROJECT_ROOT_DIR)
set (URHO3D_HOME ${PROJECT_ROOT_DIR} CACHE PATH "Path to Urho3D project root tree" FORCE)
set (IS_INTERNAL 1)
elseif (NOT URHO3D_HOME AND DEFINED ENV{URHO3D_HOME})
file (TO_CMAKE_PATH "$ENV{URHO3D_HOME}" URHO3D_HOME)
set (URHO3D_HOME ${URHO3D_HOME} CACHE PATH "Path to Urho3D project root tree")
endif ()
if (URHO3D_HOME)
# Construct source tree paths from URHO3D_HOME environment variable
find_file (URHO3D_SOURCE_TREE Urho3D.h.in ${URHO3D_HOME}/Source/Engine DOC "Path to Urho3D project source tree" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if (URHO3D_SOURCE_TREE)
get_filename_component (URHO3D_SOURCE_TREE ${URHO3D_SOURCE_TREE} PATH)
set (URHO3D_INCLUDE_DIRS ${URHO3D_SOURCE_TREE})
foreach (DIR Audio Container Core Engine Graphics Input IO LuaScript Math Navigation Network Physics Resource Scene Script UI Urho2D)
list (APPEND URHO3D_INCLUDE_DIRS ${URHO3D_SOURCE_TREE}/${DIR}) # Note: variable change to list context after this
endforeach ()
set (DIRS SDL/include)
if (URHO3D_ANGELSCRIPT)
list (APPEND DIRS AngelScript/include)
endif ()
if (URHO3D_NETWORK)
list (APPEND DIRS kNet/include)
endif ()
if (URHO3D_PHYSICS)
list (APPEND DIRS Bullet/src)
endif ()
if (URHO3D_URHO2D)
list (APPEND DIRS Box2D)
endif ()
foreach (DIR ${DIRS})
list (APPEND URHO3D_INCLUDE_DIRS ${URHO3D_HOME}/Source/ThirdParty/${DIR})
endforeach ()
# For non Urho3D project using Urho3D as external library, Urho3D project itself must be built using predefined build directory as per specified in the provided build scripts.
if (IS_INTERNAL)
set (BINARY_DIR ${CMAKE_BINARY_DIR})
elseif (ANDROID AND CMAKE_HOST_WIN32 AND NOT URHO3D_MKLINK)
set (BINARY_DIR ${URHO3D_HOME}/Source/Android)
else ()
set (BINARY_DIR ${URHO3D_HOME}/${PLATFORM_PREFIX}Build)
endif ()
list (APPEND URHO3D_INCLUDE_DIRS ${BINARY_DIR}/Engine)
if (ANDROID)
if (IS_INTERNAL)
set (URHO3D_LIB_SEARCH_PATH ${ANDROID_LIBRARY_OUTPUT_PATH})
else ()
set (URHO3D_LIB_SEARCH_PATH ${BINARY_DIR}/libs/${ANDROID_NDK_ABI_NAME})
endif ()
else ()
set (URHO3D_LIB_SEARCH_PATH ${URHO3D_HOME}/${PLATFORM_PREFIX}Lib)
endif ()
if (TARGET Urho3D)
set (URHO3D_LIBRARIES Urho3D)
set (FOUND_MESSAGE "Found Urho3D: as CMake target")
else ()
find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if (WIN32)
find_library (URHO3D_LIBRARIES_DBG NAMES ${URHO3D_LIB_NAMES_DBG} PATHS ${URHO3D_LIB_SEARCH_PATH} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
endif ()
endif ()
endif ()
else ()
# If Urho3D SDK is not being installed in the default system location, use the CMAKE_PREFIX_PATH environment variable to specify the prefix path to that location
# Note that the prefix path should not contain the "/include" or "/lib"
# For example on Windows platform: CMAKE_PREFIX_PATH=C:/Users/john/Urho3D if the SDK is installed using CMAKE_INSTALL_PREFIX=C:/Users/john/Urho3D
# For example on Linux platform: CMAKE_PREFIX_PATH=/home/john/usr/local if the SDK is installed using DESTDIR=/home/john and CMAKE_INSTALL_PREFIX=/usr/local
if (CMAKE_HOST_WIN32)
set (URHO3D_INC_SEARCH_PATH include)
set (URHO3D_LIB_SEARCH_PATH lib)
else ()
set (PATH_SUFFIX Urho3D)
if (IOS)
set (CMAKE_LIBRARY_ARCHITECTURE ios)
endif ()
endif ()
# Additional search paths are added by CMake by default which should already include most common platform specific paths
find_path (URHO3D_INCLUDE_DIRS Urho3D.h PATHS ${URHO3D_INC_SEARCH_PATH} PATH_SUFFIXES ${PATH_SUFFIX})
find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} PATH_SUFFIXES ${PATH_SUFFIX})
if (WIN32)
find_library (URHO3D_LIBRARIES_DBG NAMES ${URHO3D_LIB_NAMES_DBG} PATHS ${URHO3D_LIB_SEARCH_PATH} PATH_SUFFIXES ${PATH_SUFFIX})
endif ()
if (URHO3D_INCLUDE_DIRS)
set (BASE_DIR ${URHO3D_INCLUDE_DIRS})
set (DIRS SDL)
if (URHO3D_ANGELSCRIPT)
list (APPEND DIRS AngelScript)
endif ()
if (URHO3D_NETWORK)
list (APPEND DIRS kNet)
endif ()
if (URHO3D_PHYSICS)
list (APPEND DIRS Bullet)
endif ()
if (URHO3D_URHO2D)
list (APPEND DIRS Box2D)
endif ()
foreach (DIR ${DIRS})
list (APPEND URHO3D_INCLUDE_DIRS ${BASE_DIR}/${DIR}) # Note: variable change to list context after this, so we need BASE_DIR to remain the same
endforeach ()
endif ()
endif ()
if (WIN32)
set (URHO3D_LIBRARIES_REL ${URHO3D_LIBRARIES})
if (URHO3D_LIBRARIES)
if (URHO3D_LIBRARIES_DBG)
list (APPEND URHO3D_LIBRARIES ${URHO3D_LIBRARIES_DBG})
endif ()
else ()
set (URHO3D_LIBRARIES ${URHO3D_LIBRARIES_DBG})
endif ()
endif ()
if (URHO3D_INCLUDE_DIRS AND URHO3D_LIBRARIES)
set (URHO3D_FOUND 1)
if (NOT FOUND_MESSAGE)
set (FOUND_MESSAGE "Found Urho3D: ${URHO3D_LIBRARIES}")
endif ()
endif ()
if (URHO3D_FOUND)
include (FindPackageMessage)
FIND_PACKAGE_MESSAGE (Urho3D ${FOUND_MESSAGE} "[${URHO3D_LIBRARIES}][${URHO3D_INCLUDE_DIRS}]")
else ()
if (Urho3D_FIND_REQUIRED)
message (FATAL_ERROR
"Could not find Urho3D library in default SDK installation location or Urho3D project root tree. "
"For searching in a non-default Urho3D SDK installation, use 'CMAKE_PREFIX_PATH' environment variable to specify the prefix path of the installation location. "
"For searching in a build tree of Urho3D project, use 'URHO3D_HOME' environment variable to specify the Urho3D project root directory. The Urho3D library itself must already be built successfully.")
endif ()
endif ()
mark_as_advanced (URHO3D_INCLUDE_DIRS URHO3D_LIBRARIES URHO3D_SOURCE_TREE)