legacy.cmake 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 PROPERTIES USE_TARGET_INCLUDE_DIRECTORIES TRUE
  21. SWIG_FLAGS "$<IF:$<AND:$<BOOL:${OS_POSIX}>,$<NOT:$<BOOL:${OS_MACOS}>>>,-py3,-py3-stable-abi>")
  22. swig_add_library(
  23. obspython
  24. LANGUAGE python
  25. TYPE MODULE
  26. SOURCES obspython.i ../cstrcache.cpp ../cstrcache.h)
  27. file(
  28. GENERATE
  29. OUTPUT $<$<PLATFORM_ID:Windows>:$<CONFIG>/>obspython.h
  30. CONTENT "#pragma once\n\n#define PYTHON_LIB \"$<TARGET_LINKER_FILE_NAME:Python::Python>\"")
  31. target_include_directories(obspython PRIVATE "$<$<PLATFORM_ID:Windows>:${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>>"
  32. "${CMAKE_CURRENT_BINARY_DIR}")
  33. target_link_libraries(obspython PRIVATE OBS::scripting OBS::libobs)
  34. list(APPEND _SWIG_DEFINITIONS "SWIG_TYPE_TABLE=obspython" "Py_ENABLE_SHARED=1" "SWIG_PYTHON_INTERPRETER_NO_DEBUG")
  35. target_compile_features(obspython PRIVATE cxx_auto_type c_std_11)
  36. target_compile_definitions(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 "${_SWIG_DEFINITIONS}")
  44. if(OS_WINDOWS)
  45. set_target_properties(obspython PROPERTIES SWIG_COMPILE_DEFINITIONS "${_SWIG_DEFINITIONS};MS_NO_COREDLL")
  46. target_link_libraries(obspython PRIVATE Python::Python)
  47. target_compile_options(obspython PRIVATE /wd4100 /wd4197)
  48. if(MSVC)
  49. add_custom_command(
  50. TARGET obspython
  51. POST_BUILD
  52. COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
  53. "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/obspython.py"
  54. VERBATIM)
  55. endif()
  56. elseif(OS_MACOS)
  57. get_target_property(_PYTHON_INCLUDE_DIRECTORY Python::Python INTERFACE_INCLUDE_DIRECTORIES)
  58. target_include_directories(obspython PRIVATE ${_PYTHON_INCLUDE_DIRECTORY})
  59. target_link_options(obspython PRIVATE -undefined dynamic_lookup)
  60. target_compile_options(obspython PRIVATE -Wno-unused-parameter -Wno-error=macro-redefined)
  61. if(XCODE)
  62. add_custom_command(
  63. TARGET obspython
  64. POST_BUILD
  65. COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
  66. "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/obspython.py"
  67. VERBATIM)
  68. endif()
  69. set_target_properties(obspython PROPERTIES MACHO_CURRENT_VERSION 0 MACHO_COMPATIBILITY_VERSION 0)
  70. elseif(OS_POSIX)
  71. target_link_libraries(obspython PRIVATE Python::Python)
  72. target_compile_options(obspython PRIVATE -Wno-unused-parameter)
  73. endif()
  74. set_target_properties(
  75. obspython
  76. PROPERTIES FOLDER "scripting"
  77. VERSION "${OBS_VERSION_MAJOR}"
  78. SOVERSION "${OBS_VERSION_CANONICAL}")
  79. setup_script_plugin_target(obspython)