[HarfBuzz] Fixes for harfbuzz-ng on Windows MSVC2010
Behdad Esfahbod
behdad at behdad.org
Wed Jul 11 13:48:10 PDT 2012
Hi Koji,
Thanks for the message. Comments below:
On 07/07/2012 11:37 PM, Koji Ishii wrote:
> Hi,
>
> I tried to build harfbuzz-ng on Windows MSVC2010 and got a few errors.
> I'm not sure how many people needs this but I'm sharing the patches
> here for who is interested in.
>
> hb-atomic-private.hh fix is for x86 only. The current code builds fine
> for x64 but not for x86.
I don't understand why this is needed. According to:
http://msdn.microsoft.com/en-us/library/1b4s3xf5%28v=vs.80%29.aspx
_InterlockedCompareExchangePointer is available on both x86 and x64.
> hb-unicode-private.hh fix is probably not related with Windows nor
> MSVC, but when neither GLIB nor ICU is available.
Applied.
> hb-uniscribe.cc fix is required for me, maybe Windows SDK was changed?
> I'm using VC2010 SP1, but the fix should be safe for prior compilers I
> believe.
I see. I just bumped our _WIN32_WINNT version, since we use the OpenType
version of the Uniscribe functions. Let me know if that addresses your problem.
Cheers,
behdad
>
> Regards,
> Koji
>
> commit c5174b35c59ee80ed8e81989ddeb73baabbfe9ed
> Author: Koji Ishii <kojiishi at gmail.com>
> Date: Sat Jul 7 23:45:23 2012 +0900
>
> msvc10 fixes
>
> diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh
> index 918852d..967b6c0 100644
> --- a/src/hb-atomic-private.hh
> +++ b/src/hb-atomic-private.hh
> @@ -45,7 +45,15 @@
> #elif !defined(HB_NO_MT) && defined(_MSC_VER) && _MSC_VER >= 1600
>
> #include <intrin.h>
> +#if defined(_M_IX86)
> +#define _InterlockedCompareExchangePointer(_Target, _Exchange,
> _Comparand) reinterpret_cast<void *>(static_cast<__w64
> long>(_InterlockedCompareExchange( \
> + static_cast<long volatile *>(reinterpret_cast<__w64 long volatile
> *>(static_cast<void * volatile *>(_Target))), \
> + static_cast<long>(reinterpret_cast<__w64 long>(static_cast<void
> *>(_Exchange))), \
> + static_cast<long>(reinterpret_cast<__w64 long>(static_cast<void
> *>(_Comparand))))))
> +#pragma intrinsic(_InterlockedExchangeAdd)
> +#else
> #pragma intrinsic(_InterlockedExchangeAdd, _InterlockedCompareExchangePointer)
> +#endif
>
> typedef long hb_atomic_int_t;
> #define hb_atomic_int_add(AI, V) _InterlockedExchangeAdd (&(AI), (V))
> diff --git a/src/hb-unicode-private.hh b/src/hb-unicode-private.hh
> index eaf151a..c781035 100644
> --- a/src/hb-unicode-private.hh
> +++ b/src/hb-unicode-private.hh
> @@ -99,6 +99,7 @@ extern HB_INTERNAL const hb_unicode_funcs_t
> _hb_icu_unicode_funcs;
> #define _hb_unicode_funcs_default _hb_icu_unicode_funcs
> #else
> #define HB_UNICODE_FUNCS_NIL 1
> +extern HB_INTERNAL const hb_unicode_funcs_t _hb_unicode_funcs_nil;
> #define _hb_unicode_funcs_default _hb_unicode_funcs_nil
> #endif
>
> diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
> index b71b00a..3bedc7d 100644
> --- a/src/hb-uniscribe.cc
> +++ b/src/hb-uniscribe.cc
> @@ -29,6 +29,10 @@
> #include "hb-private.hh"
>
> #include <windows.h>
> +// usp10.h defines UNISCRIBE_OPENTYPE only if _WIN32_WINNT >= 0x0600
> +#if !defined(UNISCRIBE_OPENTYPE) && (_WIN32_WINNT < 0x0600)
> +#define UNISCRIBE_OPENTYPE 0x0100
> +#endif
> #include <usp10.h>
>
> typedef ULONG WIN_ULONG;
> _______________________________________________
> HarfBuzz mailing list
> HarfBuzz at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/harfbuzz
>
More information about the HarfBuzz
mailing list