AcademySoftwareFoundation / OpenColorIO

A color management framework for visual effects and animation.
https://opencolorio.org
BSD 3-Clause "New" or "Revised" License
1.74k stars 430 forks source link

[macOS] Some build errors: `error: 'locale_t' does not name a type; did you mean 'Locale'?`; `error: '::strtod_l' has not been declared; did you mean 'strtoull'?` #1973

Open barracuda156 opened 2 months ago

barracuda156 commented 2 months ago

Trying to compile this with gcc13 on macOS, I get a bunch of errors:

In file included from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/xmlutils/XMLReaderUtils.h:17,
                 from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/xmlutils/XMLReaderHelper.h:12,
                 from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/cdl/CDLReaderHelper.h:7,
                 from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/cdl/CDLParser.cpp:8:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:42:5: error: 'locale_t' does not name a type; did you mean 'Locale'?
   42 |     locale_t local;
      |     ^~~~~~~~
      |     Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In constructor 'OpenColorIO_v2_3::NumberUtils::Locale::Locale()':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:16: error: class 'OpenColorIO_v2_3::NumberUtils::Locale' does not have any field named 'local'
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                ^~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:32: error: 'LC_ALL_MASK' was not declared in this scope
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                                ^~~~~~~~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:22: error: 'newlocale' was not declared in this scope; did you mean 'setlocale'?
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                      ^~~~~~~~~
      |                      setlocale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In destructor 'OpenColorIO_v2_3::NumberUtils::Locale::~Locale()':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:40:20: error: 'local' was not declared in this scope; did you mean 'Locale'?
   40 |         freelocale(local);
      |                    ^~~~~
      |                    Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:40:9: error: 'freelocale' was not declared in this scope; did you mean 'setlocale'?
   40 |         freelocale(local);
      |         ^~~~~~~~~~
      |         setlocale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In function 'OpenColorIO_v2_3::NumberUtils::from_chars_result OpenColorIO_v2_3::NumberUtils::from_chars(const char*, const char*, double&)':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:68:17: error: '::strtod_l' has not been declared; did you mean 'strtoull'?
   68 |     tempval = ::strtod_l(first, &endptr, loc.local);
      |                 ^~~~~~~~
      |                 strtoull
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:68:46: error: 'const struct OpenColorIO_v2_3::NumberUtils::Locale' has no member named 'local'; did you mean 'Locale'?
   68 |     tempval = ::strtod_l(first, &endptr, loc.local);
      |                                              ^~~~~
      |                                              Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In function 'OpenColorIO_v2_3::NumberUtils::from_chars_result OpenColorIO_v2_3::NumberUtils::from_chars(const char*, const char*, float&)':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:110:36: error: '::strtod_l' has not been declared; did you mean 'strtoull'?
  110 |     tempval = static_cast<float>(::strtod_l(first, &endptr, loc.local));
      |                                    ^~~~~~~~
      |                                    strtoull
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:110:65: error: 'const struct OpenColorIO_v2_3::NumberUtils::Locale' has no member named 'local'; did you mean 'Locale'?
  110 |     tempval = static_cast<float>(::strtod_l(first, &endptr, loc.local));
      |                                                                 ^~~~~
      |                                                                 Locale
In file included from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/xmlutils/XMLReaderUtils.h:17,
                 from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/cdl/CDLWriter.cpp:7:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:42:5: error: 'locale_t' does not name a type; did you mean 'Locale'?
   42 |     locale_t local;
      |     ^~~~~~~~
      |     Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In constructor 'OpenColorIO_v2_3::NumberUtils::Locale::Locale()':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:16: error: class 'OpenColorIO_v2_3::NumberUtils::Locale' does not have any field named 'local'
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                ^~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:32: error: 'LC_ALL_MASK' was not declared in this scope
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                                ^~~~~~~~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:22: error: 'newlocale' was not declared in this scope; did you mean 'setlocale'?
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                      ^~~~~~~~~
      |                      setlocale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In destructor 'OpenColorIO_v2_3::NumberUtils::Locale::~Locale()':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:40:20: error: 'local' was not declared in this scope; did you mean 'Locale'?
   40 |         freelocale(local);
      |                    ^~~~~
      |                    Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:40:9: error: 'freelocale' was not declared in this scope; did you mean 'setlocale'?
   40 |         freelocale(local);
      |         ^~~~~~~~~~
      |         setlocale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In function 'OpenColorIO_v2_3::NumberUtils::from_chars_result OpenColorIO_v2_3::NumberUtils::from_chars(const char*, const char*, double&)':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:68:17: error: '::strtod_l' has not been declared; did you mean 'strtoull'?
   68 |     tempval = ::strtod_l(first, &endptr, loc.local);
      |                 ^~~~~~~~
      |                 strtoull
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:68:46: error: 'const struct OpenColorIO_v2_3::NumberUtils::Locale' has no member named 'local'; did you mean 'Locale'?
   68 |     tempval = ::strtod_l(first, &endptr, loc.local);
      |                                              ^~~~~
      |                                              Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In function 'OpenColorIO_v2_3::NumberUtils::from_chars_result OpenColorIO_v2_3::NumberUtils::from_chars(const char*, const char*, float&)':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:110:36: error: '::strtod_l' has not been declared; did you mean 'strtoull'?
  110 |     tempval = static_cast<float>(::strtod_l(first, &endptr, loc.local));
      |                                    ^~~~~~~~
      |                                    strtoull
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:110:65: error: 'const struct OpenColorIO_v2_3::NumberUtils::Locale' has no member named 'local'; did you mean 'Locale'?
  110 |     tempval = static_cast<float>(::strtod_l(first, &endptr, loc.local));
      |                                                                 ^~~~~
      |                                                                 Locale
In file included from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/xmlutils/XMLReaderUtils.h:17,
                 from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/xmlutils/XMLReaderHelper.h:12,
                 from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/cdl/CDLReaderHelper.h:7,
                 from /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/OpenColorIO/fileformats/cdl/CDLReaderHelper.cpp:4:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:42:5: error: 'locale_t' does not name a type; did you mean 'Locale'?
   42 |     locale_t local;
      |     ^~~~~~~~
      |     Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In constructor 'OpenColorIO_v2_3::NumberUtils::Locale::Locale()':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:16: error: class 'OpenColorIO_v2_3::NumberUtils::Locale' does not have any field named 'local'
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                ^~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:32: error: 'LC_ALL_MASK' was not declared in this scope
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                                ^~~~~~~~~~~
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:35:22: error: 'newlocale' was not declared in this scope; did you mean 'setlocale'?
   35 |     Locale() : local(newlocale(LC_ALL_MASK, "C", NULL))
      |                      ^~~~~~~~~
      |                      setlocale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In destructor 'OpenColorIO_v2_3::NumberUtils::Locale::~Locale()':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:40:20: error: 'local' was not declared in this scope; did you mean 'Locale'?
   40 |         freelocale(local);
      |                    ^~~~~
      |                    Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:40:9: error: 'freelocale' was not declared in this scope; did you mean 'setlocale'?
   40 |         freelocale(local);
      |         ^~~~~~~~~~
      |         setlocale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In function 'OpenColorIO_v2_3::NumberUtils::from_chars_result OpenColorIO_v2_3::NumberUtils::from_chars(const char*, const char*, double&)':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:68:17: error: '::strtod_l' has not been declared; did you mean 'strtoull'?
   68 |     tempval = ::strtod_l(first, &endptr, loc.local);
      |                 ^~~~~~~~
      |                 strtoull
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:68:46: error: 'const struct OpenColorIO_v2_3::NumberUtils::Locale' has no member named 'local'; did you mean 'Locale'?
   68 |     tempval = ::strtod_l(first, &endptr, loc.local);
      |                                              ^~~~~
      |                                              Locale
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h: In function 'OpenColorIO_v2_3::NumberUtils::from_chars_result OpenColorIO_v2_3::NumberUtils::from_chars(const char*, const char*, float&)':
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:110:36: error: '::strtod_l' has not been declared; did you mean 'strtoull'?
  110 |     tempval = static_cast<float>(::strtod_l(first, &endptr, loc.local));
      |                                    ^~~~~~~~
      |                                    strtoull
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_graphics_opencolorio/opencolorio/work/OpenColorIO-2.3.2/src/utils/NumberUtils.h:110:65: error: 'const struct OpenColorIO_v2_3::NumberUtils::Locale' has no member named 'local'; did you mean 'Locale'?
  110 |     tempval = static_cast<float>(::strtod_l(first, &endptr, loc.local));
      |                                                                 ^~~~~
      |                                                                 Locale
make[2]: *** [src/OpenColorIO/CMakeFiles/OpenColorIO.dir/fileformats/cdl/CDLWriter.cpp.o] Error 1

Any idea what goes wrong?

amyspark commented 2 weeks ago

Hi @barracuda156 ! It seems that GCC's locale header, on macOS, doesn't expose any of the underlying C includes. That doesn't match MSVC's and Apple Xcode's implementations, on which I relied when writing this class.

I'll be submitting a PR soon to fix this 👍

barracuda156 commented 2 weeks ago

@amyspark Awesome, thank you!