[HarfBuzz] Fixes for harfbuzz-ng on Windows MSVC2010

Eduardo Castiñeyra eduardo at brainstorm.es
Mon Jul 9 02:19:13 PDT 2012


Hi Koji,

Would you mind sending me the solution and project to compile in 2010? I 
tried it once but I got far to get it.

Thanks!

On 08/07/2012 5:37, 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.
>
> hb-unicode-private.hh fix is probably not related with Windows nor
> MSVC, but when neither GLIB nor ICU is available.
>
> 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.
>
>
> 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