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;