No, that's not right. We don't use glibc, and we support strtod_l, strtof_l, and strtof. This change would do the wrong thing for __APPLE__. Perhaps something more like this:
#if defined(__APPLE__) || (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ > 2 && !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__HAIKU__)) #define HAVE_STRTOD_L 1 #else #define HAVE_STRTOD_L 0 #endif ... #if HAVE_STRTOD_L #include <locale.h> #ifdef __APPLE__ #include <xlocale.h> #endif #endif etc... On May 9, 2012, at 12:52 PM, Kenneth Graunke <kenn...@whitecape.org> wrote: > From: Bryan Henderson <bry...@giraffe-data.com> > > [v2/Kayden: rebased version of Bryan's original patch from: > https://bugs.freedesktop.org/show_bug.cgi?id=33447] > > Cc: Jeremy Huddleston <jerem...@apple.com> > Cc: Chad Versace <chad.vers...@linux.intel.com> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=33447 > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/glsl/strtod.c | 11 +++++++---- > src/mesa/main/imports.c | 22 +++++++++++++++++----- > 2 files changed, 24 insertions(+), 9 deletions(-) > > Hey guys, > > I just got pinged on IRC by someone trying to build Mesa with ucLibc, > which doesn't support strtod_l or strtof_l. I found this 1+ year old > patch from Bryan on Bugzilla which fixed up the feature macros to only > use locale_t on glibc, and figured it would help > > I rebased it against master (adding the Haiku and Android changes), and > figured I'd send it out to the list for review. > > Jeremy: Does this look right? I wasn't sure if Apple used glibc or not, > and was afraid this might break stuff there. > > Chad: Why do we have !ANDROID for strtof_l but not strtod_l? Oversight? > Or does it actually support strtod_l? > > Thanks! > --Ken > > diff --git a/src/glsl/strtod.c b/src/glsl/strtod.c > index a876e13..876ed21 100644 > --- a/src/glsl/strtod.c > +++ b/src/glsl/strtod.c > @@ -26,7 +26,7 @@ > > #include <stdlib.h> > > -#ifdef _GNU_SOURCE > +#ifdef __GLIBC__ > #include <locale.h> > #ifdef __APPLE__ > #include <xlocale.h> > @@ -35,7 +35,11 @@ > > #include "strtod.h" > > - > +#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ > 2 && > !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(__HAIKU__) > + #define HAVE_STRTOD_L 1 > +#else > + #define HAVE_STRTOD_L 0 > +#endif > > /** > * Wrapper around strtod which uses the "C" locale so the decimal > @@ -44,8 +48,7 @@ > double > glsl_strtod(const char *s, char **end) > { > -#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && > \ > - !defined(__HAIKU__) > +#if HAVE_STRTOD_L > static locale_t loc = NULL; > if (!loc) { > loc = newlocale(LC_CTYPE_MASK, "C", NULL); > diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c > index 2d592a6..c145101 100644 > --- a/src/mesa/main/imports.c > +++ b/src/mesa/main/imports.c > @@ -42,20 +42,33 @@ > * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. > */ > > - > +#define _XOPEN_SOURCE 600 /* We use strtof/strtof_l */ > > #include "imports.h" > #include "context.h" > #include "mtypes.h" > #include "version.h" > > -#ifdef _GNU_SOURCE > +#ifdef __GLIBC__ > #include <locale.h> > #ifdef __APPLE__ > #include <xlocale.h> > #endif > #endif > > +#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ > 2 && > !defined(__CYGWIN__) && !defined(__FreeBSD__) && !defined(ANDROID) && > !defined(__HAIKU__) > + #define HAVE_STRTOF_L 1 > +#else > + #define HAVE_STRTOF_L 0 > +#endif > + > +#if defined(__GLIBC__) > + #define HAVE_STRTOF 1 > + /* True at least as long as we declare _XOPEN_SOURCE >= 600 */ > +#else > + #define HAVE_STRTOF 0 > +#endif > + > > #ifdef WIN32 > #define vsnprintf _vsnprintf > @@ -761,14 +774,13 @@ _mesa_strdup( const char *s ) > float > _mesa_strtof( const char *s, char **end ) > { > -#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && > \ > - !defined(ANDROID) && !defined(__HAIKU__) > +#if HAVE_STRTOF_L > static locale_t loc = NULL; > if (!loc) { > loc = newlocale(LC_CTYPE_MASK, "C", NULL); > } > return strtof_l(s, end, loc); > -#elif defined(_ISOC99_SOURCE) || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= > 600) > +#elif HAVE_STRTOF > return strtof(s, end); > #else > return (float)strtod(s, end); > -- > 1.7.10.1 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev