From 605bb1ee3dd1d6ef19676be0194d001c21533d60 Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Tue, 19 Jul 2022 21:15:21 +0200 Subject: [PATCH] [subset] Add amalgam harfbuzz-subset.cc Fixes https://github.com/harfbuzz/harfbuzz/issues/3733 --- .circleci/config.yml | 2 +- src/Makefile.am | 14 ++++++++++- src/gen-harfbuzzcc.py | 4 ++- src/harfbuzz-subset.cc | 56 ++++++++++++++++++++++++++++++++++++++++++ src/harfbuzz.cc | 18 +++++++------- src/meson.build | 8 ++++++ 6 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 src/harfbuzz-subset.cc diff --git a/.circleci/config.yml b/.circleci/config.yml index f4a8fe119..9525c4aec 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -129,7 +129,7 @@ jobs: - checkout - run: apt update || true - run: DEBIAN_FRONTEND=noninteractive apt install -y clang lld git binutils - - run: clang -c src/harfbuzz.cc src/hb-subset*.cc -DHB_NO_MT -Werror -std=c++2a + - run: clang -c src/harfbuzz-subset.cc -DHB_NO_MT -Werror -std=c++2a crossbuild-win32: executor: win32-executor diff --git a/src/Makefile.am b/src/Makefile.am index e1b56a5e9..b03273683 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,7 +12,7 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-introspection TESTS = check_PROGRAMS = -EXTRA_DIST += harfbuzz.cc +EXTRA_DIST += harfbuzz.cc harfbuzz-subset.cc EXTRA_DIST += meson.build EXTRA_DIST += fix_get_types.py @@ -160,6 +160,17 @@ pkginclude_HEADERS += $(HB_SUBSET_headers) pkgconfig_DATA += harfbuzz-subset.pc EXTRA_DIST += harfbuzz-subset.pc.in +harfbuzz-subset.cc: Makefile.sources + $(AM_V_GEN) \ + for f in \ + $(HB_BASE_sources) \ + $(HB_SUBSET_sources) \ + ; do echo '#include "'$$f'"'; done | \ + sort -u | \ + grep '[.]cc"' > $(srcdir)/harfbuzz-subset.cc \ + || ($(RM) $(srcdir)/harfbuzz-subset.cc; false) +BUILT_SOURCES += harfbuzz-subset.cc + if HAVE_ICU if HAVE_ICU_BUILTIN HBCFLAGS += $(ICU_CFLAGS) @@ -294,6 +305,7 @@ harfbuzz.cc: Makefile.sources $(HB_DIRECTWRITE_sources) \ $(HB_CORETEXT_sources) \ ; do echo '#include "'$$f'"'; done | \ + sort -u | \ grep '[.]cc"' > $(srcdir)/harfbuzz.cc \ || ($(RM) $(srcdir)/harfbuzz.cc; false) BUILT_SOURCES += harfbuzz.cc diff --git a/src/gen-harfbuzzcc.py b/src/gen-harfbuzzcc.py index 6801281a6..1a492d47a 100755 --- a/src/gen-harfbuzzcc.py +++ b/src/gen-harfbuzzcc.py @@ -9,7 +9,9 @@ if len (sys.argv) < 3: OUTPUT = sys.argv[1] CURRENT_SOURCE_DIR = sys.argv[2] -sources = sys.argv[3:] + +# make sure input files are unique +sources = sorted(set(sys.argv[3:])) with open (OUTPUT, "wb") as f: f.write ("".join ('#include "{}"\n'.format (os.path.basename (x)) for x in sources if x.endswith (".cc")).encode ()) diff --git a/src/harfbuzz-subset.cc b/src/harfbuzz-subset.cc new file mode 100644 index 000000000..39e7f14fa --- /dev/null +++ b/src/harfbuzz-subset.cc @@ -0,0 +1,56 @@ +#include "hb-aat-layout.cc" +#include "hb-aat-map.cc" +#include "hb-blob.cc" +#include "hb-buffer-serialize.cc" +#include "hb-buffer-verify.cc" +#include "hb-buffer.cc" +#include "hb-common.cc" +#include "hb-draw.cc" +#include "hb-face.cc" +#include "hb-fallback-shape.cc" +#include "hb-font.cc" +#include "hb-map.cc" +#include "hb-number.cc" +#include "hb-ot-cff1-table.cc" +#include "hb-ot-cff2-table.cc" +#include "hb-ot-color.cc" +#include "hb-ot-face.cc" +#include "hb-ot-font.cc" +#include "hb-ot-layout.cc" +#include "hb-ot-map.cc" +#include "hb-ot-math.cc" +#include "hb-ot-meta.cc" +#include "hb-ot-metrics.cc" +#include "hb-ot-name.cc" +#include "hb-ot-shape-fallback.cc" +#include "hb-ot-shape-normalize.cc" +#include "hb-ot-shape.cc" +#include "hb-ot-shaper-arabic.cc" +#include "hb-ot-shaper-default.cc" +#include "hb-ot-shaper-hangul.cc" +#include "hb-ot-shaper-hebrew.cc" +#include "hb-ot-shaper-indic-table.cc" +#include "hb-ot-shaper-indic.cc" +#include "hb-ot-shaper-khmer.cc" +#include "hb-ot-shaper-myanmar.cc" +#include "hb-ot-shaper-syllabic.cc" +#include "hb-ot-shaper-thai.cc" +#include "hb-ot-shaper-use.cc" +#include "hb-ot-shaper-vowel-constraints.cc" +#include "hb-ot-tag.cc" +#include "hb-ot-var.cc" +#include "hb-set.cc" +#include "hb-shape-plan.cc" +#include "hb-shape.cc" +#include "hb-shaper.cc" +#include "hb-static.cc" +#include "hb-style.cc" +#include "hb-subset-cff-common.cc" +#include "hb-subset-cff1.cc" +#include "hb-subset-cff2.cc" +#include "hb-subset-input.cc" +#include "hb-subset-plan.cc" +#include "hb-subset-repacker.cc" +#include "hb-subset.cc" +#include "hb-ucd.cc" +#include "hb-unicode.cc" diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index 05a864ae1..fe4e21db0 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -5,10 +5,16 @@ #include "hb-buffer-verify.cc" #include "hb-buffer.cc" #include "hb-common.cc" +#include "hb-coretext.cc" +#include "hb-directwrite.cc" #include "hb-draw.cc" #include "hb-face.cc" #include "hb-fallback-shape.cc" #include "hb-font.cc" +#include "hb-ft.cc" +#include "hb-gdi.cc" +#include "hb-glib.cc" +#include "hb-graphite2.cc" #include "hb-map.cc" #include "hb-number.cc" #include "hb-ot-cff1-table.cc" @@ -22,6 +28,9 @@ #include "hb-ot-meta.cc" #include "hb-ot-metrics.cc" #include "hb-ot-name.cc" +#include "hb-ot-shape-fallback.cc" +#include "hb-ot-shape-normalize.cc" +#include "hb-ot-shape.cc" #include "hb-ot-shaper-arabic.cc" #include "hb-ot-shaper-default.cc" #include "hb-ot-shaper-hangul.cc" @@ -34,9 +43,6 @@ #include "hb-ot-shaper-thai.cc" #include "hb-ot-shaper-use.cc" #include "hb-ot-shaper-vowel-constraints.cc" -#include "hb-ot-shape-fallback.cc" -#include "hb-ot-shape-normalize.cc" -#include "hb-ot-shape.cc" #include "hb-ot-tag.cc" #include "hb-ot-var.cc" #include "hb-set.cc" @@ -47,10 +53,4 @@ #include "hb-style.cc" #include "hb-ucd.cc" #include "hb-unicode.cc" -#include "hb-glib.cc" -#include "hb-ft.cc" -#include "hb-graphite2.cc" #include "hb-uniscribe.cc" -#include "hb-gdi.cc" -#include "hb-directwrite.cc" -#include "hb-coretext.cc" diff --git a/src/meson.build b/src/meson.build index 19fafc965..e336037a2 100644 --- a/src/meson.build +++ b/src/meson.build @@ -527,6 +527,14 @@ libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources, link_language: 'c', ) +custom_target('harfbuzz-subset.cc', + build_by_default: true, + output: 'harfbuzz-subset.cc', + input: hb_base_sources + hb_subset_sources, + command: [find_program('gen-harfbuzzcc.py'), + '@OUTPUT@', meson.current_source_dir(), '@INPUT@'], +) + libharfbuzz_subset_dep = declare_dependency( link_with: libharfbuzz_subset, include_directories: incsrc,