[OpenJDK 2D-Dev] RFR: 8188836: Upgrade to Harfbuzz 1.7.1 in JDK 10

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Mon Dec 4 07:37:21 UTC 2017


An update to the new Harfbuzz looks fine.

On 30/11/2017 11:01, Phil Race wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8188836
> Webrev : http://cr.openjdk.java.net/~prr/8188836/
> 
> harfbuzz is the OpenType font layout engine in JDK 9
> JDK 9 uses harfbuzz 1.5.1 and JDK 10 should update to the most recent 
> version.
> 
> This has been built on all supported platforms (and. FWIW the 32 bit 
> unsupported
> ones as well) and as a consequence I had to make a few tweaks.
> One for window and 3 others for Solaris
> 
> On Windows+ Visual Studio 2013
> On Windows I had to make a JDK build change for this library to
> disable Visual C++ error 4101 - unreferenced local variable.
> 
> This is apparently down to debug code whereby if HB_DEBUG is off still 
> plants code like
> 
> #define TRACE_CLOSURE(this) hb_no_trace_t<hb_void_t> trace HB_UNUSED
> 
> The Solaris changes are as follows :-
> 
> -- 
> 
> harfbuzz/hb-face.cc", line 493: Error: The operation "extern "C" 
> void(*)(void*) != void(*)(void*)" is illegal.
> 
> The line it did not like is
>    if (face->destroy != _hb_face_for_data_closure_destroy)
> 
> The fix is to declare hb_face_for_data_closure_destroy as extern "C" at 
> line 119
> in the same file if compiler is __SUNPRO_CC
> 
> ---
> hb-dsalgs.hh", line 80: Error: Badly formed expression.
> hb-dsalgs.hh", line 82: Error: Use ";" to terminate declarations.
> hb-dsalgs.hh", line 82: Error: "," expected instead of ")".
> hb-dsalgs.hh", line 82: Error: Use ";" to terminate declarations.
> hb-dsalgs.hh", line 82: Error: A declaration was expected instead of ",".
> hb-dsalgs.hh", line 83: Error: "," expected instead of ")".
> hb-dsalgs.hh", line 85: Error: Use ";" to terminate declarations.
> hb-dsalgs.hh", line 85: Error: A declaration was expected instead of ",".
> hb-dsalgs.hh", line 85: Error: a is not defined.
> hb-dsalgs.hh", line 85: Error: w is not defined.
> hb-dsalgs.hh", line 86: Error: A declaration was expected instead of "if".
> hb-dsalgs.hh", line 86: Error: a is not defined.
> 
> It turns out that the SunStudio compiler does not support "restrict" so 
> this line was not parsed correctly :
> static int sort_r_cmpswap(char *__restrict a, char *__restrict b, size_t w,
> 
> I changed it to
> #ifndef __SUNPRO_CC
> /* __restrict is same as restrict but better support on old machines */
> static int sort_r_cmpswap(char *__restrict a, char *__restrict b, size_t w,
> #else
> static int sort_r_cmpswap(char *a, char *b, size_t w,
> #endif
> 
> ---
> 
> 3) hb-string-array.hh", line 51: Error: An array cannot have zero size 
> unless you use the option -features=zla.
> 
> That turns out to be the union member str in this code :
> #undef _S
>    } st;
>    char str[0];
> 
> Since you need 'str' just to get the offset of the beginning of the 
> array that is the other
> member of this union and that is way bigger than the one extra byte I 
> decided it was
> easiest and harmless to just change it to
> 
>    char str[1];
> ---
> 
> These issues have been reported upstream .. some variation of these
> fixes should make it into an upstream release before we need to upgrade 
> again.
> 
> -phil.
> 
> 


-- 
Best regards, Sergey.


More information about the 2d-dev mailing list