[HarfBuzz] Patches for building HarfBuzz with mingw.org's MinGW

Behdad Esfahbod behdad at behdad.org
Tue Jun 4 20:08:35 UTC 2019


Hi Eli,

I can't say I'm super-excited about adding more workarounds, specially
since I don't even understand why you can't use mingw64 instead.

At any rate, I'm not one to judge.  Please open a github Pull Request with
your changes and we'll go from there.

Thanks

On Sun, Jun 2, 2019 at 9:35 AM Eli Zaretskii <eliz at gnu.org> wrote:

> Hi,
>
> I'd like to submit a few small patches that allow HarfBuzz to be built
> on Windows with mingw.org's MinGW toolchain.  (And before you ask: the
> reason you don't see the problems I describe below in your MinGW
> builds is that you use MinGW64, which is a different flavor of MinGW.)
>
> The patches are against HarfBuzz 2.5.1.
>
> Here are the patches, with explanations:
>
> 1. This patch is needed because MinGW doesn't have _BitScanForward and
> _BitScanReverse.  They are only used with old GCC versions, so
> conditioning their calls by those old versions of GCC is good enough,
> IMO.
>
> --- src/hb-algs.hh~0    2019-06-01 08:49:47.000000000 +0300
> +++ src/hb-algs.hh      2019-06-02 11:03:52.373677900 +0300
> @@ -400,7 +400,7 @@
>      return sizeof (unsigned long long) * 8 - __builtin_clzll (v);
>  #endif
>
> -#if (defined(_MSC_VER) && _MSC_VER >= 1500) || defined(__MINGW32__)
> +#if (defined(_MSC_VER) && _MSC_VER >= 1500) || (defined(__MINGW32__) &&
> (__GNUC__ < 4))
>    if (sizeof (T) <= sizeof (unsigned int))
>    {
>      unsigned long where;
> @@ -474,7 +474,7 @@
>      return __builtin_ctzll (v);
>  #endif
>
> -#if (defined(_MSC_VER) && _MSC_VER >= 1500) || defined(__MINGW32__)
> +#if (defined(_MSC_VER) && _MSC_VER >= 1500) || (defined(__MINGW32__) &&
> (__GNUC__ < 4))
>    if (sizeof (T) <= sizeof (unsigned int))
>    {
>      unsigned long where;
>
>
> 2. This patch is needed because mingw.org's MinGW defines
> MemoryBarrier as an inline function, not as a macro.
> __MINGW32_VERSION is defined only by mingw.org's MinGW, so the change
> shouldn't affect MinGW64.
>
> --- src/hb-atomic.hh~0  2019-05-27 20:07:58.000000000 +0300
> +++ src/hb-atomic.hh    2019-06-02 10:55:49.013099500 +0300
> @@ -107,7 +107,7 @@
>
>  static inline void _hb_memory_barrier ()
>  {
> -#ifndef MemoryBarrier
> +#if !defined(MemoryBarrier) && !defined(__MINGW32_VERSION)
>    /* MinGW has a convoluted history of supporting MemoryBarrier. */
>    LONG dummy = 0;
>    InterlockedExchange (&dummy, 1);
>
>
> 3. This patch is needed because MinGW doesn't define
> E_NOT_SUFFICIENT_BUFFER.
>
> --- src/hb-uniscribe.cc~0       2019-05-14 03:28:16.000000000 +0300
> +++ src/hb-uniscribe.cc 2019-06-02 11:04:43.843081900 +0300
> @@ -31,6 +31,10 @@
>  #include <usp10.h>
>  #include <rpc.h>
>
> +#ifndef E_NOT_SUFFICIENT_BUFFER
> +#define E_NOT_SUFFICIENT_BUFFER HRESULT_FROM_WIN32
> (ERROR_INSUFFICIENT_BUFFER)
> +#endif
> +
>  #include "hb-uniscribe.h"
>
>  #include "hb-open-file.hh"
>
>
> 4. This patch is needed because mingw.org's MinGW doesn't have the
> intrin.h header file; instead, the intrinsics are declared by
> including windows.h.
>
> --- src/hb.hh~0 2019-05-14 09:42:00.000000000 +0300
> +++ src/hb.hh   2019-06-02 11:06:01.413041500 +0300
> @@ -183,8 +183,15 @@
>  #include <stdarg.h>
>
>  #if (defined(_MSC_VER) && _MSC_VER >= 1500) || defined(__MINGW32__)
> +#ifdef __MINGW32_VERSION
> +#ifndef WIN32_LEAN_AND_MEAN
> +#define WIN32_LEAN_AND_MEAN 1
> +#endif
> +#include <windows.h>
> +#else
>  #include <intrin.h>
>  #endif
> +#endif
>
>  #define HB_PASTE1(a,b) a##b
>  #define HB_PASTE(a,b) HB_PASTE1(a,b)
>
>
> Thank you for developing HarfBuzz.
> _______________________________________________
> HarfBuzz mailing list
> HarfBuzz at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/harfbuzz



-- 
behdad
http://behdad.org/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/harfbuzz/attachments/20190604/9d8a9670/attachment.html>


More information about the HarfBuzz mailing list