python.cmake 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. cmake_minimum_required(VERSION 3.22...3.25)
  2. option(ENABLE_SCRIPTING_PYTHON "Enable Python scripting support" ON)
  3. if(ENABLE_SCRIPTING_PYTHON)
  4. add_subdirectory(obspython)
  5. if(OS_WINDOWS)
  6. find_package(Python 3.8...<3.11 REQUIRED Interpreter Development)
  7. elseif(OS_LINUX OR OS_FREEBSD OR OS_OPENBSD)
  8. find_package(Python 3.8 REQUIRED Interpreter Development)
  9. else()
  10. find_package(Python 3.8...<3.12 REQUIRED Interpreter Development)
  11. endif()
  12. add_custom_command(
  13. OUTPUT swig/swigpyrun.h
  14. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  15. PRE_BUILD
  16. COMMAND ${CMAKE_COMMAND} -E make_directory swig
  17. COMMAND
  18. ${CMAKE_COMMAND} -E env "SWIG_LIB=${SWIG_DIR}" ${SWIG_EXECUTABLE} -python
  19. $<$<PLATFORM_ID:Windows,Darwin>:-py3-stable-abi> -external-runtime swig/swigpyrun.h
  20. COMMENT "obs-scripting - generating Python 3 SWIG interface headers"
  21. )
  22. set_source_files_properties(swig/swigpyrun.h PROPERTIES GENERATED TRUE)
  23. target_sources(
  24. obs-scripting
  25. PRIVATE
  26. $<$<BOOL:${ENABLE_UI}>:obs-scripting-python-frontend.c>
  27. $<$<PLATFORM_ID:Windows,Darwin>:obs-scripting-python-import.c>
  28. obs-scripting-python-import.h
  29. obs-scripting-python.c
  30. obs-scripting-python.h
  31. swig/swigpyrun.h
  32. )
  33. target_compile_definitions(
  34. obs-scripting
  35. PRIVATE ENABLE_SCRIPTING PYTHON_LIB="$<TARGET_LINKER_FILE_NAME:Python::Python>"
  36. PUBLIC Python_FOUND
  37. )
  38. target_include_directories(
  39. obs-scripting
  40. PRIVATE "$<$<PLATFORM_ID:Windows,Darwin>:$<TARGET_PROPERTY:Python::Python,INTERFACE_INCLUDE_DIRECTORIES>>"
  41. )
  42. target_link_libraries(obs-scripting PRIVATE $<$<PLATFORM_ID:Linux,FreeBSD,OpenBSD>:Python::Python>)
  43. target_link_options(obs-scripting PRIVATE $<$<PLATFORM_ID:Darwin>:LINKER:-undefined,dynamic_lookup>)
  44. else()
  45. target_disable_feature(obs-scripting "Python scripting support")
  46. endif()