[HarfBuzz] build problem on windows with older MSVC
Behdad Esfahbod
behdad at behdad.org
Mon Oct 17 11:45:52 PDT 2011
Fixed. Thanks.
On 10/17/2011 02:27 AM, Jonathan Kew wrote:
> Hi Behdad,
>
> It seems that there's a problem with the use of <intrin.h> in some versions of MSVC - apparently some older SDK versions are buggy and it leads to a conflict with <windows.h>. I ran into this when things built fine for me locally, with VC2010, but failed on our tinderbox machines with an older compiler (2005? 2008?).
>
> I don't know whether anyone is really relying on thread-safety at the moment. As a workaround, I'd suggest just disabling the use of the MS intrinsics when building with older tools. If someone really needs this, they could be encouraged to use the latest toolset.
>
> So, suggested patch:
>
> diff --git a/harfbuzz/src/hb-object-private.hh b/harfbuzz/src/hb-object-private.hh
> --- a/harfbuzz/src/hb-object-private.hh
> +++ b/harfbuzz/src/hb-object-private.hh
> @@ -54,29 +54,33 @@
> #include <glib.h>
>
> typedef volatile int hb_atomic_int_t;
> #define hb_atomic_int_fetch_and_add(AI, V) g_atomic_int_exchange_and_add (&(AI), V)
> #define hb_atomic_int_get(AI) g_atomic_int_get (&(AI))
> #define hb_atomic_int_set(AI, V) g_atomic_int_set (&(AI), V)
>
>
> -#elif defined(_MSC_VER)
> +#elif _MSC_VER >= 1600
>
> #include <intrin.h>
>
> typedef long hb_atomic_int_t;
> #define hb_atomic_int_fetch_and_add(AI, V) _InterlockedExchangeAdd (&(AI), V)
> #define hb_atomic_int_get(AI) (_ReadBarrier (), (AI))
> #define hb_atomic_int_set(AI, V) ((void) _InterlockedExchange (&(AI), (V)))
>
>
> #else
>
> +#ifdef _MSC_VER
> +#pragma message("Could not find any system to define atomic_int macros, library will NOT be thread-safe")
> +#else
> #warning "Could not find any system to define atomic_int macros, library will NOT be thread-safe"
> +#endif
>
> typedef volatile int hb_atomic_int_t;
> #define hb_atomic_int_fetch_and_add(AI, V) ((AI) += (V), (AI) - (V))
> #define hb_atomic_int_get(AI) (AI)
> #define hb_atomic_int_set(AI, V) ((void) ((AI) = (V)))
>
>
> #endif
>
> (Note that MSVC doesn't recognize #warning, so it's necessary to provide an alternative, as above.)
>
> JK
>
>
More information about the HarfBuzz
mailing list