From: Dan Dennedy Date: Thu, 5 Mar 2015 07:41:39 +0000 (-0800) Subject: Fix build on OS X and MinGW. X-Git-Tag: 1.1.3~3 X-Git-Url: https://git.sesse.net/?p=movit;a=commitdiff_plain;h=8ae12f557394d1745f39c843d56fc4cf75167266 Fix build on OS X and MinGW. OS X requires the xlocale.h header to define locale_t: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/newlocale.3.html MinGW does not include implementations for newlocale() and uselocale(). Instead, use the previous approach using setlocale(). --- diff --git a/effect_chain.cpp b/effect_chain.cpp index 81613e6..5d7e923 100644 --- a/effect_chain.cpp +++ b/effect_chain.cpp @@ -13,6 +13,9 @@ #include #include #include +#if defined(__APPLE__) +#include +#endif #include "alpha_division_effect.h" #include "alpha_multiplication_effect.h" @@ -1332,8 +1335,16 @@ void EffectChain::finalize() { // Save the current locale, and set it to C, so that we can output decimal // numbers with printf and be sure to get them in the format mandated by GLSL. +#if defined(__MINGW32__) + // Note that the OpenGL driver might call setlocale() behind-the-scenes, + // and that might corrupt the returned pointer, so we need to take our own + // copy of it here. + char *saved_locale = strdup(setlocale(LC_NUMERIC, NULL)); + setlocale(LC_NUMERIC, "C"); +#else locale_t c_locale = newlocale(LC_NUMERIC_MASK, "C", (locale_t)0); locale_t saved_locale = uselocale(c_locale); +#endif // Output the graph as it is before we do any conversions on it. output_dot("step0-start.dot"); @@ -1397,8 +1408,13 @@ void EffectChain::finalize() assert(phases[0]->inputs.empty()); finalized = true; +#if defined(__MINGW32__) + setlocale(LC_NUMERIC, saved_locale); + free(saved_locale); +#else uselocale(saved_locale); freelocale(c_locale); +#endif } void EffectChain::render_to_fbo(GLuint dest_fbo, unsigned width, unsigned height)