1#-------------------------------------------------------------------
2# This file is part of the CMake build system for OGRE
3#     (Object-oriented Graphics Rendering Engine)
4# For the latest info, see http://www.ogre3d.org/
5#
6# The contents of this file are placed in the public domain. Feel
7# free to make use of it in any way you like.
8#-------------------------------------------------------------------
9
10# - Try to find OGRE
11# If you have multiple versions of Ogre installed, use the CMake or
12# the environment variable OGRE_HOME to point to the path where the
13# desired Ogre version can be found.
14# By default this script will look for a dynamic Ogre build. If you
15# need to link against static Ogre libraries, set the CMake variable
16# OGRE_STATIC to TRUE.
17#
18# Once done, this will define
19#
20#  OGRE_FOUND - system has OGRE
21#  OGRE_INCLUDE_DIRS - the OGRE include directories
22#  OGRE_LIBRARIES - link these to use the OGRE core
23#  OGRE_BINARY_REL - location of the main Ogre binary (win32 non-static only, release)
24#  OGRE_BINARY_DBG - location of the main Ogre binaries (win32 non-static only, debug)
25#
26# Additionally this script searches for the following optional
27# parts of the Ogre package:
28#  Plugin_BSPSceneManager, Plugin_CgProgramManager,
29#  Plugin_OctreeSceneManager, Plugin_OctreeZone,
30#  Plugin_ParticleFX, Plugin_PCZSceneManager,
31#  RenderSystem_GL, RenderSystem_GL3Plus,
32#  RenderSystem_GLES, RenderSystem_GLES2,
33#  RenderSystem_Direct3D9, RenderSystem_Direct3D11
34#  Paging, Terrain, Volume, Overlay
35#
36# For each of these components, the following variables are defined:
37#
38#  OGRE_${COMPONENT}_FOUND - ${COMPONENT} is available
39#  OGRE_${COMPONENT}_INCLUDE_DIRS - additional include directories for ${COMPONENT}
40#  OGRE_${COMPONENT}_LIBRARIES - link these to use ${COMPONENT}
41#  OGRE_${COMPONENT}_BINARY_REL - location of the component binary (win32 non-static only, release)
42#  OGRE_${COMPONENT}_BINARY_DBG - location of the component binary (win32 non-static only, debug)
43#
44# Finally, the following variables are defined:
45#
46#  OGRE_PLUGIN_DIR_REL - The directory where the release versions of
47#       the OGRE plugins are located
48#  OGRE_PLUGIN_DIR_DBG - The directory where the debug versions of
49#       the OGRE plugins are located
50#  OGRE_MEDIA_DIR - The directory where the OGRE sample media is
51#       located, if available
52
53include(FindPkgMacros)
54include(PreprocessorUtils)
55findpkg_begin(OGRE)
56
57
58# Get path, convert backslashes as ${ENV_${var}}
59getenv_path(OGRE_HOME)
60getenv_path(OGRE_SDK)
61getenv_path(OGRE_SOURCE)
62getenv_path(OGRE_BUILD)
63getenv_path(OGRE_DEPENDENCIES_DIR)
64getenv_path(PROGRAMFILES)
65
66# Determine whether to search for a dynamic or static build
67if (OGRE_STATIC)
68  set(OGRE_LIB_SUFFIX "Static")
69else ()
70  set(OGRE_LIB_SUFFIX "")
71endif ()
72
73if(APPLE AND NOT OGRE_STATIC)
74	set(OGRE_LIBRARY_NAMES "Ogre${OGRE_LIB_SUFFIX}")
75else()
76    set(OGRE_LIBRARY_NAMES "OgreMain${OGRE_LIB_SUFFIX}")
77endif()
78get_debug_names(OGRE_LIBRARY_NAMES)
79
80# construct search paths from environmental hints and
81# OS specific guesses
82if (WIN32)
83  set(OGRE_PREFIX_GUESSES
84    ${ENV_PROGRAMFILES}/OGRE
85    C:/OgreSDK
86  )
87elseif (UNIX)
88  set(OGRE_PREFIX_GUESSES
89    /opt/ogre
90    /opt/OGRE
91    /usr/lib${LIB_SUFFIX}/ogre
92    /usr/lib${LIB_SUFFIX}/OGRE
93    /usr/local/lib${LIB_SUFFIX}/ogre
94    /usr/local/lib${LIB_SUFFIX}/OGRE
95    $ENV{HOME}/ogre
96    $ENV{HOME}/OGRE
97  )
98  if (APPLE)
99    set(OGRE_PREFIX_GUESSES
100      ${CMAKE_CURRENT_SOURCE_DIR}/lib/macosx
101      ${OGRE_PREFIX_GUESSES}
102    )
103  endif ()
104endif ()
105set(OGRE_PREFIX_PATH
106  ${OGRE_HOME} ${OGRE_SDK} ${ENV_OGRE_HOME} ${ENV_OGRE_SDK}
107  ${OGRE_PREFIX_GUESSES}
108)
109create_search_paths(OGRE)
110# If both OGRE_BUILD and OGRE_SOURCE are set, prepare to find Ogre in a build dir
111set(OGRE_PREFIX_SOURCE ${OGRE_SOURCE} ${ENV_OGRE_SOURCE})
112set(OGRE_PREFIX_BUILD ${OGRE_BUILD} ${ENV_OGRE_BUILD})
113set(OGRE_PREFIX_DEPENDENCIES_DIR ${OGRE_DEPENDENCIES_DIR} ${ENV_OGRE_DEPENDENCIES_DIR})
114if (OGRE_PREFIX_SOURCE AND OGRE_PREFIX_BUILD)
115  foreach(dir ${OGRE_PREFIX_SOURCE})
116    set(OGRE_INC_SEARCH_PATH ${dir}/OgreMain/include ${dir}/Dependencies/include ${dir}/iOSDependencies/include ${dir}/AndroidDependencies/include ${OGRE_INC_SEARCH_PATH})
117    set(OGRE_LIB_SEARCH_PATH ${dir}/lib ${dir}/Dependencies/lib ${dir}/iOSDependencies/lib ${dir}/AndroidDependencies/lib/${ANDROID_ABI} ${OGRE_LIB_SEARCH_PATH})
118    set(OGRE_BIN_SEARCH_PATH ${dir}/Samples/Common/bin ${OGRE_BIN_SEARCH_PATH})
119  endforeach(dir)
120  foreach(dir ${OGRE_PREFIX_BUILD})
121    set(OGRE_INC_SEARCH_PATH ${dir}/include ${OGRE_INC_SEARCH_PATH})
122    set(OGRE_LIB_SEARCH_PATH ${dir}/lib ${OGRE_LIB_SEARCH_PATH})
123
124    if (OGRE_BUILD_PLATFORM_APPLE_IOS)
125        set(OGRE_LIB_SEARCH_PATH ${dir}/lib/iphoneos ${dir}/lib/iphonesimulator ${OGRE_LIB_SEARCH_PATH})
126    endif()
127
128    set(OGRE_BIN_SEARCH_PATH ${dir}/bin ${OGRE_BIN_SEARCH_PATH})
129    set(OGRE_BIN_SEARCH_PATH ${dir}/Samples/Common/bin ${OGRE_BIN_SEARCH_PATH})
130  endforeach(dir)
131
132  if (OGRE_PREFIX_DEPENDENCIES_DIR)
133    set(OGRE_INC_SEARCH_PATH ${OGRE_PREFIX_DEPENDENCIES_DIR}/include ${OGRE_INC_SEARCH_PATH})
134    set(OGRE_LIB_SEARCH_PATH ${OGRE_PREFIX_DEPENDENCIES_DIR}/lib ${OGRE_LIB_SEARCH_PATH})
135    set(OGRE_BIN_SEARCH_PATH ${OGRE_PREFIX_DEPENDENCIES_DIR}/bin ${OGRE_BIN_SEARCH_PATH})
136  endif()
137else()
138  set(OGRE_PREFIX_SOURCE "NOTFOUND")
139  set(OGRE_PREFIX_BUILD "NOTFOUND")
140endif ()
141
142# redo search if any of the environmental hints changed
143set(OGRE_COMPONENTS Paging Terrain Volume Overlay
144  Plugin_BSPSceneManager Plugin_CgProgramManager Plugin_OctreeSceneManager
145  Plugin_OctreeZone Plugin_PCZSceneManager Plugin_ParticleFX
146  RenderSystem_Direct3D11 RenderSystem_Direct3D9 RenderSystem_GL RenderSystem_GL3Plus RenderSystem_GLES RenderSystem_GLES2)
147set(OGRE_RESET_VARS
148  OGRE_CONFIG_INCLUDE_DIR OGRE_INCLUDE_DIR
149  OGRE_LIBRARY_FWK OGRE_LIBRARY_REL OGRE_LIBRARY_DBG
150  OGRE_PLUGIN_DIR_DBG OGRE_PLUGIN_DIR_REL OGRE_MEDIA_DIR)
151foreach (comp ${OGRE_COMPONENTS})
152  set(OGRE_RESET_VARS ${OGRE_RESET_VARS}
153    OGRE_${comp}_INCLUDE_DIR OGRE_${comp}_LIBRARY_FWK
154    OGRE_${comp}_LIBRARY_DBG OGRE_${comp}_LIBRARY_REL
155  )
156endforeach (comp)
157set(OGRE_PREFIX_WATCH ${OGRE_PREFIX_PATH} ${OGRE_PREFIX_SOURCE} ${OGRE_PREFIX_BUILD})
158clear_if_changed(OGRE_PREFIX_WATCH ${OGRE_RESET_VARS})
159
160if(NOT OGRE_STATIC)
161	# try to locate Ogre via pkg-config
162	use_pkgconfig(OGRE_PKGC "OGRE${OGRE_LIB_SUFFIX}")
163
164	# try to find framework on OSX
165	findpkg_framework(OGRE)
166else()
167	set(OGRE_LIBRARY_FWK "")
168endif()
169
170# locate Ogre include files
171find_path(OGRE_CONFIG_INCLUDE_DIR NAMES OgreBuildSettings.h HINTS ${OGRE_INC_SEARCH_PATH} ${OGRE_FRAMEWORK_INCLUDES} ${OGRE_PKGC_INCLUDE_DIRS} PATH_SUFFIXES "OGRE")
172find_path(OGRE_INCLUDE_DIR NAMES OgreRoot.h HINTS ${OGRE_CONFIG_INCLUDE_DIR} ${OGRE_INC_SEARCH_PATH} ${OGRE_FRAMEWORK_INCLUDES} ${OGRE_PKGC_INCLUDE_DIRS} PATH_SUFFIXES "OGRE")
173set(OGRE_INCOMPATIBLE FALSE)
174
175if (OGRE_INCLUDE_DIR)
176  if (NOT OGRE_CONFIG_INCLUDE_DIR)
177    set(OGRE_CONFIG_INCLUDE_DIR ${OGRE_INCLUDE_DIR})
178  endif ()
179  # determine Ogre version
180  file(READ ${OGRE_INCLUDE_DIR}/OgrePrerequisites.h OGRE_TEMP_VERSION_CONTENT)
181  get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_MAJOR OGRE_VERSION_MAJOR)
182  get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_MINOR OGRE_VERSION_MINOR)
183  get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_PATCH OGRE_VERSION_PATCH)
184  get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_NAME OGRE_VERSION_NAME)
185  set(OGRE_VERSION "${OGRE_VERSION_MAJOR}.${OGRE_VERSION_MINOR}.${OGRE_VERSION_PATCH}")
186  pkg_message(OGRE "Found Ogre ${OGRE_VERSION_NAME} (${OGRE_VERSION})")
187
188  # determine configuration settings
189  set(OGRE_CONFIG_HEADERS
190    ${OGRE_CONFIG_INCLUDE_DIR}/OgreBuildSettings.h
191    ${OGRE_CONFIG_INCLUDE_DIR}/OgreConfig.h
192  )
193  foreach(CFG_FILE ${OGRE_CONFIG_HEADERS})
194    if (EXISTS ${CFG_FILE})
195      set(OGRE_CONFIG_HEADER ${CFG_FILE})
196      break()
197    endif()
198  endforeach()
199  if (OGRE_CONFIG_HEADER)
200    file(READ ${OGRE_CONFIG_HEADER} OGRE_TEMP_CONFIG_CONTENT)
201    has_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_STATIC_LIB OGRE_CONFIG_STATIC)
202    get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_THREAD_SUPPORT OGRE_CONFIG_THREADS)
203    get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_THREAD_PROVIDER OGRE_CONFIG_THREAD_PROVIDER)
204    get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_NO_FREEIMAGE OGRE_CONFIG_FREEIMAGE)
205    if (OGRE_CONFIG_STATIC AND OGRE_STATIC)
206    elseif (OGRE_CONFIG_STATIC OR OGRE_STATIC)
207      pkg_message(OGRE "Build type (static, dynamic) does not match the requested one.")
208      set(OGRE_INCOMPATIBLE TRUE)
209    endif ()
210  else ()
211    pkg_message(OGRE "Could not determine Ogre build configuration.")
212    set(OGRE_INCOMPATIBLE TRUE)
213  endif ()
214else ()
215  set(OGRE_INCOMPATIBLE FALSE)
216endif ()
217
218find_library(OGRE_LIBRARY_REL NAMES ${OGRE_LIBRARY_NAMES} HINTS ${OGRE_LIB_SEARCH_PATH} ${OGRE_PKGC_LIBRARY_DIRS} ${OGRE_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel")
219find_library(OGRE_LIBRARY_DBG NAMES ${OGRE_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIB_SEARCH_PATH} ${OGRE_PKGC_LIBRARY_DIRS} ${OGRE_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "Debug")
220make_library_set(OGRE_LIBRARY)
221
222if(APPLE)
223  set(OGRE_LIBRARY_DBG ${OGRE_LIB_SEARCH_PATH})
224endif()
225if (OGRE_INCOMPATIBLE)
226  set(OGRE_LIBRARY "NOTFOUND")
227endif ()
228
229set(OGRE_INCLUDE_DIR ${OGRE_CONFIG_INCLUDE_DIR} ${OGRE_INCLUDE_DIR})
230list(REMOVE_DUPLICATES OGRE_INCLUDE_DIR)
231findpkg_finish(OGRE)
232add_parent_dir(OGRE_INCLUDE_DIRS OGRE_INCLUDE_DIR)
233if (OGRE_SOURCE)
234	# If working from source rather than SDK, add samples include
235	set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} "${OGRE_SOURCE}/Samples/Common/include")
236endif()
237
238mark_as_advanced(OGRE_CONFIG_INCLUDE_DIR OGRE_MEDIA_DIR OGRE_PLUGIN_DIR_REL OGRE_PLUGIN_DIR_DBG)
239
240if (NOT OGRE_FOUND)
241  return()
242endif ()
243
244
245# look for required Ogre dependencies in case of static build and/or threading
246if (OGRE_STATIC)
247  set(OGRE_DEPS_FOUND TRUE)
248  find_package(Cg QUIET)
249  find_package(DirectX QUIET)
250  find_package(FreeImage QUIET)
251  find_package(Freetype QUIET)
252  find_package(OpenGL QUIET)
253  find_package(OpenGLES QUIET)
254  find_package(OpenGLES2 QUIET)
255  find_package(ZLIB QUIET)
256  find_package(ZZip QUIET)
257  if (UNIX AND NOT APPLE AND NOT ANDROID)
258    find_package(X11 QUIET)
259    find_library(XAW_LIBRARY NAMES Xaw Xaw7 PATHS ${DEP_LIB_SEARCH_DIR} ${X11_LIB_SEARCH_PATH})
260    if (NOT XAW_LIBRARY OR NOT X11_Xt_FOUND)
261      set(X11_FOUND FALSE)
262    endif ()
263  endif ()
264  if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS)
265    find_package(Cocoa QUIET)
266    find_package(Carbon QUIET)
267    find_package(CoreVideo QUIET)
268    if (NOT Cocoa_FOUND OR NOT Carbon_FOUND OR NOT CoreVideo_FOUND)
269      set(OGRE_DEPS_FOUND FALSE)
270    endif ()
271  endif ()
272
273  set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${ZZip_LIBRARIES} ${ZLIB_LIBRARIES} ${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES} )
274
275  if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS AND NOT ANDROID)
276    set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY} ${X11_Xrandr_LIB} ${Carbon_LIBRARIES} ${Cocoa_LIBRARIES})
277  endif()
278
279  if (NOT ZLIB_FOUND OR NOT ZZip_FOUND)
280    set(OGRE_DEPS_FOUND FALSE)
281  endif ()
282  if (NOT FreeImage_FOUND AND NOT OGRE_CONFIG_FREEIMAGE)
283    set(OGRE_DEPS_FOUND FALSE)
284  endif ()
285  if (NOT FREETYPE_FOUND)
286    set(OGRE_DEPS_FOUND FALSE)
287  endif ()
288  if (UNIX AND NOT APPLE AND NOT ANDROID)
289	if (NOT X11_FOUND)
290      set(OGRE_DEPS_FOUND FALSE)
291	endif ()
292  endif ()
293endif()
294  if (OGRE_CONFIG_THREADS)
295    if (OGRE_CONFIG_THREAD_PROVIDER EQUAL 1)
296      if (OGRE_STATIC)
297    	set(Boost_USE_STATIC_LIBS TRUE)
298    	if(OGRE_BUILD_PLATFORM_APPLE_IOS)
299          set(Boost_USE_MULTITHREADED OFF)
300        endif()
301      endif()
302
303      set(OGRE_BOOST_COMPONENTS thread date_time)
304      find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
305      if(Boost_FOUND AND Boost_VERSION GREATER 104900)
306        if(Boost_VERSION GREATER 105300)
307            set(OGRE_BOOST_COMPONENTS thread date_time system atomic chrono)
308        else()
309            set(OGRE_BOOST_COMPONENTS thread date_time system chrono)
310        endif()
311      endif()
312
313      find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
314      if (NOT Boost_THREAD_FOUND)
315        set(OGRE_DEPS_FOUND FALSE)
316      else ()
317        set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
318        set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
319      endif ()
320    elseif (OGRE_CONFIG_THREAD_PROVIDER EQUAL 2)
321      find_package(POCO QUIET)
322      if (NOT POCO_FOUND)
323        set(OGRE_DEPS_FOUND FALSE)
324      else ()
325        set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${POCO_LIBRARIES})
326        set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} ${POCO_INCLUDE_DIRS})
327      endif ()
328    elseif (OGRE_CONFIG_THREAD_PROVIDER EQUAL 3)
329      find_package(TBB QUIET)
330      if (NOT TBB_FOUND)
331        set(OGRE_DEPS_FOUND FALSE)
332      else ()
333        set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${TBB_LIBRARIES})
334        set(OGRE_INCLUDE_DIRS ${OGRE_INCLUDE_DIRS} ${TBB_INCLUDE_DIRS})
335      endif ()
336    endif ()
337  endif ()
338if (OGRE_STATIC)
339  if (NOT OGRE_DEPS_FOUND)
340    pkg_message(OGRE "Could not find all required dependencies for the Ogre package.")
341    set(OGRE_FOUND FALSE)
342  endif ()
343endif ()
344
345if (NOT OGRE_FOUND)
346  return()
347endif ()
348
349
350get_filename_component(OGRE_LIBRARY_DIR_REL "${OGRE_LIBRARY_REL}" PATH)
351get_filename_component(OGRE_LIBRARY_DIR_DBG "${OGRE_LIBRARY_DBG}" PATH)
352set(OGRE_LIBRARY_DIRS ${OGRE_LIBRARY_DIR_REL} ${OGRE_LIBRARY_DIR_DBG})
353
354# find binaries
355if (NOT OGRE_STATIC)
356	if (WIN32)
357		find_file(OGRE_BINARY_REL NAMES "OgreMain.dll" HINTS ${OGRE_BIN_SEARCH_PATH}
358          PATH_SUFFIXES "" Release RelWithDebInfo MinSizeRel)
359		find_file(OGRE_BINARY_DBG NAMES "OgreMain_d.dll" HINTS ${OGRE_BIN_SEARCH_PATH}
360          PATH_SUFFIXES "" Debug )
361	endif()
362	mark_as_advanced(OGRE_BINARY_REL OGRE_BINARY_DBG)
363endif()
364
365
366#########################################################
367# Find Ogre components
368#########################################################
369
370set(OGRE_COMPONENT_SEARCH_PATH_REL
371  ${OGRE_LIBRARY_DIR_REL}/..
372  ${OGRE_LIBRARY_DIR_REL}/../..
373  ${OGRE_BIN_SEARCH_PATH}
374)
375set(OGRE_COMPONENT_SEARCH_PATH_DBG
376  ${OGRE_LIBRARY_DIR_DBG}/..
377  ${OGRE_LIBRARY_DIR_DBG}/../..
378  ${OGRE_BIN_SEARCH_PATH}
379)
380
381macro(ogre_find_component COMPONENT HEADER)
382  findpkg_begin(OGRE_${COMPONENT})
383  find_path(OGRE_${COMPONENT}_INCLUDE_DIR NAMES ${HEADER} HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE} PATH_SUFFIXES ${COMPONENT} OGRE/${COMPONENT} Components/${COMPONENT}/include)
384  set(OGRE_${COMPONENT}_LIBRARY_NAMES "Ogre${COMPONENT}${OGRE_LIB_SUFFIX}")
385  get_debug_names(OGRE_${COMPONENT}_LIBRARY_NAMES)
386  find_library(OGRE_${COMPONENT}_LIBRARY_REL NAMES ${OGRE_${COMPONENT}_LIBRARY_NAMES} HINTS ${OGRE_LIBRARY_DIR_REL} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel")
387  find_library(OGRE_${COMPONENT}_LIBRARY_DBG NAMES ${OGRE_${COMPONENT}_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIBRARY_DIR_DBG} PATH_SUFFIXES "" "Debug")
388  make_library_set(OGRE_${COMPONENT}_LIBRARY)
389  findpkg_finish(OGRE_${COMPONENT})
390  if (OGRE_${COMPONENT}_FOUND)
391    # find binaries
392    if (NOT OGRE_STATIC)
393	  if (WIN32)
394	    find_file(OGRE_${COMPONENT}_BINARY_REL NAMES "Ogre${COMPONENT}.dll" HINTS ${OGRE_COMPONENT_SEARCH_PATH_REL} PATH_SUFFIXES "" bin bin/Release bin/RelWithDebInfo bin/MinSizeRel Release)
395	    find_file(OGRE_${COMPONENT}_BINARY_DBG NAMES "Ogre${COMPONENT}_d.dll" HINTS ${OGRE_COMPONENT_SEARCH_PATH_DBG} PATH_SUFFIXES "" bin bin/Debug Debug)
396	  endif()
397	  mark_as_advanced(OGRE_${COMPONENT}_BINARY_REL OGRE_${COMPONENT}_BINARY_DBG)
398    endif()
399  endif()
400endmacro()
401
402# look for Paging component
403ogre_find_component(Paging OgrePaging.h)
404# look for Terrain component
405ogre_find_component(Terrain OgreTerrain.h)
406# look for Property component
407ogre_find_component(Property OgreProperty.h)
408# look for RTShaderSystem component
409ogre_find_component(RTShaderSystem OgreRTShaderSystem.h)
410# look for Volume component
411ogre_find_component(Volume OgreVolumePrerequisites.h)
412# look for Overlay component
413ogre_find_component(Overlay OgreOverlaySystem.h)
414
415#########################################################
416# Find Ogre plugins
417#########################################################
418macro(ogre_find_plugin PLUGIN HEADER)
419  # On Unix, the plugins might have no prefix
420  if (CMAKE_FIND_LIBRARY_PREFIXES)
421    set(TMP_CMAKE_LIB_PREFIX ${CMAKE_FIND_LIBRARY_PREFIXES})
422    set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "")
423  endif()
424
425  # strip RenderSystem_ or Plugin_ prefix from plugin name
426  string(REPLACE "RenderSystem_" "" PLUGIN_TEMP ${PLUGIN})
427  string(REPLACE "Plugin_" "" PLUGIN_NAME ${PLUGIN_TEMP})
428
429  # header files for plugins are not usually needed, but find them anyway if they are present
430  set(OGRE_PLUGIN_PATH_SUFFIXES
431    PlugIns PlugIns/${PLUGIN_NAME} Plugins Plugins/${PLUGIN_NAME} ${PLUGIN}
432    RenderSystems RenderSystems/${PLUGIN_NAME} ${ARGN})
433  find_path(OGRE_${PLUGIN}_INCLUDE_DIR NAMES ${HEADER}
434    HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE}
435    PATH_SUFFIXES ${OGRE_PLUGIN_PATH_SUFFIXES})
436  # find link libraries for plugins
437  set(OGRE_${PLUGIN}_LIBRARY_NAMES "${PLUGIN}${OGRE_LIB_SUFFIX}")
438  get_debug_names(OGRE_${PLUGIN}_LIBRARY_NAMES)
439  set(OGRE_${PLUGIN}_LIBRARY_FWK ${OGRE_LIBRARY_FWK})
440
441  find_library(OGRE_${PLUGIN}_LIBRARY_REL NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES}
442    HINTS "${OGRE_BUILD}/lib" ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE OGRE-${OGRE_VERSION} opt Release Release/opt RelWithDebInfo RelWithDebInfo/opt MinSizeRel MinSizeRel/opt)
443  find_library(OGRE_${PLUGIN}_LIBRARY_DBG NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES_DBG}
444    HINTS "${OGRE_BUILD}/lib" ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE OGRE-${OGRE_VERSION} opt Debug Debug/opt)
445  make_library_set(OGRE_${PLUGIN}_LIBRARY)
446
447  if (OGRE_${PLUGIN}_LIBRARY OR OGRE_${PLUGIN}_INCLUDE_DIR)
448    set(OGRE_${PLUGIN}_FOUND TRUE)
449    if (OGRE_${PLUGIN}_INCLUDE_DIR)
450      set(OGRE_${PLUGIN}_INCLUDE_DIRS ${OGRE_${PLUGIN}_INCLUDE_DIR})
451    endif()
452    set(OGRE_${PLUGIN}_LIBRARIES ${OGRE_${PLUGIN}_LIBRARY})
453  endif ()
454
455  mark_as_advanced(OGRE_${PLUGIN}_INCLUDE_DIR OGRE_${PLUGIN}_LIBRARY_REL OGRE_${PLUGIN}_LIBRARY_DBG OGRE_${PLUGIN}_LIBRARY_FWK)
456
457  # look for plugin dirs
458  if (OGRE_${PLUGIN}_FOUND)
459    if (NOT OGRE_PLUGIN_DIR_REL OR NOT OGRE_PLUGIN_DIR_DBG)
460      if (WIN32)
461        set(OGRE_PLUGIN_SEARCH_PATH_REL
462          ${OGRE_LIBRARY_DIR_REL}/..
463          ${OGRE_LIBRARY_DIR_REL}/../..
464		  ${OGRE_BIN_SEARCH_PATH}
465        )
466        set(OGRE_PLUGIN_SEARCH_PATH_DBG
467          ${OGRE_LIBRARY_DIR_DBG}/..
468          ${OGRE_LIBRARY_DIR_DBG}/../..
469		  ${OGRE_BIN_SEARCH_PATH}
470        )
471        find_path(OGRE_PLUGIN_DIR_REL NAMES "${PLUGIN}.dll" HINTS ${OGRE_PLUGIN_SEARCH_PATH_REL}
472          PATH_SUFFIXES "" bin bin/Release bin/RelWithDebInfo bin/MinSizeRel Release)
473        find_path(OGRE_PLUGIN_DIR_DBG NAMES "${PLUGIN}_d.dll" HINTS ${OGRE_PLUGIN_SEARCH_PATH_DBG}
474          PATH_SUFFIXES "" bin bin/Debug Debug)
475      elseif (UNIX)
476        get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_REL} PATH)
477        set(OGRE_PLUGIN_DIR_REL ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (release)" FORCE)
478	    get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_DBG} PATH)
479        set(OGRE_PLUGIN_DIR_DBG ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (debug)" FORCE)
480      endif ()
481    endif ()
482
483	# find binaries
484	if (NOT OGRE_STATIC)
485		if (WIN32)
486			find_file(OGRE_${PLUGIN}_REL NAMES "${PLUGIN}.dll" HINTS ${OGRE_PLUGIN_DIR_REL})
487			find_file(OGRE_${PLUGIN}_DBG NAMES "${PLUGIN}_d.dll" HINTS ${OGRE_PLUGIN_DIR_DBG})
488		endif()
489		mark_as_advanced(OGRE_${PLUGIN}_REL OGRE_${PLUGIN}_DBG)
490	endif()
491
492  endif ()
493
494  if (TMP_CMAKE_LIB_PREFIX)
495    set(CMAKE_FIND_LIBRARY_PREFIXES ${TMP_CMAKE_LIB_PREFIX})
496  endif ()
497endmacro(ogre_find_plugin)
498
499ogre_find_plugin(Plugin_PCZSceneManager OgrePCZSceneManager.h PCZ PlugIns/PCZSceneManager/include)
500ogre_find_plugin(Plugin_OctreeZone OgreOctreeZone.h PCZ PlugIns/OctreeZone/include)
501ogre_find_plugin(Plugin_BSPSceneManager OgreBspSceneManager.h PlugIns/BSPSceneManager/include)
502ogre_find_plugin(Plugin_CgProgramManager OgreCgProgram.h PlugIns/CgProgramManager/include)
503ogre_find_plugin(Plugin_OctreeSceneManager OgreOctreeSceneManager.h PlugIns/OctreeSceneManager/include)
504ogre_find_plugin(Plugin_ParticleFX OgreParticleFXPrerequisites.h PlugIns/ParticleFX/include)
505ogre_find_plugin(RenderSystem_GL OgreGLRenderSystem.h RenderSystems/GL/include)
506ogre_find_plugin(RenderSystem_GL3Plus OgreGL3PlusRenderSystem.h RenderSystems/GL3Plus/include)
507ogre_find_plugin(RenderSystem_GLES OgreGLESRenderSystem.h RenderSystems/GLES/include)
508ogre_find_plugin(RenderSystem_GLES2 OgreGLES2RenderSystem.h RenderSystems/GLES2/include)
509ogre_find_plugin(RenderSystem_Direct3D9 OgreD3D9RenderSystem.h RenderSystems/Direct3D9/include)
510ogre_find_plugin(RenderSystem_Direct3D11 OgreD3D11RenderSystem.h RenderSystems/Direct3D11/include)
511
512if (OGRE_STATIC)
513  # check if dependencies for plugins are met
514  if (NOT DirectX_FOUND)
515    set(OGRE_RenderSystem_Direct3D9_FOUND FALSE)
516  endif ()
517  if (NOT DirectX_D3D11_FOUND)
518    set(OGRE_RenderSystem_Direct3D11_FOUND FALSE)
519  endif ()
520  if (NOT OPENGL_FOUND)
521    set(OGRE_RenderSystem_GL_FOUND FALSE)
522  endif ()
523  if (NOT OPENGL_FOUND)
524    set(OGRE_RenderSystem_GL3Plus_FOUND FALSE)
525  endif ()
526  if (NOT OPENGLES_FOUND)
527    set(OGRE_RenderSystem_GLES_FOUND FALSE)
528  endif ()
529  if (NOT OPENGLES2_FOUND)
530    set(OGRE_RenderSystem_GLES2_FOUND FALSE)
531  endif ()
532  if (NOT Cg_FOUND)
533    set(OGRE_Plugin_CgProgramManager_FOUND FALSE)
534  endif ()
535
536  set(OGRE_RenderSystem_Direct3D9_LIBRARIES ${OGRE_RenderSystem_Direct3D9_LIBRARIES}
537    ${DirectX_LIBRARIES}
538  )
539
540  set(OGRE_RenderSystem_Direct3D11_LIBRARIES ${OGRE_RenderSystem_Direct3D11_LIBRARIES}
541    ${DirectX_D3D11_LIBRARIES}
542  )
543  set(OGRE_RenderSystem_GL_LIBRARIES ${OGRE_RenderSystem_GL_LIBRARIES}
544    ${OPENGL_LIBRARIES}
545  )
546  set(OGRE_RenderSystem_GL3Plus_LIBRARIES ${OGRE_RenderSystem_GL3Plus_LIBRARIES}
547    ${OPENGL_LIBRARIES}
548  )
549  set(OGRE_RenderSystem_GLES_LIBRARIES ${OGRE_RenderSystem_GLES_LIBRARIES}
550    ${OPENGLES_LIBRARIES}
551  )
552  set(OGRE_RenderSystem_GLES2_LIBRARIES ${OGRE_RenderSystem_GLES2_LIBRARIES}
553    ${OPENGLES2_LIBRARIES}
554  )
555  set(OGRE_Plugin_CgProgramManager_LIBRARIES ${OGRE_Plugin_CgProgramManager_LIBRARIES}
556    ${Cg_LIBRARIES}
557  )
558endif ()
559
560# look for the media directory
561set(OGRE_MEDIA_SEARCH_PATH
562  ${OGRE_SOURCE}
563  ${OGRE_LIBRARY_DIR_REL}/..
564  ${OGRE_LIBRARY_DIR_DBG}/..
565  ${OGRE_LIBRARY_DIR_REL}/../..
566  ${OGRE_LIBRARY_DIR_DBG}/../..
567  ${OGRE_PREFIX_SOURCE}
568)
569set(OGRE_MEDIA_SEARCH_SUFFIX
570  Samples/Media
571  Media
572  media
573  share/OGRE/media
574  share/OGRE/Media
575)
576
577clear_if_changed(OGRE_PREFIX_WATCH OGRE_MEDIA_DIR)
578find_path(OGRE_MEDIA_DIR NAMES packs/cubemapsJS.zip HINTS ${OGRE_MEDIA_SEARCH_PATH}
579  PATHS ${OGRE_PREFIX_PATH} PATH_SUFFIXES ${OGRE_MEDIA_SEARCH_SUFFIX})
580
581