CMakeLists.txt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. cmake_minimum_required(VERSION 2.8)
  2. if(NOT ENABLE_SCRIPTING)
  3. message(STATUS "Scripting plugin disabled")
  4. return()
  5. endif()
  6. project(obs-scripting)
  7. if(MSVC)
  8. set(obs-scripting_PLATFORM_DEPS
  9. w32-pthreads)
  10. endif()
  11. option(DISABLE_LUA "Disable Lua scripting support" OFF)
  12. option(DISABLE_PYTHON "Disable Python scripting support" OFF)
  13. set(COMPILE_PYTHON FALSE CACHE BOOL "" FORCE)
  14. set(COMPILE_LUA FALSE CACHE BOOL "" FORCE)
  15. if(NOT DISABLE_LUA)
  16. find_package(Luajit QUIET)
  17. if(NOT DISABLE_LUA AND NOT LUAJIT_FOUND)
  18. message(STATUS "Luajit support not found.")
  19. set(LUAJIT_FOUND FALSE)
  20. else()
  21. message(STATUS "Scripting: Luajit supported")
  22. set(COMPILE_LUA TRUE CACHE BOOL "" FORCE)
  23. endif()
  24. else()
  25. message(STATUS "Scripting: Luajit support disabled")
  26. set(LUAJIT_FOUND FALSE)
  27. endif()
  28. if(NOT DISABLE_PYTHON)
  29. find_package(PythonDeps QUIET)
  30. if(NOT DISABLE_PYTHON AND NOT PYTHONLIBS_FOUND)
  31. message(STATUS "Python support not found.")
  32. set(PYTHON_FOUND FALSE)
  33. set(PYTHONLIBS_FOUND FALSE)
  34. else()
  35. message(STATUS "Scripting: Python 3 supported")
  36. set(PYTHON_FOUND TRUE)
  37. set(COMPILE_PYTHON TRUE CACHE BOOL "" FORCE)
  38. get_filename_component(PYTHON_LIB "${PYTHON_LIBRARIES}" NAME)
  39. string(REGEX REPLACE "\\.[^.]*$" "" PYTHON_LIB ${PYTHON_LIB})
  40. if(WIN32)
  41. string(REGEX REPLACE "_d" "" PYTHON_LIB "${PYTHON_LIB}")
  42. endif()
  43. endif()
  44. else()
  45. message(STATUS "Scripting: Python 3 support disabled")
  46. set(PYTHON_FOUND FALSE)
  47. set(PYTHONLIBS_FOUND FALSE)
  48. endif()
  49. find_package(SwigDeps QUIET 2)
  50. if(NOT SWIG_FOUND)
  51. message(STATUS "Scripting: SWIG not found; scripting disabled")
  52. return()
  53. endif()
  54. if(NOT PYTHONLIBS_FOUND AND NOT LUAJIT_FOUND)
  55. message(STATUS "Scripting: Neither Python 3 nor Luajit was found; scripting plugin disabled")
  56. return()
  57. endif()
  58. set(SCRIPTING_ENABLED ON CACHE BOOL "Interal global cmake variable" FORCE)
  59. if(UI_ENABLED)
  60. set(EXTRA_LIBS obs-frontend-api)
  61. include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/UI/obs-frontend-api")
  62. endif()
  63. IF(BUILD_CAPTIONS)
  64. string(TOUPPER "${BUILD_CAPTIONS}" BUILD_CAPTIONS)
  65. endif()
  66. configure_file(
  67. "${CMAKE_CURRENT_SOURCE_DIR}/obs-scripting-config.h.in"
  68. "${CMAKE_CURRENT_BINARY_DIR}/obs-scripting-config.h")
  69. include(${SWIG_USE_FILE})
  70. include_directories(${CMAKE_SOURCE_DIR}/libobs)
  71. include_directories(${CMAKE_CURRENT_SOURCE_DIR})
  72. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  73. if(PYTHONLIBS_FOUND)
  74. include_directories(${PYTHON_INCLUDE_DIR})
  75. set(obs-scripting-python_SOURCES
  76. obs-scripting-python.c
  77. )
  78. set(obs-scripting-python_HEADERS
  79. obs-scripting-python.h
  80. obs-scripting-python-import.h
  81. )
  82. if(UI_ENABLED)
  83. set(obs-scripting-python_SOURCES
  84. ${obs-scripting-python_SOURCES}
  85. obs-scripting-python-frontend.c
  86. )
  87. endif()
  88. if(WIN32 OR APPLE)
  89. set(obs-scripting-python_SOURCES
  90. ${obs-scripting-python_SOURCES}
  91. obs-scripting-python-import.c
  92. )
  93. else()
  94. set(EXTRA_LIBS ${EXTRA_LIBS} ${PYTHON_LIBRARIES})
  95. endif()
  96. endif()
  97. if(LUAJIT_FOUND)
  98. include_directories(${LUAJIT_INCLUDE_DIR})
  99. set(obs-scripting-lua_SOURCES
  100. obs-scripting-lua.c
  101. obs-scripting-lua-source.c
  102. )
  103. set(obs-scripting-lua_HEADERS
  104. obs-scripting-lua.h
  105. )
  106. if(UI_ENABLED)
  107. set(obs-scripting-lua_SOURCES
  108. ${obs-scripting-lua_SOURCES}
  109. obs-scripting-lua-frontend.c
  110. )
  111. endif()
  112. endif()
  113. set(obs-scripting_SOURCES
  114. obs-scripting.c
  115. obs-scripting-logging.c
  116. cstrcache.cpp
  117. )
  118. set(obs-scripting_HEADERS
  119. ${CMAKE_CURRENT_BINARY_DIR}/obs-scripting-config.h
  120. obs-scripting.h
  121. obs-scripting-callback.h
  122. cstrcache.h
  123. )
  124. file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swig)
  125. if(PYTHONLIBS_FOUND)
  126. set(SWIG_PY_RUNTIME swig/swigpyrun.h)
  127. add_custom_command(OUTPUT ${SWIG_PY_RUNTIME}
  128. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  129. PRE_BUILD
  130. COMMAND ${SWIG_EXECUTABLE} -python -external-runtime ${SWIG_PY_RUNTIME}
  131. COMMENT "Scripting plugin: Building Python SWIG interface header"
  132. )
  133. set_source_files_properties(${SWIG_PY_RUNTIME} PROPERTIES GENERATED TRUE)
  134. endif()
  135. if(LUAJIT_FOUND)
  136. set(SWIG_LUA_RUNTIME swig/swigluarun.h)
  137. add_custom_command(OUTPUT ${SWIG_LUA_RUNTIME}
  138. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  139. PRE_BUILD
  140. COMMAND ${SWIG_EXECUTABLE} -lua -external-runtime ${SWIG_LUA_RUNTIME}
  141. COMMENT "Scripting: Building Lua SWIG interface header"
  142. )
  143. set_source_files_properties(${SWIG_LUA_RUNTIME} PROPERTIES GENERATED TRUE)
  144. endif()
  145. add_library(obs-scripting SHARED
  146. ${obs-scripting_SOURCES}
  147. ${obs-scripting_HEADERS}
  148. ${obs-scripting-python_SOURCES}
  149. ${obs-scripting-python_HEADERS}
  150. ${obs-scripting-lua_SOURCES}
  151. ${obs-scripting-lua_HEADERS}
  152. ${SWIG_PY_RUNTIME}
  153. ${SWIG_LUA_RUNTIME}
  154. )
  155. target_link_libraries(obs-scripting
  156. libobs
  157. ${LUAJIT_LIBRARIES}
  158. ${EXTRA_LIBS}
  159. ${obs-scripting_PLATFORM_DEPS}
  160. )
  161. if(PYTHONLIBS_FOUND)
  162. add_subdirectory(obspython)
  163. endif()
  164. if(LUAJIT_FOUND)
  165. add_subdirectory(obslua)
  166. endif()
  167. install_obs_core(obs-scripting)