CMakeLists.txt 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. #===================================
  2. # Build script for libRocket =======
  3. #===================================
  4. # This has to be before most other options so CMake properly handles the
  5. # compiler variables, it MUST bebefore the project() definition
  6. if(APPLE)
  7. if(IOS_PLATFORM)
  8. set(CMAKE_TOOLCHAIN_FILE cmake/Platform/iOS.cmake)
  9. endif(IOS_PLATFORM)
  10. endif(APPLE)
  11. # We use the new OSX_ARCHITECTURES property
  12. # and GNUInstallDirs module
  13. cmake_minimum_required(VERSION 2.8.5)
  14. if(COMMAND cmake_policy)
  15. cmake_policy(SET CMP0015 NEW)
  16. endif(COMMAND cmake_policy)
  17. project(libRocket C CXX)
  18. # paths
  19. include(GNUInstallDirs)
  20. set(LIBROCKET_VERSION_MAJOR 1)
  21. set(LIBROCKET_VERSION_MINOR 3)
  22. set(LIBROCKET_VERSION_PATCH 0)
  23. set(LIBROCKET_VERSION_TWEAK 0)
  24. set(PROJECT_VERSION ${LIBROCKET_VERSION_MAJOR}.${LIBROCKET_VERSION_MINOR}.${LIBROCKET_VERSION_PATCH}.${LIBROCKET_VERSION_TWEAK})
  25. # Search in the 'cmake' directory for additional CMake modules.
  26. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
  27. set(CMAKE_DEBUG_POSTFIX "_d")
  28. #===================================
  29. # Environment tests ================
  30. #===================================
  31. include(TestForANSIForScope)
  32. include(TestForANSIStreamHeaders)
  33. include(TestForSTDNamespace)
  34. #===================================
  35. # Provide hints as to where depends=
  36. # might be found =
  37. #===================================
  38. if(NOT DEFINED ENV{FREETYPE_DIR})
  39. set(ENV{FREETYPE_DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  40. endif()
  41. if(NOT DEFINED ENV{Boost_DIR})
  42. set(ENV{Boost_DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  43. endif()
  44. if(NOT DEFINED ENV{LUA_DIR})
  45. set(ENV{LUA_DIR} "${PROJECT_SOURCE_DIR}/../Dependencies")
  46. endif()
  47. #===================================
  48. # Build options ====================
  49. #===================================
  50. if(NOT CMAKE_BUILD_TYPE)
  51. set(CMAKE_BUILD_TYPE Release CACHE STRING
  52. "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
  53. FORCE)
  54. endif()
  55. if(NOT IOS)
  56. option(BUILD_SHARED_LIBS "Build shared libraries" ON)
  57. endif(NOT IOS)
  58. option(BUILD_PYTHON_BINDINGS "Build python bindings" OFF)
  59. option(BUILD_LUA_BINDINGS "Build Lua bindings" OFF)
  60. if(APPLE)
  61. option(BUILD_FRAMEWORK "Build Framework bundle for OSX" OFF)
  62. endif()
  63. option(BUILD_SAMPLES "Build samples" OFF)
  64. if(WIN32)
  65. option(SKIP_DIRECTX_SAMPLES "Skip build of all DirectX related samples. Only applies if BUILD_SAMPLES is ON" OFF)
  66. 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)
  67. 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)
  68. endif()
  69. if(IOS)
  70. if(BUILD_SHARED_LIBS)
  71. message(FATAL_ERROR "BUILD_SHARED_LIBS must be OFF for iOS builds. iOS does not support shared libraries.")
  72. endif(BUILD_SHARED_LIBS)
  73. endif(IOS)
  74. if(BUILD_FRAMEWORK)
  75. if(APPLE)
  76. if(NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
  77. message(FATAL_ERROR "You should use Xcode generator with BUILD_FRAMEWORK enabled")
  78. endif()
  79. set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
  80. if(NOT BUILD_SHARED_LIBS)
  81. message(FATAL_ERROR "BUILD_SHARED_LIBS must be ON with BUILD_FRAMEWORK enabled")
  82. endif()
  83. else(APPLE)
  84. message(FATAL_ERROR "BUILD_FRAMEWORK is only supported on Mac OS X with the Xcode generator")
  85. endif(APPLE)
  86. endif()
  87. if(NOT BUILD_SHARED_LIBS)
  88. add_definitions(-DSTATIC_LIB)
  89. endif()
  90. #on windows, check for VC10 and fix the multiple compile target issue.
  91. IF(WIN32)
  92. if(MSVC)
  93. if(${MSVC_VERSION} STREQUAL 1600 OR ${MSVC_VERSION} STRGREATER 1600)
  94. message("Visual Studio 2010 (${MSVC_VERSION}) build fix at play (/FORCE:MULTIPLE)")
  95. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE:MULTIPLE")
  96. endif()
  97. endif()
  98. ENDIF(WIN32)
  99. #===================================
  100. # Find dependencies ================
  101. #===================================
  102. # FreeType
  103. find_package(Freetype REQUIRED)
  104. if(FREETYPE_FOUND)
  105. include_directories(${FREETYPE_INCLUDE_DIRS})
  106. link_directories(${FREETYPE_LINK_DIRS})
  107. list(APPEND CORE_LINK_LIBS ${FREETYPE_LIBRARY})
  108. endif()
  109. mark_as_advanced(FREETYPE_INCLUDE_DIRS FREETYPE_LIBRARY FREETYPE_LINK_DIRECTORIES)
  110. # Boost and Python
  111. if(BUILD_PYTHON_BINDINGS)
  112. find_package(PythonInterp 2 REQUIRED)
  113. find_package(PythonLibs 2 REQUIRED)
  114. execute_process(
  115. COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix=''))"
  116. OUTPUT_VARIABLE PYTHON_INSTDIR
  117. OUTPUT_STRIP_TRAILING_WHITESPACE
  118. )
  119. if(PYTHONLIBS_FOUND)
  120. include_directories(${PYTHON_INCLUDE_DIR})
  121. endif()
  122. #set(Boost_USE_STATIC_LIBS OFF)
  123. #set(Boost_USE_MULTITHREADED ON)
  124. find_package(Boost 1.40.0 COMPONENTS python REQUIRED)
  125. if(Boost_FOUND)
  126. include_directories(${Boost_INCLUDE_DIR})
  127. list(APPEND PY_BINDINGS_LINK_LIBS ${Boost_LIBRARIES})
  128. endif()
  129. endif()
  130. #Lua
  131. if(BUILD_LUA_BINDINGS)
  132. find_package(Lua)
  133. if(LUA_FOUND)
  134. include_directories(${LUA_INCLUDE_DIR})
  135. list(APPEND LUA_BINDINGS_LINK_LIBS ${LUA_LIBRARIES})
  136. endif()
  137. endif()
  138. #===================================
  139. # Setup paths ======================
  140. #===================================
  141. set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/..)
  142. include_directories(
  143. ${PROJECT_SOURCE_DIR}/Include
  144. )
  145. # Include list of source files
  146. include(FileList)
  147. if(NOT BUILD_FRAMEWORK)
  148. #===================================
  149. # Build libraries ==================
  150. #===================================
  151. set(LIBRARIES Core Controls Debugger)
  152. foreach(library ${LIBRARIES})
  153. set(NAME Rocket${library})
  154. add_library(${NAME}
  155. ${${library}_HDR_FILES}
  156. ${${library}_PUB_HDR_FILES}
  157. ${MASTER_${library}_PUB_HDR_FILES}
  158. ${${library}_SRC_FILES}
  159. )
  160. set_target_properties(${NAME} PROPERTIES
  161. VERSION ${PROJECT_VERSION}
  162. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  163. )
  164. if(APPLE)
  165. if(NOT IOS)
  166. set_target_properties(${NAME} PROPERTIES
  167. OSX_ARCHITECTURES "i386;x86_64;"
  168. )
  169. endif(NOT IOS)
  170. endif(APPLE)
  171. install(TARGETS ${NAME}
  172. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  173. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  174. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  175. )
  176. endforeach(library)
  177. else(NOT BUILD_FRAMEWORK)
  178. #===================================
  179. # Build combined Framework =========
  180. #===================================
  181. set(NAME Rocket)
  182. set(MASTER_PUB_HDR_FILES
  183. ${MASTER_Core_PUB_HDR_FILES}
  184. ${MASTER_Controls_PUB_HDR_FILES}
  185. ${MASTER_Debugger_PUB_HDR_FILES}
  186. )
  187. add_library(${NAME}
  188. ${Core_HDR_FILES}
  189. ${MASTER_Core_PUB_HDR_FILES}
  190. ${Core_PUB_HDR_FILES}
  191. ${Core_SRC_FILES}
  192. ${Controls_HDR_FILES}
  193. ${MASTER_Controls_PUB_HDR_FILES}
  194. ${Controls_PUB_HDR_FILES}
  195. ${Controls_SRC_FILES}
  196. ${Debugger_HDR_FILES}
  197. ${MASTER_Debugger_PUB_HDR_FILES}
  198. ${Debugger_PUB_HDR_FILES}
  199. ${Debugger_SRC_FILES}
  200. )
  201. set_target_properties(${NAME} PROPERTIES
  202. VERSION ${PROJECT_VERSION}
  203. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  204. )
  205. set_target_properties(${NAME} PROPERTIES
  206. OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)"
  207. )
  208. set_property(SOURCE ${MASTER_PUB_HDR_FILES}
  209. PROPERTY MACOSX_PACKAGE_LOCATION Headers
  210. )
  211. set_property(SOURCE ${Core_PUB_HDR_FILES}
  212. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Core
  213. )
  214. set_property(SOURCE ${Controls_PUB_HDR_FILES}
  215. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Controls
  216. )
  217. set_property(SOURCE ${Debugger_PUB_HDR_FILES}
  218. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Debugger
  219. )
  220. set_target_properties(${NAME} PROPERTIES
  221. FRAMEWORK TRUE
  222. FRAMEWORK_VERSION ${PROJECT_VERSION}
  223. MACOSX_FRAMEWORK_IDENTIFIER com.librocketb.${NAME}
  224. MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LIBROCKET_VERSION_MAJOR}.${LIBROCKET_VERSION_MINOR}.${LIBROCKET_VERSION_PATCH}.${LIBROCKET_VERSION_TWEAK}
  225. MACOSX_FRAMEWORK_BUNDLE_VERSION ${PROJECT_VERSION}
  226. XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
  227. PUBLIC_HEADER ${MASTER_PUB_HDR_FILES}
  228. )
  229. install(TARGETS ${NAME}
  230. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  231. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  232. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  233. FRAMEWORK DESTINATION Library/Frameworks
  234. )
  235. endif(NOT BUILD_FRAMEWORK)
  236. # Build python bindings
  237. if(BUILD_PYTHON_BINDINGS)
  238. set(LIBRARIES core controls)
  239. foreach(library ${LIBRARIES})
  240. set(NAME _rocket${library})
  241. add_library(${NAME} MODULE ${Py${library}_SRC_FILES}
  242. ${Py${library}_HDR_FILES}
  243. ${Py${library}_PUB_HDR_FILES}
  244. )
  245. set_target_properties(${NAME} PROPERTIES PREFIX "")
  246. install(TARGETS ${NAME}
  247. LIBRARY DESTINATION ${PYTHON_INSTDIR}
  248. )
  249. endforeach(library)
  250. endif()
  251. # Build Lua bindings
  252. if(BUILD_LUA_BINDINGS)
  253. set(LIBRARIES Core Controls)
  254. foreach(library ${LIBRARIES})
  255. set(NAME Rocket${library}Lua)
  256. add_library(${NAME} ${Lua${library}_SRC_FILES}
  257. ${Lua${library}_HDR_FILES}
  258. ${Lua${library}_PUB_HDR_FILES}
  259. )
  260. set_target_properties(${NAME} PROPERTIES
  261. VERSION ${PROJECT_VERSION}
  262. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  263. )
  264. if(APPLE)
  265. if(NOT IOS)
  266. set_target_properties(${NAME} PROPERTIES
  267. OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)"
  268. )
  269. endif(NOT IOS)
  270. endif(APPLE)
  271. install(TARGETS ${NAME}
  272. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  273. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  274. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  275. )
  276. endforeach(library)
  277. endif()
  278. #===================================
  279. # Link libraries ===================
  280. #===================================
  281. if(NOT BUILD_FRAMEWORK)
  282. target_link_libraries(RocketCore ${CORE_LINK_LIBS})
  283. target_link_libraries(RocketControls RocketCore)
  284. target_link_libraries(RocketDebugger RocketCore)
  285. else(NOT BUILD_FRAMEWORK)
  286. target_link_libraries(Rocket ${CORE_LINK_LIBS})
  287. endif(NOT BUILD_FRAMEWORK)
  288. if(BUILD_PYTHON_BINDINGS)
  289. if(NOT BUILD_FRAMEWORK)
  290. target_link_libraries(_rocketcore RocketCore ${PY_BINDINGS_LINK_LIBS})
  291. target_link_libraries(_rocketcontrols RocketControls ${PY_BINDINGS_LINK_LIBS})
  292. else(NOT BUILD_FRAMEWORK)
  293. target_link_libraries(_rocketcore Rocket ${PY_BINDINGS_LINK_LIBS})
  294. target_link_libraries(_rocketcontrols Rocket ${PY_BINDINGS_LINK_LIBS})
  295. endif(NOT BUILD_FRAMEWORK)
  296. endif()
  297. if(BUILD_LUA_BINDINGS)
  298. if(NOT BUILD_FRAMEWORK)
  299. target_link_libraries(RocketCoreLua RocketCore ${LUA_BINDINGS_LINK_LIBS})
  300. target_link_libraries(RocketControlsLua RocketControls RocketCoreLua ${LUA_BINDINGS_LINK_LIBS})
  301. else(NOT BUILD_FRAMEWORK)
  302. target_link_libraries(RocketCoreLua Rocket ${LUA_BINDINGS_LINK_LIBS})
  303. target_link_libraries(RocketControlsLua Rocket RocketCoreLua ${LUA_BINDINGS_LINK_LIBS})
  304. endif(NOT BUILD_FRAMEWORK)
  305. endif()
  306. #===================================
  307. # Build samples ====================
  308. #===================================
  309. # Build and link the samples
  310. macro(bl_sample NAME)
  311. if (WIN32)
  312. add_executable(${NAME} WIN32 ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  313. elseif(APPLE)
  314. add_executable(${NAME} MACOSX_BUNDLE ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  315. # The first rpath is to the proper location where the framework/library SHOULD be, the second is to the location actually seen
  316. # in the build environment
  317. if(BUILD_FRAMEWORK)
  318. set_target_properties(${NAME} PROPERTIES LINK_FLAGS "-rpath @executable_path/../Frameworks")
  319. else()
  320. set_target_properties(${NAME} PROPERTIES LINK_FLAGS "-rpath @executable_path/../lib")
  321. endif()
  322. else()
  323. add_executable(${NAME} ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  324. endif()
  325. if (APPLE)
  326. # We only support i386 for the samples as it still uses Carbon
  327. set_target_properties(${NAME} PROPERTIES OSX_ARCHITECTURES "i386;" )
  328. endif()
  329. target_link_libraries(${NAME} ${ARGN})
  330. endmacro()
  331. if(BUILD_SAMPLES)
  332. include(SampleFileList)
  333. set(samples treeview customlog drag loaddocument)
  334. set(tutorials template datagrid datagrid_tree tutorial_drag)
  335. if(NOT BUILD_FRAMEWORK)
  336. set(sample_LIBRARIES
  337. shell
  338. RocketCore
  339. RocketControls
  340. RocketDebugger
  341. )
  342. else(NOT BUILD_FRAMEWORK)
  343. set(sample_LIBRARIES
  344. shell
  345. Rocket
  346. )
  347. endif(NOT BUILD_FRAMEWORK)
  348. # Find OpenGL
  349. find_package(OpenGL REQUIRED)
  350. if(OPENGL_FOUND)
  351. include_directories(${OPENGL_INCLUDE_DIR})
  352. list(APPEND sample_LIBRARIES ${OPENGL_LIBRARIES})
  353. endif()
  354. # Set up required system libraries
  355. if(WIN32)
  356. if(SKIP_DIRECTX_SAMPLES)
  357. message("-- Skipping all DirectX samples")
  358. else()
  359. message("-- Determing if DirectX samples can be built")
  360. include(FindDirectX)
  361. find_package(DirectX)
  362. if(DirectX_FOUND)
  363. set(DIRECTX_SAMPLE_LIST)
  364. set(DIRECTX_SKIPPED_SAMPLE_LIST)
  365. # We should be able to build DirectX 9 sample
  366. message("-- Determing if DirectX samples can be built - Yes")
  367. if(SKIP_DIRECTX9_SAMPLE)
  368. message("-- Skipping build of DirectX 9 sample: User disabled")
  369. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX9 ")
  370. else()
  371. if(DirectX_LIBRARY)
  372. if(DirectX_D3DX9_LIBRARY)
  373. list(APPEND DIRECTX_SAMPLE_LIST "DirectX9 ")
  374. else()
  375. set(SKIP_DIRECTX9_SAMPLE ON)
  376. message("-- Skipping build of DirectX 9 sample: DirectX_D3DX9_LIBRARY not found")
  377. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX9 ")
  378. endif()
  379. else()
  380. set(SKIP_DIRECTX9_SAMPLE ON)
  381. message("-- Skipping build of DirectX 9 sample: DirectX_LIBRARY not found")
  382. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX9 ")
  383. endif()
  384. endif()
  385. if(SKIP_DIRECTX10_SAMPLE)
  386. message("-- Skipping build of DirectX 10 sample: User disabled")
  387. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX10 ")
  388. else()
  389. if(DirectX_D3D10_FOUND)
  390. list(APPEND DIRECTX_SAMPLE_LIST "DirectX10 ")
  391. else()
  392. set(SKIP_DIRECTX10_SAMPLE ON)
  393. message("-- Skipping build of DirectX 10 sample: Missing DirectX_D3D10_INCLUDE_DIR, DirectX_D3D10_LIBRARY or DirectX_D3DX10_LIBRARY")
  394. list(APPEND DIRECTX_SKIPPED_SAMPLE_LIST "DirectX10 ")
  395. endif()
  396. endif()
  397. if(DIRECTX_SAMPLE_LIST)
  398. message("-- Enabled DirectX samples: " ${DIRECTX_SAMPLE_LIST})
  399. endif()
  400. if(DIRECTX_SKIPPED_SAMPLE_LIST)
  401. message("-- Disabled DirectX samples: " ${DIRECTX_SKIPPED_SAMPLE_LIST})
  402. endif()
  403. else()
  404. message("-- Determing if DirectX samples can be built - No")
  405. set(SKIP_DIRECTX_SAMPLES ON)
  406. set(SKIP_DIRECTX9_SAMPLE ON)
  407. endif()
  408. endif()
  409. elseif(APPLE)
  410. include(FindCarbon)
  411. find_package(Carbon REQUIRED)
  412. if (Carbon_FOUND)
  413. include_directories(${Carbon_INCLUDE_DIR})
  414. list(APPEND sample_LIBRARIES ${Carbon_LIBRARIES})
  415. endif()
  416. else()
  417. find_package(X11 REQUIRED)
  418. if (X11_FOUND)
  419. list(APPEND sample_LIBRARIES ${X11_LIBRARIES})
  420. # shell/src/x11/InputX11.cpp:InitialiseX11Keymap uses Xkb if
  421. # possible instead of XGetKeyboardMapping for performance
  422. if(X11_Xkb_FOUND)
  423. FIND_PACKAGE_MESSAGE(X11 "Found X11 KBlib: ${X11_X11_LIB}" "[${X11_X11_LIB}][${X11_XkbINCLUDE_DIR}]")
  424. add_definitions(-DHAS_X11XKBLIB)
  425. endif()
  426. endif()
  427. endif()
  428. set(SAMPLES_DIR opt/Rocket/Samples CACHE PATH "path to samples dir")
  429. # The samples and tutorials use the shell library
  430. include_directories(${PROJECT_SOURCE_DIR}/Samples/shell/include)
  431. # Build and install sample shell library
  432. add_library(shell STATIC ${shell_SRC_FILES} ${shell_HDR_FILES})
  433. if (APPLE)
  434. # We only support i386 for the samples as it still uses Carbon
  435. set_target_properties(shell PROPERTIES OSX_ARCHITECTURES "i386;")
  436. endif()
  437. # Build and install the basic samples
  438. foreach(sample ${samples})
  439. bl_sample(${sample} ${sample_LIBRARIES})
  440. # The samples always set this as their current working directory
  441. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/${sample})
  442. install(TARGETS ${sample}
  443. RUNTIME DESTINATION ${SAMPLES_DIR}/${sample}
  444. BUNDLE DESTINATION ${SAMPLES_DIR})
  445. endforeach()
  446. if(WIN32)
  447. if(NOT SKIP_DIRECTX9_SAMPLE)
  448. include_directories(${DirectX_INCLUDE_DIR})
  449. bl_sample(directx ${sample_LIBRARIES} ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY})
  450. # The samples always set this as their current working directory
  451. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/directx)
  452. install(TARGETS directx
  453. RUNTIME DESTINATION ${SAMPLES_DIR}/directx
  454. BUNDLE DESTINATION ${SAMPLES_DIR})
  455. endif()
  456. if(NOT SKIP_DIRECTX10_SAMPLE)
  457. include_directories(${DirectX_INCLUDE_DIR} ${DirectX_D3D10_INCLUDE_DIRS})
  458. bl_sample(directx10 ${sample_LIBRARIES} ${DirectX_D3D10_LIBRARIES})
  459. # The samples always set this as their current working directory
  460. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/directx10)
  461. install(TARGETS directx10
  462. RUNTIME DESTINATION ${SAMPLES_DIR}/directx10
  463. BUNDLE DESTINATION ${SAMPLES_DIR})
  464. endif()
  465. endif()
  466. # Build and install the tutorials
  467. foreach(tutorial ${tutorials})
  468. bl_sample(${tutorial} ${sample_LIBRARIES})
  469. # The tutorials always set this as their current working directory
  470. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/tutorial/${tutorial})
  471. install(TARGETS ${tutorial}
  472. RUNTIME DESTINATION ${SAMPLES_DIR}/${tutorial}
  473. BUNDLE DESTINATION ${SAMPLES_DIR})
  474. endforeach()
  475. # Build and install invaders sample
  476. bl_sample(invaders ${sample_LIBRARIES})
  477. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/invaders)
  478. install(TARGETS invaders
  479. RUNTIME DESTINATION ${SAMPLES_DIR}/invaders
  480. BUNDLE DESTINATION ${SAMPLES_DIR})
  481. if(BUILD_PYTHON_BINDINGS)
  482. # Build and install pyinvaders sample
  483. bl_sample(pyinvaders ${sample_LIBRARIES} ${PYTHON_LIBRARIES} ${PY_BINDINGS_LINK_LIBS})
  484. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/pyinvaders)
  485. install(TARGETS pyinvaders
  486. RUNTIME DESTINATION ${SAMPLES_DIR}/pyinvaders
  487. BUNDLE DESTINATION ${SAMPLES_DIR})
  488. endif()
  489. if(BUILD_LUA_BINDINGS)
  490. bl_sample(luainvaders RocketCoreLua RocketControlsLua ${sample_LIBRARIES} ${LUA_BINDINGS_LINK_LIBS})
  491. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/luainvaders)
  492. install(TARGETS luainvaders
  493. RUNTIME DESTINATION ${SAMPLES_DIR}/luainvaders
  494. BUNDLE DESTINATION ${SAMPLES_DIR})
  495. endif()
  496. endif()
  497. #===================================
  498. # Installation =====================
  499. #===================================
  500. if(BUILD_LUA_BINDINGS AND BUILD_PYTHON_BINDINGS)
  501. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  502. DESTINATION include
  503. )
  504. else()
  505. if(NOT BUILD_LUA_BINDINGS AND NOT BUILD_PYTHON_BINDINGS)
  506. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  507. DESTINATION include
  508. PATTERN "Python" EXCLUDE
  509. PATTERN "Lua" EXCLUDE
  510. )
  511. else()
  512. if(BUILD_PYTHON_BINDINGS)
  513. install(FILES ${PROJECT_SOURCE_DIR}/bin/rocket.py
  514. DESTINATION ${PYTHON_INSTDIR}
  515. )
  516. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  517. DESTINATION include
  518. PATTERN "Lua" EXCLUDE
  519. )
  520. else()
  521. if(BUILD_LUA_BINDINGS)
  522. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  523. DESTINATION include
  524. PATTERN "Python" EXCLUDE
  525. )
  526. else()
  527. message(FATAL_ERROR "ASSERT: Unexpected option combination, this is a logical impossibility.")
  528. endif()
  529. endif()
  530. endif()
  531. endif()
  532. if(BUILD_SAMPLES)
  533. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/assets
  534. DESTINATION ${SAMPLES_DIR}
  535. )
  536. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/template/data
  537. DESTINATION ${SAMPLES_DIR}/tutorial/template
  538. )
  539. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid/data
  540. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid
  541. )
  542. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid_tree/data
  543. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid_tree
  544. )
  545. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/tutorial_drag/data
  546. DESTINATION ${SAMPLES_DIR}/tutorial/tutorial_drag
  547. )
  548. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/treeview/data
  549. DESTINATION ${SAMPLES_DIR}/basic/treeview
  550. )
  551. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/drag/data
  552. DESTINATION ${SAMPLES_DIR}/basic/drag
  553. )
  554. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/invaders/data
  555. DESTINATION ${SAMPLES_DIR}/invaders
  556. )
  557. if(BUILD_PYTHON_BINDINGS)
  558. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/pyinvaders/data
  559. DESTINATION ${SAMPLES_DIR}/pyinvaders
  560. )
  561. endif()
  562. if(BUILD_LUA_BINDINGS)
  563. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/luainvaders/data
  564. DESTINATION ${SAMPLES_DIR}/luainvaders
  565. )
  566. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/luainvaders/lua
  567. DESTINATION ${SAMPLES_DIR}/luainvaders
  568. )
  569. endif()
  570. endif()