FindOGRE.cmake 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. #This has been modified fron the original
  2. include(${RakNet_SOURCE_DIR}/CmakeIncludes/Ogre3D/PreprocessorUtils.cmake)
  3. include(${RakNet_SOURCE_DIR}/CmakeIncludes/Ogre3D/FindPkgMacros.cmake)
  4. #-------------------------------------------------------------------
  5. # This file is part of the CMake build system for OGRE
  6. # (Object-oriented Graphics Rendering Engine)
  7. # For the latest info, see http://www.ogre3d.org/
  8. #
  9. # The contents of this file are placed in the public domain. Feel
  10. # free to make use of it in any way you like.
  11. #-------------------------------------------------------------------
  12. # - Try to find OGRE
  13. # If you have multiple versions of Ogre installed, use the CMake or
  14. # the environment variable OGRE_HOME to point to the path where the
  15. # desired Ogre version can be found.
  16. # By default this script will look for a dynamic Ogre build. If you
  17. # need to link against static Ogre libraries, set the CMake variable
  18. # OGRE_STATIC to TRUE.
  19. #
  20. # Once done, this will define
  21. #
  22. # OGRE_FOUND - system has OGRE
  23. # OGRE_INCLUDE_DIRS - the OGRE include directories
  24. # OGRE_LIBRARIES - link these to use the OGRE core
  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_Direct3D9, RenderSystem_Direct3D10,
  32. # Paging, Terrain
  33. #
  34. # For each of these components, the following variables are defined:
  35. #
  36. # OGRE_${COMPONENT}_FOUND - ${COMPONENT} is available
  37. # OGRE_${COMPONENT}_INCLUDE_DIRS - additional include directories for ${COMPONENT}
  38. # OGRE_${COMPONENT}_LIBRARIES - link these to use ${COMPONENT}
  39. #
  40. # Finally, the following variables are defined:
  41. #
  42. # OGRE_PLUGIN_DIR_REL - The directory where the release versions of
  43. # the OGRE plugins are located
  44. # OGRE_PLUGIN_DIR_DBG - The directory where the debug versions of
  45. # the OGRE plugins are located
  46. # OGRE_MEDIA_DIR - The directory where the OGRE sample media is
  47. # located, if available
  48. #include(FindPkgMacros)
  49. #include(PreprocessorUtils)
  50. IF (UNIX)
  51. FIND_PACKAGE(PkgConfig)
  52. PKG_SEARCH_MODULE(OGRE OGRE)
  53. SET(OGRE_LIB_DIR ${OGRE_LIBDIR})
  54. ENDIF (UNIX)
  55. findpkg_begin(OGRE)
  56. # Get path, convert backslashes as ${ENV_${var}}
  57. getenv_path(OGRE_HOME)
  58. getenv_path(OGRE_SDK)
  59. getenv_path(OGRE_SOURCE)
  60. getenv_path(OGRE_BUILD)
  61. getenv_path(PROGRAMFILES)
  62. # Determine whether to search for a dynamic or static build
  63. if (OGRE_STATIC)
  64. set(OGRE_LIB_SUFFIX "Static")
  65. else ()
  66. set(OGRE_LIB_SUFFIX "")
  67. endif ()
  68. set(OGRE_LIBRARY_NAMES "OgreMain${OGRE_LIB_SUFFIX}")
  69. get_debug_names(OGRE_LIBRARY_NAMES)
  70. # construct search paths from environmental hints and
  71. # OS specific guesses
  72. if (WIN32)
  73. set(OGRE_PREFIX_GUESSES
  74. ${ENV_PROGRAMFILES}/OGRE
  75. C:/OgreSDK
  76. )
  77. elseif (UNIX)
  78. set(OGRE_PREFIX_GUESSES
  79. /opt/ogre
  80. /opt/OGRE
  81. /usr/lib/
  82. /usr/lib/ogre
  83. /usr/lib/OGRE
  84. /usr/local/lib/ogre
  85. /usr/local/lib/OGRE
  86. $ENV{HOME}/ogre
  87. $ENV{HOME}/OGRE
  88. )
  89. endif ()
  90. set(OGRE_PREFIX_PATH
  91. ${OGRE_HOME} ${ENV_OGRE_HOME} ${ENV_OGRE_SDK}
  92. ${OGRE_PREFIX_GUESSES}
  93. )
  94. create_search_paths(OGRE)
  95. # If both OGRE_BUILD and OGRE_SOURCE are set, prepare to find Ogre in a build dir
  96. set(OGRE_PREFIX_SOURCE ${OGRE_SOURCE} ${ENV_OGRE_SOURCE})
  97. set(OGRE_PREFIX_BUILD ${OGRE_BUILD} ${ENV_OGRE_BUILD})
  98. if (OGRE_PREFIX_SOURCE AND OGRE_PREFIX_BUILD)
  99. foreach(dir ${OGRE_PREFIX_SOURCE})
  100. set(OGRE_INC_SEARCH_PATH ${dir}/OgreMain/include ${dir}/Dependencies/include ${dir}/iPhoneDependencies/include ${OGRE_INC_SEARCH_PATH})
  101. set(OGRE_LIB_SEARCH_PATH ${dir}/lib ${dir}/Dependencies/lib ${dir}/iPhoneDependencies/lib ${OGRE_LIB_SEARCH_PATH})
  102. endforeach(dir)
  103. foreach(dir ${OGRE_PREFIX_BUILD})
  104. set(OGRE_INC_SEARCH_PATH ${dir}/include ${OGRE_INC_SEARCH_PATH})
  105. set(OGRE_LIB_SEARCH_PATH ${dir}/lib ${OGRE_LIB_SEARCH_PATH})
  106. endforeach(dir)
  107. else()
  108. set(OGRE_PREFIX_SOURCE "NOTFOUND")
  109. set(OGRE_PREFIX_BUILD "NOTFOUND")
  110. endif ()
  111. # redo search if any of the environmental hints changed
  112. set(OGRE_COMPONENTS Paging Terrain
  113. Plugin_BSPSceneManager Plugin_CgProgramManager Plugin_OctreeSceneManager
  114. Plugin_OctreeZone Plugin_PCZSceneManager Plugin_ParticleFX
  115. RenderSystem_Direct3D10 RenderSystem_Direct3D9 RenderSystem_GL RenderSystem_GLES)
  116. set(OGRE_RESET_VARS
  117. OGRE_CONFIG_INCLUDE_DIR OGRE_INCLUDE_DIR
  118. OGRE_LIBRARY_FWK OGRE_LIBRARY_REL OGRE_LIBRARY_DBG
  119. OGRE_PLUGIN_DIR_DBG OGRE_PLUGIN_DIR_REL OGRE_MEDIA_DIR)
  120. foreach (comp ${OGRE_COMPONENTS})
  121. set(OGRE_RESET_VARS ${OGRE_RESET_VARS}
  122. OGRE_${comp}_INCLUDE_DIR OGRE_${comp}_LIBRARY_FWK
  123. OGRE_${comp}_LIBRARY_DBG OGRE_${comp}_LIBRARY_REL
  124. )
  125. endforeach (comp)
  126. set(OGRE_PREFIX_WATCH ${OGRE_PREFIX_PATH} ${OGRE_PREFIX_SOURCE} ${OGRE_PREFIX_BUILD})
  127. clear_if_changed(OGRE_PREFIX_WATCH ${OGRE_RESET_VARS})
  128. # try to locate Ogre via pkg-config
  129. use_pkgconfig(OGRE_PKGC "OGRE${OGRE_LIB_SUFFIX}")
  130. # try to find framework on OSX
  131. findpkg_framework(OGRE)
  132. # locate Ogre include files
  133. find_path(OGRE_CONFIG_INCLUDE_DIR NAMES OgreConfig.h HINTS ${OGRE_INC_SEARCH_PATH} ${OGRE_FRAMEWORK_INCLUDES} ${OGRE_PKGC_INCLUDE_DIRS} PATH_SUFFIXES "OGRE")
  134. find_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")
  135. set(OGRE_INCOMPATIBLE FALSE)
  136. if (OGRE_INCLUDE_DIR AND OGRE_CONFIG_INCLUDE_DIR)
  137. # determine Ogre version
  138. file(READ ${OGRE_INCLUDE_DIR}/OgrePrerequisites.h OGRE_TEMP_VERSION_CONTENT)
  139. get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_MAJOR OGRE_VERSION_MAJOR)
  140. get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_MINOR OGRE_VERSION_MINOR)
  141. get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_PATCH OGRE_VERSION_PATCH)
  142. get_preprocessor_entry(OGRE_TEMP_VERSION_CONTENT OGRE_VERSION_NAME OGRE_VERSION_NAME)
  143. set(OGRE_VERSION "${OGRE_VERSION_MAJOR}.${OGRE_VERSION_MINOR}.${OGRE_VERSION_PATCH}")
  144. pkg_message(OGRE "Found Ogre ${OGRE_VERSION_NAME} (${OGRE_VERSION})")
  145. # determine configuration settings
  146. set(OGRE_CONFIG_HEADERS
  147. ${OGRE_CONFIG_INCLUDE_DIR}/OgreBuildSettings.h
  148. ${OGRE_CONFIG_INCLUDE_DIR}/config.h
  149. ${OGRE_CONFIG_INCLUDE_DIR}/OgreConfig.h
  150. )
  151. foreach(CFG_FILE ${OGRE_CONFIG_HEADERS})
  152. if (EXISTS ${CFG_FILE})
  153. set(OGRE_CONFIG_HEADER ${CFG_FILE})
  154. break()
  155. endif()
  156. endforeach()
  157. if (OGRE_CONFIG_HEADER)
  158. file(READ ${OGRE_CONFIG_HEADER} OGRE_TEMP_CONFIG_CONTENT)
  159. has_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_STATIC_LIB OGRE_CONFIG_STATIC)
  160. get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_THREAD_SUPPORT OGRE_CONFIG_THREADS)
  161. get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_THREAD_PROVIDER OGRE_CONFIG_THREAD_PROVIDER)
  162. get_preprocessor_entry(OGRE_TEMP_CONFIG_CONTENT OGRE_NO_FREEIMAGE OGRE_CONFIG_FREEIMAGE)
  163. if (OGRE_CONFIG_STATIC AND OGRE_STATIC)
  164. elseif (OGRE_CONFIG_STATIC OR OGRE_STATIC)
  165. pkg_message(OGRE "Build type (static, dynamic) does not match the requested one.")
  166. set(OGRE_INCOMPATIBLE TRUE)
  167. endif ()
  168. else ()
  169. pkg_message(OGRE "Could not determine Ogre build configuration.")
  170. set(OGRE_INCOMPATIBLE TRUE)
  171. endif ()
  172. else ()
  173. set(OGRE_INCOMPATIBLE FALSE)
  174. endif ()
  175. find_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")
  176. #find_file(OGRE_LIB_DIR RenderSystem_GL.so HINTS ${OGRE_LIB_SEARCH_PATH} ${OGRE_PKGC_LIBRARY_DIRS} ${OGRE_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "release" "relwithdebinfo" #"minsizerel")
  177. find_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")
  178. #find_file(OGRE_LIBD_DIR RenderSystem_GL.so HINTS ${OGRE_LIB_SEARCH_PATH} ${OGRE_PKGC_LIBRARY_DIRS} ${OGRE_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "debug")
  179. make_library_set(OGRE_LIBRARY)
  180. if(APPLE)
  181. set(OGRE_LIBRARY_DBG ${OGRE_LIB_SEARCH_PATH})
  182. endif()
  183. if (OGRE_INCOMPATIBLE)
  184. set(OGRE_LIBRARY "NOTFOUND")
  185. endif ()
  186. set(OGRE_INCLUDE_DIR ${OGRE_CONFIG_INCLUDE_DIR} ${OGRE_INCLUDE_DIR})
  187. list(REMOVE_DUPLICATES OGRE_INCLUDE_DIR)
  188. findpkg_finish(OGRE)
  189. add_parent_dir(OGRE_INCLUDE_DIRS OGRE_INCLUDE_DIR)
  190. mark_as_advanced(OGRE_CONFIG_INCLUDE_DIR OGRE_MEDIA_DIR OGRE_PLUGIN_DIR_REL OGRE_PLUGIN_DIR_DBG)
  191. if (NOT OGRE_FOUND)
  192. return()
  193. endif ()
  194. # look for required Ogre dependencies in case of static build and/or threading
  195. if (OGRE_STATIC)
  196. set(OGRE_DEPS_FOUND TRUE)
  197. find_package(Cg QUIET)
  198. find_package(DirectX QUIET)
  199. find_package(FreeImage QUIET)
  200. find_package(Freetype QUIET)
  201. find_package(OpenGL QUIET)
  202. find_package(OpenGLES QUIET)
  203. find_package(ZLIB QUIET)
  204. find_package(ZZip QUIET)
  205. if (UNIX AND NOT APPLE)
  206. find_package(X11 QUIET)
  207. find_library(XAW_LIBRARY NAMES Xaw Xaw7 PATHS ${DEP_LIB_SEARCH_DIR} ${X11_LIB_SEARCH_PATH})
  208. if (NOT XAW_LIBRARY OR NOT X11_Xt_FOUND)
  209. set(X11_FOUND FALSE)
  210. endif ()
  211. endif ()
  212. if (APPLE)
  213. find_package(Cocoa QUIET)
  214. find_package(Carbon QUIET)
  215. if (NOT Cocoa_FOUND OR NOT Carbon_FOUND)
  216. set(OGRE_DEPS_FOUND FALSE)
  217. endif ()
  218. endif ()
  219. set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${OGRE_LIBRARY_FWK} ${ZZip_LIBRARIES} ${ZLIB_LIBRARIES}
  220. ${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES}
  221. ${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY} ${X11_Xrandr_LIB}
  222. ${Cocoa_LIBRARIES} ${Carbon_LIBRARIES})
  223. if (NOT ZLIB_FOUND OR NOT ZZip_FOUND)
  224. set(OGRE_DEPS_FOUND FALSE)
  225. endif ()
  226. if (NOT FreeImage_FOUND AND NOT OGRE_CONFIG_FREEIMAGE)
  227. set(OGRE_DEPS_FOUND FALSE)
  228. endif ()
  229. if (NOT FREETYPE_FOUND)
  230. set(OGRE_DEPS_FOUND FALSE)
  231. endif ()
  232. if (UNIX AND NOT APPLE)
  233. if (NOT X11_FOUND)
  234. set(OGRE_DEPS_FOUND FALSE)
  235. endif ()
  236. endif ()
  237. if (OGRE_CONFIG_THREADS)
  238. if (OGRE_CONFIG_THREAD_PROVIDER EQUAL 1)
  239. find_package(Boost COMPONENTS thread QUIET)
  240. if (NOT Boost_THREAD_FOUND)
  241. set(OGRE_DEPS_FOUND FALSE)
  242. else ()
  243. set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
  244. endif ()
  245. elseif (OGRE_CONFIG_THREAD_PROVIDER EQUAL 2)
  246. find_package(POCO QUIET)
  247. if (NOT POCO_FOUND)
  248. set(OGRE_DEPS_FOUND FALSE)
  249. else ()
  250. set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${POCO_LIBRARIES})
  251. endif ()
  252. elseif (OGRE_CONFIG_THREAD_PROVIDER EQUAL 3)
  253. find_package(TBB QUIET)
  254. if (NOT TBB_FOUND)
  255. set(OGRE_DEPS_FOUND FALSE)
  256. else ()
  257. set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${TBB_LIBRARIES})
  258. endif ()
  259. endif ()
  260. endif ()
  261. if (NOT OGRE_DEPS_FOUND)
  262. pkg_message(OGRE "Could not find all required dependencies for the Ogre package.")
  263. set(OGRE_FOUND FALSE)
  264. endif ()
  265. endif ()
  266. if (NOT OGRE_FOUND)
  267. return()
  268. endif ()
  269. get_filename_component(OGRE_LIBRARY_DIR_REL "${OGRE_LIBRARY_REL}" PATH)
  270. get_filename_component(OGRE_LIBRARY_DIR_DBG "${OGRE_LIBRARY_DBG}" PATH)
  271. set(OGRE_LIBRARY_DIRS ${OGRE_LIBRARY_DIR_REL} ${OGRE_LIBRARY_DIR_DBG} /usr/lib/OGRE/ /usr/lib/debug/usr/lib/OGRE/)
  272. # look for Paging component
  273. findpkg_begin(OGRE_Paging)
  274. find_path(OGRE_Paging_INCLUDE_DIR NAMES OgrePaging.h HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE} PATH_SUFFIXES Paging OGRE/Paging Components/Paging/include)
  275. set(OGRE_Paging_LIBRARY_NAMES "OgrePaging${OGRE_LIB_SUFFIX}")
  276. get_debug_names(OGRE_Paging_LIBRARY_NAMES)
  277. find_library(OGRE_Paging_LIBRARY_REL NAMES ${OGRE_Paging_LIBRARY_NAMES} HINTS ${OGRE_LIBRARY_DIR_REL} PATH_SUFFIXES "" "release" "relwithdebinfo" "minsizerel")
  278. find_library(OGRE_Paging_LIBRARY_DBG NAMES ${OGRE_Paging_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIBRARY_DIR_DBG} PATH_SUFFIXES "" "debug")
  279. set(OGRE_Paging_LIBRARY_FWK ${OGRE_LIBRARY_FWK})
  280. make_library_set(OGRE_Paging_LIBRARY)
  281. findpkg_finish(OGRE_Paging)
  282. # look for Terrain component
  283. findpkg_begin(OGRE_Terrain)
  284. find_path(OGRE_Terrain_INCLUDE_DIR NAMES OgreTerrain.h HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE} PATH_SUFFIXES Terrain OGRE/Terrain Components/Terrain/include)
  285. set(OGRE_Terrain_LIBRARY_NAMES "OgreTerrain${OGRE_LIB_SUFFIX}")
  286. get_debug_names(OGRE_Terrain_LIBRARY_NAMES)
  287. find_library(OGRE_Terrain_LIBRARY_REL NAMES ${OGRE_Terrain_LIBRARY_NAMES} HINTS ${OGRE_LIBRARY_DIR_REL} PATH_SUFFIXES "" "release" "relwithdebinfo" "minsizerel")
  288. find_library(OGRE_Terrain_LIBRARY_DBG NAMES ${OGRE_Terrain_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIBRARY_DIR_DBG} PATH_SUFFIXES "" "debug")
  289. make_library_set(OGRE_Terrain_LIBRARY)
  290. findpkg_finish(OGRE_Terrain)
  291. # look for Property component
  292. findpkg_begin(OGRE_Property)
  293. find_path(OGRE_Property_INCLUDE_DIR NAMES OgreProperty.h HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE} PATH_SUFFIXES Property OGRE/Property Components/Property/include)
  294. set(OGRE_Property_LIBRARY_NAMES "OgreProperty${OGRE_LIB_SUFFIX}")
  295. get_debug_names(OGRE_Property_LIBRARY_NAMES)
  296. find_library(OGRE_Property_LIBRARY_REL NAMES ${OGRE_Property_LIBRARY_NAMES} HINTS ${OGRE_LIBRARY_DIR_REL} PATH_SUFFIXES "" "release" "relwithdebinfo" "minsizerel")
  297. find_library(OGRE_Property_LIBRARY_DBG NAMES ${OGRE_Property_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIBRARY_DIR_DBG} PATH_SUFFIXES "" "debug")
  298. make_library_set(OGRE_Property_LIBRARY)
  299. findpkg_finish(OGRE_Property)
  300. # look for RTShaderSystem component
  301. findpkg_begin(OGRE_RTShaderSystem)
  302. find_path(OGRE_RTShaderSystem_INCLUDE_DIR NAMES OgreRTShaderSystem.h HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE} PATH_SUFFIXES RTShaderSystem OGRE/RTShaderSystem Components/RTShaderSystem/include)
  303. set(OGRE_RTShaderSystem_LIBRARY_NAMES "OgreRTShaderSystem${OGRE_LIB_SUFFIX}")
  304. get_debug_names(OGRE_RTShaderSystem_LIBRARY_NAMES)
  305. find_library(OGRE_RTShaderSystem_LIBRARY_REL NAMES ${OGRE_RTShaderSystem_LIBRARY_NAMES} HINTS ${OGRE_LIBRARY_DIR_REL} PATH_SUFFIXES "" "release" "relwithdebinfo" "minsizerel")
  306. find_library(OGRE_RTShaderSystem_LIBRARY_DBG NAMES ${OGRE_RTShaderSystem_LIBRARY_NAMES_DBG} HINTS ${OGRE_LIBRARY_DIR_DBG} PATH_SUFFIXES "" "debug")
  307. make_library_set(OGRE_RTShaderSystem_LIBRARY)
  308. findpkg_finish(OGRE_RTShaderSystem)
  309. #########################################################
  310. # Find Ogre plugins
  311. #########################################################
  312. macro(ogre_find_plugin PLUGIN HEADER)
  313. # On Unix, the plugins might have no prefix
  314. if (CMAKE_FIND_LIBRARY_PREFIXES)
  315. set(TMP_CMAKE_LIB_PREFIX ${CMAKE_FIND_LIBRARY_PREFIXES})
  316. set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "")
  317. endif()
  318. # strip RenderSystem_ or Plugin_ prefix from plugin name
  319. string(REPLACE "RenderSystem_" "" PLUGIN_TEMP ${PLUGIN})
  320. string(REPLACE "Plugin_" "" PLUGIN_NAME ${PLUGIN_TEMP})
  321. # header files for plugins are not usually needed, but find them anyway if they are present
  322. set(OGRE_PLUGIN_PATH_SUFFIXES
  323. PlugIns PlugIns/${PLUGIN_NAME} Plugins Plugins/${PLUGIN_NAME} ${PLUGIN}
  324. RenderSystems RenderSystems/${PLUGIN_NAME} ${ARGN})
  325. find_path(OGRE_${PLUGIN}_INCLUDE_DIR NAMES ${HEADER}
  326. HINTS ${OGRE_INCLUDE_DIRS} ${OGRE_PREFIX_SOURCE}
  327. PATH_SUFFIXES ${OGRE_PLUGIN_PATH_SUFFIXES})
  328. # find link libraries for plugins
  329. set(OGRE_${PLUGIN}_LIBRARY_NAMES "${PLUGIN}${OGRE_LIB_SUFFIX}")
  330. get_debug_names(OGRE_${PLUGIN}_LIBRARY_NAMES)
  331. set(OGRE_${PLUGIN}_LIBRARY_FWK ${OGRE_LIBRARY_FWK})
  332. find_library(OGRE_${PLUGIN}_LIBRARY_REL NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES}
  333. HINTS ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE opt release release/opt relwithdebinfo relwithdebinfo/opt minsizerel minsizerel/opt)
  334. find_library(OGRE_${PLUGIN}_LIBRARY_DBG NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES_DBG}
  335. HINTS ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE opt debug debug/opt)
  336. make_library_set(OGRE_${PLUGIN}_LIBRARY)
  337. if (OGRE_${PLUGIN}_LIBRARY OR OGRE_${PLUGIN}_INCLUDE_DIR)
  338. set(OGRE_${PLUGIN}_FOUND TRUE)
  339. if (OGRE_${PLUGIN}_INCLUDE_DIR)
  340. set(OGRE_${PLUGIN}_INCLUDE_DIRS ${OGRE_${PLUGIN}_INCLUDE_DIR})
  341. endif()
  342. set(OGRE_${PLUGIN}_LIBRARIES ${OGRE_${PLUGIN}_LIBRARY})
  343. endif ()
  344. mark_as_advanced(OGRE_${PLUGIN}_INCLUDE_DIR OGRE_${PLUGIN}_LIBRARY_REL OGRE_${PLUGIN}_LIBRARY_DBG OGRE_${PLUGIN}_LIBRARY_FWK)
  345. # look for plugin dirs
  346. if (OGRE_${PLUGIN}_FOUND)
  347. if (NOT OGRE_PLUGIN_DIR_REL OR NOT OGRE_PLUGIN_DIR_DBG)
  348. if (WIN32)
  349. set(OGRE_PLUGIN_SEARCH_PATH_REL
  350. ${OGRE_LIBRARY_DIR_REL}/..
  351. ${OGRE_LIBRARY_DIR_REL}/../..
  352. /usr/lib/OGRE/
  353. )
  354. set(OGRE_PLUGIN_SEARCH_PATH_DBG
  355. ${OGRE_LIBRARY_DIR_DBG}/..
  356. ${OGRE_LIBRARY_DIR_DBG}/../..
  357. /usr/lib/debug/usr/lib/OGRE/
  358. )
  359. find_path(OGRE_PLUGIN_DIR_REL NAMES "${PLUGIN}.dll" "${PLUGIN}.so" HINTS ${OGRE_PLUGIN_SEARCH_PATH_REL}
  360. PATH_SUFFIXES "" bin bin/release bin/relwithdebinfo bin/minsizerel)
  361. find_path(OGRE_PLUGIN_DIR_DBG NAMES "${PLUGIN}_d.dll" "${PLUGIN}.so" HINTS ${OGRE_PLUGIN_SEARCH_PATH_DBG}
  362. PATH_SUFFIXES "" bin bin/debug)
  363. elseif (UNIX)
  364. get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_REL} PATH)
  365. set(OGRE_PLUGIN_DIR_REL ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (release)")
  366. get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_DBG} PATH)
  367. set(OGRE_PLUGIN_DIR_DBG ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (debug)")
  368. endif ()
  369. endif ()
  370. endif ()
  371. if (TMP_CMAKE_LIB_PREFIX)
  372. set(CMAKE_FIND_LIBRARY_PREFIXES ${TMP_CMAKE_LIB_PREFIX})
  373. endif ()
  374. endmacro(ogre_find_plugin)
  375. ogre_find_plugin(Plugin_PCZSceneManager OgrePCZSceneManager.h PCZ PlugIns/PCZSceneManager/include)
  376. ogre_find_plugin(Plugin_OctreeZone OgreOctreeZone.h PCZ PlugIns/OctreeZone/include)
  377. ogre_find_plugin(Plugin_BSPSceneManager OgreBspSceneManager.h PlugIns/BSPSceneManager/include)
  378. ogre_find_plugin(Plugin_CgProgramManager OgreCgProgram.h PlugIns/CgProgramManager/include)
  379. ogre_find_plugin(Plugin_OctreeSceneManager OgreOctreeSceneManager.h PlugIns/OctreeSceneManager/include)
  380. ogre_find_plugin(Plugin_ParticleFX OgreParticleFXPrerequisites.h PlugIns/ParticleFX/include)
  381. ogre_find_plugin(RenderSystem_GL OgreGLRenderSystem.h RenderSystems/GL/include)
  382. ogre_find_plugin(RenderSystem_GLES OgreGLESRenderSystem.h RenderSystems/GLES/include)
  383. ogre_find_plugin(RenderSystem_Direct3D9 OgreD3D9RenderSystem.h RenderSystems/Direct3D9/include)
  384. ogre_find_plugin(RenderSystem_Direct3D10 OgreD3D10RenderSystem.h RenderSystems/Direct3D10/include)
  385. ogre_find_plugin(RenderSystem_Direct3D11 OgreD3D11RenderSystem.h RenderSystems/Direct3D11/include)
  386. if (OGRE_STATIC)
  387. # check if dependencies for plugins are met
  388. if (NOT DirectX_FOUND)
  389. set(OGRE_RenderSystem_Direct3D9_FOUND FALSE)
  390. endif ()
  391. if (NOT DirectX_D3D10_FOUND)
  392. set(OGRE_RenderSystem_Direct3D10_FOUND FALSE)
  393. endif ()
  394. if (NOT DirectX_D3D11_FOUND)
  395. set(OGRE_RenderSystem_Direct3D11_FOUND FALSE)
  396. endif ()
  397. if (NOT OPENGL_FOUND)
  398. set(OGRE_RenderSystem_GL_FOUND FALSE)
  399. endif ()
  400. if (NOT OPENGLES_FOUND AND NOT OPENGLES2_FOUND)
  401. set(OGRE_RenderSystem_GLES_FOUND FALSE)
  402. endif ()
  403. if (NOT Cg_FOUND)
  404. set(OGRE_Plugin_CgProgramManager_FOUND FALSE)
  405. endif ()
  406. set(OGRE_RenderSystem_Direct3D9_LIBRARIES ${OGRE_RenderSystem_Direct3D9_LIBRARIES}
  407. ${DirectX_LIBRARIES}
  408. )
  409. set(OGRE_RenderSystem_Direct3D10_LIBRARIES ${OGRE_RenderSystem_Direct3D10_LIBRARIES}
  410. ${DirectX_D3D10_LIBRARIES}
  411. )
  412. set(OGRE_RenderSystem_Direct3D11_LIBRARIES ${OGRE_RenderSystem_Direct3D11_LIBRARIES}
  413. ${DirectX_D3D11_LIBRARIES}
  414. )
  415. set(OGRE_RenderSystem_GL_LIBRARIES ${OGRE_RenderSystem_GL_LIBRARIES}
  416. ${OPENGL_LIBRARIES}
  417. )
  418. set(OGRE_RenderSystem_GLES_LIBRARIES ${OGRE_RenderSystem_GLES_LIBRARIES}
  419. ${OPENGLES_LIBRARIES}
  420. )
  421. set(OGRE_Plugin_CgProgramManager_LIBRARIES ${OGRE_Plugin_CgProgramManager_LIBRARIES}
  422. ${Cg_LIBRARIES}
  423. )
  424. endif ()
  425. # look for the media directory
  426. set(OGRE_MEDIA_SEARCH_PATH
  427. ${OGRE_LIBRARY_DIR_REL}/..
  428. ${OGRE_LIBRARY_DIR_DBG}/..
  429. ${OGRE_LIBRARY_DIR_REL}/../..
  430. ${OGRE_LIBRARY_DIR_DBG}/../..
  431. ${OGRE_PREFIX_SOURCE}
  432. )
  433. set(OGRE_MEDIA_SEARCH_SUFFIX
  434. Media
  435. media
  436. share/OGRE/media
  437. Samples/Media
  438. )
  439. clear_if_changed(OGRE_PREFIX_WATCH OGRE_MEDIA_DIR)
  440. find_path(OGRE_MEDIA_DIR NAMES packs/OgreCore.zip HINTS ${OGRE_MEDIA_SEARCH_PATH}
  441. PATHS ${OGRE_PREFIX_PATH} PATH_SUFFIXES ${OGRE_MEDIA_SEARCH_SUFFIX})
粤ICP备19079148号