I tried to compile Wget with "tcc", a tiny fast Linux compiler that
happens to not implement alloca.  Since Wget's configure checks for
alloca and the source includes the C alloca implementation, it should
(in theory) work anyway.  However, I got a compiler error:

tcc -I. -I.    -DHAVE_CONFIG_H -DSYSTEM_WGETRC=\"/usr/local/etc/wgetrc\" 
-DLOCALEDIR=\"/usr/local/share/locale\" -O -c alloca.c
In file included from alloca.c:32:
In file included from /usr/include/stdlib.h:578:
/usr/include/alloca.h:33: incompatible types for redefinition of 'alloca'
make: *** [alloca.o] Error 1

It turns out that the alloca declaration that the Autoconf manual[1]
recommends for config.h declares alloca() as returning char *, whereas
the C implementation I use declares it as returning void *.  But
regardless of alloca.c, another problem is that, on Linux, stdlib.h
includes alloca.h, which also declares void *alloca().

I fixed this problem by changing the declaration from "char
*alloca();" to "void *alloca();".  Is there a better fix, or should
the manual be updated for alloca to return void *?


[1]
The section of the manual I'm referring to is:

    
http://www.gnu.org/software/autoconf/manual/autoconf-2.57/html_chapter/autoconf_5.html#SEC46


Reply via email to