CMakeLists.txt 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. if(POLICY CMP0078)
  2. cmake_policy(SET CMP0078 NEW)
  3. endif()
  4. if(POLICY CMP0086)
  5. cmake_policy(SET CMP0086 NEW)
  6. endif()
  7. project(obspython)
  8. if(OS_MACOS)
  9. find_package(Python REQUIRED COMPONENTS Interpreter Development)
  10. find_package(SWIG 4 REQUIRED)
  11. elseif(OS_POSIX)
  12. find_package(Python REQUIRED COMPONENTS Interpreter Development)
  13. find_package(SWIG 3 REQUIRED)
  14. elseif(OS_WINDOWS)
  15. find_package(PythonWindows REQUIRED)
  16. find_package(SwigWindows 3 REQUIRED)
  17. endif()
  18. include(UseSWIG)
  19. set_source_files_properties(
  20. obspython.i
  21. PROPERTIES
  22. USE_TARGET_INCLUDE_DIRECTORIES TRUE
  23. SWIG_FLAGS
  24. "$<IF:$<AND:$<BOOL:${OS_POSIX}>,$<NOT:$<BOOL:${OS_MACOS}>>>,-py3,-py3-stable-abi>"
  25. )
  26. swig_add_library(
  27. obspython
  28. LANGUAGE python
  29. TYPE MODULE
  30. SOURCES obspython.i ../cstrcache.cpp ../cstrcache.h)
  31. target_link_libraries(obspython PRIVATE OBS::scripting OBS::libobs)
  32. list(APPEND _SWIG_DEFINITIONS "SWIG_TYPE_TABLE=obspython" "Py_ENABLE_SHARED=1"
  33. "SWIG_PYTHON_INTERPRETER_NO_DEBUG")
  34. target_compile_features(obspython PRIVATE cxx_auto_type c_std_11)
  35. target_compile_definitions(
  36. obspython PRIVATE SWIG_TYPE_TABLE=obspython Py_ENABLE_SHARED=1
  37. SWIG_PYTHON_INTERPRETER_NO_DEBUG)
  38. if(ENABLE_UI)
  39. list(APPEND _SWIG_DEFINITIONS "ENABLE_UI")
  40. target_link_libraries(obspython PRIVATE OBS::frontend-api)
  41. target_compile_definitions(obspython PRIVATE ENABLE_UI)
  42. endif()
  43. set_target_properties(obspython PROPERTIES SWIG_COMPILE_DEFINITIONS
  44. "${_SWIG_DEFINITIONS}")
  45. if(OS_WINDOWS)
  46. set_target_properties(
  47. obspython PROPERTIES SWIG_COMPILE_DEFINITIONS
  48. "${_SWIG_DEFINITIONS};MS_NO_COREDLL")
  49. target_link_libraries(obspython PRIVATE Python::Python)
  50. target_compile_options(obspython PRIVATE /wd4100 /wd4197)
  51. if(MSVC)
  52. add_custom_command(
  53. TARGET obspython
  54. POST_BUILD
  55. COMMAND
  56. "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
  57. "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/obspython.py"
  58. VERBATIM)
  59. endif()
  60. elseif(OS_MACOS)
  61. get_target_property(_PYTHON_INCLUDE_DIRECTORY Python::Python
  62. INTERFACE_INCLUDE_DIRECTORIES)
  63. target_include_directories(obspython PRIVATE ${_PYTHON_INCLUDE_DIRECTORY})
  64. target_link_options(obspython PRIVATE -undefined dynamic_lookup)
  65. target_compile_options(obspython PRIVATE -Wno-unused-parameter)
  66. if(XCODE)
  67. add_custom_command(
  68. TARGET obspython
  69. POST_BUILD
  70. COMMAND
  71. "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
  72. "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/obspython.py"
  73. VERBATIM)
  74. endif()
  75. set_target_properties(obspython PROPERTIES MACHO_CURRENT_VERSION 0
  76. MACHO_COMPATIBILITY_VERSION 0)
  77. elseif(OS_POSIX)
  78. target_link_libraries(obspython PRIVATE Python::Python)
  79. target_compile_options(obspython PRIVATE -Wno-unused-parameter)
  80. endif()
  81. set_target_properties(
  82. obspython
  83. PROPERTIES FOLDER "scripting"
  84. VERSION "${OBS_VERSION_MAJOR}"
  85. SOVERSION "${OBS_VERSION_CANONICAL}")
  86. setup_script_plugin_target(obspython)