[arch-commits] Commit in sdl2/trunk (PKGBUILD fix-hidapi.patch)
Sven-Hendrik Haase
svenstaro at archlinux.org
Mon Jul 6 10:37:24 UTC 2020
Date: Monday, July 6, 2020 @ 10:37:24
Author: svenstaro
Revision: 390909
upgpkg: sdl2 2.0.12-2: Enable HIDAPI joystick drivers (FS#67174)
Added:
sdl2/trunk/fix-hidapi.patch
Modified:
sdl2/trunk/PKGBUILD
------------------+
PKGBUILD | 10 ++-
fix-hidapi.patch | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 173 insertions(+), 2 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2020-07-06 10:33:24 UTC (rev 390908)
+++ PKGBUILD 2020-07-06 10:37:24 UTC (rev 390909)
@@ -13,14 +13,20 @@
optdepends=('alsa-lib: ALSA audio driver'
'libpulse: PulseAudio audio driver'
'jack: JACK audio driver')
-source=("https://www.libsdl.org/release/SDL2-${pkgver}.tar.gz"{,.sig})
+source=("https://www.libsdl.org/release/SDL2-${pkgver}.tar.gz"{,.sig}
+ fix-hidapi.patch)
sha512sums=('3f1f04af0f3d9dda9c84a2e9274ae8d83ea0da3fc367970a820036cc4dc1dbf990cfc37e4975ae05f0b45a4ffa739c6c19e470c00bf3f2bce9b8b63717b8b317'
- 'SKIP')
+ 'SKIP'
+ '69b2e8857dd514cbef3aad60717bb7b2a4621124cd3b90158bf439ee91f301ad847fbde0fd9f08f245f921c285a62e458a4b0e0f7faddf7f2a4d8681c189443a')
validpgpkeys=('1528635D8053A57F77D1E08630A59377A7763BE6') # Sam Lantinga
prepare() {
cd SDL2-${pkgver}
+ # For until https://bugzilla.libsdl.org/show_bug.cgi?id=5221 is fixed
sed -i "s/LIBUSB libusb/LIBUSB libusb-1.0/g" cmake/sdlchecks.cmake
+
+ # https://bugzilla.libsdl.org/show_bug.cgi?id=5222
+ patch -Np1 -i "${srcdir}"/fix-hidapi.patch
}
build() {
Added: fix-hidapi.patch
===================================================================
--- fix-hidapi.patch (rev 0)
+++ fix-hidapi.patch 2020-07-06 10:37:24 UTC (rev 390909)
@@ -0,0 +1,165 @@
+--- a/src/hidapi/SDL_hidapi.c Sun Jun 28 17:45:07 2020 -0400
++++ a/src/hidapi/SDL_hidapi.c Mon Jul 06 10:47:27 2020 +0200
+@@ -301,7 +301,7 @@
+ #include "hidapi.h"
+
+ struct hidapi_backend {
+-#define F(x) typeof(x) *x
++#define F(x) __typeof__(x) *x
+ F(hid_write);
+ F(hid_read_timeout);
+ F(hid_read);
+@@ -458,8 +458,9 @@
+ #ifdef SDL_LIBUSB_DYNAMIC
+ libusb_ctx.libhandle = SDL_LoadObject(SDL_LIBUSB_DYNAMIC);
+ if (libusb_ctx.libhandle != NULL) {
++ SDL_bool loaded = SDL_TRUE;
+ #define LOAD_LIBUSB_SYMBOL(func) \
+- libusb_ctx.func = SDL_LoadFunction(libusb_ctx.libhandle, "libusb_" #func);
++ if (!(libusb_ctx.func = SDL_LoadFunction(libusb_ctx.libhandle, "libusb_" #func))) {loaded = SDL_FALSE;}
+ LOAD_LIBUSB_SYMBOL(init)
+ LOAD_LIBUSB_SYMBOL(exit)
+ LOAD_LIBUSB_SYMBOL(get_device_list)
+@@ -488,9 +489,17 @@
+ LOAD_LIBUSB_SYMBOL(handle_events_completed)
+ #undef LOAD_LIBUSB_SYMBOL
+
+- if ((err = LIBUSB_hid_init()) < 0) {
++ if (loaded == SDL_TRUE) {
++ if ((err = LIBUSB_hid_init()) < 0) {
++ SDL_UnloadObject(libusb_ctx.libhandle);
++ libusb_ctx.libhandle = NULL;
++ return err;
++ }
++ } else {
+ SDL_UnloadObject(libusb_ctx.libhandle);
+- return err;
++ libusb_ctx.libhandle = NULL;
++ /* SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, SDL_LIBUSB_DYNAMIC " found but could not load function."); */
++ /* ignore error: continue without libusb */
+ }
+ }
+ #endif /* SDL_LIBUSB_DYNAMIC */
+@@ -502,13 +511,16 @@
+ if (udev_ctx && (err = PLATFORM_hid_init()) < 0) {
+ #ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle) {
++ LIBUSB_hid_exit();
+ SDL_UnloadObject(libusb_ctx.libhandle);
++ libusb_ctx.libhandle = NULL;
+ }
+ #endif /* SDL_LIBUSB_DYNAMIC */
+ return err;
+ }
+ #endif /* HAVE_PLATFORM_BACKEND */
+
++ SDL_hidapi_wasinit = SDL_TRUE;
+ return 0;
+ }
+
+@@ -519,6 +531,7 @@
+ if (SDL_hidapi_wasinit == SDL_FALSE) {
+ return 0;
+ }
++ SDL_hidapi_wasinit = SDL_FALSE;
+
+ #if HAVE_PLATFORM_BACKEND
+ if (udev_ctx) {
+@@ -529,6 +542,7 @@
+ if (libusb_ctx.libhandle) {
+ err |= LIBUSB_hid_exit(); /* Ehhhhh */
+ SDL_UnloadObject(libusb_ctx.libhandle);
++ libusb_ctx.libhandle = NULL;
+ }
+ #endif /* SDL_LIBUSB_DYNAMIC */
+ return err;
+@@ -546,16 +560,30 @@
+ #endif
+ struct hid_device_info *devs = NULL, *last = NULL, *new_dev;
+
+- if (SDL_hidapi_wasinit == SDL_FALSE) {
+- hid_init();
++ if (hid_init() != 0) {
++ return NULL;
+ }
+
+ #ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle) {
+ usb_devs = LIBUSB_hid_enumerate(vendor_id, product_id);
++ #ifdef DEBUG_HIDAPI
++ SDL_Log("libusb devices found:");
++ #endif
+ for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) {
+ new_dev = (struct hid_device_info*) SDL_malloc(sizeof(struct hid_device_info));
++ if (!new_dev) {
++ LIBUSB_hid_free_enumeration(usb_devs);
++ hid_free_enumeration(devs);
++ SDL_OutOfMemory();
++ return NULL;
++ }
+ LIBUSB_CopyHIDDeviceInfo(usb_dev, new_dev);
++ #ifdef DEBUG_HIDAPI
++ SDL_Log(" - %ls %ls 0x%.4hx 0x%.4hx",
++ usb_dev->manufacturer_string, usb_dev->product_string,
++ usb_dev->vendor_id, usb_dev->product_id);
++ #endif
+
+ if (last != NULL) {
+ last->next = new_dev;
+@@ -570,8 +598,16 @@
+ #if HAVE_PLATFORM_BACKEND
+ if (udev_ctx) {
+ raw_devs = PLATFORM_hid_enumerate(vendor_id, product_id);
++#ifdef DEBUG_HIDAPI
++ SDL_Log("hidraw devices found:");
++#endif
+ for (raw_dev = raw_devs; raw_dev; raw_dev = raw_dev->next) {
+ SDL_bool bFound = SDL_FALSE;
++#ifdef DEBUG_HIDAPI
++ SDL_Log(" - %ls %ls 0x%.4hx 0x%.4hx",
++ raw_dev->manufacturer_string, raw_dev->product_string,
++ raw_dev->vendor_id, raw_dev->product_id);
++#endif
+ #ifdef SDL_LIBUSB_DYNAMIC
+ for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) {
+ if (raw_dev->vendor_id == usb_dev->vendor_id &&
+@@ -584,6 +620,17 @@
+ #endif
+ if (!bFound) {
+ new_dev = (struct hid_device_info*) SDL_malloc(sizeof(struct hid_device_info));
++ if (!new_dev) {
++#ifdef SDL_LIBUSB_DYNAMIC
++ if (libusb_ctx.libhandle) {
++ LIBUSB_hid_free_enumeration(usb_devs);
++ }
++#endif
++ PLATFORM_hid_free_enumeration(raw_devs);
++ hid_free_enumeration(devs);
++ SDL_OutOfMemory();
++ return NULL;
++ }
+ PLATFORM_CopyHIDDeviceInfo(raw_dev, new_dev);
+ new_dev->next = NULL;
+
+@@ -624,8 +671,8 @@
+ {
+ hid_device *pDevice = NULL;
+
+- if (SDL_hidapi_wasinit == SDL_FALSE) {
+- hid_init();
++ if (hid_init() != 0) {
++ return NULL;
+ }
+
+ #if HAVE_PLATFORM_BACKEND
+@@ -651,8 +698,8 @@
+ {
+ hid_device *pDevice = NULL;
+
+- if (SDL_hidapi_wasinit == SDL_FALSE) {
+- hid_init();
++ if (hid_init() != 0) {
++ return NULL;
+ }
+
+ #if HAVE_PLATFORM_BACKEND
More information about the arch-commits
mailing list