Procházet zdrojové kódy

libuvc: add package (#7227)

* libuvc: add package

* Update xmake.lua

* p4w limit

* fix add_patches

* `add_deps("cmake")`

---------

Co-authored-by: Saikari <[email protected]>
choyy před 2 měsíci
rodič
revize
dada7b28aa

+ 94 - 0
packages/l/libuvc/patches/2024.03.05/windows.patch

@@ -0,0 +1,94 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fbaffc9..4e0c343 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -39,11 +39,13 @@ set(SOURCES
+   src/misc.c
+ )
+ 
+-find_package(LibUSB)
++find_package(PkgConfig REQUIRED)
++pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb)
++pkg_check_modules(pthreads4w REQUIRED IMPORTED_TARGET pthreads4w)
+ 
+ # JpegPkg name to differ from shipped with CMake
+-find_package(JpegPkg QUIET)
+-if(JPEG_FOUND)
++pkg_check_modules(libjpeg REQUIRED IMPORTED_TARGET libjpeg)
++if(libjpeg_FOUND)
+   message(STATUS "Building libuvc with JPEG support.")
+   set(LIBUVC_HAS_JPEG TRUE)
+   list(APPEND SOURCES src/frame-mjpeg.c)
+@@ -70,6 +72,7 @@ else()
+ endif()
+ 
+ if(BUILD_UVC_SHARED)
++  set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+   add_library(uvc SHARED ${SOURCES})
+   set_target_properties(uvc PROPERTIES
+     VERSION ${libuvc_VERSION}
+@@ -116,11 +119,12 @@ foreach(target_name IN LISTS UVC_TARGETS)
+   )
+   target_link_libraries(${target_name}
+     # libusb-1.0 used internally so we link to it privately.
+-    PRIVATE LibUSB::LibUSB ${threads}
++    PRIVATE PkgConfig::libusb
++    PRIVATE PkgConfig::pthreads4w
+   )
+-  if(JPEG_FOUND)
++  if(libjpeg_FOUND)
+     target_link_libraries(${target_name}
+-      PRIVATE JPEG::JPEG
++      PRIVATE PkgConfig::libjpeg
+     )
+   endif()
+   set_target_properties(${target_name} PROPERTIES
+@@ -191,12 +195,6 @@ install(EXPORT libuvcTargets
+   DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
+ )
+ 
+-install(FILES 
+-    cmake/FindLibUSB.cmake
+-    cmake/FindJpegPkg.cmake
+-  DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
+-)
+-
+ include(CMakePackageConfigHelpers)
+ write_basic_package_version_file(libuvcConfigVersion.cmake
+   COMPATIBILITY AnyNewerVersion
+@@ -207,7 +205,7 @@ install(FILES
+   DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
+ )
+ 
+-if(JPEG_FOUND)
++if(libjpeg_FOUND)
+   # If we have used JPEG library we need to 
+   # add linker flag for it in config file for pkgconfig
+   set(PKGCONFIG_JPEG_LDFLAG "-ljpeg")
+diff --git a/include/libuvc/libuvc.h b/include/libuvc/libuvc.h
+index d387150..6ed6d50 100644
+--- a/include/libuvc/libuvc.h
++++ b/include/libuvc/libuvc.h
+@@ -7,7 +7,8 @@ extern "C" {
+ 
+ #include <stdio.h> // FILE
+ #include <stdint.h>
+-#include <sys/time.h>
++#include <time.h>
++#include <winsock.h>
+ #include <libuvc/libuvc_config.h>
+ 
+ struct libusb_context;
+diff --git a/src/stream.c b/src/stream.c
+index 89dac69..d5ae5e4 100644
+--- a/src/stream.c
++++ b/src/stream.c
+@@ -659,7 +659,7 @@ void _uvc_swap_buffers(uvc_stream_handle_t *strmh) {
+ 
+   pthread_mutex_lock(&strmh->cb_mutex);
+ 
+-  (void)clock_gettime(CLOCK_MONOTONIC, &strmh->capture_time_finished);
++  timespec_get(&strmh->capture_time_finished, TIME_UTC);
+ 
+   /* swap the buffers */
+   tmp_buf = strmh->holdbuf;

+ 35 - 0
packages/l/libuvc/xmake.lua

@@ -0,0 +1,35 @@
+package("libuvc")
+    set_homepage("https://github.com/libuvc/libuvc")
+    set_description("A cross-platform video device oynchronous I/O.")
+    set_license("BSD-3-Clause")
+
+    add_urls("https://github.com/libuvc/libuvc.git")
+    add_versions("2024.03.05", "047920bcdfb1dac42424c90de5cc77dfc9fba04d")
+
+    add_configs("jpeg", {description = "Enable jpeg support.", default = true, type = "boolean"})
+
+    add_deps("cmake")
+    add_deps("libusb")
+
+    if is_plat("windows") then
+        add_patches("2024.03.05", "patches/2024.03.05/windows.patch", "87eae0b3bbc07038654a5ef7f5f7d0213472436e517f9b65963353738bb0a3dc")
+        add_deps("pkgconf", "pthreads4w")
+    end
+
+    on_load(function (package)
+        if package:config("jpeg") then
+            package:add("deps", "libjpeg")
+        end
+    end)
+
+    on_install("windows|x64", "windows|x86", function (package)
+        local configs = {}
+        table.insert(configs, "-DBUILD_EXAMPLE=OFF")
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
+        table.insert(configs, "-DCMAKE_BUILD_TARGET=" .. (package:config("shared") and "Shared" or "Static"))
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        assert(package:has_cfuncs("uvc_init", {includes = "libuvc/libuvc.h"}))
+    end)