CMakeLists.txt 4.1 KB

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