Re: [Rd] compile fails with x86_64-alpine-linux-uclibc-gcc

2012-08-13 Thread Simon Urbanek

On Aug 12, 2012, at 11:45 PM, nobody wrote:

> hello,
> 
> i am trying to build R on alpine/gentoo with uclibc and it fails with the 
> following
> error msg:
> 
> connections.c: In function 'Rconn_fgetc':
> connections.c:3184:11: error: expected identifier before '(' token
> connections.c:3186:15: error: expected identifier before '(' token
> make[3]: *** [connections.o] Error 1
> 
> here is the whole build log :http://bpaste.net/show/39955/
> any idea?
> 

I suspect that your runtime/libc is defining fgetc as a macro which breaks any 
code that uses it as an identifier. Ideally, your runtime should be fixed to 
use a proper function, but you could probably work around it with something like

static char * fix_fgets(char *s, int n, FILE *stream) { return fgets(s, n, 
stream); }
#undef fgets
static char * fgets(char *s, int n, FILE *stream) { return fix_fgets(s, n, 
stream); }

Cheers,
Simon



> i've *walked* back the versions down to 2.14.1 and i still get exact same
> error msg.
> there are some patches applied but none of them touches connections.c, i
> think. in any case i can provide the patches if need be.
> 
> thanks
> 
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] compile fails with x86_64-alpine-linux-uclibc-gcc

2012-08-13 Thread Simon Urbanek

On Aug 13, 2012, at 2:22 PM, nobody wrote:

> On Mon, Aug 13, 2012 at 10:49:26AM -0400, Simon Urbanek wrote:
>> I suspect that your runtime/libc is defining fgetc as a macro which breaks 
>> any code that uses it as an identifier. Ideally, your runtime should be 
>> fixed to use a proper function, but you could probably work around it with 
>> something like
>> 
>> static char * fix_fgets(char *s, int n, FILE *stream) { return fgets(s, n, 
>> stream); }
>> #undef fgets
>> static char * fgets(char *s, int n, FILE *stream) { return fix_fgets(s, n, 
>> stream); }
>> 
>> Cheers,
>> Simon
> 
> like this? :http://bpaste.net/show/40047/
> if so, then i get this err msg:
> connections.c:385:15: error: static declaration of 'fgets' follows non-static 
> declaration
> /usr/include/stdio.h:544:14: note: previous declaration of 'fgets' was here
> connections.c: In function 'Rconn_fgetc':
> connections.c:3192:11: error: expected identifier before '(' token
> connections.c:3194:15: error: expected identifier before '(' token
> 
> and here is how it's declared in stdio.h on my system:
> 
> /* Get a newline-terminated string of finite length from STREAM.
> 
>   This function is a possible cancellation point and therefore not
>   marked with __THROW.  */
> extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
> __wur;
> 
> 

Ouch - never mind then - try simply #undef fgets in that case but since I don't 
have access to the system you have I can't really give you much better advice :/
__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel