CMakeLists.txt 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860
  1. #===================================
  2. # Build script for libRocket =======
  3. #===================================
  4. if(APPLE)
  5. # This has to be before most other options so CMake properly handles the
  6. # compiler variables, it MUST bebefore the project() definition
  7. if(IOS_PLATFORM)
  8. set(CMAKE_TOOLCHAIN_FILE cmake/Platform/iOS.cmake)
  9. endif(IOS_PLATFORM)
  10. option(BUILD_UNIVERSAL_BINARIES "Build universal binaries for all architectures supported" ON)
  11. if (NOT CMAKE_OSX_ARCHITECTURES AND BUILD_UNIVERSAL_BINARIES)
  12. if(IOS)
  13. # set the architecture for iOS
  14. if (${IOS_PLATFORM} STREQUAL "OS")
  15. set (IOS_ARCH armv6 armv7 armv7s arm64)
  16. set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string "Build architecture for iOS")
  17. else (${IOS_PLATFORM} STREQUAL "OS")
  18. set (IOS_ARCH i386 x86_64)
  19. set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string "Build architecture for iOS Simulator")
  20. endif (${IOS_PLATFORM} STREQUAL "OS")
  21. else(IOS)
  22. # set the architectures for OS X
  23. set (OSXI_ARCH i386 x86_64)
  24. set (CMAKE_OSX_ARCHITECTURES ${OSXI_ARCH} CACHE string "Build architecture for OS X universal binaries")
  25. endif(IOS)
  26. endif (NOT CMAKE_OSX_ARCHITECTURES AND BUILD_UNIVERSAL_BINARIES)
  27. endif(APPLE)
  28. # We use the new OSX_ARCHITECTURES property
  29. # and GNUInstallDirs module
  30. cmake_minimum_required(VERSION 2.8.5)
  31. if(COMMAND cmake_policy)
  32. cmake_policy(SET CMP0015 NEW)
  33. endif(COMMAND cmake_policy)
  34. # Enable the use of MACOSX_RPATH by default for CMake v3.0+; this effectively
  35. # allows plug 'n' play functionality, so to speak -- the resulting shared
  36. # library files can simply be copied over into the end-user's application
  37. # bundle or framework bundle. No mucking around with install_name_tool.
  38. #
  39. # See also:
  40. # cmake --help-policy cmp0042
  41. # http://www.kitware.com/blog/home/post/510
  42. if(POLICY CMP0042)
  43. cmake_policy(SET CMP0042 NEW)
  44. endif(POLICY CMP0042)
  45. project(libRocket C CXX)
  46. # paths
  47. include(GNUInstallDirs)
  48. set(LIBROCKET_VERSION_MAJOR 1)
  49. set(LIBROCKET_VERSION_MINOR 3)
  50. set(LIBROCKET_VERSION_PATCH 0)
  51. set(LIBROCKET_VERSION_TWEAK 0)
  52. set(PROJECT_VERSION ${LIBROCKET_VERSION_MAJOR}.${LIBROCKET_VERSION_MINOR}.${LIBROCKET_VERSION_PATCH}.${LIBROCKET_VERSION_TWEAK})
  53. # Search in the 'cmake' directory for additional CMake modules.
  54. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
  55. # Old versions of CMake need some updated Modules, but we don't want
  56. # to override newer versions of CMake which have working versions
  57. if(CMAKE_MAJOR_VERSION LESS 3)
  58. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/v2fixes)
  59. endif()
  60. #===================================
  61. # Environment tests ================
  62. #===================================
  63. include(TestForANSIForScope)
  64. include(TestForANSIStreamHeaders)
  65. include(TestForSTDNamespace)
  66. #===================================
  67. # Provide hints as to where depends=
  68. # might be found =
  69. #===================================
  70. if(NOT DEFINED ENV{FREETYPE_DIR})
  71. set(ENV{FREETYPE_DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  72. endif()
  73. #if(NOT DEFINED ENV{Boost_DIR})
  74. # set(ENV{Boost_DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  75. #endif()
  76. if(NOT DEFINED ENV{BOOST_ROOT})
  77. set(ENV{BOOST_ROOT} "${PROJECT_SOURCE_DIR}/../Dependencies/boost")
  78. endif()
  79. if(NOT DEFINED ENV{LUA_DIR})
  80. set(ENV{LUA_DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  81. endif()
  82. if(NOT DEFINED ENV{SDL2DIR})
  83. set(ENV{SDL2DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  84. endif()
  85. if(NOT DEFINED ENV{SDL2_IMAGE_DIR})
  86. set(ENV{SDL2_IMAGE_DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  87. endif()
  88. if(NOT DEFINED ENV{SFML_ROOT})
  89. set(ENV{SFML_ROOT} "${PROJECT_SOURCE_DIR}/../Dependencies")
  90. endif()
  91. #===================================
  92. # Plaform specific global hacks ====
  93. #===================================
  94. if(APPLE)
  95. # Disables naked builtins from AssertMacros.h which
  96. # This prevents naming collisions such as those from the check()
  97. # function macro with LuaType::check
  98. add_definitions(-D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0)
  99. endif(APPLE)
  100. #===================================
  101. # Build options ====================
  102. #===================================
  103. if(NOT CMAKE_BUILD_TYPE)
  104. set(CMAKE_BUILD_TYPE Release CACHE STRING
  105. "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
  106. FORCE)
  107. endif()
  108. if(NOT IOS)
  109. option(BUILD_SHARED_LIBS "Build shared libraries" ON)
  110. endif(NOT IOS)
  111. option(BUILD_PYTHON_BINDINGS "Build python bindings" OFF)
  112. option(BUILD_LUA_BINDINGS "Build Lua bindings" OFF)
  113. if(APPLE)
  114. option(BUILD_FRAMEWORK "Build Framework bundle for OSX" OFF)
  115. endif()
  116. option(BUILD_SAMPLES "Build samples" OFF)
  117. if(WIN32)
  118. option(SKIP_DIRECTX_SAMPLES "Skip build of all DirectX related samples. Only applies if BUILD_SAMPLES is ON" OFF)
  119. option(SKIP_DIRECTX9_SAMPLE "Skip build of DirectX 9 related sample. Only applies if BUILD_SAMPLES is ON and SKIP_DIRECTX_SAMPLES is OFF" OFF)
  120. option(SKIP_DIRECTX10_SAMPLE "Skip build of DirectX 10 related sample. Only applies if BUILD_SAMPLES is ON and SKIP_DIRECTX_SAMPLES is OFF" OFF)
  121. endif()
  122. if(APPLE)
  123. if(IOS)
  124. if(BUILD_SHARED_LIBS)
  125. message(FATAL_ERROR "BUILD_SHARED_LIBS must be OFF for iOS builds. iOS does not support shared libraries.")
  126. endif(BUILD_SHARED_LIBS)
  127. endif(IOS)
  128. if(BUILD_FRAMEWORK)
  129. if(NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
  130. message(FATAL_ERROR "You should use Xcode generator with BUILD_FRAMEWORK enabled")
  131. endif()
  132. if(NOT BUILD_SHARED_LIBS)
  133. message(FATAL_ERROR "BUILD_SHARED_LIBS must be ON with BUILD_FRAMEWORK enabled")
  134. endif()
  135. endif()
  136. else(APPLE)
  137. if(BUILD_FRAMEWORK)
  138. message(FATAL_ERROR "BUILD_FRAMEWORK is only supported on Mac OS X with the Xcode generator")
  139. endif()
  140. endif(APPLE)
  141. if(NOT BUILD_SHARED_LIBS)
  142. add_definitions(-DROCKET_STATIC_LIB)
  143. endif()
  144. #on windows, check for VC10 and fix the multiple compile target issue.
  145. IF(WIN32)
  146. if(MSVC)
  147. if(${MSVC_VERSION} STREQUAL 1600 OR ${MSVC_VERSION} STRGREATER 1600)
  148. message("Visual Studio 2010 (${MSVC_VERSION}) build fix at play (/FORCE:MULTIPLE)")
  149. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE:MULTIPLE")
  150. endif()
  151. endif()
  152. ENDIF(WIN32)
  153. #===================================
  154. # Find dependencies ================
  155. #===================================
  156. # FreeType
  157. if(CMAKE_MAJOR_VERSION LESS 3)
  158. # Freetype changed the layout of its header files, we need to use
  159. # the FindFreetype module from cmake v3 at least, included here
  160. find_package(Freetype-v2fix REQUIRED)
  161. else()
  162. find_package(Freetype REQUIRED)
  163. endif()
  164. if(FREETYPE_FOUND)
  165. include_directories(${FREETYPE_INCLUDE_DIRS})
  166. link_directories(${FREETYPE_LINK_DIRS})
  167. list(APPEND CORE_LINK_LIBS ${FREETYPE_LIBRARY})
  168. endif()
  169. mark_as_advanced(FREETYPE_INCLUDE_DIRS FREETYPE_LIBRARY FREETYPE_LINK_DIRECTORIES)
  170. # Boost and Python
  171. if(BUILD_PYTHON_BINDINGS)
  172. find_package(PythonInterp 2 REQUIRED)
  173. find_package(PythonLibs 2 REQUIRED)
  174. execute_process(
  175. COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix=''))"
  176. OUTPUT_VARIABLE PYTHON_INSTDIR
  177. OUTPUT_STRIP_TRAILING_WHITESPACE
  178. )
  179. if(PYTHONLIBS_FOUND)
  180. include_directories(${PYTHON_INCLUDE_DIR})
  181. endif()
  182. #set(Boost_USE_STATIC_LIBS OFF)
  183. #set(Boost_USE_MULTITHREADED ON)
  184. find_package(Boost 1.40.0 COMPONENTS python REQUIRED)
  185. if(Boost_FOUND)
  186. include_directories(${Boost_INCLUDE_DIR})
  187. list(APPEND PY_BINDINGS_LINK_LIBS ${PYTHON_LIBRARY} ${Boost_LIBRARIES})
  188. endif()
  189. endif()
  190. #Lua
  191. if(BUILD_LUA_BINDINGS)
  192. if(CMAKE_MAJOR_VERSION LESS 3)
  193. find_package(Lua-v2fix)
  194. else()
  195. find_package(Lua)
  196. endif()
  197. if(LUA_FOUND)
  198. include_directories(${LUA_INCLUDE_DIR})
  199. list(APPEND LUA_BINDINGS_LINK_LIBS ${LUA_LIBRARIES})
  200. endif()
  201. endif()
  202. #===================================
  203. # Setup paths ======================
  204. #===================================
  205. set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/..)
  206. include_directories(
  207. ${PROJECT_SOURCE_DIR}/Include
  208. )
  209. # Include list of source files
  210. include(FileList)
  211. if(NOT BUILD_FRAMEWORK)
  212. #===================================
  213. # Build libraries ==================
  214. #===================================
  215. set(LIBRARIES Core Controls Debugger)
  216. foreach(library ${LIBRARIES})
  217. set(NAME Rocket${library})
  218. add_library(${NAME}
  219. ${${library}_HDR_FILES}
  220. ${${library}_PUB_HDR_FILES}
  221. ${MASTER_${library}_PUB_HDR_FILES}
  222. ${${library}_SRC_FILES}
  223. )
  224. set_target_properties(${NAME} PROPERTIES
  225. VERSION ${PROJECT_VERSION}
  226. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  227. )
  228. install(TARGETS ${NAME}
  229. EXPORT libRocketTargets
  230. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  231. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  232. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  233. )
  234. set(ROCKET_EXPORTED_TARGETS ${ROCKET_EXPORTED_TARGETS} ${NAME})
  235. endforeach(library)
  236. else(NOT BUILD_FRAMEWORK)
  237. #===================================
  238. # Build combined Framework =========
  239. #===================================
  240. set(NAME Rocket)
  241. set(MASTER_PUB_HDR_FILES
  242. ${MASTER_Core_PUB_HDR_FILES}
  243. ${MASTER_Controls_PUB_HDR_FILES}
  244. ${MASTER_Debugger_PUB_HDR_FILES}
  245. )
  246. add_library(${NAME}
  247. ${Core_HDR_FILES}
  248. ${MASTER_Core_PUB_HDR_FILES}
  249. ${Core_PUB_HDR_FILES}
  250. ${Core_SRC_FILES}
  251. ${Controls_HDR_FILES}
  252. ${MASTER_Controls_PUB_HDR_FILES}
  253. ${Controls_PUB_HDR_FILES}
  254. ${Controls_SRC_FILES}
  255. ${Debugger_HDR_FILES}
  256. ${MASTER_Debugger_PUB_HDR_FILES}
  257. ${Debugger_PUB_HDR_FILES}
  258. ${Debugger_SRC_FILES}
  259. )
  260. set_target_properties(${NAME} PROPERTIES
  261. VERSION ${PROJECT_VERSION}
  262. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  263. )
  264. set_property(SOURCE ${MASTER_PUB_HDR_FILES}
  265. PROPERTY MACOSX_PACKAGE_LOCATION Headers
  266. )
  267. set_property(SOURCE ${Core_PUB_HDR_FILES}
  268. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Core
  269. )
  270. set_property(SOURCE ${Controls_PUB_HDR_FILES}
  271. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Controls
  272. )
  273. set_property(SOURCE ${Debugger_PUB_HDR_FILES}
  274. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Debugger
  275. )
  276. set_target_properties(${NAME} PROPERTIES
  277. FRAMEWORK TRUE
  278. FRAMEWORK_VERSION ${PROJECT_VERSION}
  279. MACOSX_FRAMEWORK_IDENTIFIER com.librocketb.${NAME}
  280. MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LIBROCKET_VERSION_MAJOR}.${LIBROCKET_VERSION_MINOR}.${LIBROCKET_VERSION_PATCH}.${LIBROCKET_VERSION_TWEAK}
  281. MACOSX_FRAMEWORK_BUNDLE_VERSION ${PROJECT_VERSION}
  282. XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
  283. PUBLIC_HEADER ${MASTER_PUB_HDR_FILES}
  284. )
  285. install(TARGETS ${NAME}
  286. EXPORT libRocketTargets
  287. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  288. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  289. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  290. FRAMEWORK DESTINATION Library/Frameworks
  291. )
  292. set(ROCKET_EXPORTED_TARGETS ${ROCKET_EXPORTED_TARGETS} ${NAME})
  293. endif(NOT BUILD_FRAMEWORK)
  294. # Build python bindings
  295. if(BUILD_PYTHON_BINDINGS)
  296. set(LIBRARIES core controls)
  297. foreach(library ${LIBRARIES})
  298. set(NAME _rocket${library})
  299. add_library(${NAME} MODULE ${Py${library}_SRC_FILES}
  300. ${Py${library}_HDR_FILES}
  301. ${Py${library}_PUB_HDR_FILES}
  302. )
  303. set_target_properties(${NAME} PROPERTIES PREFIX "")
  304. install(TARGETS ${NAME}
  305. EXPORT libRocketTargets
  306. LIBRARY DESTINATION ${PYTHON_INSTDIR}
  307. )
  308. endforeach(library)
  309. endif()
  310. # Build Lua bindings
  311. if(BUILD_LUA_BINDINGS)
  312. set(LIBRARIES Core Controls)
  313. foreach(library ${LIBRARIES})
  314. set(NAME Rocket${library}Lua)
  315. add_library(${NAME} ${Lua${library}_SRC_FILES}
  316. ${Lua${library}_HDR_FILES}
  317. ${Lua${library}_PUB_HDR_FILES}
  318. )
  319. set_target_properties(${NAME} PROPERTIES
  320. VERSION ${PROJECT_VERSION}
  321. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  322. )
  323. install(TARGETS ${NAME}
  324. EXPORT libRocketTargets
  325. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  326. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  327. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  328. )
  329. set(ROCKET_EXPORTED_TARGETS ${ROCKET_EXPORTED_TARGETS} ${NAME})
  330. endforeach(library)
  331. endif()
  332. #===================================
  333. # Link libraries ===================
  334. #===================================
  335. if(NOT BUILD_FRAMEWORK)
  336. target_link_libraries(RocketCore ${CORE_LINK_LIBS})
  337. target_link_libraries(RocketControls RocketCore)
  338. target_link_libraries(RocketDebugger RocketCore)
  339. else(NOT BUILD_FRAMEWORK)
  340. target_link_libraries(Rocket ${CORE_LINK_LIBS})
  341. endif(NOT BUILD_FRAMEWORK)
  342. if(BUILD_PYTHON_BINDINGS)
  343. if(NOT BUILD_FRAMEWORK)
  344. target_link_libraries(_rocketcore RocketCore ${PY_BINDINGS_LINK_LIBS})
  345. target_link_libraries(_rocketcontrols RocketControls ${PY_BINDINGS_LINK_LIBS})
  346. else(NOT BUILD_FRAMEWORK)
  347. target_link_libraries(_rocketcore Rocket ${PY_BINDINGS_LINK_LIBS})
  348. target_link_libraries(_rocketcontrols Rocket ${PY_BINDINGS_LINK_LIBS})
  349. endif(NOT BUILD_FRAMEWORK)
  350. endif()
  351. if(BUILD_LUA_BINDINGS)
  352. if(NOT BUILD_FRAMEWORK)
  353. target_link_libraries(RocketCoreLua RocketCore ${LUA_BINDINGS_LINK_LIBS})
  354. target_link_libraries(RocketControlsLua RocketControls RocketCoreLua ${LUA_BINDINGS_LINK_LIBS})
  355. else(NOT BUILD_FRAMEWORK)
  356. target_link_libraries(RocketCoreLua Rocket ${LUA_BINDINGS_LINK_LIBS})
  357. target_link_libraries(RocketControlsLua Rocket RocketCoreLua ${LUA_BINDINGS_LINK_LIBS})
  358. endif(NOT BUILD_FRAMEWORK)
  359. endif()
  360. #===================================
  361. # Build samples ====================
  362. #===================================
  363. # Build and link the samples
  364. macro(bl_sample NAME)
  365. if (WIN32)
  366. add_executable(${NAME} WIN32 ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  367. elseif(APPLE)
  368. add_executable(${NAME} MACOSX_BUNDLE ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  369. # The first rpath is to the proper location where the framework/library SHOULD be, the second is to the location actually seen
  370. # in the build environment
  371. if(BUILD_FRAMEWORK)
  372. set_target_properties(${NAME} PROPERTIES LINK_FLAGS "-rpath @executable_path/../Frameworks")
  373. else()
  374. set_target_properties(${NAME} PROPERTIES LINK_FLAGS "-rpath @executable_path/../lib")
  375. endif()
  376. else()
  377. add_executable(${NAME} ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  378. endif()
  379. if (APPLE)
  380. # We only support i386 for the samples as it still uses Carbon
  381. set_target_properties(${NAME} PROPERTIES OSX_ARCHITECTURES "i386;" )
  382. endif()
  383. target_link_libraries(${NAME} ${ARGN})
  384. endmacro()
  385. if(BUILD_SAMPLES)
  386. include(SampleFileList)
  387. set(samples treeview customlog drag loaddocument bitmapfont)
  388. set(tutorials template datagrid datagrid_tree tutorial_drag)
  389. if(NOT BUILD_FRAMEWORK)
  390. set(sample_LIBRARIES
  391. shell
  392. RocketCore
  393. RocketControls
  394. RocketDebugger
  395. )
  396. else(NOT BUILD_FRAMEWORK)
  397. set(sample_LIBRARIES
  398. shell
  399. Rocket
  400. )
  401. endif(NOT BUILD_FRAMEWORK)
  402. # Find OpenGL
  403. find_package(OpenGL REQUIRED)
  404. if(OPENGL_FOUND)
  405. include_directories(${OPENGL_INCLUDE_DIR})
  406. list(APPEND sample_LIBRARIES ${OPENGL_LIBRARIES})
  407. endif()
  408. # Set up required system libraries
  409. if(WIN32)
  410. if(SKIP_DIRECTX_SAMPLES)
  411. message("-- Skipping all DirectX samples")
  412. set(SKIP_DIRECTX9_SAMPLE ON)
  413. set(SKIP_DIRECTX10_SAMPLE ON)
  414. else()
  415. message("-- Determing if DirectX samples can be built")
  416. include(FindDirectX)
  417. find_package(DirectX)
  418. if(DirectX_FOUND)
  419. set(DIRECTX_SAMPLE_LIST)
  420. set(DIRECTX_SKIPPED_SAMPLE_LIST)
  421. # We should be able to build DirectX 9 sample
  422. message("-- Determing if DirectX samples can be built - Yes")
  423. if(SKIP_DIRECTX9_SAMPLE)
  424. message("-- Skipping build of DirectX 9 sample: User disabled")
  425. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX9 ")
  426. else()
  427. if(DirectX_LIBRARY)
  428. if(DirectX_D3DX9_LIBRARY)
  429. list(APPEND DIRECTX_SAMPLE_LIST "DirectX9 ")
  430. else()
  431. set(SKIP_DIRECTX9_SAMPLE ON)
  432. message("-- Skipping build of DirectX 9 sample: DirectX_D3DX9_LIBRARY not found")
  433. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX9 ")
  434. endif()
  435. else()
  436. set(SKIP_DIRECTX9_SAMPLE ON)
  437. message("-- Skipping build of DirectX 9 sample: DirectX_LIBRARY not found")
  438. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX9 ")
  439. endif()
  440. endif()
  441. if(SKIP_DIRECTX10_SAMPLE)
  442. message("-- Skipping build of DirectX 10 sample: User disabled")
  443. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX10 ")
  444. else()
  445. if(DirectX_D3D10_FOUND)
  446. list(APPEND DIRECTX_SAMPLE_LIST "DirectX10 ")
  447. else()
  448. set(SKIP_DIRECTX10_SAMPLE ON)
  449. message("-- Skipping build of DirectX 10 sample: Missing DirectX_D3D10_INCLUDE_DIR, DirectX_D3D10_LIBRARY or DirectX_D3DX10_LIBRARY")
  450. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX10 ")
  451. endif()
  452. endif()
  453. if(DIRECTX_SAMPLE_LIST)
  454. message("-- Enabled DirectX samples: " ${DIRECTX_SAMPLE_LIST})
  455. endif()
  456. if(DIRECTX_SKIPPED_SAMPLE_LIST)
  457. message("-- Disabled DirectX samples: " ${DIRECTX_SKIPPED_SAMPLE_LIST})
  458. endif()
  459. else()
  460. message("-- Determing if DirectX samples can be built - No")
  461. set(SKIP_DIRECTX9_SAMPLE ON)
  462. set(SKIP_DIRECTX10_SAMPLE ON)
  463. endif()
  464. endif()
  465. elseif(APPLE)
  466. include(FindCarbon)
  467. find_package(Carbon REQUIRED)
  468. if (Carbon_FOUND)
  469. include_directories(${Carbon_INCLUDE_DIR})
  470. list(APPEND sample_LIBRARIES ${Carbon_LIBRARIES})
  471. endif()
  472. else()
  473. find_package(X11 REQUIRED)
  474. if (X11_FOUND)
  475. list(APPEND sample_LIBRARIES ${X11_LIBRARIES})
  476. # shell/src/x11/InputX11.cpp:InitialiseX11Keymap uses Xkb if
  477. # possible instead of XGetKeyboardMapping for performance
  478. if(X11_Xkb_FOUND)
  479. FIND_PACKAGE_MESSAGE(X11 "Found X11 KBlib: ${X11_X11_LIB}" "[${X11_X11_LIB}][${X11_XkbINCLUDE_DIR}]")
  480. add_definitions(-DHAS_X11XKBLIB)
  481. endif()
  482. endif()
  483. endif()
  484. set(SAMPLES_DIR opt/Rocket/Samples CACHE PATH "path to samples dir")
  485. # The samples and tutorials use the shell library
  486. include_directories(${PROJECT_SOURCE_DIR}/Samples/shell/include)
  487. # Build and install sample shell library
  488. add_library(shell STATIC ${shell_SRC_FILES} ${shell_HDR_FILES})
  489. if (APPLE)
  490. # We only support i386 for the samples as it still uses Carbon
  491. set_target_properties(shell PROPERTIES OSX_ARCHITECTURES "i386;")
  492. endif()
  493. # Build and install the basic samples
  494. foreach(sample ${samples})
  495. bl_sample(${sample} ${sample_LIBRARIES})
  496. # The samples always set this as their current working directory
  497. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/${sample})
  498. install(TARGETS ${sample}
  499. RUNTIME DESTINATION ${SAMPLES_DIR}/${sample}
  500. BUNDLE DESTINATION ${SAMPLES_DIR})
  501. endforeach()
  502. if(WIN32)
  503. if(NOT SKIP_DIRECTX9_SAMPLE)
  504. include_directories(${DirectX_INCLUDE_DIR})
  505. bl_sample(directx ${sample_LIBRARIES} ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY})
  506. # The samples always set this as their current working directory
  507. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/directx)
  508. install(TARGETS directx
  509. RUNTIME DESTINATION ${SAMPLES_DIR}/directx
  510. BUNDLE DESTINATION ${SAMPLES_DIR})
  511. endif()
  512. if(NOT SKIP_DIRECTX10_SAMPLE)
  513. include_directories(${DirectX_INCLUDE_DIR} ${DirectX_D3D10_INCLUDE_DIRS})
  514. bl_sample(directx10 ${sample_LIBRARIES} ${DirectX_D3D10_LIBRARIES})
  515. # The samples always set this as their current working directory
  516. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/directx10)
  517. install(TARGETS directx10
  518. RUNTIME DESTINATION ${SAMPLES_DIR}/directx10
  519. BUNDLE DESTINATION ${SAMPLES_DIR})
  520. endif()
  521. endif()
  522. message("-- Can SDL2 sample be built")
  523. find_package(SDL2)
  524. if(SDL2_FOUND)
  525. find_package(SDL2_image)
  526. if(SDL2_IMAGE_FOUND)
  527. find_package(GLEW)
  528. if(GLEW_FOUND)
  529. message("-- Can SDL2 sample be built - yes")
  530. include_directories(${SDL2_INCLUDE_DIR} ${GLEW_INCLUDE_DIR})
  531. bl_sample(sdl2 ${sample_LIBRARIES} ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY} ${GLEW_LIBRARY})
  532. # The samples always set this as their current working directory
  533. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/sdl2)
  534. install(TARGETS sdl2
  535. RUNTIME DESTINATION ${SAMPLES_DIR}/sdl2
  536. BUNDLE DESTINATION ${SAMPLES_DIR})
  537. else()
  538. message("-- Can SDL2 sample be built - GLEW not found")
  539. endif()
  540. else()
  541. message("-- Can SDL2 sample be built - SDL2_image not found")
  542. endif()
  543. else()
  544. message("-- Can SDL2 sample be built - SDL2 not found")
  545. endif()
  546. message("-- Can SFML 1.x sample be built")
  547. find_package(SFML 1 COMPONENTS graphics window system)
  548. if(NOT SFML_FOUND)
  549. message("-- Can SFML 1.x sample be built - no")
  550. elseif(SFML_VERSION_MAJOR GREATER 1)
  551. message("-- Can SFML 1.x sample be built - no: Version 2 detected")
  552. else()
  553. message("-- Can SFML 1.x sample be built - yes")
  554. include_directories(${SFML_INCLUDE_DIR})
  555. bl_sample(sfml ${sample_LIBRARIES} ${SFML_LIBRARIES})
  556. # The samples always set this as their current working directory
  557. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/sfml)
  558. install(TARGETS sfml
  559. RUNTIME DESTINATION ${SAMPLES_DIR}/sfml
  560. BUNDLE DESTINATION ${SAMPLES_DIR})
  561. endif()
  562. message("-- Can SFML 2.x sample be built")
  563. find_package(SFML 2 COMPONENTS graphics window system)
  564. if(NOT SFML_FOUND)
  565. message("-- Can SFML 2.x sample be built - no")
  566. else()
  567. find_package(GLEW)
  568. if(GLEW_FOUND)
  569. message("-- Can SFML 2.x sample be built - yes: with GLEW")
  570. include_directories(${SFML_INCLUDE_DIR} ${GLEW_INCLUDE_DIR})
  571. add_definitions( -DENABLE_GLEW )
  572. bl_sample(sfml2 ${sample_LIBRARIES} ${SFML_LIBRARIES} ${GLEW_LIBRARY})
  573. else()
  574. message("-- Can SFML 2.x sample be built - yes: without GLEW")
  575. include_directories(${SFML_INCLUDE_DIR})
  576. bl_sample(sfml2 ${sample_LIBRARIES} ${SFML_LIBRARIES})
  577. endif()
  578. # The samples always set this as their current working directory
  579. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/sfml2)
  580. install(TARGETS sfml2
  581. RUNTIME DESTINATION ${SAMPLES_DIR}/sfml2
  582. BUNDLE DESTINATION ${SAMPLES_DIR})
  583. endif()
  584. # Build and install the tutorials
  585. foreach(tutorial ${tutorials})
  586. bl_sample(${tutorial} ${sample_LIBRARIES})
  587. # The tutorials always set this as their current working directory
  588. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/tutorial/${tutorial})
  589. install(TARGETS ${tutorial}
  590. RUNTIME DESTINATION ${SAMPLES_DIR}/${tutorial}
  591. BUNDLE DESTINATION ${SAMPLES_DIR})
  592. endforeach()
  593. # Build and install invaders sample
  594. bl_sample(invaders ${sample_LIBRARIES})
  595. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/invaders)
  596. install(TARGETS invaders
  597. RUNTIME DESTINATION ${SAMPLES_DIR}/invaders
  598. BUNDLE DESTINATION ${SAMPLES_DIR})
  599. if(BUILD_PYTHON_BINDINGS)
  600. # Build and install pyinvaders sample
  601. bl_sample(pyinvaders ${sample_LIBRARIES} ${PYTHON_LIBRARIES} ${PY_BINDINGS_LINK_LIBS})
  602. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/pyinvaders)
  603. install(TARGETS pyinvaders
  604. RUNTIME DESTINATION ${SAMPLES_DIR}/pyinvaders
  605. BUNDLE DESTINATION ${SAMPLES_DIR})
  606. endif()
  607. if(BUILD_LUA_BINDINGS)
  608. bl_sample(luainvaders RocketCoreLua RocketControlsLua ${sample_LIBRARIES} ${LUA_BINDINGS_LINK_LIBS})
  609. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/luainvaders)
  610. install(TARGETS luainvaders
  611. RUNTIME DESTINATION ${SAMPLES_DIR}/luainvaders
  612. BUNDLE DESTINATION ${SAMPLES_DIR})
  613. endif()
  614. endif()
  615. #===================================
  616. # Installation =====================
  617. #===================================
  618. if(BUILD_LUA_BINDINGS AND BUILD_PYTHON_BINDINGS)
  619. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  620. DESTINATION include
  621. )
  622. else()
  623. if(NOT BUILD_LUA_BINDINGS AND NOT BUILD_PYTHON_BINDINGS)
  624. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  625. DESTINATION include
  626. PATTERN "Python" EXCLUDE
  627. PATTERN "Lua" EXCLUDE
  628. )
  629. else()
  630. if(BUILD_PYTHON_BINDINGS)
  631. install(FILES ${PROJECT_SOURCE_DIR}/bin/rocket.py
  632. DESTINATION ${PYTHON_INSTDIR}
  633. )
  634. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  635. DESTINATION include
  636. PATTERN "Lua" EXCLUDE
  637. )
  638. else()
  639. if(BUILD_LUA_BINDINGS)
  640. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  641. DESTINATION include
  642. PATTERN "Python" EXCLUDE
  643. )
  644. else()
  645. message(FATAL_ERROR "ASSERT: Unexpected option combination, this is a logical impossibility.")
  646. endif()
  647. endif()
  648. endif()
  649. endif()
  650. if(BUILD_SAMPLES)
  651. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/assets
  652. DESTINATION ${SAMPLES_DIR}
  653. )
  654. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/template/data
  655. DESTINATION ${SAMPLES_DIR}/tutorial/template
  656. )
  657. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid/data
  658. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid
  659. )
  660. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid_tree/data
  661. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid_tree
  662. )
  663. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/tutorial_drag/data
  664. DESTINATION ${SAMPLES_DIR}/tutorial/tutorial_drag
  665. )
  666. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/treeview/data
  667. DESTINATION ${SAMPLES_DIR}/basic/treeview
  668. )
  669. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/drag/data
  670. DESTINATION ${SAMPLES_DIR}/basic/drag
  671. )
  672. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/invaders/data
  673. DESTINATION ${SAMPLES_DIR}/invaders
  674. )
  675. if(BUILD_PYTHON_BINDINGS)
  676. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/pyinvaders/data
  677. DESTINATION ${SAMPLES_DIR}/pyinvaders
  678. )
  679. endif()
  680. if(BUILD_LUA_BINDINGS)
  681. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/luainvaders/data
  682. DESTINATION ${SAMPLES_DIR}/luainvaders
  683. )
  684. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/luainvaders/lua
  685. DESTINATION ${SAMPLES_DIR}/luainvaders
  686. )
  687. endif()
  688. endif()
  689. #===================================
  690. # Generate Config.cmake files ======
  691. #===================================
  692. # Try to include helper module
  693. include(CMakePackageConfigHelpers OPTIONAL
  694. RESULT_VARIABLE PkgHelpers_AVAILABLE)
  695. # guard against older versions of cmake which do not provide it
  696. if(PkgHelpers_AVAILABLE)
  697. set (INCLUDE_INSTALL_DIR "include")
  698. set (LIB_INSTALL_DIR "lib")
  699. set (INCLUDE_DIR "${PROJECT_SOURCE_DIR}/Include")
  700. # generate configuration for install tree
  701. configure_package_config_file(libRocketConfig.cmake.install.in
  702. ${CMAKE_CURRENT_BINARY_DIR}/install/libRocketConfig.cmake
  703. INSTALL_DESTINATION ${LIB_INSTALL_DIR}/libRocket/cmake
  704. PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR)
  705. write_basic_package_version_file(
  706. ${CMAKE_CURRENT_BINARY_DIR}/install/libRocketConfigVersion.cmake
  707. VERSION ${PROJECT_VERSION}
  708. COMPATIBILITY SameMajorVersion )
  709. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/install/libRocketConfig.cmake
  710. ${CMAKE_CURRENT_BINARY_DIR}/install/libRocketConfigVersion.cmake
  711. DESTINATION ${LIB_INSTALL_DIR}/libRocket/cmake )
  712. install(EXPORT libRocketTargets
  713. DESTINATION ${LIB_INSTALL_DIR}/libRocket/cmake)
  714. # generate configuration for build tree
  715. configure_package_config_file(libRocketConfig.cmake.build.in
  716. ${CMAKE_CURRENT_BINARY_DIR}/libRocketConfig.cmake
  717. INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
  718. PATH_VARS INCLUDE_DIR CMAKE_CURRENT_BINARY_DIR)
  719. export(TARGETS ${ROCKET_EXPORTED_TARGETS}
  720. FILE "${CMAKE_CURRENT_BINARY_DIR}/libRocketTargets.cmake")
  721. write_basic_package_version_file(
  722. ${CMAKE_CURRENT_BINARY_DIR}/libRocketConfigVersion.cmake
  723. VERSION ${PROJECT_VERSION}
  724. COMPATIBILITY SameMajorVersion )
  725. set(libRocket_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE PATH "The directory containing a CMake configuration file for libRocket.")
  726. else()
  727. message("If you wish to use find_package(libRocket) in your own project to find libRocket library"
  728. " please update cmake to version which provides CMakePackageConfighelpers module"
  729. " or write generators for libRocketConfig.cmake by yourself.")
  730. endif()