[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