Date: Sun, 03 Feb 2013 23:33:54 +0100 From: Dimitry Andric <dim@FreeBSD.org> To: Pedro Giffuni <pfg@FreeBSD.org>, Andriy Gapon <avg@FreeBSD.org> Cc: toolchain@FreeBSD.org Subject: Re: base gcc and _GLIBCXX_USE_C99 Message-ID: <510EE5D2.4050409@FreeBSD.org> In-Reply-To: <510BD53D.1070209@FreeBSD.org> References: <5106953E.2020907@FreeBSD.org> <510BBCAD.3070705@FreeBSD.org> <510BD53D.1070209@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------070202030408030402030001 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 2013-02-01 15:46, Pedro Giffuni wrote: > On 02/01/2013 08:01, Andriy Gapon wrote: >> on 28/01/2013 17:11 Andriy Gapon said the following: >>> I wonder why the following is the case for the base gcc. >>> /usr/include/c++/4.2/bits/c++config.h: >>> >>> /* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>, >>> <stdio.h>, and <stdlib.h> can be used or exposed. */ >>> /* #undef _GLIBCXX_USE_C99 */ >>> >>> Because of this undef there is no e.g. std::strtoll(). >>> Ditto for other things in stdlib.h. >>> > I looked at this very briefly and it looks like it would fix a nasty > issue we have been working around in OpenOffice. > > I suggest to enable it first on a gcc port though (it's tied to a > configure flag, but don't remember which). I had a bit more in-depth look at our current libstdc++ configuration. I took the original gcc 4.2.1 release tarball, modified a few autoconf related scripts to cope with "freebsd10.0" being the current version, and did a full three-stage build, though only targeting C and C++. The libstdc++ configure script in 4.2.1 does detect a few new features that are not in our shipping config.h, but is does not detect any different settings regarding C99. The reason it does not turn on _GLIBCXX_USE_C99, is that not all of the C99 requirements are met, specifically <complex.h> checks fail: checking for ISO C99 support in <math.h>... yes checking for ISO C99 support in <complex.h>... no checking for ISO C99 support in <stdio.h>... yes checking for ISO C99 support in <stdlib.h>... yes checking for ISO C99 support in <wchar.h>... yes checking for fully enabled ISO C99 support... no The exact failure testcase goes like this: configure:7435: checking for ISO C99 support in <complex.h> configure:7492: /home/dim/obj/gcc-4.2.1/./gcc/xgcc -shared-libgcc -B/home/dim/obj/gcc-4.2.1/./gcc -nostdinc++ -L/home/dim/obj/gcc-4.2.1/i386-unknown-freebsd10.0/libstdc++-v3/src -L/home/dim/obj/gcc-4.2.1/i386-unknown-freebsd10.0/libstdc++-v3/src/.libs -B/home/dim/ins/gcc-4.2.1/i386-unknown-freebsd10.0/bin/ -B/home/dim/ins/gcc-4.2.1/i386-unknown-freebsd10.0/lib/ -isystem /home/dim/ins/gcc-4.2.1/i386-unknown-freebsd10.0/include -isystem /home/dim/ins/gcc-4.2.1/i386-unknown-freebsd10.0/sys-include -c -g -O2 conftest.cc >&5 conftest.cc: In function 'int main()': conftest.cc:41: error: 'clogf' was not declared in this scope conftest.cc:47: error: 'cpowf' was not declared in this scope conftest.cc:54: error: 'clog' was not declared in this scope conftest.cc:60: error: 'cpow' was not declared in this scope conftest.cc:64: error: 'ccosl' was not declared in this scope conftest.cc:65: error: 'ccoshl' was not declared in this scope conftest.cc:66: error: 'cexpl' was not declared in this scope conftest.cc:67: error: 'clogl' was not declared in this scope conftest.cc:68: error: 'csinl' was not declared in this scope conftest.cc:69: error: 'csinhl' was not declared in this scope conftest.cc:71: error: 'ctanl' was not declared in this scope conftest.cc:72: error: 'ctanhl' was not declared in this scope conftest.cc:73: error: 'cpowl' was not declared in this scope configure:7498: $? = 1 So until we actually implement and declare those functions, we should probably not enable _GLIBCXX_USE_C99_COMPLEX and _GLIBCXX_USE_C99. I have attached a diff of the other changes that can be applied on our current libstdc++ config file, as detected by the configure script. I will probably commit that soonish, if there are no objections. As to the missing complex functions, I am not sure. Maybe these can be imported from somewhere else, e.g. NetBSD? This is probably something to ask the lib/msun specialists... -Dimitry --------------070202030408030402030001 Content-Type: text/x-diff; name="libstdcxx-reconfig-1.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="libstdcxx-reconfig-1.diff" Index: gnu/lib/libstdc++/config.h =================================================================== --- gnu/lib/libstdc++/config.h (revision 246297) +++ gnu/lib/libstdc++/config.h (working copy) @@ -22,7 +22,7 @@ #define HAVE_ATAN2F 1 /* Define to 1 if you have the `atan2l' function. */ -/* #undef HAVE_ATAN2L */ +#define HAVE_ATAN2L 1 /* Define to 1 if you have the `atanf' function. */ #define HAVE_ATANF 1 @@ -67,7 +67,7 @@ #define HAVE_EXPF 1 /* Define to 1 if you have the `expl' function. */ -/* #undef HAVE_EXPL */ +#define HAVE_EXPL 1 /* Define to 1 if you have the `fabsf' function. */ #define HAVE_FABSF 1 @@ -100,7 +100,7 @@ #define HAVE_FMODF 1 /* Define to 1 if you have the `fmodl' function. */ -/* #undef HAVE_FMODL */ +#define HAVE_FMODL 1 /* Define to 1 if you have the `fpclass' function. */ /* #undef HAVE_FPCLASS */ @@ -134,7 +134,7 @@ #define HAVE_HYPOTF 1 /* Define to 1 if you have the `hypotl' function. */ -/* #undef HAVE_HYPOTL */ +#define HAVE_HYPOTL 1 /* Define to 1 if you have the `iconv' function. */ /* #undef HAVE_ICONV */ @@ -293,7 +293,7 @@ #define HAVE_SQRTF 1 /* Define to 1 if you have the `sqrtl' function. */ -/* #undef HAVE_SQRTL */ +#define HAVE_SQRTL 1 /* Define to 1 if you have the <stdbool.h> header file. */ #define HAVE_STDBOOL_H 1 @@ -304,6 +304,12 @@ /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 +/* Define if strerror_l is available in <string.h>. */ +/* #undef HAVE_STRERROR_L */ + +/* Define if strerror_r is available in <string.h>. */ +#define HAVE_STRERROR_R 1 + /* Define to 1 if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 @@ -316,6 +322,9 @@ /* Define to 1 if you have the `strtold' function. */ #define HAVE_STRTOLD 1 +/* Define if strxfrm_l is available in <string.h>. */ +/* #undef HAVE_STRXFRM_L */ + /* Define to 1 if you have the <sys/filio.h> header file. */ #define HAVE_SYS_FILIO_H 1 --------------070202030408030402030001--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?510EE5D2.4050409>