texlive[70812] Build/source/libs: harfbuzz 8.4.0

commits+kakuto at tug.org commits+kakuto at tug.org
Sat Mar 30 00:16:36 CET 2024


Revision: 70812
          https://tug.org/svn/texlive?view=revision&revision=70812
Author:   kakuto
Date:     2024-03-30 00:16:35 +0100 (Sat, 30 Mar 2024)
Log Message:
-----------
harfbuzz 8.4.0

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/harfbuzz/ChangeLog
    trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
    trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
    trunk/Build/source/libs/harfbuzz/configure
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/README
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/README.md
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc
    trunk/Build/source/libs/harfbuzz/version.ac

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/README	2024-03-29 23:16:35 UTC (rev 70812)
@@ -28,7 +28,7 @@
   https://sourceforge.net/projects/silgraphite/files/graphite2/
   (requires C++11)
 
-harfbuzz 8.3.1 - checked 18mar24
+harfbuzz 8.4.0 - checked 30mar24
   https://github.com/harfbuzz/harfbuzz/releases/latest
 
 icu 74.2 - checked 22dec23

Modified: trunk/Build/source/libs/harfbuzz/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/ChangeLog	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/ChangeLog	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,3 +1,8 @@
+2024-03-30  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
+
+	Import harfbuzz-8.4.0.
+	* version.ac: Adjusted.
+
 2024-03-18  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
 
 	Import harfbuzz-8.3.1.

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,3 +1,8 @@
+2024-03-30  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
+
+	Imported harfbuzz-8.4.0 source tree from:
+	https://github.com/harfbuzz/harfbuzz/releases/download/8.4.0/
+
 2024-03-18  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
 
 	Imported harfbuzz-8.3.1 source tree from:

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,5 +1,5 @@
-Changes applied to the harfbuzz-8.3.1/ tree as obtained from:
-	https://github.com/harfbuzz/harfbuzz/releases/download/8.3.1/
+Changes applied to the harfbuzz-8.4.0/ tree as obtained from:
+	https://github.com/harfbuzz/harfbuzz/releases/download/8.4.0/
 
 Removed:
 	COPYING

Modified: trunk/Build/source/libs/harfbuzz/configure
===================================================================
--- trunk/Build/source/libs/harfbuzz/configure	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/configure	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for harfbuzz (TeX Live) 8.3.1.
+# Generated by GNU Autoconf 2.72 for harfbuzz (TeX Live) 8.4.0.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -604,8 +604,8 @@
 # Identity of this package.
 PACKAGE_NAME='harfbuzz (TeX Live)'
 PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='8.3.1'
-PACKAGE_STRING='harfbuzz (TeX Live) 8.3.1'
+PACKAGE_VERSION='8.4.0'
+PACKAGE_STRING='harfbuzz (TeX Live) 8.4.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1339,7 +1339,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-'configure' configures harfbuzz (TeX Live) 8.3.1 to adapt to many kinds of systems.
+'configure' configures harfbuzz (TeX Live) 8.4.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1411,7 +1411,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 8.3.1:";;
+     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 8.4.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1516,7 +1516,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-harfbuzz (TeX Live) configure 8.3.1
+harfbuzz (TeX Live) configure 8.4.0
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2073,7 +2073,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by harfbuzz (TeX Live) $as_me 8.3.1, which was
+It was created by harfbuzz (TeX Live) $as_me 8.4.0, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4888,7 +4888,7 @@
 
 # Define the identity of the package.
  PACKAGE='harfbuzz--tex-live-'
- VERSION='8.3.1'
+ VERSION='8.4.0'
 
 
 # Some tools Automake needs.
@@ -5103,9 +5103,9 @@
 
 
 HB_VERSION_MAJOR=8
-HB_VERSION_MINOR=3
-HB_VERSION_MICRO=1
-HB_VERSION=8.3.1
+HB_VERSION_MINOR=4
+HB_VERSION_MICRO=0
+HB_VERSION=8.4.0
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -8949,7 +8949,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by harfbuzz (TeX Live) $as_me 8.3.1, which was
+This file was extended by harfbuzz (TeX Live) $as_me 8.4.0, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9017,7 +9017,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-harfbuzz (TeX Live) config.status 8.3.1
+harfbuzz (TeX Live) config.status 8.4.0
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,3 +1,517 @@
+commit 63973005bc07aba599b47fdd4cf788647b601ccd
+Author: Khaled Hosny <khaled at aliftype.com>
+Date:   Fri Mar 29 16:26:17 2024 +0200
+
+    8.4.0
+
+ NEWS                   | 13 +++++++++++++
+ configure.ac           |  2 +-
+ docs/harfbuzz-docs.xml |  1 +
+ meson.build            |  2 +-
+ src/hb-buffer.cc       |  4 ++--
+ src/hb-version.h       |  6 +++---
+ 6 files changed, 21 insertions(+), 7 deletions(-)
+
+commit 5b34058d35eea1b93a77ead5d0a1a8e9b33c2d6a
+Merge: 990fb14d7 69f9c29ec
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Mar 28 18:56:29 2024 -0600
+
+    Merge pull request #4640 from googlefonts/gdef
+    
+    [subset] When serializing GDEF ensure that varstore is packed last.
+
+commit 69f9c29ec1bff4411f46be63f1b887f42cc74d24
+Author: Garret Rieger <grieger at google.com>
+Date:   Fri Mar 29 00:19:16 2024 +0000
+
+    [repacker] add tests of serializer repack_last().
+
+ src/test-repacker.cc | 112 ++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 101 insertions(+), 11 deletions(-)
+
+commit 992953fd3e9b721e8ef5ebf3cb0044b92833e510
+Author: Garret Rieger <grieger at google.com>
+Date:   Thu Mar 28 23:12:21 2024 +0000
+
+    [subset] updated comment.
+
+ src/OT/Layout/GDEF/GDEF.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 96f0038e3969d175e131daee6f47e77876f3837d
+Author: Garret Rieger <grieger at google.com>
+Date:   Thu Mar 28 23:11:16 2024 +0000
+
+    [subset] cast.
+
+ src/OT/Layout/GDEF/GDEF.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6e87481731e0945f71e8cb9556f30ffcd2388fcf
+Author: Garret Rieger <grieger at google.com>
+Date:   Wed Mar 27 17:47:57 2024 +0000
+
+    [subset] add virtual links to keep the gdef varstore last.
+
+ src/OT/Layout/GDEF/GDEF.hh                         |  19 +++++--
+ src/hb-serialize.hh                                |  60 ++++++++++++++++++---
+ ...r-new.default.retain-all-codepoint.wght=300.ttf | Bin 131708 -> 131708 bytes
+ ...aa-Regular-new.default.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 191560 -> 191560 bytes
+ ...Regular-new.drop-hints.retain-all-codepoint.ttf | Bin 191512 -> 191512 bytes
+ ...ortaa-Regular-new.gids.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...egular-new.glyph-names.retain-all-codepoint.ttf | Bin 229676 -> 229676 bytes
+ ...ep-all-layout-features.retain-all-codepoint.ttf | Bin 223380 -> 223380 bytes
+ ...ar-new.layout-features.retain-all-codepoint.ttf | Bin 220876 -> 220876 bytes
+ ...a-Regular-new.name-ids.retain-all-codepoint.ttf | Bin 222424 -> 222424 bytes
+ ...lar-new.name-languages.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...egular-new.name-legacy.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...o-prune-unicode-ranges.retain-all-codepoint.ttf | Bin 222684 -> 222684 bytes
+ ...lar-new.notdef-outline.retain-all-codepoint.ttf | Bin 223280 -> 223280 bytes
+ ...egular-new.retain-gids.retain-all-codepoint.ttf | Bin 222732 -> 222732 bytes
+ ...codepoint.wght=200-300,opsz=14.iup_optimize.ttf | Bin 9988 -> 9988 bytes
+ ...t.retain-all-codepoint.wght=200-300,opsz=14.ttf | Bin 10136 -> 10136 bytes
+ ...ifVariable-Roman.default.1FC,21,41,20,62,63.ttf | Bin 3888 -> 3888 bytes
+ ...an.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 9704 -> 9704 bytes
+ .../SourceSerifVariable-Roman.default.61,62,63.ttf | Bin 3784 -> 3784 bytes
+ ...eSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf | Bin 4324 -> 4324 bytes
+ ...ariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf | Bin 3864 -> 3864 bytes
+ ...drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 9704 -> 9704 bytes
+ ...urceSerifVariable-Roman.drop-hints.61,62,63.ttf | Bin 3784 -> 3784 bytes
+ ...rifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf | Bin 4324 -> 4324 bytes
+ ...ble-Roman.filter-scripts.1FC,21,41,20,62,63.ttf | Bin 3856 -> 3856 bytes
+ ...er-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 9548 -> 9548 bytes
+ ...SerifVariable-Roman.filter-scripts.61,62,63.ttf | Bin 3752 -> 3752 bytes
+ ...ariable-Roman.filter-scripts.D7,D8,D9,DA,DE.ttf | Bin 4292 -> 4292 bytes
+ ....retain-all-codepoint.wght=300.iup_optimize.ttf | Bin 3276 -> 3228 bytes
+ ...ubset.default.retain-all-codepoint.wght=300.ttf | Bin 3300 -> 3252 bytes
+ ...nt.wght=200-300-500,wdth=80-90.iup_optimize.ttf | Bin 8684 -> 8684 bytes
+ ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8708 -> 8708 bytes
+ ...codepoint.wght=300-600,wdth=85.iup_optimize.ttf | Bin 7592 -> 7592 bytes
+ ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7592 -> 7592 bytes
+ ...ain-all-codepoint.wght=300-600.iup_optimize.ttf | Bin 303960 -> 303960 bytes
+ ...n.default.retain-all-codepoint.wght=300-600.ttf | Bin 305092 -> 305092 bytes
+ ...ain-all-codepoint.wght=500-800.iup_optimize.ttf | Bin 249808 -> 249808 bytes
+ ...n.default.retain-all-codepoint.wght=500-800.ttf | Bin 250164 -> 250164 bytes
+ test/subset/data/fonts/AnekBangla-subset.ttf       | Bin 5456 -> 5276 bytes
+ 41 files changed, 66 insertions(+), 13 deletions(-)
+
+commit 7145607149be79a548d5a2e25ccbeb1fc6dc3492
+Author: Garret Rieger <grieger at google.com>
+Date:   Mon Mar 25 21:41:16 2024 +0000
+
+    [subset] place the gdef var store at the end of the GDEF table.
+    
+    It appears that some font processors assume it is the last sub table.
+
+ src/OT/Layout/GDEF/GDEF.hh                         |  38 +++++++++++++--------
+ ...r-new.default.retain-all-codepoint.wght=700.ttf | Bin 131584 -> 131584 bytes
+ .../Foldit.default.retain-all-codepoint.ttf        | Bin 44324 -> 44324 bytes
+ ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 44288 -> 44288 bytes
+ .../Foldit.drop-hints.retain-all-codepoint.ttf     | Bin 44288 -> 44288 bytes
+ .../Foldit.retain-gids.retain-all-codepoint.ttf    | Bin 44324 -> 44324 bytes
+ ...fault.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...fault.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114296 -> 114296 bytes
+ ...anges.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...anges.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114296 -> 114296 bytes
+ ...ayout-test-retain-gids.retain-all-codepoint.ttf | Bin 142456 -> 142456 bytes
+ ...wa-Regular.layout-test.retain-all-codepoint.ttf | Bin 142456 -> 142456 bytes
+ ...traLightItalic.default.retain-all-codepoint.ttf | Bin 134344 -> 134344 bytes
+ ...ightItalic.glyph-names.retain-all-codepoint.ttf | Bin 145620 -> 145620 bytes
+ ...tItalic.notdef-outline.retain-all-codepoint.ttf | Bin 134472 -> 134472 bytes
+ ...a-latin-subset.default.retain-all-codepoint.ttf | Bin 40128 -> 40128 bytes
+ .../Roboto-Regular.default.1E00,303.ttf            | Bin 2464 -> 2464 bytes
+ .../layout.gdef/Roboto-Regular.default.303.ttf     | Bin 2068 -> 2068 bytes
+ .../Roboto-Regular.default.309,20,30F.ttf          | Bin 2140 -> 2140 bytes
+ .../layout.gdef/Roboto-Regular.default.323.ttf     | Bin 1960 -> 1960 bytes
+ .../Roboto-Regular.drop-hints.1E00,303.ttf         | Bin 1320 -> 1320 bytes
+ .../layout.gdef/Roboto-Regular.drop-hints.303.ttf  | Bin 1064 -> 1064 bytes
+ .../Roboto-Regular.drop-hints.309,20,30F.ttf       | Bin 1100 -> 1100 bytes
+ .../layout.gdef/Roboto-Regular.drop-hints.323.ttf  | Bin 1008 -> 1008 bytes
+ .../Roboto-Regular.keep-gdef-gpos.1E00,303.ttf     | Bin 2464 -> 2464 bytes
+ .../Roboto-Regular.keep-gdef-gpos.303.ttf          | Bin 2068 -> 2068 bytes
+ .../Roboto-Regular.keep-gdef-gpos.309,20,30F.ttf   | Bin 2140 -> 2140 bytes
+ .../Roboto-Regular.keep-gdef-gpos.323.ttf          | Bin 1960 -> 1960 bytes
+ ...ular.default.627,644,623,62D,644,627,645,2E.ttf | Bin 17552 -> 17552 bytes
+ ...astaliqUrdu-Regular.default.627,644,62D,628.ttf | Bin 24520 -> 24520 bytes
+ .../NotoNastaliqUrdu-Regular.default.633,6D2.ttf   | Bin 14280 -> 14280 bytes
+ ...otoNastaliqUrdu-Regular.default.63A,64A,631.ttf | Bin 26116 -> 26116 bytes
+ ...iqUrdu-Regular.default.retain-all-codepoint.ttf | Bin 542328 -> 542328 bytes
+ ....retain-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 24212 -> 24212 bytes
+ ...liqUrdu-Regular.retain-gids.627,644,62D,628.ttf | Bin 30420 -> 30420 bytes
+ ...otoNastaliqUrdu-Regular.retain-gids.633,6D2.ttf | Bin 20120 -> 20120 bytes
+ ...astaliqUrdu-Regular.retain-gids.63A,64A,631.ttf | Bin 31976 -> 31976 bytes
+ ...du-Regular.retain-gids.retain-all-codepoint.ttf | Bin 542360 -> 542360 bytes
+ 38 files changed, 23 insertions(+), 15 deletions(-)
+
+commit 990fb14d7883354db5e5fb1048019829cb2a7eb4
+Author: Garret Rieger <grieger at google.com>
+Date:   Thu Mar 28 22:32:55 2024 +0000
+
+    [subset] Disable fonttools comparison in a few tests where rounding diffs show up.
+    
+    Context: https://github.com/harfbuzz/harfbuzz/issues/4642
+
+ ...codepoint.wght=200-300,opsz=14.iup_optimize.ttf | Bin 9984 -> 9988 bytes
+ ...t.retain-all-codepoint.wght=200-300,opsz=14.ttf | Bin 10136 -> 10136 bytes
+ ...oint.wght=400,wdth=100,opsz=14.iup_optimize.ttf | Bin 6292 -> 6292 bytes
+ ...ain-all-codepoint.wght=400,wdth=100,opsz=14.ttf | Bin 6404 -> 6404 bytes
+ ...nt.wght=200-300-500,wdth=80-90.iup_optimize.ttf | Bin 8684 -> 8684 bytes
+ ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8708 -> 8708 bytes
+ ...codepoint.wght=300-600,wdth=85.iup_optimize.ttf | Bin 7592 -> 7592 bytes
+ ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7592 -> 7592 bytes
+ ...nt.wght=200-300-500,wdth=80-90.iup_optimize.ttf | Bin 7516 -> 7516 bytes
+ ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7568 -> 7568 bytes
+ ...codepoint.wght=300-600,wdth=85.iup_optimize.ttf | Bin 6928 -> 6928 bytes
+ ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6932 -> 6932 bytes
+ ...=200-600,wdth=80-90,CTGR=20-60.iup_optimize.ttf | Bin 4164 -> 4164 bytes
+ ...odepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 4300 -> 4300 bytes
+ ...,YEXT=520,wght=100-400,slnt=18.iup_optimize.ttf | Bin 2184 -> 2184 bytes
+ ...point.SPED=25,YEXT=520,wght=100-400,slnt=18.ttf | Bin 2184 -> 2184 bytes
+ ...ain-all-codepoint.wght=300-600.iup_optimize.ttf | Bin 303960 -> 303960 bytes
+ ...n.default.retain-all-codepoint.wght=300-600.ttf | Bin 305092 -> 305092 bytes
+ ...ain-all-codepoint.wght=500-800.iup_optimize.ttf | Bin 249808 -> 249808 bytes
+ ...n.default.retain-all-codepoint.wght=500-800.ttf | Bin 250164 -> 250164 bytes
+ test/subset/data/fonts/RobotoFlex-Variable.ABC.ttf | Bin 27440 -> 27620 bytes
+ test/subset/data/tests/empty_region_vardata.tests  |   4 ++++
+ .../data/tests/glyf_partial_instancing.tests       |   4 ++++
+ test/subset/data/tests/mvar_partial_instance.tests |   4 ++++
+ test/subset/data/tests/update_def_wght.tests       |   4 ++++
+ 25 files changed, 16 insertions(+)
+
+commit 11f5dec75f8e24ed995fbbabdf4c2a6a0d9e592d
+Author: Garret Rieger <grieger at google.com>
+Date:   Wed Mar 27 19:34:51 2024 +0000
+
+    [subset] Move post apply mvar test intance position to avoid rounding diff.
+
+ ...ll-codepoint.wght=500,CASL=0,CRSV=0,MONO=0,slnt=0.ttf | Bin 0 -> 1892 bytes
+ test/subset/data/tests/post_apply_mvar_delta.tests       |   2 +-
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 975bd39b158e454a84b7b947d156561a21aaf24f
+Author: Garret Rieger <grieger at google.com>
+Date:   Wed Mar 27 19:28:53 2024 +0000
+
+    [subset] Match hb rounding to fonttools for avg char width.
+    
+    Update Muli and Roboto input test fonts to recalc class values. FontTools recalcs class values during instancing while harfbuzz does not (like the ft subsetter).
+
+ src/hb-ot-os2-table.hh                             |   2 +-
+ ...r-new.default.retain-all-codepoint.wght=300.ttf | Bin 131708 -> 131708 bytes
+ ...i-ABC.default.retain-all-codepoint.wght=300.ttf | Bin 5788 -> 5788 bytes
+ ...i-ABC.default.retain-all-codepoint.wght=700.ttf | Bin 5784 -> 5784 bytes
+ ...fault.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...anges.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes
+ ...fault.retain-all-codepoint.wght=200,wdth=90.ttf | Bin 6736 -> 6736 bytes
+ ...fault.retain-all-codepoint.wght=650,wdth=85.ttf | Bin 6688 -> 6688 bytes
+ ...etain-all-codepoint.wght=150,wdth=80,CTGR=0.ttf | Bin 1396 -> 1396 bytes
+ ...etain-all-codepoint.wght=300,wdth=90,CTGR=0.ttf | Bin 1432 -> 1432 bytes
+ ...lt.retain-all-codepoint.wght=400,wdth=100.0.ttf | Bin 6780 -> 6780 bytes
+ ...ult.retain-all-codepoint.wght=drop,wdth=100.ttf | Bin 6780 -> 6780 bytes
+ test/subset/data/fonts/Muli-ABC.ttf                | Bin 6996 -> 6988 bytes
+ test/subset/data/fonts/Roboto-Variable.ABC.ttf     | Bin 13480 -> 13448 bytes
+ 14 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 15a05b24325bc0c07700268e90693cada3cff871
+Author: Garret Rieger <grieger at google.com>
+Date:   Wed Mar 27 18:26:09 2024 +0000
+
+    [subset] Update generate-expected-outputs to drop BASE.
+    
+    This matches the behaviour of the test runner.
+
+ test/subset/generate-expected-outputs.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit ec46c4c2e6a1ee55ddbf2ad8a1241be6903890f9
+Author: Garret Rieger <grieger at google.com>
+Date:   Wed Mar 27 18:11:26 2024 +0000
+
+    [subset] Update subset test suite to match some changes made to fonttools.
+    
+    FontTools has added pruning functionality for code pages which we don't yet have in harfbuzz. Update our test runner to disable that for now. Also match fonttools and always recalc usFirst/LastCharIndex even if no prune unicode ranges is set.
+
+ src/hb-ot-os2-table.hh                                |   6 +++---
+ ...a-Regular-new.no-prune-unicode-ranges.61,62,63.ttf | Bin 7036 -> 7036 bytes
+ ...rtaa-Regular-new.no-prune-unicode-ranges.61,63.ttf | Bin 6668 -> 6668 bytes
+ ...mfortaa-Regular-new.no-prune-unicode-ranges.61.ttf | Bin 6300 -> 6300 bytes
+ ...mfortaa-Regular-new.no-prune-unicode-ranges.62.ttf | Bin 6172 -> 6172 bytes
+ ...mfortaa-Regular-new.no-prune-unicode-ranges.63.ttf | Bin 6228 -> 6228 bytes
+ ...egular-subset.no-prune-unicode-ranges.61,62,63.ttf | Bin 4128 -> 4128 bytes
+ ...o-Regular-subset.no-prune-unicode-ranges.61,63.ttf | Bin 3580 -> 3580 bytes
+ ...ngjo-Regular-subset.no-prune-unicode-ranges.61.ttf | Bin 3156 -> 3156 bytes
+ ...ngjo-Regular-subset.no-prune-unicode-ranges.62.ttf | Bin 3180 -> 3180 bytes
+ ...ngjo-Regular-subset.no-prune-unicode-ranges.63.ttf | Bin 3048 -> 3048 bytes
+ .../Roboto-Regular.abc.no-prune-unicode-ranges.61.ttf | Bin 1988 -> 1988 bytes
+ .../Roboto-Regular.abc.no-prune-unicode-ranges.62.ttf | Bin 1856 -> 1856 bytes
+ .../Roboto-Regular.abc.no-prune-unicode-ranges.63.ttf | Bin 1912 -> 1912 bytes
+ test/subset/generate-expected-outputs.py              |   2 ++
+ 15 files changed, 5 insertions(+), 3 deletions(-)
+
+commit c3fed775d7dbb7e5fdda7da915c8c51d7d21db75
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Mar 28 12:25:03 2024 -0600
+
+    Update README.md
+
+ README.md | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 31e2d12d438d584ed64128208e50a35b47484a02
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date:   Mon Mar 25 10:40:36 2024 +0000
+
+    Bump github/codeql-action from 3.24.7 to 3.24.9
+    
+    Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.7 to 3.24.9.
+    - [Release notes](https://github.com/github/codeql-action/releases)
+    - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
+    - [Commits](https://github.com/github/codeql-action/compare/3ab4101902695724f9365a384f86c1074d94e18c...1b1aada464948af03b950897e5eb522f92603cc2)
+    
+    ---
+    updated-dependencies:
+    - dependency-name: github/codeql-action
+      dependency-type: direct:production
+      update-type: version-update:semver-patch
+    ...
+    
+    Signed-off-by: dependabot[bot] <support at github.com>
+
+ .github/workflows/scorecard.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit cc67579c8ed2fe3305117d15d101682ffe0a84b7
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Mar 22 12:35:29 2024 -0600
+
+    [wasm] Update to latest wasm-micro-runtime API
+
+ src/hb-wasm-shape.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 3d86b360549745113e5b76daae119b3ba2ce36e0
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Mar 22 10:37:39 2024 -0600
+
+    [shape] Fix syntax error under some configs
+    
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/4635
+
+ src/hb-ot-shape.cc | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit 3c8d448fa1174b743963fbc5061a585a255e880b
+Author: Khaled Hosny <khaled at aliftype.com>
+Date:   Sun Mar 17 12:32:14 2024 +0200
+
+    [meson] Check minimum dependency versions like with autotools
+
+ meson.build | 37 ++++++++++++++++++++++++-------------
+ 1 file changed, 24 insertions(+), 13 deletions(-)
+
+commit 1e5597bf853aba69c87c7486d74fcfe3fc6b61cc
+Author: Khaled Hosny <khaled at aliftype.com>
+Date:   Sun Mar 17 12:14:56 2024 +0200
+
+    [autotools] Check for minimum ICU version as well
+    
+    We use unorm2_* APIs introduced in 49.0.
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 957049066e81a46b5c6fc99544b7f4f11550ea48
+Author: Ozkan Sezer <sezeroz at gmail.com>
+Date:   Sun Mar 17 11:50:04 2024 +0300
+
+    configure.ac: bump minimum required versions for glib and cairo.
+    
+    glib2 >= 2.30 is needed for g_unicode_script_from_iso15924() and
+    g_unicode_script_to_iso15924()
+    
+    cairo >= 1.10 is needed for the new cairo_operator_t members like
+    CAIRO_OPERATOR_SCREEN
+    
+    Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4577
+    Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4624
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit dbecddb41c8d5780089bd683e9c7556717737976
+Author: Ozkan Sezer <sezeroz at gmail.com>
+Date:   Sun Mar 17 11:50:04 2024 +0300
+
+    tests, hb-test.h: define g_assert_false && g_assert_nonnull for old glib
+    
+    Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4577
+    Reference issue: https://github.com/harfbuzz/harfbuzz/issues/4624
+
+ test/api/hb-test.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 98747fdec86b58cf3ee508947744ff129d2d62e6
+Author: Ozkan Sezer <sezeroz at gmail.com>
+Date:   Thu Mar 21 08:51:02 2024 +0300
+
+    hb-common.h: restore including stdint.h for VS2010/2012.
+
+ src/hb-common.h | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit f1ac867deec0500fed94f965b6da25f9fcd434de
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Mar 14 13:30:21 2024 -0600
+
+    [buffer] Add API for random state
+    
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/4620
+    
+    New API:
+    +hb_buffer_set_random_state()
+    +hb_buffer_get_random_state()
+
+ docs/harfbuzz-sections.txt   |  2 ++
+ src/hb-buffer.cc             | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer.h              |  6 ++++++
+ src/hb-buffer.hh             |  1 +
+ src/hb-ot-layout-gsubgpos.hh |  5 ++---
+ 5 files changed, 55 insertions(+), 3 deletions(-)
+
+commit 3d455998bf2d48b333522e3f2bd72e720b5d7d5c
+Author: 璀境石 <Kuanlan at outlook.com>
+Date:   Tue Mar 19 09:17:42 2024 +0800
+
+    fixed: hb-subset.cc -- compile error C1128: number of sections exceeded object file format limit
+
+ meson.build | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 51b775d38d5ca4c46bf6672ed10b623b6e7ac2e1
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date:   Mon Mar 18 10:47:18 2024 +0000
+
+    Bump github/codeql-action from 3.24.6 to 3.24.7
+    
+    Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.6 to 3.24.7.
+    - [Release notes](https://github.com/github/codeql-action/releases)
+    - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
+    - [Commits](https://github.com/github/codeql-action/compare/8a470fddafa5cbb6266ee11b37ef4d8aae19c571...3ab4101902695724f9365a384f86c1074d94e18c)
+    
+    ---
+    updated-dependencies:
+    - dependency-name: github/codeql-action
+      dependency-type: direct:production
+      update-type: version-update:semver-patch
+    ...
+    
+    Signed-off-by: dependabot[bot] <support at github.com>
+
+ .github/workflows/scorecard.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 80208d3a2b604ab2fdb7119fd7bbeeb198842aa6
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date:   Mon Mar 18 10:47:28 2024 +0000
+
+    Bump actions/checkout from 4.1.1 to 4.1.2
+    
+    Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2.
+    - [Release notes](https://github.com/actions/checkout/releases)
+    - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
+    - [Commits](https://github.com/actions/checkout/compare/b4ffde65f46336ab88eb53be808477a3936bae11...9bb56186c3b09b4f86b1c65136769dd318469633)
+    
+    ---
+    updated-dependencies:
+    - dependency-name: actions/checkout
+      dependency-type: direct:production
+      update-type: version-update:semver-patch
+    ...
+    
+    Signed-off-by: dependabot[bot] <support at github.com>
+
+ .github/workflows/arm-ci.yml        | 2 +-
+ .github/workflows/configs-build.yml | 2 +-
+ .github/workflows/coverity-scan.yml | 2 +-
+ .github/workflows/linux-ci.yml      | 2 +-
+ .github/workflows/macos-ci.yml      | 2 +-
+ .github/workflows/msvc-ci.yml       | 2 +-
+ .github/workflows/msys2-ci.yml      | 2 +-
+ .github/workflows/scorecard.yml     | 2 +-
+ 8 files changed, 8 insertions(+), 8 deletions(-)
+
+commit a0154418eb13118dc6ee97055e5c3138ed7a73ee
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date:   Mon Mar 18 10:47:32 2024 +0000
+
+    Bump meson from 1.3.2 to 1.4.0 in /.ci
+    
+    Bumps [meson](https://github.com/mesonbuild/meson) from 1.3.2 to 1.4.0.
+    - [Release notes](https://github.com/mesonbuild/meson/releases)
+    - [Commits](https://github.com/mesonbuild/meson/compare/1.3.2...1.4.0)
+    
+    ---
+    updated-dependencies:
+    - dependency-name: meson
+      dependency-type: direct:production
+      update-type: version-update:semver-minor
+    ...
+    
+    Signed-off-by: dependabot[bot] <support at github.com>
+
+ .ci/requirements.in  | 2 +-
+ .ci/requirements.txt | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit a91d2edc7a4346e914d09ed183ea303edcff26ea
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date:   Mon Mar 18 10:47:45 2024 +0000
+
+    Bump setuptools from 69.1.1 to 69.2.0 in /.ci
+    
+    Bumps [setuptools](https://github.com/pypa/setuptools) from 69.1.1 to 69.2.0.
+    - [Release notes](https://github.com/pypa/setuptools/releases)
+    - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
+    - [Commits](https://github.com/pypa/setuptools/compare/v69.1.1...v69.2.0)
+    
+    ---
+    updated-dependencies:
+    - dependency-name: setuptools
+      dependency-type: direct:production
+      update-type: version-update:semver-minor
+    ...
+    
+    Signed-off-by: dependabot[bot] <support at github.com>
+
+ .ci/requirements.txt | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit ddc9b42684305287e20c644b40fa478abd077ef8
+Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
+Date:   Mon Mar 18 10:48:00 2024 +0000
+
+    Bump fonttools from 4.49.0 to 4.50.0 in /.ci
+    
+    Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.49.0 to 4.50.0.
+    - [Release notes](https://github.com/fonttools/fonttools/releases)
+    - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst)
+    - [Commits](https://github.com/fonttools/fonttools/compare/4.49.0...4.50.0)
+    
+    ---
+    updated-dependencies:
+    - dependency-name: fonttools
+      dependency-type: direct:production
+      update-type: version-update:semver-minor
+    ...
+    
+    Signed-off-by: dependabot[bot] <support at github.com>
+
+ .ci/requirements-fonttools.txt | 86 +++++++++++++++++++++---------------------
+ .ci/requirements.txt           | 86 +++++++++++++++++++++---------------------
+ 2 files changed, 86 insertions(+), 86 deletions(-)
+
 commit 2b3631a866b3077d9d675caa4ec9010b342b5a7c
 Author: Khaled Hosny <khaled at aliftype.com>
 Date:   Sun Mar 17 07:44:19 2024 +0200

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,3 +1,16 @@
+Overview of changes leading to 8.4.0
+Saturday, March 29, 2024
+====================================
+- Add /bigobj to MSVC compiler flags in meson build, to fix building hb-subset.cc
+- Specify minimum versions of various dependencies in meson and autotools build.
+- When subsetting, place variation store at the end of “GDEF” table  to fix
+  shaping issues with some versions of Adobe InDesign.
+- Various build fixes.
+
+- New API:
++hb_buffer_set_random_state()
++hb_buffer_get_random_state()
+
 Overview of changes leading to 8.3.1
 Saturday, March 16, 2024
 ====================================

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/README
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/README	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/README	2024-03-29 23:16:35 UTC (rev 70812)
@@ -72,9 +72,9 @@
 
 ## Name
 
-HarfBuzz (حرف‌باز) is my Persian translation of “[OpenType][1]”,
-transliterated using the Latin script. It sports a second meaning, but that
-ain’t translatable.
+HarfBuzz (حرف‌باز) is the literal Persian translation of “[OpenType][1]”,
+transliterated using the Latin script. It also means "talkative" or
+"glib" (also a nod to the GNOME project where HarfBuzz originates from).
 
 > Background: Originally there was this font format called TrueType. People and
 > companies started calling their type engines all things ending in Type:

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/README.md
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/README.md	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/README.md	2024-03-29 23:16:35 UTC (rev 70812)
@@ -72,9 +72,9 @@
 
 ## Name
 
-HarfBuzz (حرف‌باز) is my Persian translation of “[OpenType][1]”,
-transliterated using the Latin script. It sports a second meaning, but that
-ain’t translatable.
+HarfBuzz (حرف‌باز) is the literal Persian translation of “[OpenType][1]”,
+transliterated using the Latin script. It also means "talkative" or
+"glib" (also a nod to the GNOME project where HarfBuzz originates from).
 
 > Background: Originally there was this font format called TrueType. People and
 > companies started calling their type engines all things ending in Type:

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [8.3.1],
+        [8.4.0],
         [https://github.com/harfbuzz/harfbuzz/issues/new],
         [harfbuzz],
         [http://harfbuzz.org/])
@@ -132,7 +132,7 @@
 			[Use glib @<:@default=auto@:>@])],,
 	[with_glib=auto])
 have_glib=false
-GLIB_DEPS="glib-2.0 >= 2.19.1"
+GLIB_DEPS="glib-2.0 >= 2.30"
 AC_SUBST(GLIB_DEPS)
 if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then
 	PKG_CHECK_MODULES(GLIB, $GLIB_DEPS, have_glib=true, :)
@@ -193,7 +193,7 @@
 	[with_cairo=auto])
 have_cairo=false
 if test "x$with_cairo" = "xyes" -o "x$with_cairo" = "xauto"; then
-	PKG_CHECK_MODULES(CAIRO, cairo >= 1.8.0, have_cairo=true, :)
+	PKG_CHECK_MODULES(CAIRO, cairo >= 1.10, have_cairo=true, :)
 	save_libs=$LIBS
 	LIBS="$LIBS $CAIRO_LIBS"
 	AC_CHECK_FUNCS(cairo_user_font_face_set_render_color_glyph_func)
@@ -242,7 +242,7 @@
 	[with_icu=auto])
 have_icu=false
 if test "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" -o "x$with_icu" = "xauto"; then
-	PKG_CHECK_MODULES(ICU, icu-uc, have_icu=true, :)
+	PKG_CHECK_MODULES(ICU, icu-uc >= 49.0, have_icu=true, :)
 fi
 if test \( "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" \) -a "x$have_icu" != "xtrue"; then
 	AC_MSG_ERROR([icu support requested but icu-uc not found])

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build	2024-03-29 23:16:35 UTC (rev 70812)
@@ -1,6 +1,6 @@
 project('harfbuzz', 'c', 'cpp',
   meson_version: '>= 0.55.0',
-  version: '8.3.1',
+  version: '8.4.0',
   default_options: [
     'cpp_eh=none',          # Just to support msvc, we are passing -fno-exceptions also anyway
     # 'cpp_rtti=false',     # Do NOT enable, wraps inherit it and ICU needs RTTI
@@ -9,6 +9,13 @@
   ],
 )
 
+glib_min_version = '>= 2.30.0'
+cairo_min_version = '>= 1.10.0'
+chafa_min_version = '>= 1.6.0'
+icu_min_version = '>= 49.0'
+graphite2_min_version = '>= 1.2.0'
+freetype_min_version = '>= 12.0.6'
+
 hb_version_arr = meson.project_version().split('.')
 hb_version_major = hb_version_arr[0].to_int()
 hb_version_minor = hb_version_arr[1].to_int()
@@ -41,6 +48,7 @@
   # NOTE: Only add warnings here if you are sure they're spurious
   msvc_args = [
     '/wd4244', # lossy type conversion (e.g. double -> int)
+    '/bigobj', # hb-subset.cc -- compile error C1128: number of sections exceeded object file format limit
     cpp.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
   ]
   add_project_arguments(msvc_args, language: ['c', 'cpp'])
@@ -95,6 +103,7 @@
 if meson.version().version_compare('>=0.60.0')
   # pkg-config: freetype2, cmake: Freetype
   freetype_dep = dependency('freetype2', 'Freetype',
+                            version: freetype_min_version,
                             required: get_option('freetype'),
                             default_options: ['harfbuzz=disabled'],
                             allow_fallback: true)
@@ -106,15 +115,16 @@
     freetype_opt = false
   endif
   # try pkg-config name
-  freetype_dep = dependency('freetype2', method: 'pkg-config', required: freetype_opt)
+  freetype_dep = dependency('freetype2', version: freetype_min_version, method: 'pkg-config', required: freetype_opt)
   # when disabled, leave it not-found
   if not freetype_dep.found() and not get_option('freetype').disabled()
     # Try cmake name
-    freetype_dep = dependency('Freetype', method: 'cmake', required: false)
+    freetype_dep = dependency('Freetype', version: freetype_min_version, method: 'cmake', required: false)
     # Subproject fallback, `allow_fallback: true` means the fallback will be
     # tried even if the freetype option is set to `auto`.
     if not freetype_dep.found()
       freetype_dep = dependency('freetype2',
+                                version: freetype_min_version,
                                 method: 'pkg-config',
                                 required: get_option('freetype'),
                                 default_options: ['harfbuzz=disabled'],
@@ -123,10 +133,10 @@
   endif
 endif
 
-glib_dep = dependency('glib-2.0', required: get_option('glib'))
-gobject_dep = dependency('gobject-2.0', required: get_option('gobject'))
-graphite2_dep = dependency('graphite2', required: get_option('graphite2'))
-graphite_dep = dependency('graphite2', required: get_option('graphite'))
+glib_dep = dependency('glib-2.0', version: glib_min_version, required: get_option('glib'))
+gobject_dep = dependency('gobject-2.0', version: glib_min_version, required: get_option('gobject'))
+graphite2_dep = dependency('graphite2', version: graphite2_min_version, required: get_option('graphite2'))
+graphite_dep = dependency('graphite2', version: graphite2_min_version, required: get_option('graphite'))
 wasm_dep = cpp.find_library('iwasm', required: get_option('wasm'))
 # How to check whether iwasm was built, and hence requires, LLVM?
 #llvm_dep = cpp.find_library('LLVM-15', required: get_option('wasm'))
@@ -134,6 +144,7 @@
 if meson.version().version_compare('>=0.60.0')
   # pkg-config: icu-uc, cmake: ICU but with components
   icu_dep = dependency('icu-uc', 'ICU',
+                            version: icu_min_version,
                             components: 'uc',
                             required: get_option('icu'),
                             allow_fallback: true)
@@ -145,11 +156,11 @@
     icu_opt = false
   endif
   # try pkg-config name
-  icu_dep = dependency('icu-uc', method: 'pkg-config', required: icu_opt)
+  icu_dep = dependency('icu-uc', version: icu_min_version, method: 'pkg-config', required: icu_opt)
   # when disabled, leave it not-found
   if not icu_dep.found() and not get_option('icu').disabled()
     # Try cmake name
-    icu_dep = dependency('ICU', method: 'cmake', components: 'uc', required: false)
+    icu_dep = dependency('ICU', version: icu_min_version, method: 'cmake', components: 'uc', required: false)
     # Try again with subproject fallback. `allow_fallback: true` means the
     # fallback will be tried even if the icu option is set to `auto`, but
     # we cannot pass this option until Meson 0.59.0, because no wrap file
@@ -156,6 +167,7 @@
     # is checked into git.
     if not icu_dep.found()
       icu_dep = dependency('icu-uc',
+                           version: icu_min_version,
                            method: 'pkg-config',
                            required: get_option('icu'))
     endif
@@ -172,8 +184,8 @@
 cairo_dep = null_dep
 cairo_ft_dep = null_dep
 if not get_option('cairo').disabled()
-  cairo_dep = dependency('cairo', required: false)
-  cairo_ft_dep = dependency('cairo-ft', required: false)
+  cairo_dep = dependency('cairo', version: cairo_min_version, required: false)
+  cairo_ft_dep = dependency('cairo-ft', version: cairo_min_version, required: false)
 
   if (not cairo_dep.found() and
       cpp.get_argument_syntax() == 'msvc' and
@@ -191,13 +203,13 @@
     # dependency cycle here because we have configured freetype2 above with
     # harfbuzz support disabled, so when cairo will lookup freetype2 dependency
     # it will be forced to use that one.
-    cairo_dep = dependency('cairo', required: get_option('cairo'))
+    cairo_dep = dependency('cairo', version: cairo_min_version, required: get_option('cairo'))
     cairo_ft_required = get_option('cairo').enabled() and get_option('freetype').enabled()
-    cairo_ft_dep = dependency('cairo-ft', required: cairo_ft_required)
+    cairo_ft_dep = dependency('cairo-ft', version: cairo_min_version, required: cairo_ft_required)
   endif
 endif
 
-chafa_dep = dependency('chafa', version: '>= 1.6.0', required: get_option('chafa'))
+chafa_dep = dependency('chafa', version: chafa_min_version, required: get_option('chafa'))
 
 conf = configuration_data()
 incconfig = include_directories('.')

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Layout/GDEF/GDEF.hh	2024-03-29 23:16:35 UTC (rev 70812)
@@ -663,21 +663,16 @@
     auto *out = c->serializer->start_embed (*this);
     if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
 
-    out->version.major = version.major;
-    out->version.minor = version.minor;
-    bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true);
-    bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this);
-    bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true);
-
-    bool subset_markglyphsetsdef = false;
+    // Push var store first (if it's needed) so that it's last in the
+    // serialization order. Some font consumers assume that varstore runs to
+    // the end of the GDEF table.
+    // See: https://github.com/harfbuzz/harfbuzz/issues/4636
     auto snapshot_version0 = c->serializer->snapshot ();
-    if (version.to_int () >= 0x00010002u)
-    {
-      if (unlikely (!c->serializer->embed (markGlyphSetsDef))) return_trace (false);
-      subset_markglyphsetsdef = out->markGlyphSetsDef.serialize_subset (c, markGlyphSetsDef, this);
-    }
+    if (unlikely (version.to_int () >= 0x00010002u && !c->serializer->embed (markGlyphSetsDef)))
+      return_trace (false);
 
     bool subset_varstore = false;
+    unsigned varstore_index = (unsigned) -1;
     auto snapshot_version2 = c->serializer->snapshot ();
     if (version.to_int () >= 0x00010003u)
     {
@@ -690,35 +685,58 @@
         {
           item_variations_t item_vars;
           if (item_vars.instantiate (this+varStore, c->plan, true, true,
-                                     c->plan->gdef_varstore_inner_maps.as_array ()))
+                                     c->plan->gdef_varstore_inner_maps.as_array ())) {
             subset_varstore = out->varStore.serialize_serialize (c->serializer,
                                                                  item_vars.has_long_word (),
                                                                  c->plan->axis_tags,
                                                                  item_vars.get_region_list (),
                                                                  item_vars.get_vardata_encodings ());
+            varstore_index = c->serializer->last_added_child_index();
+          }
           remap_varidx_after_instantiation (item_vars.get_varidx_map (),
                                             c->plan->layout_variation_idx_delta_map);
         }
       }
       else
+      {
         subset_varstore = out->varStore.serialize_subset (c, varStore, this, c->plan->gdef_varstore_inner_maps.as_array ());
+        varstore_index = c->serializer->last_added_child_index();
+      }
     }
 
+    out->version.major = version.major;
+    out->version.minor = version.minor;
 
+    if (!subset_varstore && version.to_int () >= 0x00010002u) {
+      c->serializer->revert (snapshot_version2);
+    }
+
+    bool subset_markglyphsetsdef = false;
+    if (version.to_int () >= 0x00010002u)
+    {
+      subset_markglyphsetsdef = out->markGlyphSetsDef.serialize_subset (c, markGlyphSetsDef, this);
+    }
+
     if (subset_varstore)
     {
       out->version.minor = 3;
       c->plan->has_gdef_varstore = true;
     } else if (subset_markglyphsetsdef) {
-      out->version.minor = 2;
-      c->serializer->revert (snapshot_version2);
+      out->version.minor = 2;      
     } else  {
       out->version.minor = 0;
       c->serializer->revert (snapshot_version0);
     }
 
+    bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true);
+    bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this);
+    bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true);
     bool subset_ligcaretlist = out->ligCaretList.serialize_subset (c, ligCaretList, this);
 
+    if (subset_varstore && varstore_index != (unsigned) -1) {
+      c->serializer->repack_last(varstore_index);
+    }
+
     return_trace (subset_glyphclassdef || subset_attachlist ||
 		  subset_ligcaretlist || subset_markattachclassdef ||
 		  (out->version.to_int () >= 0x00010002u && subset_markglyphsetsdef) ||
@@ -1013,7 +1031,7 @@
     if (!has_var_store ()) return;
     const ItemVariationStore &var_store = get_var_store ();
     float *store_cache = var_store.create_cache ();
-    
+
     unsigned new_major = 0, new_minor = 0;
     unsigned last_major = (layout_variation_indices->get_min ()) >> 16;
     for (unsigned idx : layout_variation_indices->iter ())

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc	2024-03-29 23:16:35 UTC (rev 70812)
@@ -309,6 +309,7 @@
 
   deallocate_var_all ();
   serial = 0;
+  random_state = 1;
   scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
 }
 
@@ -1359,8 +1360,51 @@
   return buffer->not_found;
 }
 
+/**
+ * hb_buffer_set_random_state:
+ * @buffer: An #hb_buffer_t
+ * @state: the new random state
+ *
+ * Sets the random state of the buffer. The state changes
+ * every time a glyph uses randomness (eg. the `rand`
+ * OpenType feature). This function together with
+ * hb_buffer_get_random_state() allow for transferring
+ * the current random state to a subsequent buffer, to
+ * get better randomness distribution.
+ *
+ * Defaults to 1 and when buffer contents are cleared.
+ * A value of 0 disables randomness during shaping.
+ *
+ * Since: 8.4.0
+ **/
+void
+hb_buffer_set_random_state (hb_buffer_t    *buffer,
+			    unsigned        state)
+{
+  if (unlikely (hb_object_is_immutable (buffer)))
+    return;
 
+  buffer->random_state = state;
+}
+
 /**
+ * hb_buffer_get_random_state:
+ * @buffer: An #hb_buffer_t
+ *
+ * See hb_buffer_set_random_state().
+ *
+ * Return value:
+ * The @buffer random state
+ *
+ * Since: 8.4.0
+ **/
+unsigned
+hb_buffer_get_random_state (const hb_buffer_t *buffer)
+{
+  return buffer->random_state;
+}
+
+/**
  * hb_buffer_clear_contents:
  * @buffer: An #hb_buffer_t
  *

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h	2024-03-29 23:16:35 UTC (rev 70812)
@@ -487,7 +487,13 @@
 HB_EXTERN hb_codepoint_t
 hb_buffer_get_not_found_glyph (const hb_buffer_t *buffer);
 
+HB_EXTERN void
+hb_buffer_set_random_state (hb_buffer_t    *buffer,
+			    unsigned        state);
 
+HB_EXTERN unsigned
+hb_buffer_get_random_state (const hb_buffer_t *buffer);
+
 /*
  * Content API.
  */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.hh	2024-03-29 23:16:35 UTC (rev 70812)
@@ -116,6 +116,7 @@
 
   uint8_t allocated_var_bits;
   uint8_t serial;
+  uint32_t random_state;
   hb_buffer_scratch_flags_t scratch_flags; /* Have space-fallback, etc. */
   unsigned int max_len; /* Maximum allowed len. */
   int max_ops; /* Maximum allowed operations. */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h	2024-03-29 23:16:35 UTC (rev 70812)
@@ -49,8 +49,8 @@
 
 #if defined (_AIX)
 #  include <sys/inttypes.h>
-#elif defined (_MSC_VER) && _MSC_VER < 1800
-/* VS 2013 (_MSC_VER 1800) has inttypes.h */
+#elif defined (_MSC_VER) && _MSC_VER < 1600
+/* VS 2010 (_MSC_VER 1600) has stdint.h   */
 typedef __int8 int8_t;
 typedef unsigned __int8 uint8_t;
 typedef __int16 int16_t;
@@ -59,6 +59,9 @@
 typedef unsigned __int32 uint32_t;
 typedef __int64 int64_t;
 typedef unsigned __int64 uint64_t;
+#elif defined (_MSC_VER) && _MSC_VER < 1800
+/* VS 2013 (_MSC_VER 1800) has inttypes.h */
+#  include <stdint.h>
 #else
 #  include <inttypes.h>
 #endif

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh	2024-03-29 23:16:35 UTC (rev 70812)
@@ -723,7 +723,6 @@
   bool auto_zwj = true;
   bool per_syllable = false;
   bool random = false;
-  uint32_t random_state = 1;
   unsigned new_syllables = (unsigned) -1;
 
   signed last_base = -1; // GPOS uses
@@ -788,8 +787,8 @@
   uint32_t random_number ()
   {
     /* http://www.cplusplus.com/reference/random/minstd_rand/ */
-    random_state = random_state * 48271 % 2147483647;
-    return random_state;
+    buffer->random_state = buffer->random_state * 48271 % 2147483647;
+    return buffer->random_state;
   }
 
   bool match_properties_mark (hb_codepoint_t  glyph,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh	2024-03-29 23:16:35 UTC (rev 70812)
@@ -223,7 +223,7 @@
       }
     }
 
-    return num ? (unsigned) roundf (total_width / num) : 0;
+    return num ? (unsigned) roundf ((double) total_width / (double) num) : 0;
   }
 
   bool subset (hb_subset_context_t *c) const
@@ -284,12 +284,12 @@
         os2_prime->usWidthClass = width_class;
     }
 
+    os2_prime->usFirstCharIndex = hb_min (0xFFFFu, c->plan->unicodes.get_min ());
+    os2_prime->usLastCharIndex  = hb_min (0xFFFFu, c->plan->unicodes.get_max ());
+
     if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
       return_trace (true);
 
-    os2_prime->usFirstCharIndex = hb_min (0xFFFFu, c->plan->unicodes.get_min ());
-    os2_prime->usLastCharIndex  = hb_min (0xFFFFu, c->plan->unicodes.get_max ());
-
     _update_unicode_ranges (&c->plan->unicodes, os2_prime->ulUnicodeRange);
 
     return_trace (true);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc	2024-03-29 23:16:35 UTC (rev 70812)
@@ -155,7 +155,7 @@
 #endif
   bool has_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
   if (false)
-    ;
+    {}
 #ifndef HB_NO_AAT_SHAPE
   /* Prefer GPOS over kerx if GSUB is present;
    * https://github.com/harfbuzz/harfbuzz/issues/3008 */
@@ -167,15 +167,16 @@
 
   if (!plan.apply_kerx && (!has_gpos_kern || !plan.apply_gpos))
   {
+    if (false) {}
 #ifndef HB_NO_AAT_SHAPE
-    if (has_kerx)
+    else if (has_kerx)
       plan.apply_kerx = true;
-    else
 #endif
 #ifndef HB_NO_OT_KERN
-    if (hb_ot_layout_has_kerning (face))
+    else if (hb_ot_layout_has_kerning (face))
       plan.apply_kern = true;
 #endif
+    else {}
   }
 
   plan.apply_fallback_kern = !(plan.apply_gpos || plan.apply_kerx || plan.apply_kern);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh	2024-03-29 23:16:35 UTC (rev 70812)
@@ -91,6 +91,26 @@
     }
 #endif
 
+    bool add_virtual_link (objidx_t objidx)
+    {
+      if (!objidx)
+        return false;
+
+      auto& link = *virtual_links.push ();
+      if (virtual_links.in_error ())
+        return false;
+
+      link.objidx = objidx;
+      // Remaining fields were previously zero'd by push():
+      // link.width = 0;
+      // link.is_signed = 0;
+      // link.whence = 0;
+      // link.position = 0;
+      // link.bias = 0;
+
+      return true;
+    }
+
     friend void swap (object_t& a, object_t& b) noexcept
     {
       hb_swap (a.head, b.head);
@@ -469,18 +489,42 @@
 
     assert (current);
 
-    auto& link = *current->virtual_links.push ();
-    if (current->virtual_links.in_error ())
+    if (!current->add_virtual_link(objidx))
       err (HB_SERIALIZE_ERROR_OTHER);
+  }
 
-    link.width = 0;
-    link.objidx = objidx;
-    link.is_signed = 0;
-    link.whence = 0;
-    link.position = 0;
-    link.bias = 0;
+  objidx_t last_added_child_index() const {
+    if (unlikely (in_error ())) return (objidx_t) -1;
+
+    assert (current);
+    if (!bool(current->real_links)) {
+      return (objidx_t) -1;
+    }
+
+    return current->real_links[current->real_links.length - 1].objidx;
   }
 
+  // For the current object ensure that the sub-table bytes for child objidx are always placed
+  // after the subtable bytes for any other existing children. This only ensures that the
+  // repacker will not move the target subtable before the other children
+  // (by adding virtual links). It is up to the caller to ensure the initial serialization
+  // order is correct.
+  void repack_last(objidx_t objidx) {
+    if (unlikely (in_error ())) return;
+
+    if (!objidx)
+      return;
+
+    assert (current);
+    for (auto& l : current->real_links) {
+      if (l.objidx == objidx) {
+        continue;
+      }
+
+      packed[l.objidx]->add_virtual_link(objidx);
+    }
+  }
+
   template <typename T>
   void add_link (T &ofs, objidx_t objidx,
 		 whence_t whence = Head,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-wasm-shape.cc	2024-03-29 23:16:35 UTC (rev 70812)
@@ -240,7 +240,7 @@
     goto fail;
   }
 
-  func = wasm_runtime_lookup_function (module_inst, "shape_plan_create", nullptr);
+  func = wasm_runtime_lookup_function (module_inst, "shape_plan_create");
   if (func)
   {
     wasm_val_t results[1];
@@ -297,7 +297,7 @@
   if (plan->wasm_shape_planptr)
   {
 
-    auto *func = wasm_runtime_lookup_function (module_inst, "shape_plan_destroy", nullptr);
+    auto *func = wasm_runtime_lookup_function (module_inst, "shape_plan_destroy");
     if (func)
     {
       wasm_val_t arguments[1];
@@ -395,7 +395,7 @@
     goto fail;
   }
 
-  func = wasm_runtime_lookup_function (module_inst, "shape", nullptr);
+  func = wasm_runtime_lookup_function (module_inst, "shape");
   if (unlikely (!func))
   {
     DEBUG_MSG (WASM, module_inst, "Shape function not found.");

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/test-repacker.cc	2024-03-29 23:16:35 UTC (rev 70812)
@@ -433,16 +433,13 @@
   }
 };
 
-
-
-
-
 static void run_resolve_overflow_test (const char* name,
                                        hb_serialize_context_t& overflowing,
                                        hb_serialize_context_t& expected,
                                        unsigned num_iterations = 0,
                                        bool recalculate_extensions = false,
-                                       hb_tag_t tag = HB_TAG ('G', 'S', 'U', 'B'))
+                                       hb_tag_t tag = HB_TAG ('G', 'S', 'U', 'B'),
+                                       bool check_binary_equivalence = false)
 {
   printf (">>> Testing overflowing resolution for %s\n",
           name);
@@ -452,6 +449,10 @@
   graph_t expected_graph (expected.object_graph ());
   if (graph::will_overflow (expected_graph))
   {
+    if (check_binary_equivalence) {
+      printf("when binary equivalence checking is enabled, the expected graph cannot overflow.");
+      assert(!check_binary_equivalence);
+    }
     expected_graph.assign_spaces ();
     expected_graph.sort_shortest_distance ();
   }
@@ -464,13 +465,28 @@
                                       graph));
 
   // Check the graphs can be serialized.
-  hb_blob_t* out = graph::serialize (graph);
-  assert (out);
-  hb_blob_destroy (out);
-  out = graph::serialize (expected_graph);
-  assert (out);
-  hb_blob_destroy (out);
+  hb_blob_t* out1 = graph::serialize (graph);
+  assert (out1);
+  hb_blob_t* out2 = graph::serialize (expected_graph);
+  assert (out2);
+  if (check_binary_equivalence) {
+    unsigned l1, l2;
+    const char* d1 = hb_blob_get_data(out1, &l1);
+    const char* d2 = hb_blob_get_data(out2, &l2);
 
+    bool match = (l1 == l2) && (memcmp(d1, d2, l1) == 0);
+    if (!match) {
+      printf("## Result:\n");
+      graph.print();
+      printf("## Expected:\n");
+      expected_graph.print();
+      assert(match);
+    }
+  }
+
+  hb_blob_destroy (out1);
+  hb_blob_destroy (out2);
+
   // Check the graphs are equivalent
   graph.normalize ();
   expected_graph.normalize ();
@@ -780,6 +796,54 @@
 }
 
 static void
+populate_serializer_with_repack_last (hb_serialize_context_t* c, bool with_overflow)
+{
+  std::string large_string(70000, 'c');
+  c->start_serialize<char> ();
+  c->push();
+
+  // Obj E
+  unsigned obj_e_1, obj_e_2;
+  if (with_overflow) {
+    obj_e_1 = add_object("a", 1, c);
+    obj_e_2 = obj_e_1;
+  } else {
+    obj_e_2 = add_object("a", 1, c);
+  }
+
+  // Obj D
+  c->push();
+  add_offset(obj_e_2, c);
+  extend(large_string.c_str(), 30000, c);
+  unsigned obj_d = c->pop_pack(false);
+
+  add_offset(obj_d, c);
+  assert(c->last_added_child_index() == obj_d);
+
+  if (!with_overflow) {
+    obj_e_1 = add_object("a", 1, c);
+  }
+
+  // Obj C
+  c->push();
+  add_offset(obj_e_1, c);
+  extend(large_string.c_str(), 40000, c);
+  unsigned obj_c = c->pop_pack(false);
+
+  add_offset(obj_c, c);
+
+  // Obj B
+  unsigned obj_b = add_object("b", 1, c);
+  add_offset(obj_b, c);
+
+  // Obj A
+  c->repack_last(obj_d);
+  c->pop_pack(false);
+
+  c->end_serialize();
+}
+
+static void
 populate_serializer_spaces (hb_serialize_context_t* c, bool with_overflow)
 {
   std::string large_string(70000, 'a');
@@ -2167,7 +2231,32 @@
   free(buffer);
 }
 
+static void
+test_repack_last ()
+{
+  size_t buffer_size = 200000;
+  void* buffer = malloc (buffer_size);
+  assert (buffer);
+  hb_serialize_context_t c (buffer, buffer_size);
+  populate_serializer_with_repack_last (&c, true);
 
+  void* expected_buffer = malloc (buffer_size);
+  assert (expected_buffer);
+  hb_serialize_context_t e (expected_buffer, buffer_size);
+  populate_serializer_with_repack_last (&e, false);
+
+  run_resolve_overflow_test ("test_repack_last",
+                             c,
+                             e,
+                             20,
+                             false,
+                             HB_TAG('a', 'b', 'c', 'd'),
+                             true);
+
+  free (buffer);
+  free (expected_buffer);
+}
+
 // TODO(garretrieger): update will_overflow tests to check the overflows array.
 // TODO(garretrieger): add tests for priority raising.
 
@@ -2195,6 +2284,7 @@
   test_duplicate_leaf ();
   test_duplicate_interior ();
   test_virtual_link ();
+  test_repack_last();
   test_shared_node_with_virtual_links ();
   test_resolve_with_extension_promotion ();
   test_resolve_with_shared_extension_promotion ();

Modified: trunk/Build/source/libs/harfbuzz/version.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/version.ac	2024-03-29 22:16:42 UTC (rev 70811)
+++ trunk/Build/source/libs/harfbuzz/version.ac	2024-03-29 23:16:35 UTC (rev 70812)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [8.3.1])
+m4_define([harfbuzz_version], [8.4.0])



More information about the tex-live-commits mailing list.