aae3a6a466
Status output related to OBS configuration is prefixed with the string "OBS" and added padding for enabled and disabled features. This padding was not aligned between platforms. By moving the padding and prefix decoration into its own function, both elements are controlled in a single place. CMake scripts were changed to use this new function `obs_status` instead of using CMake's `message` function directly.
180 lines
5.1 KiB
CMake
180 lines
5.1 KiB
CMake
option(ENABLE_SCRIPTING_LUA "Enable Lua scripting support" ON)
|
|
option(ENABLE_SCRIPTING_PYTHON "Enable Python scripting support" ON)
|
|
|
|
if(NOT ENABLE_SCRIPTING)
|
|
obs_status(DISABLED "obs-scripting")
|
|
return()
|
|
endif()
|
|
|
|
project(obs-scripting)
|
|
|
|
if(ENABLE_SCRIPTING_LUA)
|
|
add_subdirectory(obslua)
|
|
find_package(Luajit)
|
|
|
|
if(NOT TARGET Luajit::Luajit)
|
|
obs_status(FATAL_ERROR "obs-scripting -> Luajit not found.")
|
|
return()
|
|
else()
|
|
obs_status(STATUS "obs-scripting -> Luajit found.")
|
|
endif()
|
|
else()
|
|
obs_status(DISABLED "Luajit support")
|
|
endif()
|
|
|
|
if(ENABLE_SCRIPTING_PYTHON)
|
|
add_subdirectory(obspython)
|
|
if(OS_WINDOWS)
|
|
find_package(PythonWindows)
|
|
else()
|
|
find_package(Python COMPONENTS Interpreter Development)
|
|
endif()
|
|
|
|
if(NOT TARGET Python::Python)
|
|
obs_status(FATAL_ERROR "obs-scripting -> Python not found.")
|
|
return()
|
|
else()
|
|
obs_status(STATUS "obs-scripting -> Python ${Python_VERSION} found.")
|
|
endif()
|
|
else()
|
|
obs_status(DISABLED "Python support")
|
|
endif()
|
|
|
|
if(NOT TARGET Luajit::Luajit AND NOT TARGET Python::Python)
|
|
obs_status(WARNING "obs-scripting -> No supported scripting libraries found.")
|
|
return()
|
|
endif()
|
|
|
|
if(OS_MACOS)
|
|
find_package(SWIG 4 REQUIRED)
|
|
elseif(OS_POSIX)
|
|
find_package(SWIG 3 REQUIRED)
|
|
elseif(OS_WINDOWS)
|
|
find_package(SwigWindows 3 REQUIRED)
|
|
endif()
|
|
|
|
add_library(obs-scripting SHARED)
|
|
add_library(OBS::scripting ALIAS obs-scripting)
|
|
|
|
target_sources(
|
|
obs-scripting
|
|
PUBLIC obs-scripting.h
|
|
PRIVATE obs-scripting.c cstrcache.cpp cstrcache.h obs-scripting-logging.c
|
|
obs-scripting-callback.h)
|
|
|
|
target_link_libraries(obs-scripting PRIVATE OBS::libobs)
|
|
|
|
target_compile_features(obs-scripting PRIVATE cxx_auto_type)
|
|
|
|
target_include_directories(obs-scripting PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_BINARY_DIR}/config)
|
|
|
|
if(OS_WINDOWS)
|
|
set(MODULE_DESCRIPTION "OBS Studio scripting module")
|
|
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in
|
|
obs-scripting.rc)
|
|
|
|
target_sources(obs-scripting PRIVATE obs-scripting.rc)
|
|
|
|
target_link_libraries(obs-scripting PRIVATE OBS::w32-pthreads)
|
|
|
|
elseif(OS_MACOS)
|
|
target_link_libraries(obs-scripting PRIVATE objc)
|
|
endif()
|
|
|
|
set_target_properties(
|
|
obs-scripting
|
|
PROPERTIES FOLDER "scripting"
|
|
VERSION "${OBS_VERSION_MAJOR}"
|
|
SOVERSION "1")
|
|
|
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swig)
|
|
|
|
if(TARGET Luajit::Luajit)
|
|
add_custom_command(
|
|
OUTPUT swig/swigluarun.h
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
PRE_BUILD
|
|
COMMAND ${SWIG_EXECUTABLE} -lua -external-runtime swig/swigluarun.h
|
|
COMMENT "obs-scripting - generating Luajit SWIG interface headers")
|
|
|
|
set_source_files_properties(swig/swigluarun.h PROPERTIES GENERATED ON)
|
|
|
|
target_link_libraries(obs-scripting PRIVATE Luajit::Luajit)
|
|
|
|
target_sources(
|
|
obs-scripting
|
|
PRIVATE obs-scripting-lua.c obs-scripting-lua.h obs-scripting-lua-source.c
|
|
${CMAKE_CURRENT_BINARY_DIR}/swig/swigluarun.h)
|
|
|
|
target_include_directories(obs-scripting PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
if(ENABLE_UI)
|
|
target_link_libraries(obs-scripting PRIVATE OBS::frontend-api)
|
|
|
|
target_sources(obs-scripting PRIVATE obs-scripting-lua-frontend.c)
|
|
|
|
target_compile_definitions(obs-scripting PRIVATE UI_ENABLED=ON)
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if(TARGET Python::Python)
|
|
add_custom_command(
|
|
OUTPUT swig/swigpyrun.h
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
PRE_BUILD
|
|
COMMAND ${SWIG_EXECUTABLE} -python -external-runtime swig/swigpyrun.h
|
|
COMMENT "obs-scripting - generating Python 3 SWIG interface headers")
|
|
|
|
set_source_files_properties(swig/swigpyrun.h PROPERTIES GENERATED ON)
|
|
|
|
target_sources(
|
|
obs-scripting
|
|
PRIVATE obs-scripting-python.c obs-scripting-python.h
|
|
obs-scripting-python-import.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/swig/swigpyrun.h)
|
|
|
|
target_include_directories(obs-scripting PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
get_filename_component(_PYTHON_PATH "${Python_LIBRARIES}" PATH)
|
|
get_filename_component(_PYTHON_FILE "${Python_LIBRARIES}" NAME)
|
|
|
|
string(REGEX REPLACE "\\.[^.]*$" "" _PYTHON_FILE ${_PYTHON_FILE})
|
|
|
|
if(OS_WINDOWS)
|
|
string(REGEX REPLACE "_d" "" _PYTHON_FILE ${_PYTHON_FILE})
|
|
endif()
|
|
set(OBS_SCRIPT_PYTHON_PATH "${_PYTHON_FILE}")
|
|
|
|
unset(_PYTHON_FILE)
|
|
unset(_PYTHON_PATH)
|
|
|
|
if(OS_WINDOWS OR OS_MACOS)
|
|
target_include_directories(obs-scripting PRIVATE ${Python_INCLUDE_DIRS})
|
|
|
|
target_sources(obs-scripting PRIVATE obs-scripting-python-import.c)
|
|
if(OS_MACOS)
|
|
target_link_options(obs-scripting PRIVATE -undefined dynamic_lookup)
|
|
endif()
|
|
else()
|
|
target_link_libraries(obs-scripting PRIVATE Python::Python)
|
|
endif()
|
|
|
|
if(ENABLE_UI)
|
|
target_link_libraries(obs-scripting PRIVATE OBS::frontend-api)
|
|
|
|
target_sources(obs-scripting PRIVATE obs-scripting-python-frontend.c)
|
|
|
|
target_compile_definitions(obs-scripting PRIVATE UI_ENABLED=ON)
|
|
endif()
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/obs-scripting-config.h.in
|
|
${CMAKE_BINARY_DIR}/config/obs-scripting-config.h)
|
|
|
|
target_sources(obs-scripting
|
|
PUBLIC ${CMAKE_BINARY_DIR}/config/obs-scripting-config.h)
|
|
|
|
setup_binary_target(obs-scripting)
|