From rhurlin at gwdg.de  Sun Feb  6 19:20:34 2011
From: rhurlin at gwdg.de (Rainer Hurling)
Date: Sun, 06 Feb 2011 19:20:34 +0100
Subject: [Rd] R-devel on FreeBSD: Support for C99 complex type is
	required
In-Reply-To: <alpine.LFD.2.00.1102061710320.22661@auk.stats.ox.ac.uk>
References: <4D4EAFCE.6020004@gwdg.de>
	<alpine.LFD.2.00.1102061507430.15472@auk.stats.ox.ac.uk>
	<4D4ED172.9090402@gwdg.de>
	<alpine.LFD.2.00.1102061710320.22661@auk.stats.ox.ac.uk>
Message-ID: <4D4EE672.6080601@gwdg.de>

On 06.02.2011 18:24 (UTC+1), Prof Brian Ripley wrote:
> On Sun, 6 Feb 2011, Rainer Hurling wrote:
>
>> On 06.02.2011 16:22 (UTC+1), Prof Brian Ripley wrote:
>>> On Sun, 6 Feb 2011, Rainer Hurling wrote:
>>>
>>>> Today I tried two build R-devel_2011-02-06.tar.gz from sources on
>>>> FreeBSD 9.0-CURRENT (amd64) with gcc-4.5.2 and I got the following
>>>> messages when configuring:
>>>>
>>>>
>>>> ./configure
>>>> [..SNIP..]
>>>> checking whether C99 double complex is supported...
>>>> checking complex.h usability... yes
>>>> checking complex.h presence... yes
>>>> checking for complex.h... yes
>>>> checking for double complex... yes
>>>> checking whether cexp exists and is declared... no
>>>> checking whether clog exists and is declared... no
>>>> checking whether csqrt exists and is declared... yes
>>>> checking whether cpow exists and is declared... no
>>>> checking whether ccos exists and is declared... no
>>>> checking whether csin exists and is declared... no
>>>> checking whether ctan exists and is declared... no
>>>> checking whether cacos exists and is declared... no
>>>> checking whether casin exists and is declared... no
>>>> checking whether catan exists and is declared... no
>>>> checking whether ccosh exists and is declared... no
>>>> checking whether csinh exists and is declared... no
>>>> checking whether ctanh exists and is declared... no
>>>> checking whether cacosh exists and is declared... no
>>>> checking whether casinh exists and is declared... no
>>>> checking whether catanh exists and is declared... no
>>>> configure: error: Support for C99 complex type is required.
>>>> [..script stops here..]
>>>>
>>>> Until 2.12.1 this works for me. In the NEWS file of 2.13.0 I found in
>>>> the INSTALLATION section:
>>>>
>>>> 'A C99 compiler is now required, and more C99 language features will
>>>> be used in the R sources.'
>>>
>>> But that was against R 2.12.0!
>>
>> Yes, but emulation code was not removed until R-2.13.0?
>
> Not really: there was an alternative not using C99 double complex prior
> to R-devel (there is no 'R-2.13.0').

Sorry for the naming, R-devel of course.

>>>> What exactly characterizes a C99 compiler? Does gcc-4.5.2 belongs to
>>>> this?
>>>
>>> Yes with flag -std=c99, but it also needs a runtime complying with C99.
>>> Those missing functions are part of C99.
>>
>> Probably a stupid question because I am not a programmer: Is this
>> 'runtime complying with C99' a compilers binary or something else?
>
> The C99 standard requires more than a compiler. It is usual (but not
> compulsory) to provide the runtime support in libraries such as libc and
> libm: so on Linux these functions are in glibc, on Windows most are in
> MSVCRT.dll and some in libmingwex.a ....

Ok, so only changing the compiler might be not enough. We have to try out.

>>>> Are the special arguments or knobs to consider? Any other ideas?
>>>>
>>>> Please let me know if more infos are needed.
>>>
>>> I think this is really a FreeBSD support question. In 2011, an OS really
>>> should have support for a 1999 standard. Darwin, a FreeBSD derivative,
>>> does and its help page says
>>
>> Hmm, on FreeBSD I really have no other piece of software which
>> complains about lack of C99.
>
> Maybe you use no other piece of software relying on C99's complex
> functions?

That is possible. But I have more than 1300 ports (FreeBSD packages) 
installed. And some of them are quite sophisticated.

>>> 4th Berkeley Distribution December 11, 2006 4th Berkeley Distribution
>>
>> In 2006 we had already Darwin 8.x in Mac OS X 10.4.
>>
>>> which suggests that is part of BSD.
>>>
>>> We are not going to put back the emulation code used: we simply don't
>>> have the resources to fix up its problems (nor do we have a platform
>>> which needs it). The alternative I will look into is allowing R to be
>>> compiled without support for complex arithmetic.
>>
>> Ok, I understand. This seems consistent. I will try to contact FreeBSD
>> support about it. Please do not change back the behaviour for FreeBSD
>> (towards emulation code) until this is clarified.
>
> As I said, we are never going to do that. The usual Open Source way to
> solve problems like this is for substitute functions to be provided on
> the deficient platform. We do that for several functions that used not
> to be common: see src/main/Makefile.

I had a look at src/main/complex.c. There is a comment which describes 
the failure for gcc 4.2.1 on some systems.

This gives me the idea that perhaps FreeBSD is using the wrong complex.h 
file. The old one is in /usr/include, the newer one (4.5.3) in 
/usr/local/lib/gcc45/include/c++. But obviously the older header is 
used. I have to clear up this.

>>>> Thanks in advance for any help,
>>>> Rainer Hurling
>>
>> Thanks for answering and clearing this up,
>> Rainer Hurling



[Rd] R-devel on FreeBSD: Support for C99 complex type is required
Rainer Hurling