1
0

python.cmake 1.8 KB

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