1
0

python.cmake 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. else()
  8. find_package(Python 3.8...<3.12 REQUIRED Interpreter Development)
  9. endif()
  10. else()
  11. target_disable_feature(obs-scripting "Python scripting support")
  12. endif()
  13. target_sources(obs-scripting PRIVATE obs-scripting-python.c obs-scripting-python.h obs-scripting-python-import.h)
  14. target_compile_definitions(
  15. obs-scripting
  16. PRIVATE ENABLE_SCRIPTING PYTHON_LIB="$<TARGET_LINKER_FILE_NAME:Python::Python>"
  17. PUBLIC Python_FOUND)
  18. add_custom_command(
  19. OUTPUT swig/swigpyrun.h
  20. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  21. PRE_BUILD
  22. COMMAND ${CMAKE_COMMAND} -E make_directory swig
  23. COMMAND ${CMAKE_COMMAND} -E env "SWIG_LIB=${SWIG_DIR}" ${SWIG_EXECUTABLE} -python
  24. $<IF:$<BOOL:${OS_LINUX}>,-py3,-py3-stable-abi> -external-runtime swig/swigpyrun.h
  25. COMMENT "obs-scripting - generating Python 3 SWIG interface headers")
  26. target_sources(obs-scripting PRIVATE swig/swigpyrun.h)
  27. set_source_files_properties(swig/swigpyrun.h PROPERTIES GENERATED ON)
  28. if(OS_WINDOWS)
  29. target_sources(obs-scripting PRIVATE obs-scripting-python-import.c)
  30. get_target_property(_python_include_directory Python::Python INTERFACE_INCLUDE_DIRECTORIES)
  31. target_include_directories(obs-scripting PRIVATE ${_python_include_directory})
  32. elseif(OS_MACOS)
  33. target_sources(obs-scripting PRIVATE obs-scripting-python-import.c)
  34. get_target_property(_python_include_directory Python::Python INTERFACE_INCLUDE_DIRECTORIES)
  35. target_include_directories(obs-scripting PRIVATE ${_python_include_directory})
  36. target_link_options(obs-scripting PRIVATE LINKER:-undefined LINKER:dynamic_lookup)
  37. elseif(OS_LINUX OR OS_FREEBSD)
  38. target_link_libraries(obs-scripting PRIVATE Python::Python)
  39. endif()