Source: libdrm
Version: 2.4.102-1
Severity: important
Tags: ftbfs, patch
User: debian-k...@lists.debian.org
Usertags: kfreebsd

Hello,

Currently libdrm FTBFS GNU/kFreeBSD (and GNU/Hurd) due to usage of
#elif __FreeBSD__ instead of #elif defined(__FreeBSD__) in xf86drm.c.

Attached is a patch to fix this: xf86drm.c.diff. For completeness all
entries of #ifdef __linux__ are also replaced by #if
defined(__linux__), and similar for ifdef __FreeBSD__. This patch is
enough to make libdrm build properly on kfreebsd-any.

Patches for Hurd together with fixes for PATH_MAX issues will be added
to bug report #909436. 

Thanks!
Index: libdrm-2.4.102/xf86drm.c
===================================================================
--- libdrm-2.4.102.orig/xf86drm.c
+++ libdrm-2.4.102/xf86drm.c
@@ -491,7 +491,7 @@ drm_public int drmAvailable(void)
     int           fd;
 
     if ((fd = drmOpenMinor(0, 1, DRM_NODE_PRIMARY)) < 0) {
-#ifdef __linux__
+#if defined(__linux__)
         /* Try proc for backward Linux compatibility */
         if (!access("/proc/dri/0", R_OK))
             return 1;
@@ -524,7 +524,7 @@ static int drmGetMinorBase(int type)
 
 static int drmGetMinorType(int major, int minor)
 {
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__)
     char name[SPECNAMELEN];
     int id;
 
@@ -688,7 +688,7 @@ static int drmOpenByName(const char *nam
         }
     }
 
-#ifdef __linux__
+#if defined(__linux__)
     /* Backward-compatibility /proc support */
     for (i = 0; i < 8; i++) {
         char proc_name[64], buf[512];
@@ -2775,7 +2775,7 @@ drm_public int drmIsMaster(int fd)
 
 drm_public char *drmGetDeviceNameFromFd(int fd)
 {
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__)
     struct stat sbuf;
     int maj, min;
     int nodetype;
@@ -2815,14 +2815,14 @@ drm_public char *drmGetDeviceNameFromFd(
 
 static bool drmNodeIsDRM(int maj, int min)
 {
-#ifdef __linux__
+#if defined(__linux__)
     char path[64];
     struct stat sbuf;
 
     snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device/drm",
              maj, min);
     return stat(path, &sbuf) == 0;
-#elif __FreeBSD__
+#elif defined(__FreeBSD__)
     char name[SPECNAMELEN];
 
     if (!devname_r(makedev(maj, min), S_IFCHR, name, sizeof(name)))
@@ -2894,7 +2894,7 @@ drm_public int drmPrimeFDToHandle(int fd
 
 static char *drmGetMinorNameForFD(int fd, int type)
 {
-#ifdef __linux__
+#if defined(__linux__)
     DIR *sysdir;
     struct dirent *ent;
     struct stat sbuf;
@@ -2935,7 +2935,7 @@ static char *drmGetMinorNameForFD(int fd
 
     closedir(sysdir);
     return NULL;
-#elif __FreeBSD__
+#elif defined(__FreeBSD__)
     struct stat sbuf;
     char dname[SPECNAMELEN];
     const char *mname;
@@ -2998,7 +2998,7 @@ static char *drmGetMinorNameForFD(int fd
         return NULL;
 
     n = snprintf(buf, sizeof(buf), dev_name, DRM_DIR_NAME, min);
-    if (n == -1 || n >= sizeof(buf))
+    if (n == -1 || n >= (int)sizeof(buf))
         return NULL;
 
     return strdup(buf);
@@ -3015,7 +3015,7 @@ drm_public char *drmGetRenderDeviceNameF
     return drmGetMinorNameForFD(fd, DRM_NODE_RENDER);
 }
 
-#ifdef __linux__
+#if defined(__linux__)
 static char * DRM_PRINTFLIKE(2, 3)
 sysfs_uevent_get(const char *path, const char *fmt, ...)
 {
@@ -3062,7 +3062,7 @@ sysfs_uevent_get(const char *path, const
 /* Little white lie to avoid major rework of the existing code */
 #define DRM_BUS_VIRTIO 0x10
 
-#ifdef __linux__
+#if defined(__linux__)
 static int get_subsystem_type(const char *device_path)
 {
     char path[PATH_MAX + 1] = "";
@@ -3101,7 +3101,7 @@ static int get_subsystem_type(const char
 
 static int drmParseSubsystemType(int maj, int min)
 {
-#ifdef __linux__
+#if defined(__linux__)
     char path[PATH_MAX + 1] = "";
     char real_path[PATH_MAX + 1] = "";
     int subsystem_type;
@@ -3128,7 +3128,7 @@ static int drmParseSubsystemType(int maj
 #endif
 }
 
-#ifdef __linux__
+#if defined(__linux__)
 static void
 get_pci_path(int maj, int min, char *pci_path)
 {
@@ -3146,7 +3146,7 @@ get_pci_path(int maj, int min, char *pci
 }
 #endif
 
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__)
 static int get_sysctl_pci_bus_info(int maj, int min, drmPciBusInfoPtr info)
 {
     char dname[SPECNAMELEN];
@@ -3208,7 +3208,7 @@ static int get_sysctl_pci_bus_info(int m
 
 static int drmParsePciBusInfo(int maj, int min, drmPciBusInfoPtr info)
 {
-#ifdef __linux__
+#if defined(__linux__)
     unsigned int domain, bus, dev, func;
     char pci_path[PATH_MAX + 1], *value;
     int num;
@@ -3255,7 +3255,7 @@ static int drmParsePciBusInfo(int maj, i
     info->func = pinfo.func;
 
     return 0;
-#elif __FreeBSD__
+#elif defined(__FreeBSD__)
     return get_sysctl_pci_bus_info(maj, min, info);
 #else
 #warning "Missing implementation of drmParsePciBusInfo"
@@ -3317,7 +3317,7 @@ static int drmGetMaxNodeName(void)
            3 /* length of the node number */;
 }
 
-#ifdef __linux__
+#if defined(__linux__)
 static int parse_separate_sysfs_files(int maj, int min,
                                       drmPciDeviceInfoPtr device,
                                       bool ignore_revision)
@@ -3391,7 +3391,7 @@ static int drmParsePciDeviceInfo(int maj
                                  drmPciDeviceInfoPtr device,
                                  uint32_t flags)
 {
-#ifdef __linux__
+#if defined(__linux__)
     if (!(flags & DRM_DEVICE_GET_PCI_REVISION))
         return parse_separate_sysfs_files(maj, min, device, true);
 
@@ -3424,7 +3424,7 @@ static int drmParsePciDeviceInfo(int maj
     device->subdevice_id = pinfo.subdevice_id;
 
     return 0;
-#elif __FreeBSD__
+#elif defined(__FreeBSD__)
     drmPciBusInfo info;
     struct pci_conf_io pc;
     struct pci_match_conf patterns[1];
@@ -3615,7 +3615,7 @@ free_device:
     return ret;
 }
 
-#ifdef __linux__
+#if defined(__linux__)
 static int drm_usb_dev_path(int maj, int min, char *path, size_t len)
 {
     char *value, *tmp_path, *slash;
@@ -3657,7 +3657,7 @@ static int drm_usb_dev_path(int maj, int
 
 static int drmParseUsbBusInfo(int maj, int min, drmUsbBusInfoPtr info)
 {
-#ifdef __linux__
+#if defined(__linux__)
     char path[PATH_MAX + 1], *value;
     unsigned int bus, dev;
     int ret;
@@ -3698,7 +3698,7 @@ static int drmParseUsbBusInfo(int maj, i
 
 static int drmParseUsbDeviceInfo(int maj, int min, drmUsbDeviceInfoPtr info)
 {
-#ifdef __linux__
+#if defined(__linux__)
     char path[PATH_MAX + 1], *value;
     unsigned int vendor, product;
     int ret;
@@ -3768,7 +3768,7 @@ free_device:
 
 static int drmParseOFBusInfo(int maj, int min, char *fullname)
 {
-#ifdef __linux__
+#if defined(__linux__)
     char path[PATH_MAX + 1], *name, *tmp_name;
 
     snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
@@ -3803,7 +3803,7 @@ static int drmParseOFBusInfo(int maj, in
 
 static int drmParseOFDeviceInfo(int maj, int min, char ***compatible)
 {
-#ifdef __linux__
+#if defined(__linux__)
     char path[PATH_MAX + 1], *value, *tmp_name;
     unsigned int count, i;
     int err;
@@ -4278,7 +4278,7 @@ drm_public int drmGetDevices(drmDevicePt
 
 drm_public char *drmGetDeviceNameFromFd2(int fd)
 {
-#ifdef __linux__
+#if defined(__linux__)
     struct stat sbuf;
     char path[PATH_MAX + 1], *value;
     unsigned int maj, min;
@@ -4302,7 +4302,7 @@ drm_public char *drmGetDeviceNameFromFd2
     free(value);
 
     return strdup(path);
-#elif __FreeBSD__
+#elif defined(__FreeBSD__)
     return drmGetDeviceNameFromFd(fd);
 #else
     struct stat      sbuf;

Reply via email to