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