[Rd] alloca() on FreeBSD (PR#7890)

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Jun 7 22:52:00 CEST 2005


This is a package, so it is not using config.h.  It is using

#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#else
extern char *alloca(size_t);
#endif

and hence will have whatever the problem is with having that declaration.

The basic problem is that autoconf assumes that if alloca is defined 
anywhere, it is defined in alloca.h.  So we need to use something other 
than the standard macros.

Is there a macro FreeBSD defines?   If so it may be easiest to just make 
use of it.

On Tue, 7 Jun 2005, Simon Urbanek wrote:

> On Jun 7, 2005, at 12:36 PM, Rainer Hurling wrote:
>
>> One first reaction to your suggestions.
>> 
>> ripley at stats.ox.ac.uk wrote:
>> 
>>> On Mon, 23 May 2005 vangyzen at stat.duke.edu wrote:
>>> 
>>>> R-2.1.0 fails to compile on the newest release of FreeBSD, complaining 
>>>> about
>>>> undefined references to __builtin_alloca.  On FreeBSD, alloca() is 
>>>> declared in
>>>> stdlib.h, not alloca.h as the R sources expect.  Therefore, 
>>>> HAVE_DECL_ALLOCA
>>>> does not get set, so the R sources declare alloca() after it has already 
>>>> been
>>>> #defined by stdlib.h.
>>>> 
>>>> A possible fix is to modify the configure script to look for the 
>>>> declaration of
>>>> alloca() in stdlib.h (perhaps after it fails to find it in alloca.h).
>>>> 
>>> It is already supposed to, so it is not finding the declaration there 
>>> either. If you look up the definition of
>>> AC_CHECK_DECLS([alloca], , , [#include <alloca.h>])
>>> it searches in stdlib.h.  Can you please send us the appropriate part of 
>>> config.log?  It may be that this is failing because alloca.h is not found
>>> (but AC_FUNC_ALLOCA is making the same assumptions).
>>> Perhaps the easiest way out is to override the setting on FreeBSD: can you 
>>> please confirm that manually changing
>>> #define HAVE_DECL_ALLOCA 1
>>> in config.h works?
>>> 
>> 
>> Changing "#define HAVE_DECL_ALLOCA" to 1
>> in line 81 of R-2.1.0/src/include/config.h
>> gives me the following stopping:
>> 
>> 
>> mkdir ../../../../library/grDevices/libs
>> building package 'graphics'
>> mkdir ../../../library/graphics
>> mkdir ../../../library/graphics/R
>> mkdir ../../../library/graphics/demo
>> mkdir ../../../library/graphics/po
>> mkdir ../../../library/graphics/man
>> Error in dyn.load(x, as.logical(local), as.logical(now)) :
>>         unable to load shared library '/usr/local/R-2.1.0/library/ 
>> grDevices/libs/grDevices.so':
>>   /usr/local/R-2.1.0/library/grDevices/libs/grDevices.so: Undefined symbol 
>> "__builtin_alloca"
>> Execution halted
>
> Did you run a new, clean build? From the output it seems as if you just 
> changed the file in your old build and typed make - obviously that doesn't 
> help at all, because the setting must the changed *before* you start 
> building. So if you didn't do so, please remove the build, unpack the sources 
> again, run configure, change the ALLOCA define and then build.
>
> Cheers,
> Simon
>
> ______________________________________________
> R-devel at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list