Browse Source

plugins: Add Linux-specific plugins for CMake build framework 3.0

PatTheMav 1 year ago
parent
commit
4ecfdb722f

+ 8 - 7
plugins/linux-alsa/CMakeLists.txt

@@ -1,8 +1,11 @@
-project(linux-alsa)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 option(ENABLE_ALSA "Build OBS with ALSA support" ON)
+
 if(NOT ENABLE_ALSA)
-  obs_status(DISABLED "linux-alsa")
+  target_disable(linux-alsa)
   return()
 endif()
 
@@ -11,10 +14,8 @@ find_package(ALSA REQUIRED)
 add_library(linux-alsa MODULE)
 add_library(OBS::alsa ALIAS linux-alsa)
 
-target_sources(linux-alsa PRIVATE linux-alsa.c alsa-input.c)
-
+target_sources(linux-alsa PRIVATE # cmake-format: sortable
+                                  alsa-input.c linux-alsa.c)
 target_link_libraries(linux-alsa PRIVATE OBS::libobs ALSA::ALSA)
 
-set_target_properties(linux-alsa PROPERTIES FOLDER "plugins")
-
-setup_plugin_target(linux-alsa)
+set_target_properties_obs(linux-alsa PROPERTIES FOLDER plugins PREFIX "")

+ 20 - 0
plugins/linux-alsa/cmake/legacy.cmake

@@ -0,0 +1,20 @@
+project(linux-alsa)
+
+option(ENABLE_ALSA "Build OBS with ALSA support" ON)
+if(NOT ENABLE_ALSA)
+  obs_status(DISABLED "linux-alsa")
+  return()
+endif()
+
+find_package(ALSA REQUIRED)
+
+add_library(linux-alsa MODULE)
+add_library(OBS::alsa ALIAS linux-alsa)
+
+target_sources(linux-alsa PRIVATE linux-alsa.c alsa-input.c)
+
+target_link_libraries(linux-alsa PRIVATE OBS::libobs ALSA::ALSA)
+
+set_target_properties(linux-alsa PROPERTIES FOLDER "plugins")
+
+setup_plugin_target(linux-alsa)

+ 27 - 19
plugins/linux-capture/CMakeLists.txt

@@ -1,37 +1,45 @@
-project(linux-capture)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 find_package(X11 REQUIRED)
-find_package(XCB COMPONENTS XCB XFIXES RANDR SHM XINERAMA COMPOSITE)
-if(NOT TARGET XCB::COMPOSITE)
-  obs_status(FATAL_ERROR "xcb composite library not found")
-endif()
+
+# cmake-format: off
+find_package(Xcb REQUIRED xcb
+                          xcb-xfixes
+                          xcb-randr
+                          xcb-shm
+                          xcb-xinerama
+                          xcb-composite)
+# cmake-format: on
 
 add_library(linux-capture MODULE)
 add_library(OBS::capture ALIAS linux-capture)
 
 target_sources(
   linux-capture
-  PRIVATE linux-capture.c
+  PRIVATE # cmake-format: sortable
+          linux-capture.c
+          xcomposite-input.c
+          xcomposite-input.h
           xcursor-xcb.c
           xcursor-xcb.h
           xhelpers.c
           xhelpers.h
-          xshm-input.c
-          xcomposite-input.c
-          xcomposite-input.h)
+          xshm-input.c)
 
 target_link_libraries(
   linux-capture
   PRIVATE OBS::libobs
-          OBS::obsglad
+          OBS::glad
           X11::X11
-          XCB::XCB
-          XCB::XFIXES
-          XCB::RANDR
-          XCB::SHM
-          XCB::XINERAMA
-          XCB::COMPOSITE)
-
-set_target_properties(linux-capture PROPERTIES FOLDER "plugins")
+          xcb::xcb
+          xcb::xcb-xfixes
+          xcb::xcb-randr
+          xcb::xcb-shm
+          xcb::xcb-xinerama
+          xcb::xcb-composite)
 
-setup_plugin_target(linux-capture)
+# cmake-format: off
+set_target_properties_obs(linux-capture PROPERTIES FOLDER "plugins")
+# cmake-format: on

+ 37 - 0
plugins/linux-capture/cmake/legacy.cmake

@@ -0,0 +1,37 @@
+project(linux-capture)
+
+find_package(X11 REQUIRED)
+find_package(XCB COMPONENTS XCB XFIXES RANDR SHM XINERAMA COMPOSITE)
+if(NOT TARGET XCB::COMPOSITE)
+  obs_status(FATAL_ERROR "xcb composite library not found")
+endif()
+
+add_library(linux-capture MODULE)
+add_library(OBS::capture ALIAS linux-capture)
+
+target_sources(
+  linux-capture
+  PRIVATE linux-capture.c
+          xcursor-xcb.c
+          xcursor-xcb.h
+          xhelpers.c
+          xhelpers.h
+          xshm-input.c
+          xcomposite-input.c
+          xcomposite-input.h)
+
+target_link_libraries(
+  linux-capture
+  PRIVATE OBS::libobs
+          OBS::obsglad
+          X11::X11
+          XCB::XCB
+          XCB::XFIXES
+          XCB::RANDR
+          XCB::SHM
+          XCB::XINERAMA
+          XCB::COMPOSITE)
+
+set_target_properties(linux-capture PROPERTIES FOLDER "plugins")
+
+setup_plugin_target(linux-capture)

+ 9 - 6
plugins/linux-jack/CMakeLists.txt

@@ -1,8 +1,10 @@
-project(linux-jack)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 option(ENABLE_JACK "Build OBS with JACK support" OFF)
 if(NOT ENABLE_JACK)
-  obs_status(DISABLED "linux-jack")
+  target_disable(linux-jack)
   return()
 endif()
 
@@ -11,10 +13,11 @@ find_package(Jack REQUIRED)
 add_library(linux-jack MODULE)
 add_library(OBS::jack ALIAS linux-jack)
 
-target_sources(linux-jack PRIVATE linux-jack.c jack-wrapper.c jack-input.c)
+target_sources(linux-jack PRIVATE # cmake-format: sortable
+                                  jack-input.c jack-wrapper.c linux-jack.c)
 
-target_link_libraries(linux-jack PRIVATE OBS::libobs Jack::Jack)
+target_compile_options(linux-jack PRIVATE $<$<COMPILE_LANG_AND_ID:C,Clang>:-Wno-error=sign-compare>)
 
-set_target_properties(linux-jack PROPERTIES FOLDER "plugins" PROJECT_LABEL "JACK Audio")
+target_link_libraries(linux-jack PRIVATE OBS::libobs Jack::Jack)
 
-setup_plugin_target(linux-jack)
+set_target_properties_obs(linux-jack PROPERTIES FOLDER plugins PREFIX "" PROJECT_LABEL "JACK Audio")

+ 20 - 0
plugins/linux-jack/cmake/legacy.cmake

@@ -0,0 +1,20 @@
+project(linux-jack)
+
+option(ENABLE_JACK "Build OBS with JACK support" OFF)
+if(NOT ENABLE_JACK)
+  obs_status(DISABLED "linux-jack")
+  return()
+endif()
+
+find_package(Jack REQUIRED)
+
+add_library(linux-jack MODULE)
+add_library(OBS::jack ALIAS linux-jack)
+
+target_sources(linux-jack PRIVATE linux-jack.c jack-wrapper.c jack-input.c)
+
+target_link_libraries(linux-jack PRIVATE OBS::libobs Jack::Jack)
+
+set_target_properties(linux-jack PROPERTIES FOLDER "plugins" PROJECT_LABEL "JACK Audio")
+
+setup_plugin_target(linux-jack)

+ 21 - 22
plugins/linux-pipewire/CMakeLists.txt

@@ -1,29 +1,34 @@
-project(linux-pipewire)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 option(ENABLE_PIPEWIRE "Enable PipeWire support" ON)
 if(NOT ENABLE_PIPEWIRE)
-  obs_status(DISABLED "linux-pipewire")
+  target_disable(linux-pipewire)
   return()
 endif()
 
 find_package(PipeWire 0.3.33 REQUIRED)
-find_package(Gio QUIET)
-find_package(Libdrm QUIET) # we require libdrm/drm_fourcc.h to build
-
-if(NOT TARGET PipeWire::PipeWire)
-  obs_status(FATAL_ERROR "PipeWire library not found! Please install PipeWire or set ENABLE_PIPEWIRE=OFF.")
-elseif(NOT TARGET GIO::GIO)
-  obs_status(FATAL_ERROR "Gio library not found! Please install GLib2 (or Gio) or set ENABLE_PIPEWIRE=OFF.")
-elseif(NOT TARGET Libdrm::Libdrm)
-  obs_status(FATAL_ERROR "libdrm headers not found! Please install libdrm or set ENABLE_PIPEWIRE=OFF.")
-endif()
+find_package(Gio REQUIRED)
+find_package(Libdrm REQUIRED)
+get_target_property(libdrm_include_directories Libdrm::Libdrm INTERFACE_INCLUDE_DIRECTORIES)
 
 add_library(linux-pipewire MODULE)
 add_library(OBS::pipewire ALIAS linux-pipewire)
 
+if(PipeWire_VERSION VERSION_GREATER_EQUAL 0.3.60)
+  target_enable_feature(linux-pipewire "PipeWire 0.3.60+ camera support")
+  set(_HAS_PIPEWIRE_CAMERA TRUE)
+else()
+  set(_HAS_PIPEWIRE_CAMERA FALSE)
+endif()
+
 target_sources(
   linux-pipewire
-  PRIVATE formats.c
+  PRIVATE # cmake-format: sortable
+          $<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:camera-portal.c>
+          $<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:camera-portal.h>
+          formats.c
           formats.h
           linux-pipewire.c
           pipewire.c
@@ -33,14 +38,8 @@ target_sources(
           screencast-portal.c
           screencast-portal.h)
 
-target_link_libraries(linux-pipewire PRIVATE OBS::libobs OBS::obsglad PipeWire::PipeWire GIO::GIO Libdrm::Libdrm)
-
-if(PIPEWIRE_VERSION VERSION_GREATER_EQUAL 0.3.60)
-  obs_status(STATUS "PipeWire 0.3.60+ found, enabling camera support")
-
-  target_sources(linux-pipewire PRIVATE camera-portal.c camera-portal.h)
-endif()
+target_include_directories(linux-pipewire PRIVATE ${libdrm_include_directories})
 
-set_target_properties(linux-pipewire PROPERTIES FOLDER "plugins")
+target_link_libraries(linux-pipewire PRIVATE OBS::libobs OBS::glad PipeWire::PipeWire gio::gio)
 
-setup_plugin_target(linux-pipewire)
+set_target_properties_obs(linux-pipewire PROPERTIES FOLDER plugins PREFIX "")

+ 46 - 0
plugins/linux-pipewire/cmake/legacy.cmake

@@ -0,0 +1,46 @@
+project(linux-pipewire)
+
+option(ENABLE_PIPEWIRE "Enable PipeWire support" ON)
+if(NOT ENABLE_PIPEWIRE)
+  obs_status(DISABLED "linux-pipewire")
+  return()
+endif()
+
+find_package(PipeWire 0.3.33 REQUIRED)
+find_package(Gio QUIET)
+find_package(Libdrm QUIET) # we require libdrm/drm_fourcc.h to build
+
+if(NOT TARGET PipeWire::PipeWire)
+  obs_status(FATAL_ERROR "PipeWire library not found! Please install PipeWire or set ENABLE_PIPEWIRE=OFF.")
+elseif(NOT TARGET GIO::GIO)
+  obs_status(FATAL_ERROR "Gio library not found! Please install GLib2 (or Gio) or set ENABLE_PIPEWIRE=OFF.")
+elseif(NOT TARGET Libdrm::Libdrm)
+  obs_status(FATAL_ERROR "libdrm headers not found! Please install libdrm or set ENABLE_PIPEWIRE=OFF.")
+endif()
+
+add_library(linux-pipewire MODULE)
+add_library(OBS::pipewire ALIAS linux-pipewire)
+
+target_sources(
+  linux-pipewire
+  PRIVATE formats.c
+          formats.h
+          linux-pipewire.c
+          pipewire.c
+          pipewire.h
+          portal.c
+          portal.h
+          screencast-portal.c
+          screencast-portal.h)
+
+target_link_libraries(linux-pipewire PRIVATE OBS::libobs OBS::obsglad PipeWire::PipeWire GIO::GIO Libdrm::Libdrm)
+
+if(PIPEWIRE_VERSION VERSION_GREATER_EQUAL 0.3.60)
+  obs_status(STATUS "PipeWire 0.3.60+ found, enabling camera support")
+
+  target_sources(linux-pipewire PRIVATE camera-portal.c camera-portal.h)
+endif()
+
+set_target_properties(linux-pipewire PROPERTIES FOLDER "plugins")
+
+setup_plugin_target(linux-pipewire)

+ 8 - 10
plugins/linux-pulseaudio/CMakeLists.txt

@@ -1,7 +1,9 @@
-project(linux-pulseaudio)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 if(NOT ENABLE_PULSEAUDIO)
-  obs_status(DISABLED "linux-pulseaudio")
+  target_disable(linux-pulseaudio)
   return()
 endif()
 
@@ -10,12 +12,8 @@ find_package(PulseAudio REQUIRED)
 add_library(linux-pulseaudio MODULE)
 add_library(OBS::pulseaudio ALIAS linux-pulseaudio)
 
-target_sources(linux-pulseaudio PRIVATE linux-pulseaudio.c pulse-wrapper.c pulse-input.c)
-
-target_include_directories(linux-pulseaudio PRIVATE ${PULSEAUDIO_INCLUDE_DIR})
-
-target_link_libraries(linux-pulseaudio PRIVATE OBS::libobs ${PULSEAUDIO_LIBRARY})
-
-set_target_properties(linux-pulseaudio PROPERTIES FOLDER "plugins")
+target_sources(linux-pulseaudio PRIVATE # cmake-format: sortable
+                                        linux-pulseaudio.c pulse-input.c pulse-wrapper.c)
+target_link_libraries(linux-pulseaudio PRIVATE OBS::libobs PulseAudio::PulseAudio)
 
-setup_plugin_target(linux-pulseaudio)
+set_target_properties_obs(linux-pulseaudio PROPERTIES FOLDER plugins PREFIX "")

+ 21 - 0
plugins/linux-pulseaudio/cmake/legacy.cmake

@@ -0,0 +1,21 @@
+project(linux-pulseaudio)
+
+if(NOT ENABLE_PULSEAUDIO)
+  obs_status(DISABLED "linux-pulseaudio")
+  return()
+endif()
+
+find_package(PulseAudio REQUIRED)
+
+add_library(linux-pulseaudio MODULE)
+add_library(OBS::pulseaudio ALIAS linux-pulseaudio)
+
+target_sources(linux-pulseaudio PRIVATE linux-pulseaudio.c pulse-wrapper.c pulse-input.c)
+
+target_include_directories(linux-pulseaudio PRIVATE ${PULSEAUDIO_INCLUDE_DIR})
+
+target_link_libraries(linux-pulseaudio PRIVATE OBS::libobs ${PULSEAUDIO_LIBRARY})
+
+set_target_properties(linux-pulseaudio PROPERTIES FOLDER "plugins")
+
+setup_plugin_target(linux-pulseaudio)

+ 23 - 11
plugins/linux-v4l2/CMakeLists.txt

@@ -1,31 +1,43 @@
-project(linux-v4l2)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 option(ENABLE_V4L2 "Build OBS with v4l2 support" ON)
+option(ENABLE_UDEV "Build linux-v4l2 with UDEV support" ON)
+
 if(NOT ENABLE_V4L2)
-  obs_status(DISABLED "linux-v4l2")
+  target_disable(linux-v4l2)
   return()
 endif()
 
-option(ENABLE_UDEV "Build linux-v4l2 with UDEV support" ON)
-
 find_package(Libv4l2 REQUIRED)
 find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
 
+if(OS_FREEBSD OR OS_OPENBSD)
+  set(CMAKE_REQUIRED_INCLUDES "/usr/local/include")
+endif()
+include(CheckCSourceCompiles)
+set(V4L_TEST_SOURCE "#include<linux/videodev2.h>\nint main(){return 0;}")
+check_c_source_compiles("${V4L_TEST_SOURCE}" HAVE_VIDEODEV2_HEADER)
+
+if(NOT HAVE_VIDEODEV2_HEADER)
+  message(FATAL_ERROR "Required system header <linux/videodev2.h> not found.")
+endif()
+
 add_library(linux-v4l2 MODULE)
 add_library(OBS::v4l2 ALIAS linux-v4l2)
 
-target_sources(linux-v4l2 PRIVATE linux-v4l2.c v4l2-controls.c v4l2-input.c v4l2-helpers.c v4l2-output.c v4l2-decoder.c)
-
-target_link_libraries(linux-v4l2 PRIVATE OBS::libobs LIB4L2::LIB4L2 FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil)
+target_sources(linux-v4l2 PRIVATE # cmake-format: sortable
+                                  linux-v4l2.c v4l2-controls.c v4l2-decoder.c v4l2-helpers.c v4l2-input.c v4l2-output.c)
 
-set_target_properties(linux-v4l2 PROPERTIES FOLDER "plugins")
+target_link_libraries(linux-v4l2 PRIVATE OBS::libobs Libv4l2::Libv4l2 FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil)
 
 if(ENABLE_UDEV)
-  find_package(Udev REQUIRED)
+  find_package(Libudev REQUIRED)
   target_sources(linux-v4l2 PRIVATE v4l2-udev.c)
 
-  target_link_libraries(linux-v4l2 PRIVATE Udev::Udev)
+  target_link_libraries(linux-v4l2 PRIVATE Libudev::Libudev)
   target_compile_definitions(linux-v4l2 PRIVATE HAVE_UDEV)
 endif()
 
-setup_plugin_target(linux-v4l2)
+set_target_properties_obs(linux-v4l2 PROPERTIES FOLDER plugins PREFIX "")

+ 31 - 0
plugins/linux-v4l2/cmake/legacy.cmake

@@ -0,0 +1,31 @@
+project(linux-v4l2)
+
+option(ENABLE_V4L2 "Build OBS with v4l2 support" ON)
+if(NOT ENABLE_V4L2)
+  obs_status(DISABLED "linux-v4l2")
+  return()
+endif()
+
+option(ENABLE_UDEV "Build linux-v4l2 with UDEV support" ON)
+
+find_package(Libv4l2 REQUIRED)
+find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
+
+add_library(linux-v4l2 MODULE)
+add_library(OBS::v4l2 ALIAS linux-v4l2)
+
+target_sources(linux-v4l2 PRIVATE linux-v4l2.c v4l2-controls.c v4l2-input.c v4l2-helpers.c v4l2-output.c v4l2-decoder.c)
+
+target_link_libraries(linux-v4l2 PRIVATE OBS::libobs LIB4L2::LIB4L2 FFmpeg::avcodec FFmpeg::avformat FFmpeg::avutil)
+
+set_target_properties(linux-v4l2 PROPERTIES FOLDER "plugins")
+
+if(ENABLE_UDEV)
+  find_package(Udev REQUIRED)
+  target_sources(linux-v4l2 PRIVATE v4l2-udev.c)
+
+  target_link_libraries(linux-v4l2 PRIVATE Udev::Udev)
+  target_compile_definitions(linux-v4l2 PRIVATE HAVE_UDEV)
+endif()
+
+setup_plugin_target(linux-v4l2)

+ 6 - 7
plugins/obs-libfdk/CMakeLists.txt

@@ -1,9 +1,10 @@
-project(obs-libfdk)
+cmake_minimum_required(VERSION 3.22...3.25)
 
-option(ENABLE_LIBFDK "Enable FDK AAC support" OFF)
+legacy_check()
 
+option(ENABLE_LIBFDK "Enable FDK AAC support" OFF)
 if(NOT ENABLE_LIBFDK)
-  obs_status(DISABLED "obs-libfdk")
+  target_disable(obs-libfdk)
   return()
 endif()
 
@@ -14,8 +15,6 @@ add_library(OBS::libfdk ALIAS obs-libfdk)
 
 target_sources(obs-libfdk PRIVATE obs-libfdk.c)
 
-target_link_libraries(obs-libfdk PRIVATE OBS::libobs LibFDK::LibFDK)
-
-set_target_properties(obs-libfdk PROPERTIES FOLDER "plugins" PREFIX "")
+target_link_libraries(obs-libfdk PRIVATE OBS::libobs Libfdk::Libfdk)
 
-setup_plugin_target(obs-libfdk)
+set_target_properties_obs(obs-libfdk PROPERTIES FOLDER plugins PREFIX "")

+ 21 - 0
plugins/obs-libfdk/cmake/legacy.cmake

@@ -0,0 +1,21 @@
+project(obs-libfdk)
+
+option(ENABLE_LIBFDK "Enable FDK AAC support" OFF)
+
+if(NOT ENABLE_LIBFDK)
+  obs_status(DISABLED "obs-libfdk")
+  return()
+endif()
+
+find_package(Libfdk REQUIRED)
+
+add_library(obs-libfdk MODULE)
+add_library(OBS::libfdk ALIAS obs-libfdk)
+
+target_sources(obs-libfdk PRIVATE obs-libfdk.c)
+
+target_link_libraries(obs-libfdk PRIVATE OBS::libobs LibFDK::LibFDK)
+
+set_target_properties(obs-libfdk PROPERTIES FOLDER "plugins" PREFIX "")
+
+setup_plugin_target(obs-libfdk)

+ 5 - 11
plugins/oss-audio/CMakeLists.txt

@@ -1,9 +1,11 @@
-project(oss-audio)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 option(ENABLE_OSS "Enable building with OSS audio support" ON)
 
 if(NOT ENABLE_OSS)
-  obs_status(DISABLED "oss-audio")
+  target_disable(oss-audio)
   return()
 endif()
 
@@ -16,12 +18,4 @@ target_sources(oss-audio PRIVATE oss-audio.c oss-input.c)
 
 target_link_libraries(oss-audio PRIVATE OBS::libobs OSS::OSS)
 
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/oss-platform.h.in oss-platform.h)
-
-target_include_directories(oss-audio PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
-
-target_sources(oss-audio PRIVATE oss-platform.h)
-
-set_target_properties(oss-audio PROPERTIES FOLDER "plugins")
-
-setup_plugin_target(oss-audio)
+set_target_properties_obs(oss-audio PROPERTIES FOLDER plugins PREFIX "")

+ 27 - 0
plugins/oss-audio/cmake/legacy.cmake

@@ -0,0 +1,27 @@
+project(oss-audio)
+
+option(ENABLE_OSS "Enable building with OSS audio support" ON)
+
+if(NOT ENABLE_OSS)
+  obs_status(DISABLED "oss-audio")
+  return()
+endif()
+
+find_package(OSS REQUIRED)
+
+add_library(oss-audio MODULE)
+add_library(OBS::oss-audio ALIAS oss-audio)
+
+target_sources(oss-audio PRIVATE oss-audio.c oss-input.c)
+
+target_link_libraries(oss-audio PRIVATE OBS::libobs OSS::OSS)
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/oss-platform.h.in oss-platform.h)
+
+target_include_directories(oss-audio PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
+
+target_sources(oss-audio PRIVATE oss-platform.h)
+
+set_target_properties(oss-audio PROPERTIES FOLDER "plugins")
+
+setup_plugin_target(oss-audio)

+ 7 - 5
plugins/sndio/CMakeLists.txt

@@ -1,8 +1,10 @@
-project(sndio)
+cmake_minimum_required(VERSION 3.22...3.25)
+
+legacy_check()
 
 option(ENABLE_SNDIO "Build OBS with sndio support" OFF)
 if(NOT ENABLE_SNDIO)
-  obs_status(DISABLED "sndio")
+  target_disable(sndio)
   return()
 endif()
 
@@ -13,8 +15,8 @@ add_library(OBS::sndio ALIAS sndio)
 
 target_sources(sndio PRIVATE sndio.c sndio-input.c)
 
-target_link_libraries(sndio PRIVATE OBS::libobs Sndio::Sndio)
+target_compile_options(sndio PRIVATE -Wno-error=vla)
 
-set_target_properties(sndio PROPERTIES FOLDER "plugins")
+target_link_libraries(sndio PRIVATE OBS::libobs Sndio::Sndio)
 
-setup_plugin_target(sndio)
+set_target_properties_obs(sndio PROPERTIES FOLDER plugins PREFIX "")

+ 20 - 0
plugins/sndio/cmake/legacy.cmake

@@ -0,0 +1,20 @@
+project(sndio)
+
+option(ENABLE_SNDIO "Build OBS with sndio support" OFF)
+if(NOT ENABLE_SNDIO)
+  obs_status(DISABLED "sndio")
+  return()
+endif()
+
+find_package(Sndio REQUIRED)
+
+add_library(sndio MODULE)
+add_library(OBS::sndio ALIAS sndio)
+
+target_sources(sndio PRIVATE sndio.c sndio-input.c)
+
+target_link_libraries(sndio PRIVATE OBS::libobs Sndio::Sndio)
+
+set_target_properties(sndio PROPERTIES FOLDER "plugins")
+
+setup_plugin_target(sndio)