CMakeLists.txt 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. if(NOT BUILD_DTOOL)
  2. message(FATAL_ERROR "Cannot build panda without dtool! Please enable the BUILD_DTOOL option.")
  3. endif()
  4. # Include panda source directories
  5. add_subdirectory(src/audio)
  6. add_subdirectory(src/audiotraits)
  7. add_subdirectory(src/chan)
  8. add_subdirectory(src/char)
  9. add_subdirectory(src/cocoadisplay)
  10. add_subdirectory(src/cocoagldisplay)
  11. add_subdirectory(src/collide)
  12. add_subdirectory(src/configfiles)
  13. add_subdirectory(src/cull)
  14. add_subdirectory(src/device)
  15. add_subdirectory(src/dgraph)
  16. add_subdirectory(src/display)
  17. add_subdirectory(src/distort)
  18. add_subdirectory(src/downloader)
  19. add_subdirectory(src/downloadertools)
  20. add_subdirectory(src/dxgsg9)
  21. add_subdirectory(src/egg)
  22. add_subdirectory(src/egg2pg)
  23. add_subdirectory(src/egldisplay)
  24. add_subdirectory(src/event)
  25. add_subdirectory(src/express)
  26. add_subdirectory(src/ffmpeg)
  27. add_subdirectory(src/framework)
  28. add_subdirectory(src/glesgsg)
  29. add_subdirectory(src/gles2gsg)
  30. add_subdirectory(src/glgsg)
  31. add_subdirectory(src/glstuff)
  32. add_subdirectory(src/glxdisplay)
  33. add_subdirectory(src/gobj)
  34. add_subdirectory(src/grutil)
  35. add_subdirectory(src/gsgbase)
  36. add_subdirectory(src/linmath)
  37. add_subdirectory(src/mathutil)
  38. add_subdirectory(src/movies)
  39. add_subdirectory(src/nativenet)
  40. add_subdirectory(src/net)
  41. add_subdirectory(src/pandabase)
  42. add_subdirectory(src/parametrics)
  43. add_subdirectory(src/pgraph)
  44. add_subdirectory(src/pgraphnodes)
  45. add_subdirectory(src/pgui)
  46. add_subdirectory(src/pipeline)
  47. add_subdirectory(src/pnmimage)
  48. add_subdirectory(src/pnmimagetypes)
  49. add_subdirectory(src/pnmtext)
  50. add_subdirectory(src/pstatclient)
  51. add_subdirectory(src/putil)
  52. add_subdirectory(src/recorder)
  53. add_subdirectory(src/testbed)
  54. add_subdirectory(src/text)
  55. add_subdirectory(src/tform)
  56. add_subdirectory(src/vision)
  57. add_subdirectory(src/vrpn)
  58. add_subdirectory(src/wgldisplay)
  59. add_subdirectory(src/windisplay)
  60. add_subdirectory(src/x11display)
  61. # Creates a metalib, so should go after
  62. add_subdirectory(src/tinydisplay)
  63. # For other components
  64. # bullet
  65. add_subdirectory(src/bullet)
  66. # ode
  67. add_subdirectory(src/ode)
  68. # physics
  69. add_subdirectory(src/particlesystem)
  70. add_subdirectory(src/physics)
  71. # Include panda metalibs
  72. add_subdirectory(metalibs/panda)
  73. add_subdirectory(metalibs/pandadx9)
  74. add_subdirectory(metalibs/pandaegg)
  75. add_subdirectory(metalibs/pandaexpress)
  76. add_subdirectory(metalibs/pandagl)
  77. add_subdirectory(metalibs/pandagles)
  78. add_subdirectory(metalibs/pandagles2)
  79. add_subdirectory(metalibs/pandaphysics)
  80. # Now add the Python modules:
  81. set(CORE_MODULE_COMPONENTS
  82. p3chan p3char p3collide p3cull p3device p3dgraph p3display
  83. p3downloader p3event p3express p3gobj p3grutil p3gsgbase p3linmath
  84. p3mathutil p3movies p3parametrics p3pgraph p3pgraphnodes p3pgui
  85. p3pipeline p3pnmimage p3pstatclient p3putil p3recorder p3text p3tform
  86. p3prc p3dtoolutil p3dtoolbase
  87. )
  88. if(WANT_NATIVE_NET)
  89. list(APPEND CORE_MODULE_COMPONENTS p3nativenet)
  90. if(HAVE_NET)
  91. list(APPEND CORE_MODULE_COMPONENTS p3net)
  92. endif()
  93. endif()
  94. if(HAVE_AUDIO)
  95. list(APPEND CORE_MODULE_COMPONENTS p3audio)
  96. endif()
  97. if(HAVE_FREETYPE)
  98. list(APPEND CORE_MODULE_COMPONENTS p3pnmtext)
  99. endif()
  100. if(INTERROGATE_PYTHON_INTERFACE)
  101. add_python_module(panda3d.core ${CORE_MODULE_COMPONENTS} LINK panda INIT pyenv_init)
  102. # Generate our __init__.py
  103. if(WIN32)
  104. file(READ "${PROJECT_SOURCE_DIR}/cmake/templates/win32_python/__init__.py" win32_init)
  105. else()
  106. set(win32_init "")
  107. endif()
  108. set(init_file "\"Python bindings for the Panda3D libraries\"
  109. __version__ = '${PROJECT_VERSION}'
  110. if __debug__:
  111. if 1 / 2 == 0:
  112. raise ImportError(\"Python 2 is not supported.\")
  113. ${win32_init}")
  114. set(dtoolconfig_file "'''Alias of :mod:`panda3d.interrogatedb`.
  115. .. deprecated:: 1.10.0
  116. This module has been renamed to :mod:`panda3d.interrogatedb`.
  117. '''
  118. if __debug__:
  119. print(\"Warning: panda3d.dtoolconfig is deprecated, use panda3d.interrogatedb instead.\")
  120. from .interrogatedb import *
  121. ")
  122. set(net_file "__all__ = 'BufferedDatagramConnection', 'Buffered_DatagramConnection', 'Connection', 'ConnectionListener', 'ConnectionManager', 'ConnectionReader', 'ConnectionWriter', 'DatagramGeneratorNet', 'DatagramSinkNet', 'Dtool_BorrowThisReference', 'Dtool_PyNativeInterface', 'NetAddress', 'NetDatagram', 'PointerToBaseConnection', 'PointerToBase_Connection', 'PointerToConnection', 'PointerTo_Connection', 'QueuedConnectionListener', 'QueuedConnectionManager', 'QueuedConnectionReader', 'QueuedReturnConnectionListenerData', 'QueuedReturnDatagram', 'QueuedReturnNetDatagram', 'QueuedReturnPointerToConnection', 'QueuedReturn_ConnectionListenerData', 'QueuedReturn_Datagram', 'QueuedReturn_NetDatagram', 'QueuedReturn_PointerTo_Connection', 'RecentConnectionReader', 'SocketAddress', 'SocketFdset', 'SocketIP', 'SocketTCP', 'SocketTCPListen', 'SocketUDP', 'SocketUDPIncoming', 'SocketUDPOutgoing', 'Socket_Address', 'Socket_IP', 'Socket_TCP', 'Socket_TCP_Listen', 'Socket_UDP', 'Socket_UDP_Incoming', 'Socket_UDP_Outgoing', 'Socket_fdset'
  123. from . import core
  124. scope = globals()
  125. for name in __all__:
  126. if hasattr(core, name):
  127. scope[name] = getattr(core, name)
  128. del core, scope, name
  129. ")
  130. if(IS_MULTICONFIG)
  131. foreach(config ${CMAKE_CONFIGURATION_TYPES})
  132. # Generate an __init__.py in the per-configuration directory.
  133. file(WRITE "${PROJECT_BINARY_DIR}/${config}/panda3d/__init__.py" ${init_file})
  134. file(WRITE "${PROJECT_BINARY_DIR}/${config}/panda3d/dtoolconfig.py" ${dtoolconfig_file})
  135. if(HAVE_NET)
  136. file(WRITE "${PROJECT_BINARY_DIR}/${config}/panda3d/net.py" ${net_file})
  137. endif()
  138. endforeach(config)
  139. else()
  140. file(WRITE "${PROJECT_BINARY_DIR}/panda3d/__init__.py" ${init_file})
  141. file(WRITE "${PROJECT_BINARY_DIR}/panda3d/dtoolconfig.py" ${dtoolconfig_file})
  142. if(HAVE_NET)
  143. file(WRITE "${PROJECT_BINARY_DIR}/${config}/panda3d/net.py" ${net_file})
  144. endif()
  145. endif()
  146. # Also generate a panda3d.dist-info directory.
  147. set(entry_points_file "[distutils.commands]
  148. build_apps = direct.dist.commands:build_apps
  149. bdist_apps = direct.dist.commands:bdist_apps
  150. [setuptools.finalize_distribution_options]
  151. build_apps = direct.dist.commands:finalize_distribution_options
  152. ")
  153. configure_file("${PROJECT_SOURCE_DIR}/cmake/templates/METADATA.in"
  154. "${PROJECT_BINARY_DIR}/panda3d.dist-info/METADATA")
  155. file(WRITE "${PROJECT_BINARY_DIR}/panda3d.dist-info/entry_points.txt" ${entry_points_file})
  156. if(HAVE_BULLET)
  157. add_python_module(panda3d.bullet p3bullet IMPORT panda3d.core COMPONENT BulletPython)
  158. export_targets(BulletPython NAMESPACE "Panda3D::Python::" COMPONENT BulletDevel)
  159. endif()
  160. if(HAVE_EGG)
  161. add_python_module(panda3d.egg p3egg p3egg2pg LINK pandaegg IMPORT panda3d.core COMPONENT EggPython)
  162. export_targets(EggPython NAMESPACE "Panda3D::Python::" COMPONENT EggDevel)
  163. endif()
  164. add_python_module(panda3d.fx pandafx IMPORT panda3d.core)
  165. add_python_module(panda3d.physics p3physics p3particlesystem LINK pandaphysics IMPORT panda3d.core)
  166. if(HAVE_ODE)
  167. add_python_module(panda3d.ode p3ode IMPORT panda3d.core COMPONENT ODEPython)
  168. export_targets(ODEPython NAMESPACE "Panda3D::Python::" COMPONENT ODEDevel)
  169. endif()
  170. if(HAVE_OPENCV OR HAVE_ARTOOLKIT)
  171. add_python_module(panda3d.vision p3vision IMPORT panda3d.core COMPONENT VisionPython)
  172. export_targets(VisionPython NAMESPACE "Panda3D::Python::" COMPONENT VisionDevel)
  173. endif()
  174. if(HAVE_VRPN)
  175. add_python_module(panda3d.vrpn p3vrpn IMPORT panda3d.core COMPONENT VRPNPython)
  176. set_target_properties(panda3d.vrpn PROPERTIES CXX_EXCEPTIONS ON)
  177. export_targets(VRPNPython NAMESPACE "Panda3D::Python::" COMPONENT VRPNDevel)
  178. endif()
  179. export_targets(Python NAMESPACE "Panda3D::Python::" COMPONENT CoreDevel)
  180. endif()
  181. export_targets(Core COMPONENT CoreDevel)