<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/95df507e27556c2b6ac45c07255741fcd0841513">https://github.com/macports/macports-ports/commit/95df507e27556c2b6ac45c07255741fcd0841513</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 95df507e27556c2b6ac45c07255741fcd0841513
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Fri Dec 31 02:25:06 2021 -0600

<span style='display:block; white-space:pre;color:#404040;'>    Aseprite: Use harfbuzz 3 subsetting API
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The harfbuzz 2 subsetting API that Aseprite was using was private and
</span><span style='display:block; white-space:pre;color:#404040;'>    was removed in harfbuzz 3.
</span>---
 graphics/Aseprite/Portfile              |   3 +-
 graphics/Aseprite/files/harfbuzz3.patch | 137 ++++++++++++++++++++++++++++++++
 2 files changed, 139 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/graphics/Aseprite/Portfile b/graphics/Aseprite/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index a3a01aa785c..8bdafd05479 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/graphics/Aseprite/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/graphics/Aseprite/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -17,7 +17,7 @@ maintainers                 {ryandesign @ryandesign} openmaintainer
</span> license                     Restrictive
 
 github.setup                aseprite aseprite 1.2.30 v
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision                    1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision                    2
</span> 
 # Aseprite doesn't specify which commit of depot_tools we should use, so I'm
 # using the latest commit at the time this version of Aseprite was released.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -159,6 +159,7 @@ post-extract {
</span> 
 patch.dir                   ${workpath}
 patchfiles                  prefix.patch \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                            harfbuzz3.patch \
</span>                             stdlib.patch \
                             USE_SHARED_LIBWEBP.patch
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/graphics/Aseprite/files/harfbuzz3.patch b/graphics/Aseprite/files/harfbuzz3.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..cd1acc1d407
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/graphics/Aseprite/files/harfbuzz3.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,137 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Add support for harfbuzz 3's subsetting API. Combination of:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/aseprite/skia/commit/66684b17b382fdfe6cc3d18bbbe46658115e8628
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://github.com/aseprite/skia/commit/51d83abcd24aae1b2e8e653f26af531c58b59a45
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- skia/gn/skia.gni.orig  2020-03-11 07:02:08.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ skia/gn/skia.gni       2021-12-31 02:18:10.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,7 +31,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_include_multiframe_procs = false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_lex = false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_libgifcodec_path = "third_party/externals/libgifcodec"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  skia_pdf_subset_harfbuzz = false  # TODO: set skia_pdf_subset_harfbuzz to skia_use_harfbuzz.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_qt_path = getenv("QT_PATH")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_skqp_global_error_tolerance = 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_tools_require_resources = false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -85,6 +84,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ declare_args() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  skia_pdf_subset_harfbuzz = skia_use_harfbuzz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++declare_args() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_enable_atlas_text = is_skia_dev_build && skia_enable_gpu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_enable_fontmgr_android = skia_use_expat && skia_use_freetype
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   skia_enable_fontmgr_custom =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- skia/src/pdf/SkPDFSubsetFont.cpp.orig  2020-03-11 07:02:08.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ skia/src/pdf/SkPDFSubsetFont.cpp       2021-12-31 02:18:10.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -49,6 +49,37 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                 blob.release());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template<typename...> using void_t = void;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template<typename T, typename = void>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct SkPDFHarfBuzzSubset {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // This is the HarfBuzz 3.0 interface.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // hb_subset_flags_t does not exist in 2.0. It isn't dependent on T, so inline the value of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // HB_SUBSET_FLAGS_RETAIN_GIDS until 2.0 is no longer supported.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    static HBFace Make(T input, hb_face_t* face) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        // If it isn't known if a font is 'tricky', retain the hints.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        hb_subset_input_set_flags(input, 2/*HB_SUBSET_FLAGS_RETAIN_GIDS*/);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return HBFace(hb_subset_or_fail(face, input));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template<typename T>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++struct SkPDFHarfBuzzSubset<T, void_t<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    decltype(hb_subset_input_set_retain_gids(std::declval<T>(), std::declval<bool>())),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    decltype(hb_subset_input_set_drop_hints(std::declval<T>(), std::declval<bool>())),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    decltype(hb_subset(std::declval<hb_face_t*>(), std::declval<T>()))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    >>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // This is the HarfBuzz 2.0 (non-public) interface, used if it exists.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // This code should be removed as soon as all users are migrated to the newer API.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    static HBFace Make(T input, hb_face_t* face) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        hb_subset_input_set_retain_gids(input, true);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        // If it isn't known if a font is 'tricky', retain the hints.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        hb_subset_input_set_drop_hints(input, false);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return HBFace(hb_subset(face, input));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static sk_sp<SkData> subset_harfbuzz(sk_sp<SkData> fontData,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      const SkPDFGlyphUse& glyphUsage,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                      int ttcIndex) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -71,11 +102,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     hb_set_t* glyphs = hb_subset_input_glyph_set(input.get());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     glyphUsage.getSetValues([&glyphs](unsigned gid) { hb_set_add(glyphs, gid);});
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    hb_subset_input_set_retain_gids(input.get(), true);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // If it isn't known if a font is 'tricky', retain the hints.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    hb_subset_input_set_drop_hints(input.get(), false);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    HBFace subset(hb_subset(face.get(), input.get()));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    HBFace subset = SkPDFHarfBuzzSubset<hb_subset_input_t*>::Make(input.get(), face.get());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!subset) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HBBlob result(hb_face_reference_blob(subset.get()));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return to_data(std::move(result));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- skia/third_party/harfbuzz/BUILD.gn.orig        2021-12-30 14:01:57.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ skia/third_party/harfbuzz/BUILD.gn     2021-12-31 02:14:56.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -14,6 +14,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   system("harfbuzz") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     include_dirs = [ "/opt/local/include/harfbuzz" ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     libs = [ "harfbuzz" ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (skia_pdf_subset_harfbuzz) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      libs += [ "harfbuzz-subset" ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   third_party("harfbuzz") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -26,9 +29,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     defines = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "HAVE_ICU",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "HAVE_ICU_BUILTIN",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      "HAVE_INTEL_ATOMIC_PRIMITIVES",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "HAVE_OT",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "HAVE_FREETYPE",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "HAVE_CONFIG_OVERRIDE_H",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     deps = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "//third_party/icu",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -188,9 +191,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-myanmar-machine.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-myanmar.cc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-myanmar.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "$_src/hb-ot-shape-complex-syllabic.cc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "$_src/hb-ot-shape-complex-syllabic.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-thai.cc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-use-machine.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      "$_src/hb-ot-shape-complex-use-table.cc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-use.cc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-use.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-ot-shape-complex-vowel-constraints.cc",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -248,6 +252,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-utf.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb-vector.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       "$_src/hb.hh",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      "config-override.h",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ skia/third_party/harfbuzz/config-override.h    2021-12-31 02:18:10.000000000 -0600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Adds a mutex implementation based on c++ mutex to harfbuzz.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <mutex>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++using hb_mutex_impl_t = std::mutex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define HB_MUTEX_IMPL_INIT      UNUSED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define hb_mutex_impl_init(M)   HB_STMT_START { new (M) hb_mutex_impl_t;  } HB_STMT_END
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define hb_mutex_impl_lock(M)   (M)->lock ()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define hb_mutex_impl_unlock(M) (M)->unlock ()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define hb_mutex_impl_finish(M) HB_STMT_START { (M)->~hb_mutex_impl_t(); } HB_STMT_END
</span></pre><pre style='margin:0'>

</pre>