v4l2codecs: Fix compilation error on FreeBSD
authorTing-Wei Lan <lantw@src.gnome.org>
Sun, 10 May 2020 09:38:11 +0000 (17:38 +0800)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 11 May 2020 15:17:31 +0000 (15:17 +0000)
This commit does the following things to fix compilation on FreeBSD:

1. Add required typedefs to linux/types-compat.h.
2. Remove unnecessary include linux/ioctl.h and replace linux/types.h
   with linux/types-compat.h. Both files do not exist on FreeBSD.
3. Check the header including makedev macro. FreeBSD does not have
   sys/sysmacros.h, and including it unconditionally causes error.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1259>

sys/v4l2codecs/gstv4l2codecdevice.c
sys/v4l2codecs/linux/media.h
sys/v4l2codecs/linux/types-compat.h
sys/v4l2codecs/meson.build

index b1e74b8f84c2b7a8a1661dcc7d03d4aa23a4aed6..7886c7991c5fd1510fcf35fbfc1366c7d4e96c35 100644 (file)
  * Boston, MA 02110-1301, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include "gstv4l2codecdevice.h"
 #include "linux/media.h"
 
 #include <gudev/gudev.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
+
+#if HAVE_MAKEDEV_IN_MKDEV
+#include <sys/mkdev.h>
+#elif HAVE_MAKEDEV_IN_SYSMACROS
 #include <sys/sysmacros.h>
+#elif HAVE_MAKEDEV_IN_TYPES
+#include <sys/types.h>
+#endif
 #include <unistd.h>
 
 #define GST_CAT_DEFAULT gstv4l2codecs_debug
index dbf55ce1fb9d915dbfe8be7ee1be79dcb0a7a6d5..42ca51fc418c86292b5c49dea47f1f7342479b60 100644 (file)
@@ -24,8 +24,7 @@
 #include <stdint.h>
 #define __user
 #endif
-#include <linux/ioctl.h>
-#include <linux/types.h>
+#include "linux/types-compat.h"
 
 struct media_device_info {
        char driver[16];
index ea21c9513fae250981b73f93337c6df1d6e1631b..68d03e594c4ab12c2fcffd1978ce12c44d8102ff 100644 (file)
@@ -46,7 +46,9 @@
 #  endif
 #endif
 
+typedef gint8   __s8;
 typedef guint8  __u8;
+typedef gint16  __s16;
 typedef guint16 __u16;
 typedef gint32  __s32;
 typedef guint32 __u32;
index d87628592e190b578483e80f896b000920852a25..886798bee5a0d40dfe96c56d419bbf394853cf83 100644 (file)
@@ -21,6 +21,13 @@ else
   if get_option('v4l2codecs').enabled() and not have_v4l2
     error('V4L2i CODECs is requested but kernel headers were not found')
   endif
+
+  # Find makedev in various header files. Different operating systems put the
+  # macro in different header files.
+  foreach name: ['mkdev', 'sysmacros', 'types']
+    have_makedev = cc.has_header_symbol('sys/@0@.h'.format(name), 'makedev')
+    cdata.set10('HAVE_MAKEDEV_IN_' + name.to_upper(), have_makedev)
+  endforeach
 endif