Hi!
Recent DVB driver releases (now in Kernel 2.6.29) cause trouble compiling
VDR (see snippet A below).
The common solution to this seems to be to add a "-D__KERNEL_STRICT_NAMES".
It felt wrong somehow and I didn't liked this, so I tried another
solution, which is to have any libc6 <sys/*> includes appear before the
linux DVB header includes <linux/*>. Doing this only in dvbdevice.c seems
to do the trick for VDR (see snippet B). I works for VDR 1.6.0 as well as
VDR 1.7.4.
I think the root of this problem is caused by the Kernel headers / DVB
drivers changing from asm/types.h to linux/types.h:
-#include <asm/types.h>
+#include <linux/types.h>
How should this problem ideally be fixed? Is my solution (snippet B)
better than using -D__KERNEL_STRICT_NAMES or should the kernel / DVB
driver developers be blamed for this?
Tobias
--- snippet A ---
In file included from /usr/include/netinet/in.h:24,
from /usr/include/arpa/inet.h:23,
from config.h:13,
from channels.h:13,
from device.h:13,
from dvbdevice.h:15,
from dvbdevice.c:10:
/usr/include/stdint.h:41: error: conflicting declaration 'typedef long int
int64_t'
/usr/include/linux/types.h:98: error: 'int64_t' has a previous declaration
as 'typedef __s64 int64_t'
/usr/include/stdint.h:56: error: conflicting declaration 'typedef long
unsigned int uint64_t'
/usr/include/linux/types.h:96: error: 'uint64_t' has a previous
declaration as 'typedef __u64 uint64_t'
--- snippet B ---
--- vdr-1.6.0.orig/dvbdevice.c
+++ vdr-1.6.0/dvbdevice.c
@@ -7,6 +7,8 @@
* $Id: dvbdevice.c 1.170 2008/02/09 16:11:44 kls Exp $
*/
+#include <sys/ioctl.h>
+#include <sys/mman.h>
#include "dvbdevice.h"
#include <errno.h>
#include <limits.h>
@@ -15,8 +17,6 @@
#include <linux/dvb/dmx.h>
#include <linux/dvb/frontend.h>
#include <linux/dvb/video.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
#include "channels.h"
#include "diseqc.h"
#include "dvbci.h"