Compilation issues with recent DVB header files vs libc6

Message ID 49DBDFF7.6050503@e-tobi.net
State New
Headers

Commit Message

Tobias Grimm April 7, 2009, 11:21 p.m. UTC
  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 ---
  

Comments

Tony Houghton April 8, 2009, 12:18 a.m. UTC | #1
On Wed, 08 Apr 2009 01:21:27 +0200
Tobi <listaccount@e-tobi.net> wrote:

> 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 used -D__KERNEL_STRICT_NAMES but compilation then failed on the use of
__u8 in <linux/frontend.h>. ISTR reading that might only be a problem
for 64-bit. I resorted to changing it to unsigned char.

You'd think after some 10 years everyone would have settled on stdint by
now. :-/
  
Tobias Grimm April 8, 2009, 8:03 a.m. UTC | #2
Tony Houghton wrote:

> I used -D__KERNEL_STRICT_NAMES but compilation then failed on the use of
> __u8 in <linux/frontend.h>. ISTR reading that might only be a problem
> for 64-bit.

I didn't had this problem. VDR 1.6.0 and 1.7.4 compile fine with 2.6.29
and GCC 4.3 on x86_64. It works also with the latest drivers from Igors
repository.

Tobias
  
Klaus Schmidinger April 8, 2009, 12:25 p.m. UTC | #3
On 04/08/09 01:21, Tobi wrote:
> 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?

My 2ct:

- An application should not need to use -D__KERNEL_STRICT_NAMES.
- Any header file that requires other header files to be included
  should do so by itself.
- The sequence in which header files are included should not matter.
  I normally list them alphabetically, to easily find a particular one.

I currently solve the broken DVB driver header files by replacing them
with the ones from an earlier driver version, where they still worked.

I had posted this problem on the linux-dvb ML a while ago, but apparently
nobody cared...

Klaus
  
Matthias Becker April 8, 2009, 1 p.m. UTC | #4
Hi,

is the linux-dvb ML still "alive"?
maybe http://vger.kernel.org/vger-lists.html#linux-media is read more frequently

Regards,
Matthias

2009/4/8 Klaus Schmidinger <Klaus.Schmidinger@cadsoft.de>:
> On 04/08/09 01:21, Tobi wrote:
>> 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?
>
> My 2ct:
>
> - An application should not need to use -D__KERNEL_STRICT_NAMES.
> - Any header file that requires other header files to be included
>  should do so by itself.
> - The sequence in which header files are included should not matter.
>  I normally list them alphabetically, to easily find a particular one.
>
> I currently solve the broken DVB driver header files by replacing them
> with the ones from an earlier driver version, where they still worked.
>
> I had posted this problem on the linux-dvb ML a while ago, but apparently
> nobody cared...
>
> Klaus
>
> _______________________________________________
> vdr mailing list
> vdr@linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
>
  
Klaus Schmidinger April 8, 2009, 1:04 p.m. UTC | #5
On 04/08/09 15:00, Matthias Becker wrote:
> Hi,
> 
> is the linux-dvb ML still "alive"?
> maybe http://vger.kernel.org/vger-lists.html#linux-media is read more frequently

That one has way too much non DVB related traffic for me.

Klaus

> 2009/4/8 Klaus Schmidinger <Klaus.Schmidinger@cadsoft.de>:
>> On 04/08/09 01:21, Tobi wrote:
>>> 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?
>> My 2ct:
>>
>> - An application should not need to use -D__KERNEL_STRICT_NAMES.
>> - Any header file that requires other header files to be included
>>  should do so by itself.
>> - The sequence in which header files are included should not matter.
>>  I normally list them alphabetically, to easily find a particular one.
>>
>> I currently solve the broken DVB driver header files by replacing them
>> with the ones from an earlier driver version, where they still worked.
>>
>> I had posted this problem on the linux-dvb ML a while ago, but apparently
>> nobody cared...
>>
>> Klaus
  
Andy Carter April 8, 2009, 1:10 p.m. UTC | #6
On Wednesday 08 April 2009 14:04:39 Klaus Schmidinger wrote:
> On 04/08/09 15:00, Matthias Becker wrote:
> > Hi,
> >
> > is the linux-dvb ML still "alive"?
> > maybe http://vger.kernel.org/vger-lists.html#linux-media is read more
> > frequently
>
> That one has way too much non DVB related traffic for me.

Agreed - and since I subbed/unsubbed I've been getting a lot more spam to my 
dvb address. Can't be sure it's connected, but...

Andy
  
Anssi Hannula April 9, 2009, 6:20 p.m. UTC | #7
Tobi wrote:
> 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?

The kernel headers should be fixed to use strict types (patches
available). See my earlier reply on the issue:
http://linuxtv.org/pipermail/vdr/2009-March/019783.html
  
Tobias Grimm April 9, 2009, 9:19 p.m. UTC | #8
Anssi Hannula wrote:

> The kernel headers should be fixed to use strict types (patches
> available). See my earlier reply on the issue:
> http://linuxtv.org/pipermail/vdr/2009-March/019783.html

You're right. Thanks for the pointer! I've seen this weeks ago and thought
 it would have already made it into 2.6.29.

I've applied the patch from Arnd Bergmann's core/header-fixes branch to
2.6.29.1 which seems to work fine.

Let's hope this gets fixed in 2.6.29.x or 2.6.30.

Tobias
  
Anssi Hannula May 19, 2009, 4:09 p.m. UTC | #9
Tobi wrote:
> Anssi Hannula wrote:
> 
>> The kernel headers should be fixed to use strict types (patches
>> available). See my earlier reply on the issue:
>> http://linuxtv.org/pipermail/vdr/2009-March/019783.html
> 
> You're right. Thanks for the pointer! I've seen this weeks ago and thought
>  it would have already made it into 2.6.29.
> 
> I've applied the patch from Arnd Bergmann's core/header-fixes branch to
> 2.6.29.1 which seems to work fine.
> 
> Let's hope this gets fixed in 2.6.29.x or 2.6.30.

The patches have been applied for 2.6.30.
  

Patch

--- 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"