[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-wget] wget-1.13 on AIX
From: |
Perry Smith |
Subject: |
Re: [Bug-wget] wget-1.13 on AIX |
Date: |
Fri, 12 Aug 2011 15:37:29 -0500 |
Hi,
On my 6.1 system I do not have flex so I removed the include from css.c and it
compiled. On my 5.3 system I do have flex. Removing it from css.l worked as
well.
I am configuring --without-ssl but I'm assuming that will not make a difference
for this.
Thanks,
Perry
On Aug 12, 2011, at 10:20 AM, Giuseppe Scrivano wrote:
> Hello Perry,
>
> thanks to have reported it. Does it work correctly if you drop the
> #include "wget.h" line from css.l?
>
> === modified file 'src/css.l'
> --- src/css.l 2011-01-01 12:19:37 +0000
> +++ src/css.l 2011-08-12 15:18:23 +0000
> @@ -36,7 +36,6 @@
>
> #define YY_NO_INPUT
>
> -#include "wget.h"
> #include "css-tokens.h"
>
> %}
>
>
> Thanks,
> Giuseppe
>
>
>
> Perry Smith <address@hidden> writes:
>
>> Hi,
>>
>> I've tried this on AIX 5.3 and 6.1.
>>
>> The problem is with src/css.c. In essence it is doing this:
>>
>>> #include <stdio.h>
>>> #include <string.h>
>>> #include <errno.h>
>>> #include <stdlib.h>
>>> #include <inttypes.h>
>>> #define _LARGE_FILES
>>> #include <unistd.h>
>>
>>
>> The #define of _LARGE_FILES is actually done in config.h via wget.h.
>>
>> I understand that AIX is very hard to deal with but this seems like a
>> bad idea for any platform. If you are going to declare that you want
>> _LARGE_FILE support, you need to do that before any system includes.
>> What this causes is both _LARGE_FILES and _LARGE_FILE_API both get
>> defined and that causes one place to declare (for example)
>>
>>> #define ftruncate ftruncate64
>>
>>
>> (this is in unistd.h around line 733)
>>
>> and then later we have:
>>
>>> extern int ftruncate(int, off_t);
>>> #ifdef _LARGE_FILE_API
>>> extern int ftruncate64(int, off64_t);
>>> #endif
>>
>>
>> (around line 799) which the compiler complains about with:
>>
>>> /usr/include/unistd.h:801: error: conflicting types for 'ftruncate64'
>>> /usr/include/unistd.h:799: error: previous declaration of 'ftruncate64' was
>>> here
>>
>>
>> There are actually several pairs of these.
>>
>> With the above code snippet, if you move the #define to the top, (or
>> completely remove it) the compile works fine.
>>
>> It just seems like it would be prudent to declare things like
>> _LARGE_FILES in config.h (like you do) but put config.h as the first
>> include of each file so that the entire code base knows which
>> interface the program wants to use.
>>
>> What I did was to move css.c to _css.c. I put an #ifndef _CONFIG_H wrapper
>> inside config.h and then the new css.c was simply:
>>
>> #include "config.h"
>> #include "_css.c"
>>
>> and that worked for my 5.3 system. I have not tried it on my 6.1 system yet.
>>
>> I hope this helps someone.
>>
>> Thank you,
>> pedz