meson to CMake

63 files changed +96 −5406

  • − .ci/build-win.sh
  • − .ci/deploy-docs.sh
  • − .ci/requirements-fonttools.in
  • − .ci/requirements-fonttools.txt
  • − .ci/requirements.in
  • − .ci/requirements.txt
  • − .ci/win32-cross-file.txt
  • − .ci/win64-cross-file.txt
  • − .github/dependabot.yml
  • − .github/workflows/arm.yml
  • − .github/workflows/c++-versions.yml
  • − .github/workflows/cifuzz.yml
  • − .github/workflows/configs-build.yml
  • − .github/workflows/coverity-scan.yml
  • − .github/workflows/crossbuild-mingw.yml
  • − .github/workflows/docs.yml
  • − .github/workflows/linux.yml
  • − .github/workflows/macos.yml
  • − .github/workflows/msvc.yml
  • − .github/workflows/msys2.yml
  • − .github/workflows/rust.yml
  • − .github/workflows/sanitizers.yml
  • − .github/workflows/scorecard.yml
  • − .github/workflows/valgrind.yml
  • − CLAUDE.md
  • − CODE_OF_AI_CONDUCT.md
  • − docs/meson.build
  • − meson.build
  • − meson_options.txt
  • − perf/meson.build
  • − src/fix_get_types.py
  • − src/meson.build
  • − src/relative_to.py
  • − src/rust/meson.build
  • − subprojects/.gitignore
  • − subprojects/cairo.wrap
  • − subprojects/freetype2.wrap
  • − subprojects/glew.wrap
  • − subprojects/glfw.wrap
  • − subprojects/glib.wrap
  • − subprojects/google-benchmark.wrap
  • − subprojects/graphite2.wrap
  • − subprojects/icu.wrap
  • − subprojects/kbts.wrap
  • − subprojects/libffi.wrap
  • − subprojects/libpng.wrap
  • − subprojects/packagefiles/kbts/meson.build
  • − subprojects/packagefiles/ragel/meson.build
  • − subprojects/ragel.wrap
  • − subprojects/zlib.wrap
  • − test/api/meson.build
  • − test/fuzzing/meson.build
  • − test/meson.build
  • − test/shape/data/aots/meson.build
  • − test/shape/data/in-house/meson.build
  • − test/shape/data/text-rendering-tests/meson.build
  • − test/shape/meson.build
  • − test/subset/meson.build
  • − test/threads/meson.build
  • − test/vector/meson.build
  • − util/gpu/meson.build
  • − util/meson.build
  • • CMakeLists.txt
1diff --git a/.ci/build-win.sh b/.ci/build-win.sh
2deleted file mode 100755
3index 5ef346f78..000000000
4--- a/.ci/build-win.sh
5+++ /dev/null
6@@ -1,49 +0,0 @@
7-#!/bin/bash
8-set -ex
9-
10-if [ "$#" -lt 1 ]
11-then
12- echo "Usage $0 ARCH (ARCH can be 32 or 64)"
13- exit 1
14-fi
15-
16-ARCH=$1
17-shift
18-
19-BUILD=build-win${ARCH}
20-INSTALL=install-win${ARCH}
21-DIST=harfbuzz-win${ARCH}
22-
23-meson setup \
24- --buildtype=release \
25- --prefix="${PWD}/${BUILD}/${INSTALL}" \
26- --cross-file=.ci/win${ARCH}-cross-file.txt \
27- --wrap-mode=default \
28- --strip \
29- -Dtests=enabled \
30- -Dcairo=enabled \
31- -Dcairo:fontconfig=disabled \
32- -Dcairo:freetype=disabled \
33- -Dcairo:dwrite=disabled \
34- -Dcairo:tests=disabled \
35- -Dglib=enabled \
36- -Dlibffi:tests=false \
37- -Dfreetype=disabled \
38- -Dicu=disabled \
39- -Dchafa=disabled \
40- -Dgdi=enabled \
41- -Ddirectwrite=enabled \
42- -Dgpu_demo=enabled \
43- ${BUILD} \
44- "$@"
45-
46-# building with all the cores won't work fine with CricleCI for some reason
47-meson compile -C ${BUILD} -j3
48-meson install -C ${BUILD}
49-
50-mkdir ${BUILD}/${DIST}
51-cp ${BUILD}/${INSTALL}/bin/hb-*.exe ${BUILD}/${DIST}
52-cp ${BUILD}/${INSTALL}/bin/*.dll ${BUILD}/${DIST}
53-rm -f ${DIST}.zip
54-(cd ${BUILD} && zip -r ../${DIST}.zip ${DIST})
55-echo "${DIST}.zip is ready."
56diff --git a/.ci/deploy-docs.sh b/.ci/deploy-docs.sh
57deleted file mode 100755
58index d374d9c30..000000000
59--- a/.ci/deploy-docs.sh
60+++ /dev/null
61@@ -1,33 +0,0 @@
62-#!/bin/bash
63-
64-set -x
65-set -o errexit -o nounset
66-
67-DOCSDIR=build-docs
68-REVISION=$(git rev-parse --short HEAD)
69-
70-rm -rf $DOCSDIR || exit
71-mkdir $DOCSDIR
72-cd $DOCSDIR
73-
74-cp -r ../build/docs/html/* .
75-#cp ../build/docs/CNAME .
76-
77-git init
78-git branch -m main
79-git config user.name "CI"
80-git config user.email "harfbuzz-admin@googlegroups.com"
81-set +x
82-echo "git remote add upstream \"https://\$GH_TOKEN@github.com/harfbuzz/harfbuzz.github.io.git\""
83-git remote add upstream "https://$GH_TOKEN@github.com/harfbuzz/harfbuzz.github.io.git"
84-set -x
85-git fetch upstream
86-git reset upstream/main
87-
88-touch .
89-git add -A .
90-
91-if [[ $(git status -s) ]]; then
92- git commit -m "Rebuild docs for https://github.com/harfbuzz/harfbuzz/commit/$REVISION"
93- git push -q upstream HEAD:main
94-fi
95diff --git a/.ci/requirements-fonttools.in b/.ci/requirements-fonttools.in
96deleted file mode 100644
97index d10c4b7e0..000000000
98--- a/.ci/requirements-fonttools.in
99+++ /dev/null
100@@ -1 +0,0 @@
101-fonttools
102\ No newline at end of file
103diff --git a/.ci/requirements-fonttools.txt b/.ci/requirements-fonttools.txt
104deleted file mode 100644
105index 76ca6abec..000000000
106--- a/.ci/requirements-fonttools.txt
107+++ /dev/null
108@@ -1,108 +0,0 @@
109-#
110-# This file is autogenerated by pip-compile with Python 3.10
111-# by the following command:
112-#
113-# pip-compile --generate-hashes .ci/requirements-fonttools.in
114-#
115-fonttools==4.63.0 \
116- --hash=sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69 \
117- --hash=sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69 \
118- --hash=sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c \
119- --hash=sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c \
120- --hash=sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac \
121- --hash=sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac \
122- --hash=sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096 \
123- --hash=sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096 \
124- --hash=sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d \
125- --hash=sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d \
126- --hash=sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 \
127- --hash=sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 \
128- --hash=sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616 \
129- --hash=sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616 \
130- --hash=sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78 \
131- --hash=sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78 \
132- --hash=sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f \
133- --hash=sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f \
134- --hash=sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b \
135- --hash=sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b \
136- --hash=sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b \
137- --hash=sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b \
138- --hash=sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02 \
139- --hash=sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02 \
140- --hash=sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d \
141- --hash=sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d \
142- --hash=sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f \
143- --hash=sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f \
144- --hash=sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 \
145- --hash=sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 \
146- --hash=sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272 \
147- --hash=sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272 \
148- --hash=sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49 \
149- --hash=sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49 \
150- --hash=sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419 \
151- --hash=sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419 \
152- --hash=sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001 \
153- --hash=sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001 \
154- --hash=sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03 \
155- --hash=sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03 \
156- --hash=sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196 \
157- --hash=sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196 \
158- --hash=sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9 \
159- --hash=sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9 \
160- --hash=sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e \
161- --hash=sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e \
162- --hash=sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5 \
163- --hash=sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5 \
164- --hash=sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007 \
165- --hash=sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007 \
166- --hash=sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380 \
167- --hash=sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380 \
168- --hash=sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8 \
169- --hash=sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8 \
170- --hash=sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27 \
171- --hash=sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27 \
172- --hash=sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40 \
173- --hash=sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40 \
174- --hash=sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e \
175- --hash=sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e \
176- --hash=sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0 \
177- --hash=sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0 \
178- --hash=sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263 \
179- --hash=sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263 \
180- --hash=sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb \
181- --hash=sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb \
182- --hash=sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94 \
183- --hash=sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94 \
184- --hash=sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b \
185- --hash=sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b \
186- --hash=sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6 \
187- --hash=sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6 \
188- --hash=sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579 \
189- --hash=sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579 \
190- --hash=sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4 \
191- --hash=sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4 \
192- --hash=sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59 \
193- --hash=sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59 \
194- --hash=sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0 \
195- --hash=sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0 \
196- --hash=sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e \
197- --hash=sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e \
198- --hash=sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be \
199- --hash=sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be \
200- --hash=sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd \
201- --hash=sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd \
202- --hash=sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 \
203- --hash=sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 \
204- --hash=sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22 \
205- --hash=sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22 \
206- --hash=sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0 \
207- --hash=sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0 \
208- --hash=sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b \
209- --hash=sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b \
210- --hash=sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b \
211- --hash=sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b \
212- --hash=sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af \
213- --hash=sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af \
214- --hash=sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745 \
215- --hash=sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745
216- # via -r requirements-fonttools.in
217diff --git a/.ci/requirements.in b/.ci/requirements.in
218deleted file mode 100644
219index b796847e1..000000000
220--- a/.ci/requirements.in
221+++ /dev/null
222@@ -1,4 +0,0 @@
223--r requirements-fonttools.in
224-meson==1.11.1
225-ninja
226-setuptools # https://github.com/harfbuzz/harfbuzz/issues/4475
227diff --git a/.ci/requirements.txt b/.ci/requirements.txt
228deleted file mode 100644
229index 4114ca843..000000000
230--- a/.ci/requirements.txt
231+++ /dev/null
232@@ -1,139 +0,0 @@
233-#
234-# This file is autogenerated by pip-compile with Python 3.11
235-# by the following command:
236-#
237-# pip-compile --allow-unsafe --generate-hashes --output-file=.ci/requirements.txt .ci/requirements.in
238-#
239-fonttools==4.63.0 \
240- --hash=sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69 \
241- --hash=sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69 \
242- --hash=sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c \
243- --hash=sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c \
244- --hash=sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac \
245- --hash=sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac \
246- --hash=sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096 \
247- --hash=sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096 \
248- --hash=sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d \
249- --hash=sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d \
250- --hash=sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 \
251- --hash=sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 \
252- --hash=sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616 \
253- --hash=sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616 \
254- --hash=sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78 \
255- --hash=sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78 \
256- --hash=sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f \
257- --hash=sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f \
258- --hash=sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b \
259- --hash=sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b \
260- --hash=sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b \
261- --hash=sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b \
262- --hash=sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02 \
263- --hash=sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02 \
264- --hash=sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d \
265- --hash=sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d \
266- --hash=sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f \
267- --hash=sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f \
268- --hash=sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 \
269- --hash=sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 \
270- --hash=sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272 \
271- --hash=sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272 \
272- --hash=sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49 \
273- --hash=sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49 \
274- --hash=sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419 \
275- --hash=sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419 \
276- --hash=sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001 \
277- --hash=sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001 \
278- --hash=sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03 \
279- --hash=sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03 \
280- --hash=sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196 \
281- --hash=sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196 \
282- --hash=sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9 \
283- --hash=sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9 \
284- --hash=sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e \
285- --hash=sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e \
286- --hash=sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5 \
287- --hash=sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5 \
288- --hash=sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007 \
289- --hash=sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007 \
290- --hash=sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380 \
291- --hash=sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380 \
292- --hash=sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8 \
293- --hash=sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8 \
294- --hash=sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27 \
295- --hash=sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27 \
296- --hash=sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40 \
297- --hash=sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40 \
298- --hash=sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e \
299- --hash=sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e \
300- --hash=sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0 \
301- --hash=sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0 \
302- --hash=sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263 \
303- --hash=sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263 \
304- --hash=sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb \
305- --hash=sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb \
306- --hash=sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94 \
307- --hash=sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94 \
308- --hash=sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b \
309- --hash=sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b \
310- --hash=sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6 \
311- --hash=sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6 \
312- --hash=sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579 \
313- --hash=sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579 \
314- --hash=sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4 \
315- --hash=sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4 \
316- --hash=sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59 \
317- --hash=sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59 \
318- --hash=sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0 \
319- --hash=sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0 \
320- --hash=sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e \
321- --hash=sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e \
322- --hash=sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be \
323- --hash=sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be \
324- --hash=sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd \
325- --hash=sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd \
326- --hash=sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 \
327- --hash=sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 \
328- --hash=sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22 \
329- --hash=sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22 \
330- --hash=sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0 \
331- --hash=sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0 \
332- --hash=sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b \
333- --hash=sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b \
334- --hash=sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b \
335- --hash=sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b \
336- --hash=sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af \
337- --hash=sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af \
338- --hash=sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745 \
339- --hash=sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745
340- # via -r requirements-fonttools.in
341-meson==1.11.1 \
342- --hash=sha256:9b3a023657e393dbc5335b95c561337d49b7a458f5541e47ec44f2cc566e0d80 \
343- --hash=sha256:9b3a023657e393dbc5335b95c561337d49b7a458f5541e47ec44f2cc566e0d80
344- # via -r requirements.in
345-ninja==1.13.0 \
346- --hash=sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f \
347- --hash=sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988 \
348- --hash=sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9 \
349- --hash=sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630 \
350- --hash=sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db \
351- --hash=sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978 \
352- --hash=sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1 \
353- --hash=sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72 \
354- --hash=sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e \
355- --hash=sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2 \
356- --hash=sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9 \
357- --hash=sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714 \
358- --hash=sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200 \
359- --hash=sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c \
360- --hash=sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5 \
361- --hash=sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96 \
362- --hash=sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1 \
363- --hash=sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa \
364- --hash=sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e
365- # via -r requirements.in
366-
367-# The following packages are considered to be unsafe in a requirements file:
368-setuptools==82.0.1 \
369- --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
370- --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
371- # via -r requirements.in
372diff --git a/.ci/win32-cross-file.txt b/.ci/win32-cross-file.txt
373deleted file mode 100644
374index 22e060d80..000000000
375--- a/.ci/win32-cross-file.txt
376+++ /dev/null
377@@ -1,22 +0,0 @@
378-[host_machine]
379-system = 'windows'
380-cpu_family = 'x86'
381-cpu = 'i686'
382-endian = 'little'
383-
384-[built-in options]
385-c_args = []
386-c_link_args = ['-static-libgcc', '-Wl,-Bstatic', '-lpthread']
387-cpp_args = []
388-cpp_link_args = ['-static-libgcc', '-static-libstdc++', '-Wl,-Bstatic', '-lpthread']
389-
390-[binaries]
391-c = 'i686-w64-mingw32-gcc'
392-cpp = 'i686-w64-mingw32-g++'
393-ar = 'i686-w64-mingw32-ar'
394-ld = 'i686-w64-mingw32-ld'
395-objcopy = 'i686-w64-mingw32-objcopy'
396-strip = 'i686-w64-mingw32-strip'
397-windres = 'i686-w64-mingw32-windres'
398-pkg-config = 'i686-w64-mingw32-pkg-config'
399-exe_wrapper = 'wine'
400diff --git a/.ci/win64-cross-file.txt b/.ci/win64-cross-file.txt
401deleted file mode 100644
402index a03c049a1..000000000
403--- a/.ci/win64-cross-file.txt
404+++ /dev/null
405@@ -1,22 +0,0 @@
406-[host_machine]
407-system = 'windows'
408-cpu_family = 'x86_64'
409-cpu = 'x86_64'
410-endian = 'little'
411-
412-[built-in options]
413-c_args = []
414-c_link_args = ['-static-libgcc', '-Wl,-Bstatic', '-lpthread']
415-cpp_args = []
416-cpp_link_args = ['-static-libgcc', '-static-libstdc++', '-Wl,-Bstatic', '-lpthread']
417-
418-[binaries]
419-c = 'x86_64-w64-mingw32-gcc'
420-cpp = 'x86_64-w64-mingw32-g++'
421-ar = 'x86_64-w64-mingw32-ar'
422-ld = 'x86_64-w64-mingw32-ld'
423-objcopy = 'x86_64-w64-mingw32-objcopy'
424-strip = 'x86_64-w64-mingw32-strip'
425-windres = 'x86_64-w64-mingw32-windres'
426-pkg-config = 'x86_64-w64-mingw32-pkg-config'
427-exe_wrapper = 'wine'
428diff --git a/.github/dependabot.yml b/.github/dependabot.yml
429deleted file mode 100644
430index 8725672a1..000000000
431--- a/.github/dependabot.yml
432+++ /dev/null
433@@ -1,10 +0,0 @@
434-version: 2
435-updates:
436- - package-ecosystem: "github-actions"
437- directory: "/"
438- schedule:
439- interval: "weekly"
440- - package-ecosystem: "pip"
441- directory: "/.ci"
442- schedule:
443- interval: "weekly"
444diff --git a/.github/workflows/arm.yml b/.github/workflows/arm.yml
445deleted file mode 100644
446index ca43192de..000000000
447--- a/.github/workflows/arm.yml
448+++ /dev/null
449@@ -1,25 +0,0 @@
450-name: arm
451-
452-on:
453- push:
454- branches: [ main ]
455- pull_request:
456- branches: [ main ]
457-
458-permissions:
459- contents: read
460-
461-jobs:
462- arm-none-eabi:
463- runs-on: ubuntu-22.04
464- container:
465- image: devkitpro/devkitarm:latest
466- steps:
467- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
468- - name: Configure CMake
469- run: |
470- cmake -S . -B build \
471- -DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake
472- - name: Build
473- run: make CXX_FLAGS="-w -DHB_NO_MT"
474- working-directory: build
475diff --git a/.github/workflows/c++-versions.yml b/.github/workflows/c++-versions.yml
476deleted file mode 100644
477index c4ce3a902..000000000
478--- a/.github/workflows/c++-versions.yml
479+++ /dev/null
480@@ -1,45 +0,0 @@
481-name: c++ versions
482-
483-on:
484- push:
485- branches: [ main ]
486- pull_request:
487- branches: [ main ]
488-
489-permissions:
490- contents: read
491-
492-jobs:
493- build:
494- runs-on: ubuntu-24.04
495- name: ${{ matrix.name }}
496- strategy:
497- fail-fast: false
498- matrix:
499- include:
500- - name: g++ c++11
501- CXX: g++
502- CXX_STANDARD: c++11
503- PACKAGES: g++
504- - name: g++ c++2a
505- CXX: g++
506- CXX_STANDARD: c++2a
507- PACKAGES: g++
508- - name: clang c++11
509- CXX: clang++
510- CXX_STANDARD: c++11
511- PACKAGES: clang
512- - name: clang c++2a
513- CXX: clang++
514- CXX_STANDARD: c++2a
515- PACKAGES: clang
516-
517- steps:
518- - name: Checkout
519- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
520- - name: Install Dependencies
521- run: |
522- sudo apt-get update
523- sudo apt install -y ${{ matrix.PACKAGES }}
524- - name: Build
525- run: ${{ matrix.CXX }} -c src/harfbuzz-subset.cc -DHB_NO_MT -Werror -std=${{ matrix.CXX_STANDARD }}
526diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml
527deleted file mode 100644
528index d90485f3d..000000000
529--- a/.github/workflows/cifuzz.yml
530+++ /dev/null
531@@ -1,28 +0,0 @@
532-name: CIFuzz
533-on: [pull_request]
534-
535-permissions:
536- contents: read
537-
538-jobs:
539- Fuzzing:
540- runs-on: ubuntu-latest
541- steps:
542- - name: Build Fuzzers
543- id: build
544- uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@a09cb739e2aa7722ecbc681411975d76d270be44 # master
545- with:
546- oss-fuzz-project-name: 'harfbuzz'
547- dry-run: false
548- - name: Run Fuzzers
549- uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@a09cb739e2aa7722ecbc681411975d76d270be44 # master
550- with:
551- oss-fuzz-project-name: 'harfbuzz'
552- fuzz-seconds: 600
553- dry-run: false
554- - name: Upload Crash
555- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
556- if: failure() && steps.build.outcome == 'success'
557- with:
558- name: artifacts
559- path: ./out/artifacts
560diff --git a/.github/workflows/configs-build.yml b/.github/workflows/configs-build.yml
561deleted file mode 100644
562index 7bacbd773..000000000
563--- a/.github/workflows/configs-build.yml
564+++ /dev/null
565@@ -1,39 +0,0 @@
566-name: configs
567-
568-on:
569- push:
570- branches: [ main ]
571- pull_request:
572- branches: [ main ]
573-
574-permissions:
575- contents: read
576-
577-jobs:
578- build:
579- runs-on: ubuntu-24.04
580- strategy:
581- fail-fast: false
582- matrix:
583- config:
584- - HB_DISABLE_DEPRECATED
585- - HB_MINI
586- - HB_LEAN
587- - HB_TINY
588- - HB_NO_DRAW
589- - HB_NO_PAINT
590-
591- name: ${{ matrix.config }}
592-
593- steps:
594- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
595- - name: Create main.cc
596- run: |
597- cat <<EOF > main.cc
598- #include "src/harfbuzz.cc"
599- int main() { return 0; }
600- EOF
601- - name: install dependencies
602- run: sudo apt-get install gcc
603- - name: Build with ${{ matrix.config }}
604- run: g++ -std=c++11 main.cc -D${{ matrix.config }}
605diff --git a/.github/workflows/coverity-scan.yml b/.github/workflows/coverity-scan.yml
606deleted file mode 100644
607index 92299d7f1..000000000
608--- a/.github/workflows/coverity-scan.yml
609+++ /dev/null
610@@ -1,42 +0,0 @@
611-name: coverity-scan
612-
613-on:
614- schedule:
615- - cron: '0 10 * * *' # Daily at 10:00 UTC
616-
617-permissions:
618- contents: read
619-
620-jobs:
621- latest:
622- runs-on: ubuntu-latest
623- steps:
624- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
625-
626- - run: sudo apt-get install gcc clang wget git curl pkg-config libfreetype6-dev libglib2.0-dev libicu-dev libgraphite2-dev
627-
628- - name: Download Coverity
629- run: |
630- wget -q https://scan.coverity.com/download/cxx/linux64 --post-data "token=$TOKEN&project=HarfBuzz" -O cov-analysis-linux64.tar.gz
631- mkdir cov-analysis-linux64
632- tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64
633- env:
634- TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
635-
636- # ideally we should've used meson and ninja here but it complains about coverage or something
637- - run: cov-analysis-linux64/bin/cov-build --dir cov-int clang src/hb-*.cc -DHAVE_FREETYPE -DHAVE_GRAPHITE2 -DHAVE_GLIB -DHAVE_ICU `pkg-config --cflags freetype2 graphite2 glib-2.0 icu-uc` -DHAVE_ROUNDF -DHAVE_SYS_MMAN_H -DHAVE_UNISTD_H -DHAVE_GETPAGESIZE -DHB_EXPERIMENTAL_API -c
638-
639- - run: tar czvf harfbuzz.tgz cov-int
640-
641- - name: submit to coverity
642- run: |
643- curl \
644- --form project=HarfBuzz \
645- --form token=$TOKEN \
646- --form email=harfbuzz-bots-chatter@googlegroups.com \
647- --form file=@harfbuzz.tgz \
648- --form version=trunk \
649- --form description="`git rev-parse --short HEAD`" \
650- https://scan.coverity.com/builds?project=HarfBuzz
651- env:
652- TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
653diff --git a/.github/workflows/crossbuild-mingw.yml b/.github/workflows/crossbuild-mingw.yml
654deleted file mode 100644
655index a55595e8e..000000000
656--- a/.github/workflows/crossbuild-mingw.yml
657+++ /dev/null
658@@ -1,85 +0,0 @@
659-name: crossbuild-mingw
660-
661-on:
662- push:
663- branches: [ main ]
664- tags: ["*.*.*"]
665- pull_request:
666- branches: [ main ]
667-
668-permissions:
669- contents: read
670-
671-jobs:
672- build:
673- runs-on: ubuntu-24.04
674- name: ${{ matrix.name }}
675- strategy:
676- fail-fast: false
677- matrix:
678- include:
679- - name: win32
680- ARCH: 32
681- PACKAGES: g++-mingw-w64-i686 wine wine32
682- - name: win64
683- ARCH: 64
684- PACKAGES: g++-mingw-w64-x86-64 wine wine64 wine32:i386
685-
686- steps:
687- - name: Checkout
688- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
689- - name: Setup Ccache
690- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
691- - name: Install Dependencies
692- run: |
693- sudo dpkg --add-architecture i386
694- sudo apt-get update
695- sudo apt install -y \
696- zip \
697- ${{ matrix.PACKAGES }}
698- - name: Setup Python
699- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
700- with:
701- python-version: '3.12'
702- - name: Install Python Dependencies
703- run: pip3 install -r .ci/requirements.txt --require-hashes
704- - name: Build
705- run: bash .ci/build-win.sh ${{ matrix.ARCH }}
706- - name: Test
707- run: meson devenv -Cbuild-win${{ matrix.ARCH }} meson test -t 10 --print-errorlogs --suite=harfbuzz
708- - name: Archive artifacts
709- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
710- with:
711- name: harfbuzz-win${{ matrix.ARCH }}
712- path: harfbuzz-win${{ matrix.ARCH }}.zip
713- if-no-files-found: error
714-
715- release:
716- name: Create and populate release
717- permissions:
718- contents: write
719- needs: build
720- runs-on: ubuntu-24.04
721- if: contains(github.ref, 'refs/tags/')
722- env:
723- GH_TOKEN: ${{ github.token }}
724- steps:
725- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
726- - name: Download artifacts
727- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
728- with:
729- merge-multiple: true
730- - name: Rename artifacts
731- run: |
732- for file in harfbuzz-win*.zip; do
733- mv -v "$file" "${file%.zip}-${{ github.ref_name }}.zip"
734- done
735- - name: Check for release
736- id: create_release
737- run: |
738- if ! gh release view ${{ github.ref_name }}; then
739- gh release create ${{ github.ref_name }} --title ${{ github.ref_name }}
740- fi
741- - name: Populate release
742- run: |
743- gh release upload ${{ github.ref_name }} harfbuzz-win*-${{ github.ref_name }}.zip --clobber
744diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
745deleted file mode 100644
746index 31003101d..000000000
747--- a/.github/workflows/docs.yml
748+++ /dev/null
749@@ -1,79 +0,0 @@
750-name: docs
751-
752-on:
753- push:
754- branches: [ main ]
755- tags: ["*.*.*"]
756- pull_request:
757- branches: [ main ]
758-
759-permissions:
760- contents: read
761-
762-jobs:
763- docs:
764- runs-on: ubuntu-24.04
765-
766- steps:
767- - name: Checkout
768- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
769- - name: Setup Ccache
770- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
771- with:
772- key: ${{ github.job }}-${{ runner.os }}-${{ runner.arch }}
773- - name: Install Dependencies
774- run: |
775- sudo apt-get update
776- sudo apt-get install \
777- gcc \
778- gobject-introspection \
779- gtk-doc-tools \
780- libcairo2-dev \
781- libfreetype6-dev \
782- libgirepository1.0-dev \
783- libglib2.0-dev \
784- libgraphite2-dev \
785- libicu-dev \
786- libpng-dev \
787- pkg-config \
788- zlib1g-dev \
789- help2man
790- - name: Setup Emscripten
791- uses: mymindstorm/setup-emsdk@4528d102f7230f0e7b276855c01ea1159be0e984 # v16
792- with:
793- version: latest
794- - name: Setup Python
795- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
796- with:
797- python-version: '3.12'
798- - name: Install Python Dependencies
799- run: pip3 install -r .ci/requirements.txt --require-hashes
800- - name: Build HarfBuzz
801- run: |
802- ccache --version
803- meson setup build \
804- -Dauto_features=enabled \
805- -Doptimization=2 \
806- -Ddoc_tests=true \
807- -Dgpu_demo=disabled \
808- -Dchafa=disabled
809- meson compile -Cbuild
810- - name: Generate Documentation
811- run: ninja -Cbuild harfbuzz-doc
812- - name: Run Doc Tests
813- run: meson test -Cbuild --print-errorlogs harfbuzz-doc-check
814- - name: Build Web Demos
815- run: |
816- bash util/gpu/web/build.sh
817- bash util/gpu/web/build-webgpu.sh
818- cp util/gpu/web/dom.html util/gpu/web/out/
819- - name: Stage for deployment
820- run: |
821- mkdir -p build/docs/html/hb-gpu-demo
822- cp util/gpu/web/out/* build/docs/html/hb-gpu-demo/
823- - name: Deploy
824- if: github.ref_type == 'tag'
825- run: .ci/deploy-docs.sh
826- env:
827- GH_TOKEN: ${{ secrets.DOCS_PUSH_TOKEN }}
828- REVISION: ${{ github.sha }}
829diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
830deleted file mode 100644
831index 37d7f9eb1..000000000
832--- a/.github/workflows/linux.yml
833+++ /dev/null
834@@ -1,99 +0,0 @@
835-name: linux
836-
837-on:
838- push:
839- branches: [ main ]
840- tags: ["*.*.*"]
841- pull_request:
842- branches: [ main ]
843-
844-permissions:
845- contents: read
846-
847-jobs:
848- build:
849- runs-on: ubuntu-24.04
850-
851- steps:
852- - name: Checkout
853- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
854- - name: Setup Ccache
855- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
856- with:
857- key: ${{ github.job }}-${{ runner.os }}-${{ runner.arch }}
858- - name: Install Dependencies
859- run: |
860- sudo apt-get update
861- sudo apt-get install \
862- gcc \
863- gobject-introspection \
864- libcairo2-dev \
865- libchafa-dev \
866- libfreetype6-dev \
867- libgirepository1.0-dev \
868- libglib2.0-dev \
869- libgraphite2-dev \
870- libicu-dev \
871- libpng-dev \
872- libglew-dev \
873- libglfw3-dev \
874- libgl-dev \
875- pkg-config \
876- zlib1g-dev \
877- help2man
878- - name: Setup Python
879- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
880- with:
881- python-version: '3.12'
882- - name: Install Python Dependencies
883- run: pip3 install -r .ci/requirements.txt --require-hashes
884- - name: Setup Meson
885- run: |
886- ccache --version
887- meson setup build \
888- -Dauto_features=enabled \
889- -Dgraphite=enabled \
890- -Dkbts=enabled \
891- -Doptimization=2 \
892- -Ddocs=disabled \
893- -Dragel_subproject=true
894- - name: Build
895- run: meson compile -Cbuild
896- - name: Test
897- run: meson test --print-errorlogs -Cbuild
898- - name: Dist
899- run: |
900- git reset --hard HEAD # ragel may have modified the source tree
901- meson dist --no-tests -Cbuild
902- - name: Archive artifacts
903- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
904- with:
905- name: harfbuzz
906- path: build/meson-dist/harfbuzz-*.tar.xz
907- if-no-files-found: error
908-
909- release:
910- name: Create and populate release
911- permissions:
912- contents: write
913- needs: build
914- runs-on: ubuntu-24.04
915- if: contains(github.ref, 'refs/tags/')
916- env:
917- GH_TOKEN: ${{ github.token }}
918- steps:
919- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
920- - name: Download artifacts
921- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
922- with:
923- name: harfbuzz
924- - name: Check for release
925- id: create_release
926- run: |
927- if ! gh release view ${{ github.ref_name }}; then
928- python3 src/check-release-notes.py NEWS ${{ github.ref_name }} > RELEASE_NOTES
929- gh release create ${{ github.ref_name }} --title ${{ github.ref_name }} --notes-file RELEASE_NOTES
930- fi
931- - name: Populate release
932- run: |
933- gh release upload ${{ github.ref_name }} harfbuzz-${{ github.ref_name }}.tar.xz --clobber
934diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
935deleted file mode 100644
936index dababf3c9..000000000
937--- a/.github/workflows/macos.yml
938+++ /dev/null
939@@ -1,63 +0,0 @@
940-name: macos
941-
942-on:
943- push:
944- branches: [ main ]
945- pull_request:
946- branches: [ main ]
947-
948-permissions:
949- contents: read
950-
951-jobs:
952- build:
953- runs-on: macos-latest
954-
955- steps:
956- - name: Checkout
957- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
958- - name: Setup Ccache
959- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
960- with:
961- key: ${{ github.job }}-${{ runner.os }}-${{ runner.arch }}
962- - name: Install Dependencies
963- run: |
964- export HOMEBREW_NO_AUTO_UPDATE=1
965- export HOMEBREW_NO_INSTALL_CLEANUP=1
966- brew rm -f pkg-config@0.29.2
967- brew install \
968- cairo \
969- chafa \
970- freetype \
971- glib \
972- gobject-introspection \
973- glew \
974- glfw \
975- graphite2 \
976- icu4c \
977- libpng \
978- meson \
979- ninja \
980- pkgconf
981- - name: Setup Python
982- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
983- with:
984- python-version: '3.12'
985- - name: Install Python Dependencies
986- run: pip3 install -r .ci/requirements.txt --require-hashes
987- - name: Setup Meson
988- env:
989- PKG_CONFIG_PATH: "/usr/local/opt/libffi/lib/pkgconfig"
990- run: |
991- brew link --force icu4c
992- ccache --version
993- meson setup build \
994- -Dauto_features=enabled \
995- -Ddocs=disabled \
996- -Dcoretext=enabled \
997- -Dgraphite=enabled \
998- -Doptimization=2 \
999- - name: Build
1000- run: meson compile -Cbuild
1001- - name: Test
1002- run: meson test --print-errorlogs -Cbuild
1003diff --git a/.github/workflows/msvc.yml b/.github/workflows/msvc.yml
1004deleted file mode 100644
1005index 4ee8f8fe3..000000000
1006--- a/.github/workflows/msvc.yml
1007+++ /dev/null
1008@@ -1,61 +0,0 @@
1009-name: msvc
1010-
1011-on:
1012- push:
1013- branches: [ main ]
1014- pull_request:
1015- branches: [ main ]
1016-
1017-permissions:
1018- contents: read
1019-
1020-jobs:
1021- msvc:
1022- runs-on: ${{ matrix.os }}
1023-
1024- strategy:
1025- fail-fast: false
1026- matrix:
1027- include:
1028- - name: msvc-2025-x86
1029- os: windows-2025
1030- ARCH: x86
1031- - name: msvc-2025-amd64
1032- os: windows-2025
1033- ARCH: amd64
1034- name: ${{ matrix.name }}
1035-
1036- steps:
1037- - name: Checkout
1038- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
1039- - name: Setup Ccache
1040- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
1041- with:
1042- variant: sccache
1043- key: ${{ github.job }}-${{ matrix.os }}-${{ matrix.ARCH }}
1044- - name: Setup Python
1045- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
1046- with:
1047- python-version: '3.12'
1048- - name: Setup MSVC
1049- uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
1050- with:
1051- arch : ${{ matrix.ARCH }}
1052- - name: Install Python Dependencies
1053- run: |
1054- pip3 install -r .ci/requirements.txt --require-hashes
1055- - name: Setup Meson
1056- run: |
1057- sccache --version
1058- meson setup build `
1059- --wrap-mode=forcefallback `
1060- --buildtype=release `
1061- -Dglib=enabled `
1062- -Dfreetype=enabled `
1063- -Dgdi=enabled `
1064- -Ddirectwrite=enabled `
1065- -Dgpu_demo=disabled
1066- - name: Build
1067- run: meson compile -Cbuild
1068- - name: Test
1069- run: meson test --print-errorlogs --suite=harfbuzz -Cbuild
1070diff --git a/.github/workflows/msys2.yml b/.github/workflows/msys2.yml
1071deleted file mode 100644
1072index d12bd7d59..000000000
1073--- a/.github/workflows/msys2.yml
1074+++ /dev/null
1075@@ -1,74 +0,0 @@
1076-name: msys2
1077-
1078-on:
1079- push:
1080- branches: [ main ]
1081- pull_request:
1082- branches: [ main ]
1083-
1084-permissions:
1085- contents: read
1086-
1087-jobs:
1088- msys2:
1089- runs-on: windows-latest
1090-
1091- strategy:
1092- fail-fast: false
1093- matrix:
1094- include:
1095- - MSYSTEM: MINGW64
1096- MSYS2_ARCH: x86_64
1097- - MSYSTEM: CLANG64
1098- MSYS2_ARCH: clang-x86_64
1099- name: ${{ matrix.MSYSTEM }}
1100-
1101- defaults:
1102- run:
1103- shell: msys2 {0}
1104- steps:
1105- - name: Checkout
1106- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
1107- - name: Setup MSYS2
1108- uses: msys2/setup-msys2@cf96e00c0aab3788743aaf63b64146f0d383cee9 # v2
1109- with:
1110- msystem: ${{ matrix.MSYSTEM }}
1111- update: true
1112- install: >-
1113- mingw-w64-${{ matrix.MSYS2_ARCH }}-cairo
1114- mingw-w64-${{ matrix.MSYS2_ARCH }}-freetype
1115- mingw-w64-${{ matrix.MSYS2_ARCH }}-cc
1116- mingw-w64-${{ matrix.MSYS2_ARCH }}-gettext
1117- mingw-w64-${{ matrix.MSYS2_ARCH }}-glib2
1118- mingw-w64-${{ matrix.MSYS2_ARCH }}-gobject-introspection
1119- mingw-w64-${{ matrix.MSYS2_ARCH }}-graphite2
1120- mingw-w64-${{ matrix.MSYS2_ARCH }}-icu
1121- mingw-w64-${{ matrix.MSYS2_ARCH }}-meson
1122- mingw-w64-${{ matrix.MSYS2_ARCH }}-ninja
1123- mingw-w64-${{ matrix.MSYS2_ARCH }}-pkgconf
1124- mingw-w64-${{ matrix.MSYS2_ARCH }}-python
1125- mingw-w64-${{ matrix.MSYS2_ARCH }}-python-pip
1126- - name: Install Python Dependencies
1127- run: |
1128- pip3 install -r .ci/requirements-fonttools.txt --require-hashes
1129- - name: Setup Meson
1130- run: |
1131- meson setup build \
1132- --wrap-mode=nodownload \
1133- --auto-features=enabled \
1134- -Ddocs=disabled \
1135- -Ddirectwrite=enabled \
1136- -Dgdi=enabled \
1137- -Dgraphite=enabled \
1138- -Dchafa=disabled \
1139- -Dgpu_demo=disabled
1140- - name: Build
1141- run: meson compile -Cbuild
1142- - name: Test
1143- run: meson test --print-errorlogs --suite=harfbuzz -Cbuild
1144- - name: Upload DLLs
1145- if: always()
1146- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
1147- with:
1148- name: libharfbuzz-${{ matrix.MSYS2_ARCH }}
1149- path: ./build/src/libharfbuzz-*.dll
1150diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
1151deleted file mode 100644
1152index 0f8e0f1c3..000000000
1153--- a/.github/workflows/rust.yml
1154+++ /dev/null
1155@@ -1,66 +0,0 @@
1156-name: rust
1157-
1158-on:
1159- push:
1160- branches: [ main ]
1161- pull_request:
1162- branches: [ main ]
1163-
1164-permissions:
1165- contents: read
1166-
1167-jobs:
1168- build:
1169- runs-on: ubuntu-24.04
1170-
1171- steps:
1172- - name: Checkout
1173- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
1174- - name: Setup Ccache
1175- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
1176- with:
1177- key: ${{ github.job }}-${{ runner.os }}-${{ runner.arch }}
1178- - uses: dtolnay/rust-toolchain@881ba7bf39a41cda34ac9e123fb41b44ed08232f # nightly
1179- - name: Install Dependencies
1180- run: |
1181- rustup component add \
1182- rust-src \
1183- rustfmt \
1184- clippy \
1185- --toolchain nightly-x86_64-unknown-linux-gnu
1186- sudo apt-get update
1187- sudo apt-get install \
1188- gcc \
1189- gobject-introspection \
1190- gtk-doc-tools \
1191- libcairo2-dev \
1192- libchafa-dev \
1193- libfreetype6-dev \
1194- libgirepository1.0-dev \
1195- libglib2.0-dev \
1196- libgraphite2-dev \
1197- libicu-dev \
1198- libpng-dev \
1199- pkg-config \
1200- zlib1g-dev \
1201- bindgen
1202- - name: Setup Python
1203- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
1204- with:
1205- python-version: '3.12'
1206- - name: Install Python Dependencies
1207- run: pip3 install -r .ci/requirements.txt --require-hashes
1208- - name: Setup Meson
1209- run: |
1210- ccache --version
1211- meson setup build \
1212- -Dauto_features=enabled \
1213- -Dgraphite=enabled \
1214- -Doptimization=2 \
1215- -Dfontations=enabled \
1216- -Dharfrust=enabled \
1217- -Dgpu_demo=disabled
1218- - name: Build
1219- run: meson compile -Cbuild
1220- - name: Test
1221- run: RUST_BACKTRACE=1 meson test --print-errorlogs -Cbuild
1222diff --git a/.github/workflows/sanitizers.yml b/.github/workflows/sanitizers.yml
1223deleted file mode 100644
1224index 9070ae7fc..000000000
1225--- a/.github/workflows/sanitizers.yml
1226+++ /dev/null
1227@@ -1,70 +0,0 @@
1228-name: sanitizers
1229-
1230-on:
1231- push:
1232- branches: [ main ]
1233- pull_request:
1234- branches: [ main ]
1235-
1236-permissions:
1237- contents: read
1238-
1239-jobs:
1240- build:
1241- runs-on: ubuntu-24.04
1242- name: ${{ matrix.name }}
1243- env:
1244- CC: clang
1245- CXX: clang++
1246- ASAN_OPTIONS: log_path=stderr:halt_on_error=1:abort_on_error=1
1247- UBSAN_OPTIONS: log_path=stderr:halt_on_error=1:abort_on_error=1:print_stacktrace=1
1248- TSAN_OPTIONS: log_path=stderr:halt_on_error=1:abort_on_error=1
1249- MSAN_OPTIONS: log_path=stderr:halt_on_error=1:abort_on_error=1:print_stacktrace=1
1250- strategy:
1251- fail-fast: false
1252- matrix:
1253- include:
1254- - name: asan-ubsan
1255- SANITIZE: address,undefined
1256- - name: tsan
1257- SANITIZE: thread
1258- - name: msan
1259- SANITIZE: memory
1260-
1261- steps:
1262- - name: Checkout
1263- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
1264- - name: Setup Ccache
1265- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
1266- - name: Install Dependencies
1267- run: |
1268- sudo apt-get update
1269- sudo apt install -y \
1270- clang \
1271- lld \
1272- binutils \
1273- pkg-config \
1274- libfreetype6-dev \
1275- libglib2.0-dev \
1276- libcairo2-dev \
1277- libicu-dev \
1278- libgraphite2-dev
1279- - name: Setup Python
1280- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
1281- with:
1282- python-version: '3.12'
1283- - name: Install Python Dependencies
1284- run: pip3 install -r .ci/requirements.txt --require-hashes
1285- - name: Setup Meson
1286- run: |
1287- ccache --version
1288- meson setup build \
1289- --default-library=static \
1290- --buildtype=debugoptimized \
1291- --wrap-mode=nodownload \
1292- -Db_sanitize=${{ matrix.SANITIZE }} \
1293- -Dexperimental_api=true
1294- - name: Build
1295- run: meson compile -Cbuild
1296- - name: Test
1297- run: meson test -Cbuild -t 10 --print-errorlogs | asan_symbolize | c++filt
1298diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
1299deleted file mode 100644
1300index ea0f13ce3..000000000
1301--- a/.github/workflows/scorecard.yml
1302+++ /dev/null
1303@@ -1,64 +0,0 @@
1304-# This workflow uses actions that are not certified by GitHub. They are provided
1305-# by a third-party and are governed by separate terms of service, privacy
1306-# policy, and support documentation.
1307-
1308-name: Scorecard supply-chain security
1309-on:
1310- # For Branch-Protection check. Only the default branch is supported. See
1311- # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
1312- branch_protection_rule:
1313- # To guarantee Maintained check is occasionally updated. See
1314- # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
1315- schedule:
1316- - cron: '19 14 * * 6'
1317- push:
1318- branches: [ "main" ]
1319-
1320-# Declare default permissions as read only.
1321-permissions: read-all
1322-
1323-jobs:
1324- analysis:
1325- name: Scorecard analysis
1326- runs-on: ubuntu-latest
1327- permissions:
1328- # Needed to upload the results to code-scanning dashboard.
1329- security-events: write
1330- # Needed to publish results and get a badge (see publish_results below).
1331- id-token: write
1332-
1333- steps:
1334- - name: "Checkout code"
1335- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
1336- with:
1337- persist-credentials: false
1338-
1339- - name: "Run analysis"
1340- uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
1341- with:
1342- results_file: results.sarif
1343- results_format: sarif
1344- # (Optional) Fine-grained PAT token. Uncomment the `repo_token` line below if:
1345- # you want to enable the full Branch-Protection check on a *public* repository
1346- # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-fine-grained-pat-optional.
1347- # repo_token: ${{ secrets.SCORECARD_TOKEN }}
1348-
1349- # - Publish results to OpenSSF REST API for easy access by consumers
1350- # - Allows the repository to include the Scorecard badge.
1351- # - See https://github.com/ossf/scorecard-action#publishing-results.
1352- publish_results: true
1353-
1354- # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
1355- # format to the repository Actions tab.
1356- - name: "Upload artifact"
1357- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
1358- with:
1359- name: SARIF file
1360- path: results.sarif
1361- retention-days: 5
1362-
1363- # Upload the results to GitHub's code scanning dashboard.
1364- - name: "Upload to code-scanning"
1365- uses: github/codeql-action/upload-sarif@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v3.29.5
1366- with:
1367- sarif_file: results.sarif
1368diff --git a/.github/workflows/valgrind.yml b/.github/workflows/valgrind.yml
1369deleted file mode 100644
1370index f9669c4aa..000000000
1371--- a/.github/workflows/valgrind.yml
1372+++ /dev/null
1373@@ -1,44 +0,0 @@
1374-name: valgrind
1375-
1376-on:
1377- push:
1378- branches: [ main ]
1379- pull_request:
1380- branches: [ main ]
1381-
1382-permissions:
1383- contents: read
1384-
1385-jobs:
1386- build:
1387- runs-on: ubuntu-24.04
1388-
1389- steps:
1390- - name: Checkout
1391- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
1392- - name: Setup Ccache
1393- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
1394- - name: Install Dependencies
1395- run: |
1396- sudo apt-get update
1397- sudo apt install -y \
1398- valgrind \
1399- binutils \
1400- pkg-config \
1401- libfreetype6-dev \
1402- libglib2.0-dev \
1403- libcairo2-dev \
1404- libicu-dev \
1405- libgraphite2-dev
1406- - name: Setup Python
1407- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
1408- with:
1409- python-version: '3.12'
1410- - name: Install Python Dependencies
1411- run: pip3 install -r .ci/requirements.txt --require-hashes
1412- - name: Setup Meson
1413- run: meson setup build --buildtype=debugoptimized
1414- - name: Build
1415- run: meson compile -Cbuild
1416- - name: Test
1417- run: meson test -Cbuild -t 10 --no-suite=slow --wrap='valgrind --leak-check=full --error-exitcode=1' --print-errorlogs
1418diff --git a/CLAUDE.md b/CLAUDE.md
1419deleted file mode 120000
1420index 47dc3e3d8..000000000
1421--- a/CLAUDE.md
1422+++ /dev/null
1423@@ -1 +0,0 @@
1424-AGENTS.md
1425\ No newline at end of file
1426diff --git a/CMakeLists.txt b/CMakeLists.txt
1427index b5ab53946..594679c34 100644
1428--- a/CMakeLists.txt
1429+++ b/CMakeLists.txt
1430@@ -1,5 +1,5 @@
1431 cmake_minimum_required(VERSION 3.14)
1432-project(harfbuzz)
1433+project(harfbuzz VERSION 14.2.1 LANGUAGES C CXX)
1434
1435 message(WARNING "The main build system for HarfBuzz is Meson. CMake build support is community-maintained and is not actively supported by HarfBuzz developers.")
1436
1437@@ -7,11 +7,11 @@ if(POLICY CMP0063)
1438 cmake_policy(SET CMP0063 NEW)
1439 endif()
1440
1441-set(CMAKE_CXX_STANDARD 11)
1442+set(CMAKE_CXX_STANDARD 14)
1443 set(CMAKE_CXX_STANDARD_REQUIRED ON)
1444
1445 ## Disallow in-source builds, as CMake generated make files can collide with autotools ones
1446-if (NOT MSVC AND "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
1447+if ("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
1448 message(FATAL_ERROR
1449 "
1450 In-source builds are not permitted! Make a separate folder for"
1451@@ -29,6 +29,15 @@ if (NOT ("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") AND NOT (EXIS
1452 file(WRITE "${PROJECT_BINARY_DIR}/.gitignore" "*")
1453 endif ()
1454
1455+set(HB_VERSION ${PROJECT_VERSION})
1456+set(HB_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
1457+set(HB_VERSION_MINOR ${PROJECT_VERSION_MINOR})
1458+set(HB_VERSION_MICRO ${PROJECT_VERSION_PATCH})
1459+set(HB_SO_VERSION "0")
1460+
1461+## Build shared libraries instead of static ones. Default to static (.a) only.
1462+option(BUILD_SHARED_LIBS "Build shared libraries instead of static libraries" OFF)
1463+
1464 ## HarfBuzz build configurations
1465 option(HB_HAVE_CAIRO "Enable cairo interop helpers" OFF)
1466 option(HB_HAVE_FREETYPE "Enable freetype interop helpers" OFF)
1467@@ -39,15 +48,6 @@ if (TARGET freetype)
1468 set (HB_HAVE_FREETYPE ON)
1469 add_compile_definitions(HAVE_FREETYPE=1)
1470 endif ()
1471-if (APPLE)
1472- option(HB_HAVE_CORETEXT "Enable CoreText shaper backend on macOS" ON)
1473- set (CMAKE_MACOSX_RPATH ON)
1474-endif ()
1475-if (WIN32)
1476- option(HB_HAVE_UNISCRIBE "Enable Uniscribe shaper backend on Windows" OFF)
1477- option(HB_HAVE_GDI "Enable GDI integration helpers on Windows" OFF)
1478- option(HB_HAVE_DIRECTWRITE "Enable DirectWrite shaper backend on Windows" OFF)
1479-endif ()
1480 option(HB_BUILD_UTILS "Build harfbuzz utils, needs cairo, freetype, and glib properly be installed" OFF)
1481 if (HB_BUILD_UTILS)
1482 set (HB_HAVE_GLIB ON)
1483@@ -74,14 +74,6 @@ if (HB_HAVE_INTROSPECTION)
1484 set (HB_HAVE_GLIB ON)
1485 endif ()
1486
1487-if (APPLE)
1488- option(BUILD_FRAMEWORK "Build as Apple Frameworks" OFF)
1489-endif ()
1490-if (BUILD_FRAMEWORK)
1491- set (CMAKE_MACOSX_RPATH ON)
1492- set (BUILD_SHARED_LIBS OFF)
1493-endif ()
1494-
1495 include_directories(AFTER
1496 ${PROJECT_SOURCE_DIR}/src
1497 ${PROJECT_BINARY_DIR}/src
1498@@ -103,9 +95,7 @@ macro (check_funcs) # Similar to AC_CHECK_FUNCS of autotools
1499 endif ()
1500 endforeach ()
1501 endmacro ()
1502-if (UNIX)
1503- list(APPEND CMAKE_REQUIRED_LIBRARIES m)
1504-endif ()
1505+list(APPEND CMAKE_REQUIRED_LIBRARIES m)
1506 check_funcs(atexit mprotect sysconf getpagesize mmap isatty)
1507 check_include_file(unistd.h HAVE_UNISTD_H)
1508 if (${HAVE_UNISTD_H})
1509@@ -124,42 +114,14 @@ endif ()
1510 set(PC_REQUIRES_PRIV "")
1511 set(PC_LIBS_PRIV "")
1512
1513-if (NOT MSVC)
1514- set(THREADS_PREFER_PTHREAD_FLAG ON)
1515- find_package(Threads)
1516- if (CMAKE_USE_PTHREADS_INIT)
1517- add_compile_definitions(HAVE_PTHREAD)
1518- list(APPEND THIRD_PARTY_LIBS Threads::Threads)
1519- list(APPEND PC_LIBS_PRIV -pthread)
1520- endif ()
1521+set(THREADS_PREFER_PTHREAD_FLAG ON)
1522+find_package(Threads)
1523+if (CMAKE_USE_PTHREADS_INIT)
1524+ add_compile_definitions(HAVE_PTHREAD)
1525+ list(APPEND THIRD_PARTY_LIBS Threads::Threads)
1526+ list(APPEND PC_LIBS_PRIV -pthread)
1527 endif ()
1528
1529-include (CheckCCompilerFlag)
1530-if (MSVC)
1531- add_compile_options(/wd4244 /wd4267) # lossy type conversion (e.g. double/size_t -> int)
1532- add_compile_options(/bigobj) # hb-subset.cc -- compile error C1128: number of sections exceeded object file format limit
1533- check_c_compiler_flag(/utf-8 MSVC_UTF8_FLAG_SUPPORTED)
1534- if (MSVC_UTF8_FLAG_SUPPORTED)
1535- add_compile_options(/utf-8) # set the input encoding to utf-8
1536- endif ()
1537- add_compile_definitions(_CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS)
1538-endif ()
1539-
1540-
1541-## Detect if we are running inside a distribution or regular repository folder
1542-# if (EXISTS "${PROJECT_SOURCE_DIR}/ChangeLog")
1543-# # perhaps we are on dist directory
1544-# set (IN_HB_DIST TRUE)
1545-# #set (HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h")
1546-# endif ()
1547-
1548-file(READ meson.build MESONBUILD)
1549-string(REGEX MATCH "version: '(([0-9]+)\\.([0-9]+)\\.([0-9]+))'," HB_VERSION_MATCH ${MESONBUILD})
1550-set (HB_VERSION ${CMAKE_MATCH_1})
1551-set (HB_VERSION_MAJOR ${CMAKE_MATCH_2})
1552-set (HB_VERSION_MINOR ${CMAKE_MATCH_3})
1553-set (HB_VERSION_MICRO ${CMAKE_MATCH_4})
1554-
1555 ## Define sources and headers of the project
1556 set (project_sources ${PROJECT_SOURCE_DIR}/src/harfbuzz.cc) # use amalgam source
1557 set (subset_project_sources
1558@@ -360,73 +322,6 @@ if (HB_HAVE_ICU)
1559 list(APPEND THIRD_PARTY_LIBS ${ICU_UC_LIBRARY})
1560 endif ()
1561
1562-if (APPLE AND HB_HAVE_CORETEXT)
1563- # Apple Advanced Typography
1564- add_compile_definitions(HAVE_CORETEXT)
1565-
1566- list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-coretext.h)
1567-
1568- if (HB_IOS)
1569- find_library(COREFOUNDATION CoreFoundation)
1570- if (COREFOUNDATION)
1571- list(APPEND THIRD_PARTY_LIBS ${COREFOUNDATION})
1572- list(APPEND PC_LIBS_PRIV "-framework CoreFoundation")
1573- endif ()
1574- mark_as_advanced(COREFOUNDATION)
1575-
1576- find_library(CORETEXT CoreText)
1577- if (CORETEXT)
1578- list(APPEND THIRD_PARTY_LIBS ${CORETEXT})
1579- list(APPEND PC_LIBS_PRIV "-framework CoreText")
1580- endif ()
1581- mark_as_advanced(CORETEXT)
1582-
1583- find_library(COREGRAPHICS CoreGraphics)
1584- if (COREGRAPHICS)
1585- list(APPEND THIRD_PARTY_LIBS ${COREGRAPHICS})
1586- list(APPEND PC_LIBS_PRIV "-framework CoreGraphics")
1587- endif ()
1588- mark_as_advanced(COREGRAPHICS)
1589- else ()
1590- find_library(APPLICATION_SERVICES_FRAMEWORK ApplicationServices)
1591- if (APPLICATION_SERVICES_FRAMEWORK)
1592- list(APPEND THIRD_PARTY_LIBS ${APPLICATION_SERVICES_FRAMEWORK})
1593- list(APPEND PC_LIBS_PRIV "-framework ApplicationServices")
1594- endif ()
1595-
1596- mark_as_advanced(APPLICATION_SERVICES_FRAMEWORK)
1597- endif ()
1598-endif ()
1599-
1600-if (WIN32 AND HB_HAVE_GDI)
1601- add_compile_definitions(HAVE_GDI)
1602- list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-gdi.h)
1603- list(APPEND THIRD_PARTY_LIBS gdi32 user32)
1604- list(APPEND PC_LIBS_PRIV -lgdi32 -luser32)
1605-endif ()
1606-
1607-if (WIN32 AND HB_HAVE_UNISCRIBE)
1608- add_compile_definitions(HAVE_UNISCRIBE)
1609- list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-uniscribe.h)
1610- list(APPEND THIRD_PARTY_LIBS usp10 gdi32 rpcrt4 user32)
1611- list(APPEND PC_LIBS_PRIV -lusp10 -lgdi32 -lrpcrt4 -luser32)
1612-endif ()
1613-
1614-if (WIN32 AND HB_HAVE_DIRECTWRITE)
1615- if (CMAKE_VERSION VERSION_GREATER 3.12)
1616- check_include_files("windows.h;dwrite_1.h" HAVE_DWRITE_1_H LANGUAGE CXX)
1617- else ()
1618- check_include_files("windows.h;dwrite_1.h" HAVE_DWRITE_1_H)
1619- endif ()
1620- if (NOT HAVE_DWRITE_1_H)
1621- message(FATAL_ERROR "DirectWrite was enabled explicitly, but required header is missing")
1622- endif ()
1623- add_compile_definitions(HAVE_DIRECTWRITE)
1624- list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-directwrite.h)
1625- list(APPEND THIRD_PARTY_LIBS dwrite)
1626- list(APPEND PC_LIBS_PRIV -ldwrite)
1627-endif ()
1628-
1629 if (HB_HAVE_CAIRO)
1630 # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindCairo.cmake
1631 find_package(PkgConfig)
1632@@ -472,39 +367,10 @@ if (HB_HAVE_GOBJECT)
1633 find_program(GLIB_MKENUMS glib-mkenums
1634 HINTS ${PC_glib_mkenums}
1635 )
1636- set (GLIB_MKENUMS_CMD)
1637-
1638- if (WIN32 AND NOT MINGW)
1639- # In Visual Studio builds, shebang lines are not supported
1640- # in the standard cmd.exe shell that we use, so we need to
1641- # first determine whether glib-mkenums is a Python or PERL
1642- # script
1643- execute_process(COMMAND "${Python3_EXECUTABLE}" "${GLIB_MKENUMS}" --version
1644- RESULT_VARIABLE GLIB_MKENUMS_PYTHON
1645- OUTPUT_QUIET ERROR_QUIET
1646- )
1647- if (GLIB_MKENUMS_PYTHON EQUAL 0)
1648- message("${GLIB_MKENUMS} is a Python script.")
1649- set (GLIB_MKENUMS_CMD "${Python3_EXECUTABLE}" "${GLIB_MKENUMS}")
1650- else ()
1651- execute_process(COMMAND "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}" --version
1652- RESULT_VARIABLE GLIB_MKENUMS_PERL
1653- OUTPUT_QUIET ERROR_QUIET
1654- )
1655- if (GLIB_MKENUMS_PERL EQUAL 0)
1656- message("${GLIB_MKENUMS} is a PERL script.")
1657- set (GLIB_MKENUMS_CMD "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}")
1658- endif ()
1659- if (NOT GLIB_MKENUMS_PERL EQUAL 0 AND NOT GLIB_MKENUMS_PYTHON EQUAL 0)
1660- message(FATAL_ERROR "Unable to determine type of glib-mkenums script")
1661- endif ()
1662- endif ()
1663- else ()
1664- set (GLIB_MKENUMS_CMD "${GLIB_MKENUMS}")
1665- endif ()
1666- if (NOT GLIB_MKENUMS_CMD)
1667+ if (NOT GLIB_MKENUMS)
1668 message(FATAL_ERROR "HB_HAVE_GOBJECT was set, but we failed to find glib-mkenums, which is required")
1669 endif ()
1670+ set (GLIB_MKENUMS_CMD "${GLIB_MKENUMS}")
1671
1672 pkg_check_modules(PC_GOBJECT QUIET gobject-2.0)
1673
1674@@ -571,13 +437,13 @@ endif ()
1675 ## Define harfbuzz library
1676 add_library(harfbuzz ${project_sources} ${project_extra_sources} ${project_headers})
1677 target_link_libraries(harfbuzz ${THIRD_PARTY_LIBS})
1678-if (MINGW)
1679- target_compile_options(harfbuzz PRIVATE "-Wa,-mbig-obj")
1680-endif()
1681 target_include_directories(harfbuzz PUBLIC
1682 "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
1683 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz>")
1684 set_target_properties(harfbuzz PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1685+if (BUILD_SHARED_LIBS)
1686+ set_target_properties(harfbuzz PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1687+endif ()
1688 if (HB_HAVE_FREETYPE AND TARGET freetype)
1689 target_link_libraries(harfbuzz freetype)
1690 endif ()
1691@@ -589,22 +455,8 @@ if (HB_HAVE_ICU)
1692 add_dependencies(harfbuzz-icu harfbuzz)
1693 target_link_libraries(harfbuzz-icu harfbuzz ${THIRD_PARTY_LIBS})
1694 set_target_properties(harfbuzz-icu PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1695-
1696 if (BUILD_SHARED_LIBS)
1697- if (BUILD_FRAMEWORK)
1698- set_target_properties(harfbuzz harfbuzz-icu PROPERTIES
1699- FRAMEWORK TRUE
1700- FRAMEWORK_VERSION "${HB_VERSION}"
1701- PUBLIC_HEADER "${project_headers}"
1702- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-icu"
1703- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
1704- OUTPUT_NAME "harfbuzz-icu"
1705- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
1706- MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-icu"
1707- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
1708- MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
1709- )
1710- endif ()
1711+ set_target_properties(harfbuzz-icu PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1712 endif ()
1713 endif ()
1714
1715@@ -616,26 +468,8 @@ if (HB_BUILD_SUBSET)
1716 add_dependencies(harfbuzz-subset harfbuzz)
1717 target_link_libraries(harfbuzz-subset harfbuzz ${THIRD_PARTY_LIBS})
1718 set_target_properties(harfbuzz-subset PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1719-
1720- if (MINGW)
1721- target_compile_options(harfbuzz-subset PRIVATE "-Wa,-mbig-obj")
1722- endif()
1723-
1724 if (BUILD_SHARED_LIBS)
1725- if (BUILD_FRAMEWORK)
1726- set_target_properties(harfbuzz harfbuzz-subset PROPERTIES
1727- FRAMEWORK TRUE
1728- FRAMEWORK_VERSION "${HB_VERSION}"
1729- PUBLIC_HEADER "${project_headers}"
1730- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-subset"
1731- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
1732- OUTPUT_NAME "harfbuzz-subset"
1733- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
1734- MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-subset"
1735- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
1736- MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
1737- )
1738- endif ()
1739+ set_target_properties(harfbuzz-subset PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1740 endif ()
1741 endif ()
1742
1743@@ -644,27 +478,8 @@ if (HB_BUILD_RASTER)
1744 add_dependencies(harfbuzz-raster harfbuzz)
1745 target_link_libraries(harfbuzz-raster harfbuzz ${HB_RASTER_THIRD_PARTY_LIBS})
1746 set_target_properties(harfbuzz-raster PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1747-
1748- if (MINGW)
1749- target_compile_options(harfbuzz-raster PRIVATE "-Wa,-mbig-obj")
1750- endif()
1751-
1752 if (BUILD_SHARED_LIBS)
1753- if (BUILD_FRAMEWORK)
1754- list(APPEND project_headers ${raster_project_headers})
1755- set_target_properties(harfbuzz-raster PROPERTIES
1756- FRAMEWORK TRUE
1757- FRAMEWORK_VERSION "${HB_VERSION}"
1758- PUBLIC_HEADER "${project_headers}"
1759- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-raster"
1760- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
1761- OUTPUT_NAME "harfbuzz-raster"
1762- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
1763- MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-raster"
1764- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
1765- MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
1766- )
1767- endif ()
1768+ set_target_properties(harfbuzz-raster PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1769 endif ()
1770 endif ()
1771
1772@@ -673,27 +488,8 @@ if (HB_BUILD_VECTOR)
1773 add_dependencies(harfbuzz-vector harfbuzz)
1774 target_link_libraries(harfbuzz-vector harfbuzz ${HB_VECTOR_THIRD_PARTY_LIBS})
1775 set_target_properties(harfbuzz-vector PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1776-
1777- if (MINGW)
1778- target_compile_options(harfbuzz-vector PRIVATE "-Wa,-mbig-obj")
1779- endif()
1780-
1781 if (BUILD_SHARED_LIBS)
1782- if (BUILD_FRAMEWORK)
1783- list(APPEND project_headers ${vector_project_headers})
1784- set_target_properties(harfbuzz-vector PROPERTIES
1785- FRAMEWORK TRUE
1786- FRAMEWORK_VERSION "${HB_VERSION}"
1787- PUBLIC_HEADER "${project_headers}"
1788- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-vector"
1789- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
1790- OUTPUT_NAME "harfbuzz-vector"
1791- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
1792- MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-vector"
1793- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
1794- MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
1795- )
1796- endif ()
1797+ set_target_properties(harfbuzz-vector PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1798 endif ()
1799 endif ()
1800
1801@@ -702,69 +498,39 @@ if (HB_BUILD_GPU)
1802 add_dependencies(harfbuzz-gpu harfbuzz)
1803 target_link_libraries(harfbuzz-gpu harfbuzz)
1804 set_target_properties(harfbuzz-gpu PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1805-
1806- if (MINGW)
1807- target_compile_options(harfbuzz-gpu PRIVATE "-Wa,-mbig-obj")
1808- endif()
1809-
1810 if (BUILD_SHARED_LIBS)
1811- if (BUILD_FRAMEWORK)
1812- list(APPEND project_headers ${gpu_project_headers})
1813- set_target_properties(harfbuzz-gpu PROPERTIES
1814- FRAMEWORK TRUE
1815- FRAMEWORK_VERSION "${HB_VERSION}"
1816- PUBLIC_HEADER "${project_headers}"
1817- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-gpu"
1818- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
1819- OUTPUT_NAME "harfbuzz-gpu"
1820- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
1821- MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-gpu"
1822- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
1823- MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
1824- )
1825- endif ()
1826+ set_target_properties(harfbuzz-gpu PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1827 endif ()
1828 endif ()
1829
1830-if (UNIX OR MINGW OR VITA)
1831- # Make symbols link locally
1832- include (CheckCXXCompilerFlag)
1833- CHECK_CXX_COMPILER_FLAG(-Bsymbolic-functions CXX_SUPPORTS_FLAG_BSYMB_FUNCS)
1834- if (CXX_SUPPORTS_FLAG_BSYMB_FUNCS)
1835- link_libraries(-Bsymbolic-functions)
1836+# Make symbols link locally
1837+include (CheckCXXCompilerFlag)
1838+CHECK_CXX_COMPILER_FLAG(-Bsymbolic-functions CXX_SUPPORTS_FLAG_BSYMB_FUNCS)
1839+if (CXX_SUPPORTS_FLAG_BSYMB_FUNCS)
1840+ link_libraries(-Bsymbolic-functions)
1841+endif ()
1842+
1843+if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
1844+ # Make sure we don't link to libstdc++
1845+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions")
1846+ set (CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "m") # libm
1847+ set (CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
1848+ set_target_properties(harfbuzz PROPERTIES LINKER_LANGUAGE C)
1849+ if (HB_BUILD_SUBSET)
1850+ set_target_properties(harfbuzz-subset PROPERTIES LINKER_LANGUAGE C)
1851+ endif ()
1852+ if (HB_BUILD_RASTER)
1853+ set_target_properties(harfbuzz-raster PROPERTIES LINKER_LANGUAGE C)
1854+ endif ()
1855+ if (HB_BUILD_VECTOR)
1856+ set_target_properties(harfbuzz-vector PROPERTIES LINKER_LANGUAGE C)
1857+ endif ()
1858+ if (HB_BUILD_GPU)
1859+ set_target_properties(harfbuzz-gpu PROPERTIES LINKER_LANGUAGE C)
1860 endif ()
1861
1862- # As of CMake 3.0.0, the compiler id for Apple-provided Clang is now "AppleClang";
1863- # thus we use MATCHES instead of STREQUAL to include either regular Clang or AppleClang
1864- if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
1865- # Make sure we don't link to libstdc++
1866- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions")
1867- set (CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "m") # libm
1868- set (CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
1869- set_target_properties(harfbuzz PROPERTIES LINKER_LANGUAGE C)
1870- if (HB_BUILD_SUBSET)
1871- set_target_properties(harfbuzz-subset PROPERTIES LINKER_LANGUAGE C)
1872- endif ()
1873- if (HB_BUILD_RASTER)
1874- set_target_properties(harfbuzz-raster PROPERTIES LINKER_LANGUAGE C)
1875- endif ()
1876- if (HB_BUILD_VECTOR)
1877- set_target_properties(harfbuzz-vector PROPERTIES LINKER_LANGUAGE C)
1878- endif ()
1879- if (HB_BUILD_GPU)
1880- set_target_properties(harfbuzz-gpu PROPERTIES LINKER_LANGUAGE C)
1881- endif ()
1882-
1883- # No threadsafe statics as we do it ourselves
1884- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-threadsafe-statics")
1885- endif ()
1886-
1887- CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
1888- if (COMPILER_SUPPORTS_CXX11)
1889- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
1890- else()
1891- message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
1892- endif()
1893+ # No threadsafe statics as we do it ourselves
1894+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-threadsafe-statics")
1895 endif ()
1896
1897
1898@@ -780,22 +546,8 @@ if (HB_HAVE_GOBJECT)
1899 add_dependencies(harfbuzz-gobject harfbuzz)
1900 target_link_libraries(harfbuzz-gobject harfbuzz ${GOBJECT_LIBRARIES} ${THIRD_PARTY_LIBS})
1901 set_target_properties(harfbuzz-gobject PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1902-
1903 if (BUILD_SHARED_LIBS)
1904- if (BUILD_FRAMEWORK)
1905- set_target_properties(harfbuzz-gobject PROPERTIES
1906- FRAMEWORK TRUE
1907- FRAMEWORK_VERSION "${HB_VERSION}"
1908- PUBLIC_HEADER "${project_headers}"
1909- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-gobject"
1910- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
1911- OUTPUT_NAME "harfbuzz-gobject"
1912- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
1913- MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-gobject"
1914- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
1915- MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
1916- )
1917- endif ()
1918+ set_target_properties(harfbuzz-gobject PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1919 endif ()
1920 endif ()
1921
1922@@ -806,37 +558,11 @@ if (HB_HAVE_CAIRO)
1923 add_dependencies(harfbuzz-cairo harfbuzz)
1924 target_link_libraries(harfbuzz-cairo harfbuzz ${THIRD_PARTY_LIBS})
1925 set_target_properties(harfbuzz-cairo PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
1926-
1927 if (BUILD_SHARED_LIBS)
1928- if (BUILD_FRAMEWORK)
1929- set_target_properties(harfbuzz-cairo PROPERTIES
1930- FRAMEWORK TRUE
1931- FRAMEWORK_VERSION "${HB_VERSION}"
1932- PUBLIC_HEADER "${project_headers}"
1933- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harbuzz-cairo"
1934- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
1935- OUTPUT_NAME "harfbuzz-cairo"
1936- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
1937- MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-cairo"
1938- MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
1939- MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
1940- )
1941- endif ()
1942+ set_target_properties(harfbuzz-cairo PROPERTIES VERSION ${HB_VERSION} SOVERSION ${HB_SO_VERSION})
1943 endif ()
1944 endif()
1945
1946-if (BUILD_SHARED_LIBS AND WIN32 AND NOT MINGW)
1947- add_compile_definitions(HB_DLL_EXPORT)
1948-endif ()
1949-
1950-# On Windows, g-ir-scanner requires a DLL build in order for it to work
1951-if (WIN32)
1952- if (NOT BUILD_SHARED_LIBS)
1953- message("Building introspection files on Windows requires BUILD_SHARED_LIBS to be enabled.")
1954- set (HB_HAVE_INTROSPECTION OFF)
1955- endif ()
1956-endif ()
1957-
1958 if (HB_HAVE_INTROSPECTION)
1959 find_package(PkgConfig)
1960 pkg_check_modules(PC_GI QUIET gobject-introspection-1.0)
1961@@ -849,21 +575,9 @@ if (HB_HAVE_INTROSPECTION)
1962 HINTS ${PC_g_ir_compiler}
1963 )
1964
1965- if (WIN32 AND NOT MINGW)
1966- # Note that since we already enable HB_HAVE_GOBJECT
1967- # we would already have Python3_EXECUTABLE handy
1968- set (G_IR_SCANNER_CMD "${Python3_EXECUTABLE}" "${G_IR_SCANNER}")
1969- else ()
1970- set (G_IR_SCANNER_CMD "${G_IR_SCANNER}")
1971- endif ()
1972+ set (G_IR_SCANNER_CMD "${G_IR_SCANNER}")
1973
1974- # We need to account for the varying output directories
1975- # when we build using Visual Studio projects
1976- if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*")
1977- set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
1978- else ()
1979- set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>")
1980- endif ()
1981+ set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>")
1982
1983 # Get the CFlags that we used to build HarfBuzz/HarfBuzz-GObject
1984 set (hb_defines_cflags "")
1985@@ -874,13 +588,11 @@ if (HB_HAVE_INTROSPECTION)
1986 # Get the other dependent libraries we used to build HarfBuzz/HarfBuzz-GObject
1987 set (extra_libs "")
1988 foreach (extra_lib ${THIRD_PARTY_LIBS})
1989- # We don't want the .lib extension here...
1990- string(REPLACE ".lib" "" extra_lib_stripped "${extra_lib}")
1991- list(APPEND extra_libs "--extra-library=${extra_lib_stripped}")
1992+ list(APPEND extra_libs "--extra-library=${extra_lib}")
1993 endforeach ()
1994
1995- set (introspected_sources)
1996- foreach (f
1997+ file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list)
1998+ foreach (s
1999 ${project_headers}
2000 ${project_sources}
2001 ${hb_gobject_gen_sources}
2002@@ -888,25 +600,6 @@ if (HB_HAVE_INTROSPECTION)
2003 ${hb_gobject_sources}
2004 ${hb_gobject_headers}
2005 )
2006- if (WIN32)
2007- # Nasty issue: We need to make drive letters lower case,
2008- # otherwise g-ir-scanner won't like it and give us a bunch
2009- # of invalid items and unresolved types...
2010- STRING(SUBSTRING "${f}" 0 1 drive)
2011- STRING(SUBSTRING "${f}" 1 -1 path)
2012- if (drive MATCHES "[A-Z]")
2013- STRING(TOLOWER ${drive} drive_lower)
2014- list(APPEND introspected_sources "${drive_lower}${path}")
2015- else ()
2016- list(APPEND introspected_sources "${f}")
2017- endif ()
2018- else ()
2019- list(APPEND introspected_sources "${f}")
2020- endif ()
2021- endforeach ()
2022-
2023- file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list)
2024- foreach (s ${introspected_sources})
2025 file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list "${s}\n")
2026 endforeach ()
2027
2028@@ -955,24 +648,6 @@ if (HB_HAVE_INTROSPECTION)
2029 endif ()
2030
2031
2032-## Additional framework build configs
2033-if (BUILD_FRAMEWORK)
2034- set (CMAKE_MACOSX_RPATH ON)
2035- set_target_properties(harfbuzz PROPERTIES
2036- FRAMEWORK TRUE
2037- FRAMEWORK_VERSION "${HB_VERSION}"
2038- PUBLIC_HEADER "${project_headers}"
2039- PRODUCT_BUNDLE_IDENTIFIER "harfbuzz"
2040- XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
2041- OUTPUT_NAME "harfbuzz"
2042- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
2043- )
2044- set (MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz")
2045- set (MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}")
2046- set (MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}")
2047-endif ()
2048-
2049-
2050 ## Additional harfbuzz build artifacts
2051 if (HB_BUILD_UTILS)
2052 if (HB_HAVE_CAIRO)
2053@@ -1053,22 +728,6 @@ if (HB_BUILD_UTILS)
2054 )
2055 target_link_libraries(hb-gpu harfbuzz-gpu harfbuzz
2056 OpenGL::GL GLEW::GLEW glfw)
2057- if (APPLE)
2058- target_sources(hb-gpu PRIVATE
2059- ${PROJECT_SOURCE_DIR}/util/gpu/demo-metal.mm)
2060- target_link_libraries(hb-gpu
2061- "-framework Metal" "-framework QuartzCore"
2062- "-framework Foundation" "-framework AppKit")
2063- endif ()
2064- if (WIN32)
2065- find_library(D3D11_LIBRARY NAMES d3d11)
2066- find_library(D3DCOMPILER_LIBRARY NAMES d3dcompiler)
2067- target_sources(hb-gpu PRIVATE
2068- ${PROJECT_SOURCE_DIR}/util/gpu/demo-renderer-d3d11.cc)
2069- target_link_libraries(hb-gpu
2070- "${D3D11_LIBRARY}"
2071- "${D3DCOMPILER_LIBRARY}")
2072- endif ()
2073 endif ()
2074 endif ()
2075 endif ()
2076@@ -1196,11 +855,6 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
2077 make_pkgconfig_pc_file("harfbuzz-gpu")
2078 endif ()
2079 if (HB_BUILD_UTILS)
2080- if (WIN32 AND BUILD_SHARED_LIBS)
2081- install(TARGETS harfbuzz-subset
2082- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2083- )
2084- endif ()
2085 if (HB_HAVE_CAIRO)
2086 install(TARGETS hb-view
2087 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2088@@ -1223,20 +877,14 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
2089 endif ()
2090 if (HB_HAVE_GOBJECT)
2091 install(TARGETS harfbuzz-gobject
2092- EXPORT harfbuzz-gobject
2093 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
2094 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
2095 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2096- FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
2097 COMPONENT runtime OPTIONAL
2098 )
2099 make_pkgconfig_pc_file("harfbuzz-gobject")
2100 if (HB_HAVE_INTROSPECTION)
2101- if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*")
2102- set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
2103- else ()
2104- set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>")
2105- endif ()
2106+ set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>")
2107
2108 install(FILES "${hb_libpath}/HarfBuzz-0.0.gir"
2109 DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gir-1.0
2110@@ -1249,15 +897,44 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
2111 endif ()
2112 make_hb_features_h()
2113 install(TARGETS ${hb_install_targets}
2114- EXPORT harfbuzzConfig
2115 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
2116 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
2117 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2118- FRAMEWORK DESTINATION Library/Frameworks
2119 COMPONENT runtime OPTIONAL
2120 )
2121- install(EXPORT harfbuzzConfig
2122- NAMESPACE harfbuzz::
2123- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/harfbuzz
2124+
2125+ ## Install a CMake package config file, mirroring what the Meson build
2126+ ## generates from the same harfbuzz-config.cmake.in template.
2127+ include (CMakePackageConfigHelpers)
2128+
2129+ set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz")
2130+ set (HARFBUZZ_VERSION "${HB_VERSION}")
2131+
2132+ if (BUILD_SHARED_LIBS)
2133+ set (HB_LIBRARY_TYPE "SHARED")
2134+ set (HB_LIB_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}")
2135+ set (HB_LIB_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}.${HB_SO_VERSION}")
2136+ else ()
2137+ set (HB_LIBRARY_TYPE "STATIC")
2138+ set (HB_LIB_PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}")
2139+ set (HB_LIB_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
2140+ endif ()
2141+
2142+ configure_package_config_file(
2143+ "${PROJECT_SOURCE_DIR}/src/harfbuzz-config.cmake.in"
2144+ "${PROJECT_BINARY_DIR}/harfbuzz-config.cmake"
2145+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/harfbuzz"
2146+ PATH_VARS INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR
2147+ )
2148+ write_basic_package_version_file(
2149+ "${PROJECT_BINARY_DIR}/harfbuzz-config-version.cmake"
2150+ VERSION ${HB_VERSION}
2151+ COMPATIBILITY SameMajorVersion
2152+ )
2153+ install(
2154+ FILES
2155+ "${PROJECT_BINARY_DIR}/harfbuzz-config.cmake"
2156+ "${PROJECT_BINARY_DIR}/harfbuzz-config-version.cmake"
2157+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/harfbuzz"
2158 )
2159 endif ()
2160diff --git a/CODE_OF_AI_CONDUCT.md b/CODE_OF_AI_CONDUCT.md
2161deleted file mode 100644
2162index 0fb405a3c..000000000
2163--- a/CODE_OF_AI_CONDUCT.md
2164+++ /dev/null
2165@@ -1,50 +0,0 @@
2166-# Code of AI Conduct
2167-
2168-This project accepts AI-assisted contributions, but contributors remain fully
2169-responsible for the changes they submit.
2170-
2171-## Requirements
2172-
2173-- Use AI as a tool, not as an authority. Verify behavior, correctness, and
2174- compatibility yourself before submitting changes.
2175-- Any large changes to library code (~>100 lines) must be fully reviewed by
2176- two humans: the producer and a second reviewer.
2177-- Keep changes narrow. Do not use AI to generate broad rewrites, drive-by
2178- refactors, or style-only churn.
2179-- Preserve HarfBuzz's public API and ABI unless a change explicitly calls for
2180- it.
2181-- Follow the repository guidance in [`AGENTS.md`](AGENTS.md),
2182- [`README.md`](README.md), [`BUILD.md`](BUILD.md), [`TESTING.md`](TESTING.md),
2183- and related local documentation.
2184-- Do not submit generated code, text, or tests that you do not understand.
2185-- Do not fabricate benchmarks, bug reports, test results, or reproduction
2186- steps.
2187-- Do not paste private code, non-public fonts, credentials, tokens, or other
2188- confidential material into external AI systems.
2189-- Respect licensing and attribution requirements. Do not submit AI-generated
2190- content that may have unclear provenance or incompatible licensing.
2191-
2192-## Attribution
2193-
2194-- When AI tools contributed meaningfully to a change, add an `Assisted-by:`
2195- trailer to the commit message (e.g. `Assisted-by: Claude`). Routine use of
2196- autocompletion or spelling correction does not require attribution.
2197-
2198-## Pull requests
2199-
2200-- Describe what was verified locally, including the exact build or test commands
2201- you ran.
2202-- Call out uncertainty, skipped validation, or areas that need extra review.
2203-- Be prepared to revise or discard AI-generated changes that do not meet the
2204- project's standards.
2205-
2206-## Maintainer expectations
2207-
2208-- Review AI-assisted contributions by the same technical standards as any other
2209- contribution.
2210-- Prefer reproducible fixes, focused diffs, and adequate tests over volume.
2211-- Reject changes that appear to be unreviewed AI output, including changes that
2212- add unnecessary complexity, invent behavior, or ignore repository guidance.
2213-
2214-In short: if AI helped produce a change, a human contributor must still own the
2215-result end to end.
2216diff --git a/docs/meson.build b/docs/meson.build
2217deleted file mode 100644
2218index 06481d4a6..000000000
2219--- a/docs/meson.build
2220+++ /dev/null
2221@@ -1,71 +0,0 @@
2222-if not find_program('gtkdoc-scan', required: get_option('docs')).found()
2223- message('Not building documentation as gtk-doc was not found')
2224- subdir_done()
2225-endif
2226-
2227-conf.set('HAVE_GTK_DOC', 1)
2228-
2229-gnome = import('gnome')
2230-
2231-docconf = configuration_data()
2232-docconf.set('HB_VERSION', meson.project_version())
2233-
2234-version_xml = configure_file(input: 'version.xml.in',
2235- output: 'version.xml',
2236- configuration: docconf)
2237-
2238-content_files = [
2239- 'usermanual-what-is-harfbuzz.xml',
2240- 'usermanual-install-harfbuzz.xml',
2241- 'usermanual-getting-started.xml',
2242- 'usermanual-glyph-information.xml',
2243- 'usermanual-shaping-concepts.xml',
2244- 'usermanual-object-model.xml',
2245- 'usermanual-buffers-language-script-and-direction.xml',
2246- 'usermanual-fonts-and-faces.xml',
2247- 'usermanual-opentype-features.xml',
2248- 'usermanual-clusters.xml',
2249- 'usermanual-utilities.xml',
2250- 'usermanual-integration.xml',
2251- version_xml,
2252-]
2253-
2254-html_images = [
2255- 'favicon.ico',
2256- 'HarfBuzz.png',
2257- 'HarfBuzz.svg',
2258- 'hb-shape.png',
2259- 'hb-subset.png',
2260- 'hb-raster.png',
2261- 'hb-vector.png',
2262- 'hb-gpu.png',
2263-]
2264-
2265-ignore_headers = [
2266- 'hb-features.h',
2267- 'hb-gobject.h',
2268- 'hb-gobject-enums.h',
2269- 'hb-gobject-enums-tmp.h',
2270- 'hb-gobject-structs.h',
2271- 'hb-wasm-api.h',
2272-]
2273-
2274-gnome.gtkdoc('harfbuzz',
2275- main_sgml: 'harfbuzz-docs.xml',
2276- src_dir: [meson.current_source_dir() / '..' / 'src',
2277- meson.current_build_dir() / '..' / 'src',
2278- ],
2279- scan_args: ['--deprecated-guards=HB_DISABLE_DEPRECATED',
2280- '--ignore-decorators=HB_EXTERN|HB_DEPRECATED|HB_DEPRECATED_FOR()',
2281- ],
2282- mkdb_args: ['--source-suffixes=h,cc',
2283- '--xml-mode',
2284- '--output-format=xml',
2285- ],
2286- content_files: content_files,
2287- html_assets: html_images,
2288- ignore_headers: ignore_headers,
2289- dependencies: [libharfbuzz_dep],
2290- install: true,
2291- check: get_option('doc_tests'),
2292-)
2293diff --git a/meson.build b/meson.build
2294deleted file mode 100644
2295index 97ae4ce1b..000000000
2296--- a/meson.build
2297+++ /dev/null
2298@@ -1,521 +0,0 @@
2299-project('harfbuzz', ['c', 'cpp'],
2300- meson_version: '>= 0.60.0',
2301- version: '14.2.1',
2302- default_options: [
2303- 'cpp_eh=none', # Just to support msvc, we are passing -fno-exceptions also anyway
2304- # 'cpp_rtti=false', # Do NOT enable, wraps inherit it and ICU needs RTTI
2305- 'cpp_std=c++11',
2306- 'wrap_mode=nofallback', # Use --wrap-mode=default to revert, https://github.com/harfbuzz/harfbuzz/pull/2548
2307- 'buildtype=debugoptimized',
2308- 'b_ndebug=if-release', # Disable asserts in release builds
2309- ],
2310-)
2311-
2312-glib_min_version = '>= 2.30.0'
2313-cairo_min_version = '>= 1.10.0'
2314-chafa_min_version = '>= 1.6.0'
2315-icu_min_version = '>= 49.0'
2316-graphite2_min_version = '>= 1.2.0'
2317-freetype_min_version = '>= 20.0.14'
2318-
2319-hb_version_arr = meson.project_version().split('.')
2320-hb_version_major = hb_version_arr[0].to_int()
2321-hb_version_minor = hb_version_arr[1].to_int()
2322-hb_version_micro = hb_version_arr[2].to_int()
2323-
2324-# libtool versioning
2325-hb_version_int = 60000 + hb_version_major*100 + hb_version_minor*10 + hb_version_micro
2326-hb_libtool_version_info = '@0@:0:@0@'.format(hb_version_int)
2327-
2328-pkgmod = import('pkgconfig')
2329-cpp = meson.get_compiler('cpp')
2330-null_dep = dependency('', required: false)
2331-
2332-# Includes Microsoft Clang compiler with GNU arguments, see
2333-# https://github.com/harfbuzz/harfbuzz/pull/4394
2334-cpp_is_microsoft_compiler = host_machine.system() == 'windows' and cpp.get_define('_MSC_FULL_VER') != ''
2335-
2336-# Only perform these checks if cpp_std is c++11 as setting -std directly
2337-# produces a warning from meson.
2338-if get_option('cpp_std') == 'c++11'
2339- # Enforce C++14 requirement for MSVC STL
2340- if cpp.get_id() == 'clang' and cpp_is_microsoft_compiler
2341- add_project_arguments('-std=c++14', language: 'cpp')
2342- elif cpp.get_id() == 'clang-cl'
2343- # Clang-cl produces a warning when using -std=c++14, but not when using /std:c++14
2344- add_project_arguments('/std:c++14', language : 'cpp')
2345- endif
2346-endif
2347-
2348-if cpp.get_argument_syntax() == 'msvc'
2349- # Ignore several spurious warnings for things HarfBuzz does very commonly.
2350- # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
2351- # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
2352- # NOTE: Only add warnings here if you are sure they're spurious
2353- msvc_args = [
2354- '/wd4244', # lossy type conversion (e.g. double -> int)
2355- '/bigobj', # hb-subset.cc -- compile error C1128: number of sections exceeded object file format limit
2356- cpp.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
2357- ]
2358- add_project_arguments(msvc_args, language: ['c', 'cpp'])
2359- # Disable SAFESEH with MSVC for libs that use external deps that are built with MinGW
2360- # noseh_link_args = ['/SAFESEH:NO']
2361-endif
2362-
2363-add_project_link_arguments(cpp.get_supported_link_arguments([
2364- '-Bsymbolic-functions'
2365-]), language: 'c')
2366-
2367-add_project_arguments(cpp.get_supported_arguments([
2368- '-fno-exceptions',
2369- '-fno-rtti',
2370- '-fno-threadsafe-statics',
2371- '-fvisibility-inlines-hidden',
2372-]), language: 'cpp')
2373-
2374-if host_machine.cpu_family() == 'arm' and cpp.alignment('struct { char c; }') != 1
2375- if cpp.has_argument('-mstructure-size-boundary=8')
2376- add_project_arguments('-mstructure-size-boundary=8', language: 'cpp')
2377- endif
2378-endif
2379-
2380-if host_machine.system() == 'windows'
2381- add_project_arguments(cpp.get_supported_arguments([
2382- '-Wa,-mbig-obj'
2383- ]), language : 'cpp')
2384-endif
2385-
2386-check_headers = [
2387- ['unistd.h'],
2388- ['sys/mman.h'],
2389- ['stdbool.h'],
2390- ['xlocale.h'],
2391-]
2392-
2393-check_funcs = [
2394- ['atexit', {'prefix': '#include <stdlib.h>'}],
2395- ['mprotect', {'prefix': '#include <sys/mman.h>'}],
2396- ['sysconf', {'prefix': '#include <unistd.h>'}],
2397- ['getpagesize', {'prefix': '#include <unistd.h>'}],
2398- ['mmap', {'prefix': '#include <sys/mman.h>'}],
2399- ['isatty', {'prefix': '#include <unistd.h>'}],
2400- ['uselocale', {'prefix': '#include <locale.h>'}],
2401- ['newlocale', {'prefix': '#include <locale.h>'}],
2402- ['localeconv_l', {'prefix': '#include <locale.h>'}],
2403- ['sincos', {'prefix': '#define _GNU_SOURCE\n#include <math.h>'}],
2404- ['sincosf', {'prefix': '#define _GNU_SOURCE\n#include <math.h>'}],
2405-]
2406-
2407-m_dep = cpp.find_library('m', required: false)
2408-
2409-freetype_dep = dependency('freetype2', version: freetype_min_version, required: get_option('freetype'), default_options: ['harfbuzz=disabled'])
2410-glib_dep = dependency('glib-2.0', version: glib_min_version, required: get_option('glib'))
2411-gobject_dep = dependency('gobject-2.0', version: glib_min_version, required: get_option('gobject'))
2412-graphite2_dep = dependency('graphite2', version: graphite2_min_version, required: get_option('graphite2'))
2413-graphite_dep = dependency('graphite2', version: graphite2_min_version, required: get_option('graphite'))
2414-wasm_dep = cpp.find_library('iwasm', required: get_option('wasm'))
2415-# How to check whether iwasm was built, and hence requires, LLVM?
2416-#llvm_dep = cpp.find_library('LLVM-15', required: get_option('wasm'))
2417-
2418-icu_dep = dependency('icu-uc', version: icu_min_version, required: get_option('icu'))
2419-if icu_dep.found() and icu_dep.version().version_compare('>=75.1') and (get_option('cpp_std') == 'c++11' or get_option('cpp_std') == 'c++14')
2420- cpp17_arg = cpp.get_argument_syntax() == 'msvc' ? '/std:c++17' : '-std=c++17'
2421- add_project_arguments(cpp17_arg, language: 'cpp')
2422-endif
2423-
2424-if icu_dep.found() and icu_dep.type_name() == 'pkgconfig'
2425- icu_defs = icu_dep.get_variable(pkgconfig: 'DEFS', default_value: '').split()
2426- if icu_defs.length() > 0
2427- add_project_arguments(icu_defs, language: ['c', 'cpp'])
2428- endif
2429-endif
2430-
2431-cairo_dep = null_dep
2432-cairo_ft_dep = null_dep
2433-if not get_option('cairo').disabled()
2434- cairo_dep = dependency('cairo', version: cairo_min_version, required: false)
2435- cairo_ft_dep = dependency('cairo-ft', version: cairo_min_version, required: false)
2436-
2437- if (not cairo_dep.found() and
2438- cpp.get_argument_syntax() == 'msvc' and
2439- cpp.has_header('cairo.h'))
2440- cairo_dep = cpp.find_library('cairo', required: false)
2441- if cairo_dep.found() and cpp.has_function('cairo_ft_font_face_create_for_ft_face',
2442- prefix: '#include <cairo-ft.h>',
2443- dependencies: cairo_dep)
2444- cairo_ft_dep = cairo_dep
2445- endif
2446- endif
2447-
2448- if not cairo_dep.found()
2449- # Note that we don't have harfbuzz -> cairo -> freetype2 -> harfbuzz fallback
2450- # dependency cycle here because we have configured freetype2 above with
2451- # harfbuzz support disabled, so when cairo will lookup freetype2 dependency
2452- # it will be forced to use that one.
2453- cairo_dep = dependency('cairo', version: cairo_min_version, required: get_option('cairo'))
2454- cairo_ft_required = get_option('cairo').enabled() and get_option('freetype').enabled()
2455- cairo_ft_dep = dependency('cairo-ft', version: cairo_min_version, required: cairo_ft_required)
2456- endif
2457-endif
2458-
2459-chafa_dep = dependency('chafa', version: chafa_min_version, required: get_option('chafa'))
2460-png_dep = dependency('libpng', required: get_option('png'))
2461-zlib_dep = dependency('zlib', required: get_option('zlib'))
2462-
2463-fontations_dep_found = false
2464-if get_option('fontations').enabled()
2465- add_languages(['rust'], native: false, required : true)
2466- fontations_dep_found = true
2467-endif
2468-
2469-harfrust_dep_found = false
2470-if get_option('harfrust').enabled()
2471- add_languages(['rust'], native: false, required : true)
2472- harfrust_dep_found = true
2473-endif
2474-
2475-kbts_dep = null_dep
2476-if get_option('kbts').enabled()
2477- kbts_dep = subproject('kbts').get_variable('kbts_dep')
2478-endif
2479-
2480-conf = configuration_data()
2481-incconfig = include_directories('.')
2482-
2483-add_project_arguments('-DHAVE_CONFIG_H', language: ['c', 'cpp'])
2484-
2485-cpp_args = []
2486-
2487-if glib_dep.found()
2488- conf.set('HAVE_GLIB', 1)
2489-endif
2490-
2491-if gobject_dep.found()
2492- conf.set('HAVE_GOBJECT', 1)
2493-endif
2494-
2495-if cairo_dep.found()
2496- conf.set('HAVE_CAIRO', 1)
2497- check_cairo_funcs = [
2498- ['cairo_user_font_face_set_render_color_glyph_func', {'deps': cairo_dep}],
2499- ['cairo_font_options_get_custom_palette_color', {'deps': cairo_dep}],
2500- ['cairo_user_scaled_font_get_foreground_source', {'deps': cairo_dep}],
2501- ]
2502-
2503- if cairo_dep.type_name() == 'internal'
2504- foreach func: check_cairo_funcs
2505- name = func[0]
2506- conf.set('HAVE_@0@'.format(name.to_upper()), 1)
2507- endforeach
2508- else
2509- check_funcs += check_cairo_funcs
2510- endif
2511-endif
2512-
2513-if cairo_ft_dep.found()
2514- conf.set('HAVE_CAIRO_FT', 1)
2515-endif
2516-
2517-if chafa_dep.found()
2518- conf.set('HAVE_CHAFA', 1)
2519-endif
2520-
2521-if png_dep.found()
2522- conf.set('HAVE_PNG', 1)
2523-endif
2524-
2525-if zlib_dep.found()
2526- conf.set('HAVE_ZLIB', 1)
2527-endif
2528-
2529-if fontations_dep_found
2530- conf.set('HAVE_FONTATIONS', 1)
2531-endif
2532-
2533-if harfrust_dep_found
2534- conf.set('HAVE_HARFRUST', 1)
2535-endif
2536-
2537-if kbts_dep.found()
2538- conf.set('HAVE_KBTS', 1)
2539-endif
2540-
2541-if wasm_dep.found()
2542- conf.set('HAVE_WASM', 1)
2543- conf.set('HB_WASM_MODULE_DIR', '"'+get_option('prefix')+'/'+get_option('libdir')+'/harfbuzz/wasm"')
2544-endif
2545-
2546-if graphite2_dep.found() or graphite_dep.found()
2547- conf.set('HAVE_GRAPHITE2', 1)
2548-endif
2549-
2550-if icu_dep.found()
2551- conf.set('HAVE_ICU', 1)
2552-endif
2553-
2554-if get_option('icu_builtin')
2555- conf.set('HAVE_ICU_BUILTIN', 1)
2556-endif
2557-
2558-if get_option('experimental_api')
2559- conf.set('HB_EXPERIMENTAL_API', 1)
2560-endif
2561-
2562-if not get_option('raster').disabled()
2563- conf.set('HAVE_RASTER', 1)
2564-endif
2565-
2566-if not get_option('vector').disabled()
2567- conf.set('HAVE_VECTOR', 1)
2568-endif
2569-
2570-if not get_option('subset').disabled()
2571- conf.set('HAVE_SUBSET', 1)
2572-endif
2573-
2574-if freetype_dep.found()
2575- conf.set('HAVE_FREETYPE', 1)
2576- check_freetype_funcs = [
2577- ['FT_Get_Var_Blend_Coordinates', {'deps': freetype_dep}],
2578- ['FT_Set_Var_Blend_Coordinates', {'deps': freetype_dep}],
2579- ['FT_Done_MM_Var', {'deps': freetype_dep}],
2580- ['FT_Get_Transform', {'deps': freetype_dep}],
2581- ]
2582-
2583- if freetype_dep.type_name() == 'internal'
2584- foreach func: check_freetype_funcs
2585- name = func[0]
2586- conf.set('HAVE_@0@'.format(name.to_upper()), 1)
2587- endforeach
2588- else
2589- check_funcs += check_freetype_funcs
2590- endif
2591-endif
2592-
2593-gdi_uniscribe_deps = []
2594-# GDI (Uniscribe) (Windows)
2595-if host_machine.system() == 'windows' and not get_option('gdi').disabled()
2596- if (get_option('gdi').enabled() and
2597- not (cpp.has_header('usp10.h') and cpp.has_header('windows.h')))
2598- error('GDI/Uniscribe was enabled explicitly, but required headers are missing.')
2599- endif
2600-
2601- gdi_deps_found = true
2602- foreach usplib : ['usp10', 'gdi32', 'rpcrt4', 'user32']
2603- dep = cpp.find_library(usplib, required: get_option('gdi'))
2604- gdi_deps_found = gdi_deps_found and dep.found()
2605- gdi_uniscribe_deps += dep
2606- endforeach
2607-
2608- if gdi_deps_found
2609- conf.set('HAVE_UNISCRIBE', 1)
2610- conf.set('HAVE_GDI', 1)
2611- endif
2612-endif
2613-
2614-directwrite_dep = []
2615-# DirectWrite (Windows)
2616-if host_machine.system() == 'windows' and not get_option('directwrite').disabled()
2617- if get_option('directwrite').enabled() and not cpp.has_header('dwrite_3.h')
2618- error('DirectWrite was enabled explicitly, but required header is missing.')
2619- endif
2620- directwrite_dep = cpp.find_library('dwrite', required: get_option('directwrite'))
2621- if directwrite_dep.found()
2622- conf.set('HAVE_DIRECTWRITE', 1)
2623- endif
2624-endif
2625-
2626-# CoreText (macOS)
2627-coretext_deps = []
2628-if host_machine.system() == 'darwin' and not get_option('coretext').disabled()
2629- app_services_dep = dependency('appleframeworks', modules: ['ApplicationServices'], required: false)
2630- if cpp.has_type('CTFontRef', prefix: '#include <ApplicationServices/ApplicationServices.h>', dependencies: app_services_dep)
2631- coretext_deps += [app_services_dep]
2632- conf.set('HAVE_CORETEXT', 1)
2633- # On iOS CoreText and CoreGraphics are stand-alone frameworks
2634- # Check for a different symbol to avoid getting cached result
2635- else
2636- coretext_dep = dependency('appleframeworks', modules: ['CoreText'], required: false)
2637- coregraphics_dep = dependency('appleframeworks', modules: ['CoreGraphics'], required: false)
2638- corefoundation_dep = dependency('appleframeworks', modules: ['CoreFoundation'], required: false)
2639- if cpp.has_type('CTRunRef', prefix: '#include <CoreText/CoreText.h>', dependencies: [coretext_dep, coregraphics_dep, corefoundation_dep])
2640- coretext_deps += [coretext_dep, coregraphics_dep, corefoundation_dep]
2641- conf.set('HAVE_CORETEXT', 1)
2642- elif get_option('coretext').enabled()
2643- error('CoreText was enabled explicitly, but required headers or frameworks are missing.')
2644- endif
2645- endif
2646-endif
2647-
2648-# threads
2649-thread_dep = null_dep
2650-if host_machine.system() != 'windows'
2651- thread_dep = dependency('threads', required: false)
2652-
2653- if thread_dep.found()
2654- conf.set('HAVE_PTHREAD', 1)
2655- endif
2656-endif
2657-
2658-foreach check : check_headers
2659- name = check[0]
2660-
2661- if cpp.has_header(name)
2662- conf.set('HAVE_@0@'.format(name.to_upper().underscorify()), 1)
2663- endif
2664-endforeach
2665-
2666-harfbuzz_extra_deps = []
2667-foreach check : check_funcs
2668- name = check[0]
2669- opts = check.get(1, {})
2670- link_withs = opts.get('link_with', [])
2671- check_deps = opts.get('deps', [])
2672- check_prefix = opts.get('prefix', '')
2673- extra_deps = []
2674- found = true
2675-
2676- # First try without linking
2677- found = cpp.has_function(name, prefix: check_prefix, dependencies: check_deps)
2678-
2679- if not found and link_withs.length() > 0
2680- found = true
2681-
2682- foreach link_with : link_withs
2683- dep = cpp.find_library(link_with, required: false)
2684- if dep.found()
2685- extra_deps += dep
2686- else
2687- found = false
2688- endif
2689- endforeach
2690-
2691- if found
2692- found = cpp.has_function(name, prefix: check_prefix, dependencies: check_deps + extra_deps)
2693- endif
2694- endif
2695-
2696- if found
2697- harfbuzz_extra_deps += extra_deps
2698- conf.set('HAVE_@0@'.format(name.to_upper()), 1)
2699- endif
2700-endforeach
2701-
2702-# CMake support (package install dir)
2703-
2704-# Equivalent to configure_package_config_file(INSTALL_DESTINATION ...), see
2705-# https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html#command:configure_package_config_file.
2706-# In certain unusual packaging layouts such as Nixpkgs, the Harfbuzz package
2707-# is installed into two Nix store paths, "out" and "dev", where "out" contains
2708-# libraries only (i.e. lib/libharfbuzz.so) and "dev" contains development
2709-# files, i.e. include and lib/cmake. If CMake package files are installed to
2710-# "out", Nixpkgs will move them to "dev", which breaks assumptions about
2711-# our file paths. Since we need to figure out relative install paths here
2712-# to make a relocatable package, we do need to know the final path of our
2713-# CMake files to calculate the correct relative paths.
2714-# Of course, this still defaults to $libdir/cmake if unset, which works for
2715-# most packaging layouts.
2716-cmake_package_install_dir = get_option('cmakepackagedir')
2717-
2718-if cmake_package_install_dir == ''
2719- cmake_package_install_dir = get_option('libdir') / 'cmake'
2720-endif
2721-
2722-subdir('src')
2723-
2724-if not get_option('utilities').disabled()
2725- subdir('util')
2726-endif
2727-
2728-if not get_option('tests').disabled()
2729- subdir('test')
2730-endif
2731-
2732-if not get_option('benchmark').disabled()
2733- subdir('perf')
2734-endif
2735-
2736-if not get_option('docs').disabled()
2737- subdir('docs')
2738-endif
2739-
2740-configure_file(output: 'config.h', configuration: conf)
2741-
2742-alias_target('lib', libharfbuzz)
2743-libs = [libharfbuzz]
2744-if not get_option('subset').disabled()
2745- libs += [libharfbuzz_subset]
2746-endif
2747-if not get_option('raster').disabled()
2748- libs += [libharfbuzz_raster]
2749-endif
2750-if not get_option('vector').disabled()
2751- libs += [libharfbuzz_vector]
2752-endif
2753-alias_target('libs', libs)
2754-
2755-# Re glib, see https://github.com/harfbuzz/harfbuzz/issues/4153#issuecomment-2646347531
2756-add_test_setup('default',
2757- exclude_suites: ['google-benchmark'],
2758- is_default: glib_dep.type_name() != 'internal' and not meson.is_subproject())
2759-
2760-build_summary = {
2761- 'Directories':
2762- {'prefix': get_option('prefix'),
2763- 'bindir': get_option('bindir'),
2764- 'libdir': get_option('libdir'),
2765- 'includedir': get_option('includedir'),
2766- 'datadir': get_option('datadir'),
2767- 'cmakepackagedir': cmake_package_install_dir
2768- },
2769- 'Unicode callbacks (you want at least one)':
2770- {'Builtin': true,
2771- 'Glib': conf.get('HAVE_GLIB', 0) == 1,
2772- 'ICU': conf.get('HAVE_ICU', 0) == 1,
2773- },
2774- 'Font callbacks (the more the merrier)':
2775- {'Builtin' : true,
2776- 'FreeType': conf.get('HAVE_FREETYPE', 0) == 1,
2777- 'Fontations': conf.get('HAVE_FONTATIONS', 0) == 1,
2778- },
2779- 'Additional shapers':
2780- {'Graphite2': conf.get('HAVE_GRAPHITE2', 0) == 1,
2781- 'WebAssembly (experimental)': conf.get('HAVE_WASM', 0) == 1,
2782- },
2783- 'Platform / other shapers (not normally needed)':
2784- {'CoreText': conf.get('HAVE_CORETEXT', 0) == 1,
2785- 'DirectWrite': conf.get('HAVE_DIRECTWRITE', 0) == 1,
2786- 'GDI/Uniscribe': (conf.get('HAVE_GDI', 0) == 1) and (conf.get('HAVE_UNISCRIBE', 0) == 1),
2787- 'HarfRust': conf.get('HAVE_HARFRUST', 0) == 1,
2788- 'kbts': conf.get('HAVE_KBTS', 0) == 1,
2789- },
2790- 'Additional libraries':
2791- {'Subset': not get_option('subset').disabled(),
2792- 'Raster (experimental)': not get_option('raster').disabled(),
2793- 'Vector (experimental)': not get_option('vector').disabled(),
2794- 'GPU (experimental)': not get_option('gpu').disabled(),
2795- },
2796- 'Dependencies used by additional libraries':
2797- {'PNG': conf.get('HAVE_PNG', 0) == 1,
2798- 'Zlib': conf.get('HAVE_ZLIB', 0) == 1,
2799- },
2800- 'Other features':
2801- {'Utilities': not get_option('utilities').disabled(),
2802- 'Documentation': conf.get('HAVE_GTK_DOC', 0) == 1,
2803- 'GObject bindings': conf.get('HAVE_GOBJECT', 0) == 1,
2804- 'Cairo integration': conf.get('HAVE_CAIRO', 0) == 1,
2805- 'Introspection': conf.get('HAVE_INTROSPECTION', 0) == 1,
2806- 'Experimental APIs': conf.get('HB_EXPERIMENTAL_API', 0) == 1,
2807- },
2808- 'Dependencies used by command-line utilities':
2809- {'Cairo': conf.get('HAVE_CAIRO', 0) == 1,
2810- 'Chafa': conf.get('HAVE_CHAFA', 0) == 1,
2811- },
2812- 'Testing':
2813- {'Tests': get_option('tests').enabled(),
2814- 'Benchmark': get_option('benchmark').enabled(),
2815- },
2816-}
2817-foreach section_title, section : build_summary
2818- summary(section, bool_yn: true, section: section_title)
2819-endforeach
2820diff --git a/meson_options.txt b/meson_options.txt
2821deleted file mode 100644
2822index 3feffeab7..000000000
2823--- a/meson_options.txt
2824+++ /dev/null
2825@@ -1,74 +0,0 @@
2826-# HarfBuzz feature options
2827-option('glib', type: 'feature', value: 'auto',
2828- description: 'Enable GLib unicode functions')
2829-option('gobject', type: 'feature', value: 'auto',
2830- description: 'Enable GObject bindings')
2831-option('cairo', type: 'feature', value: 'auto',
2832- description: 'Use Cairo graphics library')
2833-option('chafa', type: 'feature', value: 'auto',
2834- description: 'Use Chafa terminal graphics library')
2835-option('png', type: 'feature', value: 'auto',
2836- description: 'Use PNG library')
2837-option('zlib', type: 'feature', value: 'auto',
2838- description: 'Use zlib library')
2839-option('icu', type: 'feature', value: 'auto',
2840- description: 'Enable ICU library unicode functions')
2841-option('graphite', type: 'feature', value: 'disabled',
2842- description: 'Deprecated use graphite2 option instead')
2843-option('graphite2', type: 'feature', value: 'disabled',
2844- description: 'Enable Graphite2 complementary shaper')
2845-option('freetype', type: 'feature', value: 'auto',
2846- description: 'Enable freetype font backend')
2847-option('fontations', type: 'feature', value: 'disabled',
2848- description: 'Enable fontations font backend')
2849-option('gdi', type: 'feature', value: 'disabled',
2850- description: 'Enable GDI helpers and Uniscribe shaper backend on Windows')
2851-option('directwrite', type: 'feature', value: 'disabled',
2852- description: 'Enable DirectWrite shaper and font backend on Windows')
2853-option('coretext', type: 'feature', value: 'disabled',
2854- description: 'Enable CoreText shaper and font backend on Apple platforms')
2855-option('harfrust', type: 'feature', value: 'disabled',
2856- description: 'Enable HarfRust shaper backend')
2857-option('kbts', type: 'feature', value: 'disabled',
2858- description: 'Enable kb_text_shape backend')
2859-option('wasm', type: 'feature', value: 'disabled',
2860- description: 'Enable WebAssembly shaper backend (experimental)')
2861-option('raster', type: 'feature', value: 'enabled',
2862- description: 'Enable HarfBuzz glyph rasterization library')
2863-option('vector', type: 'feature', value: 'enabled',
2864- description: 'Enable HarfBuzz glyph vector drawing library')
2865-option('gpu', type: 'feature', value: 'enabled',
2866- description: 'Enable HarfBuzz GPU rasterization library')
2867-option('gpu_demo', type: 'feature', value: 'auto',
2868- description: 'Build hb-gpu demo tool (needs GLEW, GLFW, GL)')
2869-option('subset', type: 'feature', value: 'enabled',
2870- description: 'Enable HarfBuzz font subsetting and instancing library')
2871-
2872-# Common feature options
2873-option('tests', type: 'feature', value: 'enabled', yield: true,
2874- description: 'Enable or disable unit tests')
2875-option('introspection', type: 'feature', value: 'auto', yield: true,
2876- description: 'Generate gobject-introspection bindings (.gir/.typelib files)')
2877-option('docs', type: 'feature', value: 'auto', yield: true,
2878- description: 'Generate documentation with gtk-doc')
2879-option('doc_tests', type: 'boolean', value: false,
2880- description: 'Run gtkdoc-check tests')
2881-option('utilities', type: 'feature', value: 'enabled', yield: true,
2882- description: 'Build harfbuzz utils')
2883-
2884-option('benchmark', type: 'feature', value: 'disabled',
2885- description: 'Enable benchmark tests')
2886-option('icu_builtin', type: 'boolean', value: false,
2887- description: 'Don\'t separate ICU support as harfbuzz-icu module')
2888-option('with_libstdcxx', type: 'boolean', value: false,
2889- description: 'Allow linking with libstdc++')
2890-option('experimental_api', type: 'boolean', value: false,
2891- description: 'Enable experimental APIs')
2892-option('ragel_subproject', type: 'boolean', value: false,
2893- description: 'Build Ragel subproject if no suitable version is found')
2894-option('fuzzer_ldflags', type: 'string',
2895- description: 'Extra LDFLAGS used during linking of fuzzing binaries')
2896-
2897-# Install directory options
2898-option('cmakepackagedir', type: 'string',
2899- description: 'CMake package configuration install directory')
2900diff --git a/perf/meson.build b/perf/meson.build
2901deleted file mode 100644
2902index 261612c9f..000000000
2903--- a/perf/meson.build
2904+++ /dev/null
2905@@ -1,57 +0,0 @@
2906-if conf.get('HAVE_GLIB', 0) == 0
2907- message('You need to have glib support enabled to build perf benchmarks.')
2908- subdir_done()
2909-endif
2910-
2911-google_benchmark = subproject('google-benchmark')
2912-google_benchmark_dep = google_benchmark.get_variable('google_benchmark_dep')
2913-
2914-benchmarks = [
2915- 'benchmark-font.cc',
2916- 'benchmark-map.cc',
2917- 'benchmark-ot.cc',
2918- 'benchmark-set.cc',
2919- 'benchmark-shape.cc',
2920-]
2921-
2922-foreach source : benchmarks
2923- benchmark_name = source.split('.')[0]
2924- benchmark(benchmark_name, executable(benchmark_name, source,
2925- dependencies: [
2926- google_benchmark_dep, libharfbuzz_dep
2927- ],
2928- cpp_args: [],
2929- include_directories: [incconfig, incsrc],
2930- install: false,
2931- ), workdir: meson.current_source_dir() / '..', timeout: 100)
2932-endforeach
2933-
2934-if not get_option('gpu').disabled()
2935- benchmark('benchmark-gpu', executable('benchmark-gpu', 'benchmark-gpu.cc',
2936- dependencies: [
2937- google_benchmark_dep, libharfbuzz_dep, libharfbuzz_gpu_dep
2938- ],
2939- cpp_args: [],
2940- include_directories: [incconfig, incsrc],
2941- install: false,
2942- ), workdir: meson.current_source_dir() / '..', timeout: 100)
2943-endif
2944-
2945-if not get_option('subset').disabled()
2946- benchmarks_subset = [
2947- 'benchmark-subset.cc',
2948- ]
2949-
2950- foreach source : benchmarks_subset
2951- benchmark_name = source.split('.')[0]
2952- benchmark(benchmark_name, executable(benchmark_name, source,
2953- dependencies: [
2954- google_benchmark_dep, libharfbuzz_dep, libharfbuzz_subset_dep
2955- ],
2956- cpp_args: [],
2957- include_directories: [incconfig, incsrc],
2958- install: false,
2959- ), workdir: meson.current_source_dir() / '..', timeout: 100)
2960- endforeach
2961-endif
2962-
2963diff --git a/src/fix_get_types.py b/src/fix_get_types.py
2964deleted file mode 100755
2965index 64d8ce5a5..000000000
2966--- a/src/fix_get_types.py
2967+++ /dev/null
2968@@ -1,15 +0,0 @@
2969-#!/usr/bin/env python3
2970-
2971-import re
2972-import argparse
2973-
2974-parser = argparse.ArgumentParser ()
2975-parser.add_argument ('input')
2976-parser.add_argument ('output')
2977-args = parser.parse_args ()
2978-
2979-with open (args.input, 'r') as inp, open (args.output, 'w') as out:
2980- for l in inp.readlines ():
2981- l = re.sub ('_t_get_type', '_get_type', l)
2982- l = re.sub (r'_T \(', ' (', l)
2983- out.write (l)
2984diff --git a/src/meson.build b/src/meson.build
2985deleted file mode 100644
2986index 7ad675ee0..000000000
2987--- a/src/meson.build
2988+++ /dev/null
2989@@ -1,1348 +0,0 @@
2990-fs = import('fs')
2991-
2992-hb_version_h = configure_file(
2993- command: [find_program('gen-hb-version.py'), meson.project_version(), '@OUTPUT@', '@INPUT@'],
2994- input: 'hb-version.h.in',
2995- output: 'hb-version.h',
2996- install: true,
2997- install_dir: get_option('includedir') / meson.project_name())
2998-
2999-# Base and default-included sources and headers
3000-hb_base_sources = files(
3001- 'hb-aat-layout-ankr-table.hh',
3002- 'hb-aat-layout-bsln-table.hh',
3003- 'hb-aat-layout-common.hh',
3004- 'hb-aat-layout-feat-table.hh',
3005- 'hb-aat-layout-just-table.hh',
3006- 'hb-aat-layout-kerx-table.hh',
3007- 'hb-aat-layout-morx-table.hh',
3008- 'hb-aat-layout-opbd-table.hh',
3009- 'hb-aat-layout-trak-table.hh',
3010- 'hb-aat-layout.cc',
3011- 'hb-aat-layout.hh',
3012- 'hb-aat-ltag-table.hh',
3013- 'hb-aat-map.cc',
3014- 'hb-aat-map.hh',
3015- 'hb-algs.hh',
3016- 'hb-alloc-pool.hh',
3017- 'hb-array.hh',
3018- 'hb-atomic.hh',
3019- 'hb-bimap.hh',
3020- 'hb-bit-page.hh',
3021- 'hb-bit-set.hh',
3022- 'hb-bit-set-invertible.hh',
3023- 'hb-bit-vector.hh',
3024- 'hb-blob.cc',
3025- 'hb-blob.hh',
3026- 'hb-buffer-serialize.cc',
3027- 'hb-buffer-verify.cc',
3028- 'hb-buffer.cc',
3029- 'hb-buffer.hh',
3030- 'hb-cache.hh',
3031- 'hb-cff-interp-common.hh',
3032- 'hb-cff-interp-cs-common.hh',
3033- 'hb-cff-interp-dict-common.hh',
3034- 'hb-cff1-interp-cs.hh',
3035- 'hb-cff2-interp-cs.hh',
3036- 'hb-common.cc',
3037- 'hb-config.hh',
3038- 'hb-debug.hh',
3039- 'hb-decycler.hh',
3040- 'hb-dispatch.hh',
3041- 'hb-draw.cc',
3042- 'hb-draw.hh',
3043- 'hb-geometry.hh',
3044- 'hb-paint.cc',
3045- 'hb-paint.hh',
3046- 'hb-paint-bounded.cc',
3047- 'hb-paint-bounded.hh',
3048- 'hb-paint-extents.cc',
3049- 'hb-paint-extents.hh',
3050- 'hb-face.cc',
3051- 'hb-face.hh',
3052- 'hb-face-builder.cc',
3053- 'hb-fallback-shape.cc',
3054- 'hb-font.cc',
3055- 'hb-font.hh',
3056- 'hb-free-pool.hh',
3057- 'hb-iter.hh',
3058- 'hb-kern.hh',
3059- 'hb-limits.hh',
3060- 'hb-machinery.hh',
3061- 'hb-map.cc',
3062- 'hb-map.hh',
3063- 'hb-meta.hh',
3064- 'hb-ms-feature-ranges.hh',
3065- 'hb-multimap.hh',
3066- 'hb-mutex.hh',
3067- 'hb-null.hh',
3068- 'hb-number.cc',
3069- 'hb-number.hh',
3070- 'hb-object.hh',
3071- 'hb-open-file.hh',
3072- 'hb-open-type.hh',
3073- 'hb-ot-cff-common.hh',
3074- 'hb-ot-cff1-std-str.hh',
3075- 'hb-ot-cff1-table.cc',
3076- 'hb-ot-cff1-table.hh',
3077- 'hb-ot-cff2-table.cc',
3078- 'hb-ot-cff2-table.hh',
3079- 'hb-ot-cmap-table.hh',
3080- 'hb-ot-color.cc',
3081- 'hb-ot-face-table-list.hh',
3082- 'hb-ot-face.cc',
3083- 'hb-ot-face.hh',
3084- 'hb-ot-font.cc',
3085- 'hb-ot-gasp-table.hh',
3086- 'hb-ot-glyf-table.hh',
3087- 'hb-ot-hdmx-table.hh',
3088- 'hb-ot-head-table.hh',
3089- 'hb-ot-hhea-table.hh',
3090- 'hb-ot-hmtx-table.hh',
3091- 'hb-ot-kern-table.hh',
3092- 'hb-ot-layout-base-table.hh',
3093- 'hb-ot-layout-common.hh',
3094- 'hb-ot-layout-gdef-table.hh',
3095- 'hb-ot-layout-gpos-table.hh',
3096- 'hb-ot-layout-gsub-table.hh',
3097- 'hb-outline.hh',
3098- 'hb-outline.cc',
3099- 'OT/Color/CBDT/CBDT.hh',
3100- 'OT/Color/COLR/COLR.hh',
3101- 'OT/Color/CPAL/CPAL.hh',
3102- 'OT/Color/sbix/sbix.hh',
3103- 'OT/Color/svg/svg.hh',
3104- 'OT/glyf/glyf.hh',
3105- 'OT/glyf/glyf-helpers.hh',
3106- 'OT/glyf/loca.hh',
3107- 'OT/glyf/path-builder.hh',
3108- 'OT/glyf/Glyph.hh',
3109- 'OT/glyf/GlyphHeader.hh',
3110- 'OT/glyf/SimpleGlyph.hh',
3111- 'OT/glyf/CompositeGlyph.hh',
3112- 'OT/glyf/SubsetGlyph.hh',
3113- 'OT/Layout/types.hh',
3114- 'OT/Layout/Common/Coverage.hh',
3115- 'OT/Layout/Common/CoverageFormat1.hh',
3116- 'OT/Layout/Common/CoverageFormat2.hh',
3117- 'OT/Layout/Common/RangeRecord.hh',
3118- 'OT/Layout/GDEF/GDEF.hh',
3119- 'OT/Layout/GPOS/AnchorFormat1.hh',
3120- 'OT/Layout/GPOS/AnchorFormat2.hh',
3121- 'OT/Layout/GPOS/AnchorFormat3.hh',
3122- 'OT/Layout/GPOS/Anchor.hh',
3123- 'OT/Layout/GPOS/AnchorMatrix.hh',
3124- 'OT/Layout/GPOS/ChainContextPos.hh',
3125- 'OT/Layout/GPOS/Common.hh',
3126- 'OT/Layout/GPOS/ContextPos.hh',
3127- 'OT/Layout/GPOS/CursivePosFormat1.hh',
3128- 'OT/Layout/GPOS/CursivePos.hh',
3129- 'OT/Layout/GPOS/ExtensionPos.hh',
3130- 'OT/Layout/GPOS/GPOS.hh',
3131- 'OT/Layout/GPOS/LigatureArray.hh',
3132- 'OT/Layout/GPOS/MarkArray.hh',
3133- 'OT/Layout/GPOS/MarkBasePosFormat1.hh',
3134- 'OT/Layout/GPOS/MarkBasePos.hh',
3135- 'OT/Layout/GPOS/MarkLigPosFormat1.hh',
3136- 'OT/Layout/GPOS/MarkLigPos.hh',
3137- 'OT/Layout/GPOS/MarkMarkPosFormat1.hh',
3138- 'OT/Layout/GPOS/MarkMarkPos.hh',
3139- 'OT/Layout/GPOS/MarkRecord.hh',
3140- 'OT/Layout/GPOS/PairPosFormat1.hh',
3141- 'OT/Layout/GPOS/PairPosFormat2.hh',
3142- 'OT/Layout/GPOS/PairPos.hh',
3143- 'OT/Layout/GPOS/PairSet.hh',
3144- 'OT/Layout/GPOS/PairValueRecord.hh',
3145- 'OT/Layout/GPOS/PosLookup.hh',
3146- 'OT/Layout/GPOS/PosLookupSubTable.hh',
3147- 'OT/Layout/GPOS/SinglePosFormat1.hh',
3148- 'OT/Layout/GPOS/SinglePosFormat2.hh',
3149- 'OT/Layout/GPOS/SinglePos.hh',
3150- 'OT/Layout/GPOS/ValueFormat.hh',
3151- 'OT/Layout/GSUB/AlternateSet.hh',
3152- 'OT/Layout/GSUB/AlternateSubstFormat1.hh',
3153- 'OT/Layout/GSUB/AlternateSubst.hh',
3154- 'OT/Layout/GSUB/ChainContextSubst.hh',
3155- 'OT/Layout/GSUB/Common.hh',
3156- 'OT/Layout/GSUB/ContextSubst.hh',
3157- 'OT/Layout/GSUB/ExtensionSubst.hh',
3158- 'OT/Layout/GSUB/GSUB.hh',
3159- 'OT/Layout/GSUB/Ligature.hh',
3160- 'OT/Layout/GSUB/LigatureSet.hh',
3161- 'OT/Layout/GSUB/LigatureSubstFormat1.hh',
3162- 'OT/Layout/GSUB/LigatureSubst.hh',
3163- 'OT/Layout/GSUB/MultipleSubstFormat1.hh',
3164- 'OT/Layout/GSUB/MultipleSubst.hh',
3165- 'OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh',
3166- 'OT/Layout/GSUB/ReverseChainSingleSubst.hh',
3167- 'OT/Layout/GSUB/Sequence.hh',
3168- 'OT/Layout/GSUB/SingleSubstFormat1.hh',
3169- 'OT/Layout/GSUB/SingleSubstFormat2.hh',
3170- 'OT/Layout/GSUB/SingleSubst.hh',
3171- 'OT/Layout/GSUB/SubstLookup.hh',
3172- 'OT/Layout/GSUB/SubstLookupSubTable.hh',
3173- 'OT/name/name.hh',
3174- 'OT/Var/VARC/coord-setter.hh',
3175- 'OT/Var/VARC/VARC.cc',
3176- 'OT/Var/VARC/VARC.hh',
3177- 'hb-ot-layout-gsubgpos.hh',
3178- 'hb-ot-layout-jstf-table.hh',
3179- 'hb-ot-layout.cc',
3180- 'hb-ot-layout.hh',
3181- 'hb-ot-map.cc',
3182- 'hb-ot-map.hh',
3183- 'hb-ot-math-table.hh',
3184- 'hb-ot-math.cc',
3185- 'hb-ot-maxp-table.hh',
3186- 'hb-ot-meta-table.hh',
3187- 'hb-ot-meta.cc',
3188- 'hb-ot-metrics.cc',
3189- 'hb-ot-metrics.hh',
3190- 'hb-ot-name-language-static.hh',
3191- 'hb-ot-name-language.hh',
3192- 'hb-ot-name-table.hh',
3193- 'hb-ot-name.cc',
3194- 'hb-ot-os2-table.hh',
3195- 'hb-ot-os2-unicode-ranges.hh',
3196- 'hb-ot-post-macroman.hh',
3197- 'hb-ot-post-table.hh',
3198- 'hb-ot-post-table-v2subset.hh',
3199- 'hb-ot-shaper-arabic-fallback.hh',
3200- 'hb-ot-shaper-arabic-joining-list.hh',
3201- 'hb-ot-shaper-arabic-pua.hh',
3202- 'hb-ot-shaper-arabic-table.hh',
3203- 'hb-ot-shaper-arabic-win1256.hh',
3204- 'hb-ot-shaper-arabic.cc',
3205- 'hb-ot-shaper-arabic.hh',
3206- 'hb-ot-shaper-default.cc',
3207- 'hb-ot-shaper-hangul.cc',
3208- 'hb-ot-shaper-hebrew.cc',
3209- 'hb-ot-shaper-indic-table.cc',
3210- 'hb-ot-shaper-indic.cc',
3211- 'hb-ot-shaper-indic.hh',
3212- 'hb-ot-shaper-khmer.cc',
3213- 'hb-ot-shaper-myanmar.cc',
3214- 'hb-ot-shaper-syllabic.cc',
3215- 'hb-ot-shaper-syllabic.hh',
3216- 'hb-ot-shaper-thai.cc',
3217- 'hb-ot-shaper-use-table.hh',
3218- 'hb-ot-shaper-use.cc',
3219- 'hb-ot-shaper-vowel-constraints.cc',
3220- 'hb-ot-shaper-vowel-constraints.hh',
3221- 'hb-ot-shaper.hh',
3222- 'hb-ot-shape-fallback.cc',
3223- 'hb-ot-shape-fallback.hh',
3224- 'hb-ot-shape-normalize.cc',
3225- 'hb-ot-shape-normalize.hh',
3226- 'hb-ot-shape.cc',
3227- 'hb-ot-shape.hh',
3228- 'hb-ot-stat-table.hh',
3229- 'hb-ot-tag-table.hh',
3230- 'hb-ot-tag.cc',
3231- 'hb-ot-var-avar-table.hh',
3232- 'hb-ot-var-common.hh',
3233- 'hb-ot-var-cvar-table.hh',
3234- 'hb-ot-var-fvar-table.hh',
3235- 'hb-ot-var-gvar-table.hh',
3236- 'hb-ot-var-hvar-table.hh',
3237- 'hb-ot-var-mvar-table.hh',
3238- 'hb-ot-var-varc-table.hh',
3239- 'hb-ot-var.cc',
3240- 'hb-ot-vorg-table.hh',
3241- 'hb-priority-queue.hh',
3242- 'hb-repacker.hh',
3243- 'hb-sanitize.hh',
3244- 'hb-serialize.hh',
3245- 'hb-set-digest.hh',
3246- 'hb-set.cc',
3247- 'hb-set.hh',
3248- 'hb-shape-plan.cc',
3249- 'hb-shape-plan.hh',
3250- 'hb-shape.cc',
3251- 'hb-shaper-impl.hh',
3252- 'hb-shaper-list.hh',
3253- 'hb-shaper.cc',
3254- 'hb-shaper.hh',
3255- 'hb-static.cc',
3256- 'hb-string-array.hh',
3257- 'hb-style.cc',
3258- 'hb-ucd-table.hh',
3259- 'hb-ucd.cc',
3260- 'hb-unicode-emoji-table.hh',
3261- 'hb-unicode.cc',
3262- 'hb-unicode.hh',
3263- 'hb-utf.hh',
3264- 'hb-vector.hh',
3265- 'hb-vector-draw.hh',
3266- 'hb.hh',
3267-)
3268-
3269-hb_base_ragel_generated_sources = files(
3270- 'hb-buffer-deserialize-json.hh',
3271- 'hb-buffer-deserialize-text-glyphs.hh',
3272- 'hb-buffer-deserialize-text-unicode.hh',
3273- 'hb-number-parser.hh',
3274- 'hb-ot-shaper-indic-machine.hh',
3275- 'hb-ot-shaper-khmer-machine.hh',
3276- 'hb-ot-shaper-myanmar-machine.hh',
3277- 'hb-ot-shaper-use-machine.hh',
3278-)
3279-hb_base_ragel_sources = [
3280- 'hb-buffer-deserialize-json.rl',
3281- 'hb-buffer-deserialize-text-glyphs.rl',
3282- 'hb-buffer-deserialize-text-unicode.rl',
3283- 'hb-number-parser.rl',
3284- 'hb-ot-shaper-indic-machine.rl',
3285- 'hb-ot-shaper-khmer-machine.rl',
3286- 'hb-ot-shaper-myanmar-machine.rl',
3287- 'hb-ot-shaper-use-machine.rl',
3288-]
3289-
3290-hb_base_headers = files(
3291- 'hb-aat-layout.h',
3292- 'hb-aat.h',
3293- 'hb-blob.h',
3294- 'hb-buffer.h',
3295- 'hb-common.h',
3296- 'hb-cplusplus.hh',
3297- 'hb-deprecated.h',
3298- 'hb-draw.h',
3299- 'hb-paint.h',
3300- 'hb-face.h',
3301- 'hb-font.h',
3302- 'hb-map.h',
3303- 'hb-ot-color.h',
3304- 'hb-ot-deprecated.h',
3305- 'hb-ot-font.h',
3306- 'hb-ot-layout.h',
3307- 'hb-ot-math.h',
3308- 'hb-ot-meta.h',
3309- 'hb-ot-metrics.h',
3310- 'hb-ot-name.h',
3311- 'hb-ot-shape.h',
3312- 'hb-ot-var.h',
3313- 'hb-ot.h',
3314- 'hb-script-list.h',
3315- 'hb-set.h',
3316- 'hb-shape-plan.h',
3317- 'hb-shape.h',
3318- 'hb-style.h',
3319- 'hb-unicode.h',
3320- 'hb.h',
3321-)
3322-hb_base_headers += hb_version_h
3323-
3324-# Optional Sources and Headers with external deps
3325-
3326-hb_ft_sources = files('hb-ft.cc', 'hb-ft-colr.hh')
3327-hb_ft_headers = files('hb-ft.h')
3328-
3329-hb_fontations_sources = files()
3330-hb_fontations_headers = files('hb-fontations.h')
3331-
3332-hb_harfrust_sources = files('hb-harfrust.cc')
3333-hb_harfrust_headers = files()
3334-
3335-hb_kbts_sources = files('hb-kbts.cc')
3336-hb_kbts_headers = files()
3337-
3338-hb_glib_sources = files('hb-glib.cc')
3339-hb_glib_headers = files('hb-glib.h')
3340-
3341-hb_graphite2_sources = files('hb-graphite2.cc')
3342-hb_graphite2_headers = files('hb-graphite2.h')
3343-
3344-hb_wasm_sources = files(
3345- 'hb-wasm-api.cc',
3346- 'hb-wasm-api.hh',
3347- 'hb-wasm-api-blob.hh',
3348- 'hb-wasm-api-buffer.hh',
3349- 'hb-wasm-api-common.hh',
3350- 'hb-wasm-api-face.hh',
3351- 'hb-wasm-api-font.hh',
3352- 'hb-wasm-api-list.hh',
3353- 'hb-wasm-api-shape.hh',
3354- 'hb-wasm-shape.cc',
3355-)
3356-hb_wasm_headers = files()
3357-
3358-# System-dependent sources and headers
3359-
3360-hb_coretext_sources = files('hb-coretext.cc', 'hb-coretext.hh', 'hb-coretext-font.cc', 'hb-coretext-shape.cc')
3361-hb_coretext_headers = files('hb-coretext.h')
3362-
3363-hb_directwrite_sources = files('hb-directwrite.cc', 'hb-directwrite.hh', 'hb-directwrite-font.cc', 'hb-directwrite-shape.cc')
3364-hb_directwrite_headers = files('hb-directwrite.h')
3365-
3366-hb_gdi_sources = files('hb-gdi.cc')
3367-hb_gdi_headers = files('hb-gdi.h')
3368-
3369-hb_uniscribe_sources = files('hb-uniscribe.cc')
3370-hb_uniscribe_headers = files('hb-uniscribe.h')
3371-
3372-# Sources for libharfbuzz-gobject and libharfbuzz-icu
3373-hb_icu_sources = files('hb-icu.cc')
3374-hb_icu_headers = files('hb-icu.h')
3375-
3376-# Sources for libharfbuzz-subset
3377-hb_subset_sources = files(
3378- 'hb-number.cc',
3379- 'hb-number.hh',
3380- 'hb-ot-cff1-table.cc',
3381- 'hb-ot-cff2-table.cc',
3382- 'hb-static.cc',
3383- 'hb-subset-accelerator.hh',
3384- 'hb-subset-cff-common.cc',
3385- 'hb-subset-cff-common.hh',
3386- 'hb-subset-cff1.cc',
3387- 'hb-subset-cff2.cc',
3388- 'hb-subset-cff2-to-cff1.hh',
3389- 'hb-subset-input.cc',
3390- 'hb-subset-input.hh',
3391- 'hb-subset-instancer-iup.hh',
3392- 'hb-subset-instancer-iup.cc',
3393- 'hb-subset-instancer-solver.hh',
3394- 'hb-subset-instancer-solver.cc',
3395- 'hb-subset-plan.cc',
3396- 'hb-subset-plan-layout.cc',
3397- 'hb-subset-plan-var.cc',
3398- 'hb-subset-plan.hh',
3399- 'hb-subset-plan-member-list.hh',
3400- 'hb-subset-serialize.cc',
3401- 'hb-subset-table.hh',
3402- 'hb-subset-table-layout.cc',
3403- 'hb-subset-table-var.cc',
3404- 'hb-subset-table-cff.cc',
3405- 'hb-subset-table-color.cc',
3406- 'hb-subset-table-other.cc',
3407- 'graph/gsubgpos-context.cc',
3408- 'graph/gsubgpos-context.hh',
3409- 'graph/gsubgpos-graph.hh',
3410- 'graph/pairpos-graph.hh',
3411- 'graph/markbasepos-graph.hh',
3412- 'graph/coverage-graph.hh',
3413- 'graph/classdef-graph.hh',
3414- 'graph/split-helpers.hh',
3415- 'hb-subset.cc',
3416- 'hb-subset.hh',
3417-)
3418-
3419-hb_subset_headers = files(
3420- 'hb-subset.h',
3421- 'hb-subset-serialize.h'
3422-)
3423-
3424-hb_gobject_sources = files(
3425- 'hb-gobject-structs.cc'
3426-)
3427-
3428-hb_gobject_headers = files(
3429- 'hb-gobject.h',
3430- 'hb-gobject-structs.h',
3431-)
3432-
3433-hb_failing_alloc_sources = files('failing-alloc.c')
3434-
3435-ragel = find_program('ragel', version: '6.10', required: false)
3436-has_ragel = ragel.found()
3437-if not has_ragel and get_option('ragel_subproject')
3438- ragel = subproject('ragel').get_variable('ragel')
3439- has_ragel = true
3440-endif
3441-if not has_ragel
3442- if not meson.is_subproject()
3443- warning('You have to install ragel if you are going to develop HarfBuzz itself')
3444- endif
3445-else
3446- ragel_helper = find_program('gen-ragel-artifacts.py')
3447- foreach rl : hb_base_ragel_sources
3448- hh = rl.split('.')[0] + '.hh'
3449- custom_target('@0@'.format(hh),
3450- build_by_default: true,
3451- input: rl,
3452- output: hh,
3453- command: [ragel_helper, ragel, '@OUTPUT@', meson.current_source_dir(), '@INPUT@'],
3454- )
3455- endforeach
3456-endif
3457-
3458-custom_target('harfbuzz.cc',
3459- build_by_default: true,
3460- output: 'harfbuzz.cc',
3461- input: hb_base_sources + hb_glib_sources + hb_ft_sources +
3462- hb_graphite2_sources + hb_uniscribe_sources + hb_gdi_sources +
3463- hb_directwrite_sources + hb_coretext_sources + hb_wasm_sources,
3464- command: [find_program('gen-harfbuzzcc.py'),
3465- '@OUTPUT@', meson.current_source_dir(), '@INPUT@'],
3466-)
3467-
3468-
3469-incsrc = include_directories('.')
3470-
3471-hb_sources = hb_base_sources + hb_base_ragel_generated_sources
3472-hb_headers = hb_base_headers
3473-
3474-common_harfbuzz_deps = [thread_dep, m_dep]
3475-harfbuzz_deps = common_harfbuzz_deps + harfbuzz_extra_deps
3476-
3477-if get_option('with_libstdcxx')
3478- chosen_linker = 'cpp'
3479-else
3480- # Use a C linker, not C++; Don't link to libstdc++
3481- chosen_linker = 'c'
3482-endif
3483-libharfbuzz_link_language = chosen_linker
3484-
3485-if conf.get('HAVE_FREETYPE', 0) == 1
3486- hb_sources += hb_ft_sources
3487- hb_headers += hb_ft_headers
3488- harfbuzz_deps += [freetype_dep]
3489-endif
3490-
3491-if conf.get('HAVE_GLIB', 0) == 1
3492- hb_sources += hb_glib_sources
3493- hb_headers += hb_glib_headers
3494- harfbuzz_deps += [glib_dep]
3495-endif
3496-
3497-# We set those here to not include the sources below that are of no use to
3498-# GObject Introspection
3499-gir_sources = hb_sources + hb_gobject_sources
3500-gir_headers = hb_headers + hb_gobject_headers
3501-
3502-if conf.get('HAVE_GDI', 0) == 1
3503- hb_sources += hb_gdi_sources
3504- hb_headers += hb_gdi_headers
3505- harfbuzz_deps += gdi_uniscribe_deps
3506-endif
3507-
3508-if conf.get('HAVE_GRAPHITE2', 0) == 1
3509- hb_sources += hb_graphite2_sources
3510- hb_headers += hb_graphite2_headers
3511- harfbuzz_deps += [graphite2_dep, graphite_dep]
3512-endif
3513-
3514-if conf.get('HAVE_WASM', 0) == 1
3515- hb_sources += hb_wasm_sources
3516- hb_headers += hb_wasm_headers
3517- harfbuzz_deps += wasm_dep
3518- #harfbuzz_deps += llvm_dep
3519-endif
3520-
3521-if conf.get('HAVE_UNISCRIBE', 0) == 1
3522- hb_sources += hb_uniscribe_sources
3523- hb_headers += hb_uniscribe_headers
3524-endif
3525-
3526-if conf.get('HAVE_DIRECTWRITE', 0) == 1
3527- hb_sources += hb_directwrite_sources
3528- hb_headers += hb_directwrite_headers
3529- harfbuzz_deps += directwrite_dep
3530- # hb-directwrite needs a C++ linker
3531- libharfbuzz_link_language = 'cpp'
3532-endif
3533-
3534-if conf.get('HAVE_CORETEXT', 0) == 1
3535- hb_sources += hb_coretext_sources
3536- hb_headers += hb_coretext_headers
3537- harfbuzz_deps += coretext_deps
3538-endif
3539-
3540-if conf.get('HAVE_FONTATIONS', 0) == 1 or conf.get('HAVE_HARFRUST', 0) == 1
3541- subdir('rust')
3542- harfbuzz_deps += [harfbuzz_rust_dep]
3543-endif
3544-
3545-if conf.get('HAVE_FONTATIONS', 0) == 1
3546- hb_sources += hb_fontations_sources
3547- hb_headers += hb_fontations_headers
3548-endif
3549-
3550-if conf.get('HAVE_HARFRUST', 0) == 1
3551- hb_sources += hb_harfrust_sources
3552- hb_headers += hb_harfrust_headers
3553-endif
3554-
3555-if conf.get('HAVE_KBTS', 0) == 1
3556- hb_sources += hb_kbts_sources
3557- hb_headers += hb_kbts_headers
3558- harfbuzz_deps += [kbts_dep]
3559-endif
3560-
3561-have_icu = conf.get('HAVE_ICU', 0) == 1
3562-have_icu_builtin = conf.get('HAVE_ICU_BUILTIN', 0) == 1
3563-if have_icu and have_icu_builtin
3564- hb_sources += hb_icu_sources
3565- hb_headers += hb_icu_headers
3566- harfbuzz_deps += [icu_dep]
3567-endif
3568-
3569-features = [
3570- 'CAIRO',
3571- 'CORETEXT',
3572- 'DIRECTWRITE',
3573- 'FREETYPE',
3574- 'GDI',
3575- 'GLIB',
3576- 'GOBJECT',
3577- 'GRAPHITE',
3578- 'ICU',
3579- 'RASTER',
3580- 'SUBSET',
3581- 'UNISCRIBE',
3582- 'VECTOR',
3583- 'WASM',
3584- 'GPU',
3585-]
3586-
3587-hb_enabled_features = configuration_data()
3588-hb_supported_features = configuration_data()
3589-foreach feature : features
3590- key = 'HB_HAS_@0@'.format(feature)
3591- hb_enabled_features.set(key, conf.get('HAVE_@0@'.format(feature), false))
3592- hb_supported_features.set(key, 1)
3593-endforeach
3594-
3595-# The enabled features. This file is installed.
3596-hb_features_h = configure_file(input: 'hb-features.h.in',
3597- output: 'hb-features.h',
3598- configuration: hb_enabled_features,
3599- install: true,
3600- install_dir: get_option('includedir') / meson.project_name())
3601-
3602-# This file is generated to convince gtk-doc to generate documentation for all
3603-# HB_HAS_* macros, whether they are enabled for the current build or not.
3604-# This file should not be installed.
3605-hb_supported_features_h = configure_file(input: 'hb-features.h.in',
3606- output: 'hb-supported-features.h',
3607- configuration: hb_supported_features,
3608- install: false)
3609-
3610-
3611-# Base and default-included sources and headers
3612-gen_def = find_program('gen-def.py')
3613-gen_def_cmd = [gen_def, '@OUTPUT@', '@INPUT@']
3614-if get_option('experimental_api')
3615- gen_def_cmd += '--experimental-api'
3616-endif
3617-
3618-# harfbuzz
3619-harfbuzz_def = custom_target('harfbuzz.def',
3620- command: gen_def_cmd,
3621- input: hb_headers,
3622- output: 'harfbuzz.def')
3623-defs_list = [harfbuzz_def]
3624-
3625-version = '0.@0@.0'.format(hb_version_int)
3626-
3627-extra_hb_cpp_args = []
3628-if cpp_is_microsoft_compiler
3629- if get_option('default_library') != 'static'
3630- extra_hb_cpp_args += '-DHB_DLL_EXPORT'
3631- endif
3632- hb_so_version = ''
3633-else
3634- hb_so_version = '0'
3635-endif
3636-
3637-if get_option('fuzzer_ldflags') != ''
3638- extra_hb_cpp_args += ['-DHB_CUSTOM_MALLOC']
3639- hb_sources += hb_failing_alloc_sources
3640- hb_subset_sources += hb_failing_alloc_sources
3641- hb_icu_sources += hb_failing_alloc_sources
3642- hb_gobject_sources += hb_failing_alloc_sources
3643-endif
3644-
3645-darwin_versions = [hb_version_int, '@0@.0.0'.format(hb_version_int)]
3646-
3647-libharfbuzz = library('harfbuzz', hb_sources,
3648- include_directories: incconfig,
3649- dependencies: harfbuzz_deps,
3650- cpp_args: cpp_args + extra_hb_cpp_args,
3651- soversion: hb_so_version,
3652- version: version,
3653- install: true,
3654- darwin_versions: darwin_versions,
3655- link_language: libharfbuzz_link_language,
3656-)
3657-
3658-libharfbuzz_dep = declare_dependency(
3659- link_with: libharfbuzz,
3660- include_directories: incsrc,
3661- dependencies: harfbuzz_deps)
3662-meson.override_dependency('harfbuzz', libharfbuzz_dep)
3663-
3664-# harfbuzz-subset
3665-libharfbuzz_subset_dep = null_dep
3666-if not get_option('subset').disabled()
3667- harfbuzz_subset_def = custom_target('harfbuzz-subset.def',
3668- command: gen_def_cmd,
3669- input: hb_subset_headers,
3670- output: 'harfbuzz-subset.def')
3671- defs_list += [harfbuzz_subset_def]
3672-
3673- libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources,
3674- include_directories: incconfig,
3675- dependencies: common_harfbuzz_deps,
3676- link_with: [libharfbuzz],
3677- cpp_args: cpp_args + extra_hb_cpp_args,
3678- soversion: hb_so_version,
3679- version: version,
3680- install: true,
3681- darwin_versions: darwin_versions,
3682- link_language: chosen_linker,
3683- )
3684-
3685- custom_target('harfbuzz-subset.cc',
3686- build_by_default: true,
3687- output: 'harfbuzz-subset.cc',
3688- input: hb_base_sources + hb_subset_sources,
3689- command: [find_program('gen-harfbuzzcc.py'),
3690- '@OUTPUT@', meson.current_source_dir(), '@INPUT@'],
3691- )
3692-
3693- libharfbuzz_subset_dep = declare_dependency(
3694- link_with: libharfbuzz_subset,
3695- include_directories: incsrc,
3696- dependencies: [m_dep])
3697- meson.override_dependency('harfbuzz-subset', libharfbuzz_subset_dep)
3698-endif
3699-
3700-hb_raster_sources = files(
3701- 'hb-raster-image.cc',
3702- 'hb-raster-image.hh',
3703- 'hb-raster.hh',
3704- 'hb-raster-draw.cc',
3705- 'hb-raster-paint.cc',
3706- 'hb-raster-paint.hh',
3707- 'hb-static.cc',
3708-)
3709-
3710-hb_raster_headers = [
3711- 'hb-raster.h',
3712-]
3713-
3714-hb_vector_sources = files(
3715- 'hb-zlib.cc',
3716- 'hb-zlib.hh',
3717- 'hb-vector.cc',
3718- 'hb-vector-draw.cc',
3719- 'hb-vector-path.cc',
3720- 'hb-vector-paint.cc',
3721- 'hb-vector-paint-svg.cc',
3722- 'hb-vector-paint-pdf.cc',
3723- 'hb-vector-path.hh',
3724- 'hb-vector-buf.hh',
3725- 'hb-static.cc',
3726-)
3727-
3728-hb_vector_headers = [
3729- 'hb-vector.h',
3730-]
3731-
3732-libharfbuzz_raster_dep = null_dep
3733-if not get_option('raster').disabled()
3734- raster_deps = [m_dep]
3735- if png_dep.found()
3736- raster_deps += [png_dep]
3737- endif
3738-
3739- libharfbuzz_raster = library('harfbuzz-raster', hb_raster_sources,
3740- include_directories: incconfig,
3741- dependencies: raster_deps,
3742- link_with: [libharfbuzz],
3743- cpp_args: cpp_args + extra_hb_cpp_args,
3744- soversion: hb_so_version,
3745- version: version,
3746- install: true,
3747- darwin_versions: darwin_versions,
3748- link_language: chosen_linker,
3749- )
3750-
3751- install_headers(hb_raster_headers, subdir: meson.project_name())
3752-
3753- libharfbuzz_raster_dep = declare_dependency(
3754- link_with: libharfbuzz_raster,
3755- include_directories: incsrc,
3756- dependencies: [libharfbuzz_dep])
3757- meson.override_dependency('harfbuzz-raster', libharfbuzz_raster_dep)
3758-
3759- harfbuzz_raster_def = custom_target('harfbuzz-raster.def',
3760- command: gen_def_cmd,
3761- input: hb_raster_headers,
3762- output: 'harfbuzz-raster.def')
3763- defs_list += [harfbuzz_raster_def]
3764-
3765- pkgmod.generate(libharfbuzz_raster,
3766- description: 'HarfBuzz CPU rasterizer',
3767- requires: ['harfbuzz = @0@'.format(meson.project_version())],
3768- subdirs: [meson.project_name()],
3769- version: meson.project_version(),
3770- )
3771-endif
3772-
3773-libharfbuzz_vector_dep = null_dep
3774-if not get_option('vector').disabled()
3775- vector_deps = [m_dep]
3776- if zlib_dep.found()
3777- vector_deps += [zlib_dep]
3778- endif
3779-
3780- libharfbuzz_vector = library('harfbuzz-vector', hb_vector_sources,
3781- include_directories: incconfig,
3782- dependencies: vector_deps,
3783- link_with: [libharfbuzz],
3784- cpp_args: cpp_args + extra_hb_cpp_args,
3785- soversion: hb_so_version,
3786- version: version,
3787- install: true,
3788- darwin_versions: darwin_versions,
3789- link_language: chosen_linker,
3790- )
3791-
3792- install_headers(hb_vector_headers, subdir: meson.project_name())
3793-
3794- libharfbuzz_vector_dep = declare_dependency(
3795- link_with: libharfbuzz_vector,
3796- include_directories: incsrc,
3797- dependencies: [libharfbuzz_dep])
3798- meson.override_dependency('harfbuzz-vector', libharfbuzz_vector_dep)
3799-
3800- harfbuzz_vector_def = custom_target('harfbuzz-vector.def',
3801- command: gen_def_cmd,
3802- input: hb_vector_headers,
3803- output: 'harfbuzz-vector.def')
3804- defs_list += [harfbuzz_vector_def]
3805-
3806- pkgmod.generate(libharfbuzz_vector,
3807- description: 'HarfBuzz vector converter',
3808- requires: ['harfbuzz = @0@'.format(meson.project_version())],
3809- subdirs: [meson.project_name()],
3810- version: meson.project_version(),
3811- )
3812-endif
3813-
3814-hb_gpu_shader_sources = [
3815- [ 'hb-gpu-fragment.glsl', 'hb-gpu-fragment-glsl.hh' ],
3816- [ 'hb-gpu-vertex.glsl', 'hb-gpu-vertex-glsl.hh' ],
3817- [ 'hb-gpu-fragment.wgsl', 'hb-gpu-fragment-wgsl.hh' ],
3818- [ 'hb-gpu-vertex.wgsl', 'hb-gpu-vertex-wgsl.hh' ],
3819- [ 'hb-gpu-fragment.msl', 'hb-gpu-fragment-msl.hh' ],
3820- [ 'hb-gpu-vertex.msl', 'hb-gpu-vertex-msl.hh' ],
3821- [ 'hb-gpu-fragment.hlsl', 'hb-gpu-fragment-hlsl.hh' ],
3822- [ 'hb-gpu-vertex.hlsl', 'hb-gpu-vertex-hlsl.hh' ],
3823- [ 'hb-gpu-draw-fragment.glsl', 'hb-gpu-draw-fragment-glsl.hh' ],
3824- [ 'hb-gpu-draw-fragment.wgsl', 'hb-gpu-draw-fragment-wgsl.hh' ],
3825- [ 'hb-gpu-draw-fragment.msl', 'hb-gpu-draw-fragment-msl.hh' ],
3826- [ 'hb-gpu-draw-fragment.hlsl', 'hb-gpu-draw-fragment-hlsl.hh' ],
3827- [ 'hb-gpu-paint-fragment.glsl', 'hb-gpu-paint-fragment-glsl.hh' ],
3828- [ 'hb-gpu-paint-fragment.msl', 'hb-gpu-paint-fragment-msl.hh' ],
3829- [ 'hb-gpu-paint-fragment.wgsl', 'hb-gpu-paint-fragment-wgsl.hh' ],
3830- [ 'hb-gpu-paint-fragment.hlsl', 'hb-gpu-paint-fragment-hlsl.hh' ],
3831-]
3832-
3833-hb_gpu_shader_helper = find_program('gen-gpu-shader-artifacts.py')
3834-foreach p: hb_gpu_shader_sources
3835- custom_target('@0@'.format(p.get(1)),
3836- build_by_default: true,
3837- input: p.get(0),
3838- output: p.get(1),
3839- command: [ hb_gpu_shader_helper, '@OUTPUT@',
3840- meson.current_source_dir(), '@INPUT@' ])
3841-endforeach
3842-
3843-hb_gpu_sources = files(
3844- 'hb-gpu.cc',
3845- 'hb-gpu-draw.cc',
3846- 'hb-gpu-paint.cc',
3847- 'hb-static.cc',
3848-)
3849-
3850-hb_gpu_headers = [
3851- 'hb-gpu.h',
3852-]
3853-
3854-libharfbuzz_gpu_dep = null_dep
3855-if not get_option('gpu').disabled()
3856- gpu_deps = [m_dep]
3857-
3858- libharfbuzz_gpu = library('harfbuzz-gpu',
3859- hb_gpu_sources,
3860- include_directories: incconfig,
3861- dependencies: gpu_deps,
3862- link_with: [libharfbuzz],
3863- cpp_args: cpp_args + extra_hb_cpp_args,
3864- soversion: hb_so_version,
3865- version: version,
3866- install: true,
3867- darwin_versions: darwin_versions,
3868- link_language: chosen_linker,
3869- )
3870-
3871- install_headers(hb_gpu_headers, subdir: meson.project_name())
3872-
3873- libharfbuzz_gpu_dep = declare_dependency(
3874- link_with: libharfbuzz_gpu,
3875- include_directories: incsrc,
3876- dependencies: [libharfbuzz_dep])
3877- meson.override_dependency('harfbuzz-gpu', libharfbuzz_gpu_dep)
3878-
3879- harfbuzz_gpu_def = custom_target('harfbuzz-gpu.def',
3880- command: gen_def_cmd,
3881- input: hb_gpu_headers,
3882- output: 'harfbuzz-gpu.def')
3883- defs_list += [harfbuzz_gpu_def]
3884-
3885- pkgmod.generate(libharfbuzz_gpu,
3886- description: 'HarfBuzz GPU rasterization library',
3887- requires: ['harfbuzz = @0@'.format(meson.project_version())],
3888- subdirs: [meson.project_name()],
3889- version: meson.project_version(),
3890- )
3891-endif
3892-
3893-hb_cairo_sources = files(
3894- 'hb-cairo.cc',
3895- 'hb-cairo-utils.cc',
3896- 'hb-cairo-utils.hh',
3897- 'hb-static.cc'
3898-)
3899-
3900-hb_cairo_headers = [
3901- 'hb-cairo.h',
3902-]
3903-
3904-libharfbuzz_cairo_dep = null_dep
3905-if conf.get('HAVE_CAIRO', 0) == 1
3906-
3907- cairo_dep = dependency('cairo')
3908-
3909- libharfbuzz_cairo = library('harfbuzz-cairo', hb_cairo_sources,
3910- include_directories: incconfig,
3911- dependencies: [m_dep, cairo_dep],
3912- link_with: [libharfbuzz],
3913- cpp_args: cpp_args + extra_hb_cpp_args,
3914- soversion: hb_so_version,
3915- version: version,
3916- install: true,
3917- darwin_versions: darwin_versions,
3918- link_language: chosen_linker,
3919- )
3920-
3921- install_headers(hb_cairo_headers, subdir: meson.project_name())
3922-
3923- libharfbuzz_cairo_dep = declare_dependency(
3924- link_with: libharfbuzz_cairo,
3925- include_directories: incsrc,
3926- dependencies: [m_dep, cairo_dep])
3927- meson.override_dependency('harfbuzz-cairo', libharfbuzz_cairo_dep)
3928-
3929- harfbuzz_cairo_def = custom_target('harfbuzz-cairo.def',
3930- command: gen_def_cmd,
3931- input: hb_cairo_headers,
3932- output: 'harfbuzz-cairo.def')
3933- defs_list += [harfbuzz_cairo_def]
3934-
3935- pkgmod.generate(libharfbuzz_cairo,
3936- description: 'HarfBuzz cairo support',
3937- requires: ['harfbuzz = @0@'.format(meson.project_version())],
3938- subdirs: [meson.project_name()],
3939- version: meson.project_version(),
3940- )
3941-endif
3942-
3943-
3944-if get_option('tests').enabled()
3945- # TODO: Microsoft LINK gives the following because extern, non dllexport
3946- # symbols can only be used when linking against a static library
3947- # error LNK2019: unresolved external symbol "unsigned __int64 const * const _hb_NullPool"
3948- if not cpp_is_microsoft_compiler
3949- noinst_programs = {
3950- 'main': 'main.cc',
3951- 'test-basics': 'test.cc',
3952- 'test-buffer-serialize': 'test-buffer-serialize.cc',
3953- 'test-ot-meta': 'test-ot-meta.cc',
3954- 'test-ot-name': 'test-ot-name.cc',
3955- 'test-ot-glyphname': 'test-ot-glyphname.cc',
3956- 'test-ot-gpos-size-params': 'test-gpos-size-params.cc',
3957- 'test-ot-gsub-get-alternates': 'test-gsub-get-alternates.cc',
3958- 'test-ot-gsub-would-substitute': 'test-gsub-would-substitute.cc',
3959- 'test-use-table': 'test-use-table.cc',
3960- }
3961- foreach name, source : noinst_programs
3962- executable(name, source,
3963- include_directories: incconfig,
3964- dependencies: libharfbuzz_dep,
3965- install: false,
3966- )
3967- endforeach
3968- endif
3969-
3970- compiled_tests = {
3971- 'test-algs': ['test-algs.cc', 'hb-static.cc'],
3972- 'test-array': ['test-array.cc'],
3973- 'test-bimap': ['test-bimap.cc', 'hb-static.cc'],
3974- 'test-cff': ['test-cff.cc', 'hb-static.cc'],
3975- 'test-classdef-graph': ['graph/test-classdef-graph.cc', 'hb-static.cc', 'graph/gsubgpos-context.cc'],
3976- 'test-decycler': ['test-decycler.cc', 'hb-static.cc'],
3977- 'test-iter': ['test-iter.cc', 'hb-static.cc'],
3978- 'test-geometry': ['test-geometry.cc', 'hb-static.cc'],
3979- 'test-machinery': ['test-machinery.cc', 'hb-static.cc'],
3980- 'test-map': ['test-map.cc', 'hb-static.cc'],
3981- 'test-multimap': ['test-multimap.cc', 'hb-static.cc'],
3982- 'test-number': ['test-number.cc', 'hb-number.cc'],
3983- 'test-ot-tag': ['hb-ot-tag.cc'],
3984- 'test-set': ['test-set.cc', 'hb-static.cc'],
3985- 'test-serialize': ['test-serialize.cc', 'hb-static.cc'],
3986- 'test-vector': ['test-vector.cc', 'hb-static.cc'],
3987- 'test-repacker': ['test-repacker.cc', 'hb-static.cc', 'graph/gsubgpos-context.cc'],
3988- 'test-instancer-solver': ['test-subset-instancer-solver.cc', 'hb-subset-instancer-solver.cc', 'hb-static.cc'],
3989- 'test-priority-queue': ['test-priority-queue.cc', 'hb-static.cc'],
3990- 'test-tuple-varstore': ['test-tuple-varstore.cc', 'hb-subset-instancer-solver.cc', 'hb-subset-instancer-iup.cc', 'hb-static.cc'],
3991- 'test-item-varstore': ['test-item-varstore.cc', 'hb-subset-instancer-solver.cc', 'hb-subset-instancer-iup.cc', 'hb-static.cc'],
3992- 'test-unicode-ranges': ['test-unicode-ranges.cc'],
3993- }
3994- foreach name, source : compiled_tests
3995- if cpp_is_microsoft_compiler and source.contains('hb-static.cc')
3996- # TODO: Microsoft compilers cannot link tests using hb-static.cc, fix them
3997- continue
3998- endif
3999- test(name, executable(name, source,
4000- include_directories: incconfig,
4001- cpp_args: cpp_args + ['-DMAIN', '-UNDEBUG'],
4002- dependencies: libharfbuzz_dep,
4003- install: false,
4004- ), suite: ['src'])
4005- endforeach
4006-endif
4007-
4008-pkgmod.generate(libharfbuzz,
4009- description: 'HarfBuzz text shaping library',
4010- subdirs: [meson.project_name()],
4011- version: meson.project_version(),
4012-)
4013-
4014-if not get_option('subset').disabled()
4015- pkgmod.generate(libharfbuzz_subset,
4016- description: 'HarfBuzz font subsetter',
4017- requires: ['harfbuzz = @0@'.format(meson.project_version())],
4018- subdirs: [meson.project_name()],
4019- version: meson.project_version(),
4020- )
4021-endif
4022-
4023-libharfbuzz_icu_dep = null_dep
4024-if have_icu and not have_icu_builtin
4025- harfbuzz_icu_def = custom_target('harfbuzz-icu.def',
4026- command: gen_def_cmd,
4027- input: [hb_icu_headers],
4028- output: 'harfbuzz-icu.def')
4029- defs_list += [harfbuzz_icu_def]
4030-
4031- libharfbuzz_icu = library('harfbuzz-icu', [hb_icu_sources, hb_icu_headers],
4032- include_directories: incconfig,
4033- dependencies: icu_dep,
4034- link_with: [libharfbuzz],
4035- cpp_args: cpp_args + extra_hb_cpp_args,
4036- soversion: hb_so_version,
4037- version: version,
4038- install: true,
4039- darwin_versions: darwin_versions,
4040- # ICU links to stdc++ anyway so the default linker is good
4041- # link_language: chosen_linker,
4042- )
4043-
4044- libharfbuzz_icu_dep = declare_dependency(
4045- link_with: libharfbuzz_icu,
4046- include_directories: incsrc,
4047- dependencies: icu_dep)
4048- meson.override_dependency('harfbuzz-icu', libharfbuzz_icu_dep)
4049-
4050- pkgmod.generate(libharfbuzz_icu,
4051- description: 'HarfBuzz text shaping library ICU integration',
4052- requires: ['harfbuzz = @0@'.format(meson.project_version())],
4053- subdirs: [meson.project_name()],
4054- version: meson.project_version(),
4055- )
4056-
4057- install_headers(hb_icu_headers, subdir: meson.project_name())
4058-endif
4059-
4060-have_gobject = conf.get('HAVE_GOBJECT', 0) == 1
4061-
4062-# This code (especially PACKAGE_INIT) kept similar to what CMake's own
4063-# configure_package_config_file() generates, see
4064-# https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html#command:configure_package_config_file
4065-
4066-cmake_config = configuration_data()
4067-cmake_config_dir = cmake_package_install_dir / 'harfbuzz'
4068-
4069-if meson.version().version_compare('>=1.3.0')
4070- cmake_package_prefix_dir = fs.relative_to(get_option('prefix'), get_option('prefix') / cmake_config_dir)
4071-else
4072- relative_to = find_program('relative_to.py')
4073- cmake_package_prefix_dir = run_command(relative_to, get_option('prefix'), get_option('prefix') / cmake_config_dir, check: true).stdout().strip()
4074-endif
4075-
4076-cmake_package_prefix_dir = '${CMAKE_CURRENT_LIST_DIR}/@0@'.format(cmake_package_prefix_dir)
4077-
4078-# Make all the relevant paths relative to our prefix, so we can later append
4079-# them onto ${PACKAGE_PREFIX_DIR} to get the correct paths.
4080-
4081-cmake_install_includedir = get_option('includedir')
4082-
4083-if fs.is_absolute(cmake_install_includedir)
4084- if meson.version().version_compare('>=1.3.0')
4085- cmake_install_includedir = fs.relative_to(cmake_install_includedir, get_option('prefix'))
4086- else
4087- cmake_install_includedir = run_command(relative_to, cmake_install_includedir, get_option('prefix'), check: true).stdout().strip()
4088- endif
4089-endif
4090-
4091-cmake_install_libdir = get_option('libdir')
4092-
4093-if fs.is_absolute(cmake_install_libdir)
4094- if meson.version().version_compare('>=1.3.0')
4095- cmake_install_libdir = fs.relative_to(cmake_install_libdir, get_option('prefix'))
4096- else
4097- cmake_install_libdir = run_command(relative_to, cmake_install_libdir, get_option('prefix'), check: true).stdout().strip()
4098- endif
4099-endif
4100-
4101-cmake_config.set('PACKAGE_INIT', '''
4102-get_filename_component(PACKAGE_PREFIX_DIR "@0@" ABSOLUTE)
4103-
4104-macro(set_and_check _var _file)
4105- set(${_var} "${_file}")
4106- if(NOT EXISTS "${_file}")
4107- message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
4108- endif()
4109-endmacro()
4110-
4111-macro(check_required_components _NAME)
4112- foreach(comp ${${_NAME}_FIND_COMPONENTS})
4113- if(NOT ${_NAME}_${comp}_FOUND)
4114- if(${_NAME}_FIND_REQUIRED_${comp})
4115- set(${_NAME}_FOUND FALSE)
4116- endif()
4117- endif()
4118- endforeach()
4119-endmacro()
4120-'''.format(cmake_package_prefix_dir))
4121-
4122-cmake_config.set('PACKAGE_CMAKE_INSTALL_INCLUDEDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_includedir))
4123-cmake_config.set('PACKAGE_CMAKE_INSTALL_LIBDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_libdir))
4124-cmake_config.set('PACKAGE_INCLUDE_INSTALL_DIR', '${PACKAGE_PREFIX_DIR}/@0@/@1@'.format(cmake_install_includedir, meson.project_name()))
4125-cmake_config.set('HARFBUZZ_VERSION', meson.project_version())
4126-cmake_config.set('HB_HAVE_GOBJECT', have_gobject ? 'YES' : 'NO')
4127-cmake_config.set('HB_LIBRARY_TYPE', get_option('default_library') == 'static' ? 'STATIC' : 'SHARED')
4128-
4129-if get_option('default_library') == 'static'
4130- cmake_config.set('HB_LIB_PREFIX', '${CMAKE_STATIC_LIBRARY_PREFIX}')
4131- cmake_config.set('HB_LIB_SUFFIX', '${CMAKE_STATIC_LIBRARY_SUFFIX}')
4132-elif host_machine.system() == 'darwin'
4133- cmake_config.set('HB_LIB_PREFIX', '${CMAKE_SHARED_LIBRARY_PREFIX}')
4134- cmake_config.set('HB_LIB_SUFFIX', '.@0@${CMAKE_SHARED_LIBRARY_SUFFIX}'.format(hb_so_version))
4135-elif host_machine.system() == 'windows'
4136- cmake_config.set('HB_LIB_PREFIX', '${CMAKE_IMPORT_LIBRARY_PREFIX}')
4137- cmake_config.set('HB_LIB_SUFFIX', '${CMAKE_IMPORT_LIBRARY_SUFFIX}')
4138-else
4139- cmake_config.set('HB_LIB_PREFIX', '${CMAKE_SHARED_LIBRARY_PREFIX}')
4140- cmake_config.set('HB_LIB_SUFFIX', '${CMAKE_SHARED_LIBRARY_SUFFIX}.@0@'.format(version))
4141-endif
4142-
4143-configure_file(input: 'harfbuzz-config.cmake.in',
4144- output: 'harfbuzz-config.cmake',
4145- configuration: cmake_config,
4146- install_dir: cmake_config_dir,
4147-)
4148-
4149-gobject_enums_c = []
4150-gobject_enums_h = []
4151-libharfbuzz_gobject_dep = null_dep
4152-if have_gobject
4153- gnome = import('gnome')
4154-
4155- h_templ = configure_file(
4156- input: 'hb-gobject-enums.h.tmpl',
4157- output: 'hb-gobject-enums-tmp.h.tmpl',
4158- copy: true)
4159-
4160- cc_templ = configure_file(
4161- input: 'hb-gobject-enums.cc.tmpl',
4162- output: 'hb-gobject-enums-tmp.cc.tmpl',
4163- copy: true)
4164-
4165- enums = gnome.mkenums('hb-gobject',
4166- sources: hb_headers,
4167- h_template: h_templ,
4168- c_template: cc_templ,
4169- identifier_prefix: 'hb_',
4170- symbol_prefix: 'hb_gobject',
4171- )
4172-
4173- gobject_enums_c = custom_target('hb-gobject-enums.cc',
4174- input: enums[0],
4175- output: 'hb-gobject-enums.cc',
4176- command: [find_program('fix_get_types.py'), '@INPUT@', '@OUTPUT@']
4177- )
4178-
4179- gobject_enums_h = custom_target('hb-gobject-enums.h',
4180- input: enums[1],
4181- output: 'hb-gobject-enums.h',
4182- command: [find_program('fix_get_types.py'), '@INPUT@', '@OUTPUT@'],
4183- install: true,
4184- install_dir: get_option('prefix') / get_option('includedir') / meson.project_name(),
4185- )
4186-
4187- hb_gobject_sources += [gobject_enums_c]
4188-
4189- harfbuzz_gobject_def = custom_target('harfbuzz-gobject.def',
4190- command: gen_def_cmd,
4191- input: [hb_gobject_headers, gobject_enums_h],
4192- output: 'harfbuzz-gobject.def')
4193- defs_list += [harfbuzz_gobject_def]
4194-
4195- libharfbuzz_gobject = library('harfbuzz-gobject', [hb_gobject_sources, gobject_enums_c, gobject_enums_h],
4196- include_directories: incconfig,
4197- dependencies: [glib_dep, gobject_dep],
4198- link_with: [libharfbuzz],
4199- cpp_args: cpp_args + extra_hb_cpp_args,
4200- soversion: hb_so_version,
4201- version: version,
4202- install: true,
4203- darwin_versions: darwin_versions,
4204- link_language: chosen_linker,
4205- )
4206-
4207- gir = find_program('g-ir-scanner', required: get_option('introspection'))
4208- build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled())
4209-
4210- build_gir = build_gir and get_option('default_library') != 'static'
4211- if not build_gir and get_option('introspection').enabled()
4212- error('Introspection support is requested but the default library option should be shared or both')
4213- endif
4214-
4215- if build_gir
4216- conf.set('HAVE_INTROSPECTION', 1)
4217- hb_gen_files_gir = gnome.generate_gir([libharfbuzz_gobject, libharfbuzz],
4218- sources: [gir_headers, gir_sources, gobject_enums_h],
4219- dependencies: libharfbuzz_dep,
4220- namespace: 'HarfBuzz',
4221- nsversion: '0.0',
4222- identifier_prefix: 'hb_',
4223- symbol_prefix: ['hb', 'hb_gobject'],
4224- includes: ['GObject-2.0', 'freetype2-2.0'],
4225- export_packages: ['harfbuzz-gobject', 'harfbuzz'],
4226- header: 'hb-gobject.h',
4227- install: true,
4228- extra_args: ['--cflags-begin',
4229- '-DHB_NO_SINGLE_HEADER_ERROR',
4230- '-DHAVE_GOBJECT',
4231- '-DHB_EXTERN=',
4232- '--cflags-end'])
4233- endif
4234-
4235- libharfbuzz_gobject_dep = declare_dependency(
4236- link_with: libharfbuzz_gobject,
4237- include_directories: incsrc,
4238- sources: build_gir ? hb_gen_files_gir : hb_gobject_sources,
4239- dependencies: [glib_dep, gobject_dep])
4240- meson.override_dependency('harfbuzz-gobject', libharfbuzz_gobject_dep)
4241-
4242- pkgmod.generate(libharfbuzz_gobject,
4243- description: 'HarfBuzz text shaping library GObject integration',
4244- requires: ['harfbuzz = @0@'.format(meson.project_version()), 'glib-2.0', 'gobject-2.0'],
4245- subdirs: [meson.project_name()],
4246- version: meson.project_version(),
4247- )
4248-
4249- install_headers(hb_gobject_headers, subdir: meson.project_name())
4250-else
4251- if get_option('introspection').enabled()
4252- error('introspection requires gobject to be enabled')
4253- endif
4254-endif
4255-
4256-if get_option('tests').enabled()
4257- dist_check_script = [
4258- 'check-c-linkage-decls',
4259- 'check-externs',
4260- 'check-header-guards',
4261- 'check-includes',
4262- ]
4263-
4264- env = environment()
4265- HBSOURCES = []
4266- foreach f : hb_sources
4267- if meson.version().version_compare('>=1.4.0')
4268- f = f.full_path()
4269- endif
4270- HBSOURCES += '@0@'.format(f)
4271- endforeach
4272- env.set('HBSOURCES', ' '.join(HBSOURCES))
4273- HBHEADERS = []
4274- foreach f : hb_headers
4275- if meson.version().version_compare('>=1.4.0')
4276- f = f.full_path()
4277- endif
4278- HBHEADERS += '@0@'.format(f)
4279- endforeach
4280- env.set('HBHEADERS', ' '.join(HBHEADERS))
4281-
4282- if cpp.get_argument_syntax() != 'msvc' and not meson.is_cross_build() # ensure the local tools are usable
4283- dist_check_script += ['check-static-inits', 'check-symbols']
4284- if get_option('wasm').disabled() and not get_option('with_libstdcxx')
4285- dist_check_script += ['check-libstdc++']
4286- endif
4287- endif
4288-
4289- foreach name : dist_check_script
4290- test(name, find_program(name + '.py'),
4291- env: env,
4292- args: [
4293- meson.current_source_dir(),
4294- meson.project_source_root(),
4295- meson.current_build_dir(),
4296- ],
4297- depends: name == 'check-symbols' ? defs_list : [],
4298- suite: ['src'],
4299- )
4300- endforeach
4301-
4302- test('check-release-notes',
4303- find_program('check-release-notes.py'),
4304- args: [
4305- meson.current_source_dir() / '..' / 'NEWS',
4306- meson.project_version()
4307- ],
4308- )
4309-endif
4310-
4311-install_headers(hb_headers, subdir: meson.project_name())
4312-if not get_option('subset').disabled()
4313- install_headers(hb_subset_headers, subdir: meson.project_name())
4314-endif
4315-
4316-custom_target('harfbuzz-world.cc',
4317- build_by_default: true,
4318- output: 'harfbuzz-world.cc',
4319- input: ['harfbuzz-world.cc.in'],
4320- command: [find_program('gen-harfbuzz-world.py'),
4321- '@OUTPUT@', meson.current_source_dir(), '@INPUT@',
4322- '--BASE_SOURCES'] + hb_base_sources +
4323- ['--FREETYPE_SOURCES'] + hb_ft_sources +
4324- ['--GLIB_SOURCES'] + hb_glib_sources +
4325- ['--GRAPHITE_SOURCES'] + hb_graphite2_sources +
4326- ['--UNISCRIBE_SOURCES'] + hb_uniscribe_sources +
4327- ['--GDI_SOURCES'] + hb_gdi_sources +
4328- ['--DIRECTWRITE_SOURCES'] + hb_directwrite_sources +
4329- ['--CORETEXT_SOURCES'] + hb_coretext_sources +
4330- ['--WASM_SOURCES'] + hb_wasm_sources +
4331- ['--SUBSET_SOURCES'] + hb_subset_sources +
4332- ['--ICU_SOURCES'] + hb_icu_sources +
4333- ['--CAIRO_SOURCES'] + hb_cairo_sources +
4334- ['--RASTER_SOURCES'] + hb_raster_sources +
4335- ['--VECTOR_SOURCES'] + hb_vector_sources +
4336- ['--GPU_SOURCES'] + hb_gpu_sources,
4337-)
4338diff --git a/src/relative_to.py b/src/relative_to.py
4339deleted file mode 100755
4340index b660d2793..000000000
4341--- a/src/relative_to.py
4342+++ /dev/null
4343@@ -1,6 +0,0 @@
4344-#!/usr/bin/env python3
4345-
4346-import sys
4347-from os import path
4348-
4349-print(path.relpath(sys.argv[1], sys.argv[2]))
4350diff --git a/src/rust/meson.build b/src/rust/meson.build
4351deleted file mode 100644
4352index ace3e4164..000000000
4353--- a/src/rust/meson.build
4354+++ /dev/null
4355@@ -1,130 +0,0 @@
4356-rust = import('unstable-rust')
4357-
4358-hb_rs = rust.bindgen(
4359- input : '../hb.h',
4360- output : 'hb.rs',
4361- include_directories: incsrc,
4362- args : ['--allowlist-function=hb_.*',
4363- '--allowlist-type=hb_.*',
4364- '--no-copy=hb_.*',
4365- ],
4366-)
4367-
4368-cargo = find_program('cargo')
4369-rustfmt = find_program('rustfmt')
4370-
4371-rust_flags = ''
4372-cargo_args = [
4373- '--package', 'harfbuzz_rust',
4374- '--lib',
4375- '--target-dir', meson.current_build_dir(),
4376- '--manifest-path', meson.current_source_dir() / 'Cargo.toml',
4377-]
4378-
4379-features = []
4380-if conf.get('HAVE_FONTATIONS', 0) == 1
4381- features += ['font']
4382-endif
4383-if conf.get('HAVE_HARFRUST', 0) == 1
4384- features += ['shape']
4385-endif
4386-if features.length() > 0
4387- cargo_args += ['--features', ','.join(features)]
4388-endif
4389-
4390-buildtype = get_option('buildtype')
4391-if buildtype == 'release' or buildtype == 'debugoptimized'
4392- cargo_args += [
4393- '-Z', 'build-std=std,panic_abort',
4394- '-Z', 'build-std-features=optimize_for_size',
4395- ]
4396- cargo_args += ['--profile', buildtype]
4397-endif
4398-
4399-opt_level = get_option('optimization')
4400-rust_flags += ' -C force-frame-pointers=yes -C force-unwind-tables=no -C opt-level=' + opt_level
4401-
4402-sources = [
4403- 'lib.rs',
4404- 'font.rs',
4405- 'shape.rs',
4406-]
4407-
4408-harfbuzz_rust = custom_target(
4409- 'harfbuzz_rust',
4410- input: sources + ['Cargo.toml'],
4411- output: ['libharfbuzz_rust.a'],
4412- depends: [hb_rs],
4413- env: ['OUT_DIR=' + meson.current_build_dir(),
4414- 'RUSTFLAGS=' + rust_flags,
4415- ],
4416- command: [
4417- cargo, 'build',
4418- ] + cargo_args + [
4419- '-Z', 'unstable-options',
4420- '--artifact-dir', meson.current_build_dir(),
4421- ],
4422- install: true,
4423- install_dir: join_paths(get_option('prefix'), 'lib'),
4424-)
4425-
4426-harfbuzz_rust_dep = declare_dependency(
4427- link_with: harfbuzz_rust,
4428-)
4429-
4430-clippy_fix = run_target(
4431- 'clippy-fix',
4432- env: ['OUT_DIR=' + meson.current_build_dir()],
4433- depends: [hb_rs, harfbuzz_rust],
4434- command: [
4435- cargo, 'clippy',
4436- ] + cargo_args + [
4437- '--allow-dirty', '--fix',
4438- ],
4439-)
4440-if get_option('tests').enabled() and cargo.found()
4441- test(
4442- 'clippy',
4443- cargo,
4444- env: ['OUT_DIR=' + meson.current_build_dir()],
4445- depends: [hb_rs, harfbuzz_rust],
4446- args: [
4447- 'clippy',
4448- ] + cargo_args + [
4449- '--', '-D', 'warnings',
4450- ],
4451- timeout: 300,
4452- )
4453-endif
4454-
4455-# Convert source files in their src dir by transforming the `sources` list.
4456-sources_in_source_dir = []
4457-foreach s : sources
4458- sources_in_source_dir += meson.current_source_dir() / s
4459-endforeach
4460-
4461-rustfmt_fix = run_target(
4462- 'rustfmt-fix',
4463- env: ['OUT_DIR=' + meson.current_build_dir()],
4464- depends: [hb_rs],
4465- command: [
4466- rustfmt,
4467- '--edition', '2021',
4468- '--',
4469- sources_in_source_dir,
4470- ],
4471-)
4472-if get_option('tests').enabled() and rustfmt.found()
4473- test(
4474- 'rustfmt',
4475- rustfmt,
4476- env: ['OUT_DIR=' + meson.current_build_dir()],
4477- depends: [hb_rs],
4478- args: [
4479- '--check',
4480- '--edition', '2021',
4481- '--',
4482- sources_in_source_dir,
4483- ],
4484- )
4485-endif
4486diff --git a/subprojects/.gitignore b/subprojects/.gitignore
4487deleted file mode 100644
4488index 60df53729..000000000
4489--- a/subprojects/.gitignore
4490+++ /dev/null
4491@@ -1,12 +0,0 @@
4492-/.wraplock
4493-/freetype-*
4494-/icu
4495-/libpng-*
4496-/zlib-*
4497-/glib
4498-/packagecache
4499-/benchmark-*
4500-/cairo
4501-/ragel-6.10
4502-/kbts
4503-/graphite2-*
4504diff --git a/subprojects/cairo.wrap b/subprojects/cairo.wrap
4505deleted file mode 100644
4506index 728cc5d29..000000000
4507--- a/subprojects/cairo.wrap
4508+++ /dev/null
4509@@ -1,10 +0,0 @@
4510-[wrap-file]
4511-directory = cairo-1.18.4
4512-source_url = https://www.cairographics.org/releases/cairo-1.18.4.tar.xz
4513-source_filename = cairo-1.18.4.tar.xz
4514-source_hash = 445ed8208a6e4823de1226a74ca319d3600e83f6369f99b14265006599c32ccb
4515-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/cairo_1.18.4-2/cairo-1.18.4.tar.xz
4516-wrapdb_version = 1.18.4-2
4517-
4518-[provide]
4519-dependency_names = cairo, cairo-gobject, cairo-script-interpreter
4520diff --git a/subprojects/freetype2.wrap b/subprojects/freetype2.wrap
4521deleted file mode 100644
4522index 7b577bef2..000000000
4523--- a/subprojects/freetype2.wrap
4524+++ /dev/null
4525@@ -1,10 +0,0 @@
4526-[wrap-file]
4527-directory = freetype-2.14.2
4528-source_url = https://download.savannah.gnu.org/releases/freetype/freetype-2.14.2.tar.xz
4529-source_fallback_url = https://wrapdb.mesonbuild.com/v2/freetype2_2.14.2-1/get_source/freetype-2.14.2.tar.xz
4530-source_filename = freetype-2.14.2.tar.xz
4531-source_hash = 4b62dcab4c920a1a860369933221814362e699e26f55792516d671e6ff55b5e1
4532-wrapdb_version = 2.14.2-1
4533-
4534-[provide]
4535-dependency_names = freetype2
4536diff --git a/subprojects/glew.wrap b/subprojects/glew.wrap
4537deleted file mode 100644
4538index 390dc9a33..000000000
4539--- a/subprojects/glew.wrap
4540+++ /dev/null
4541@@ -1,12 +0,0 @@
4542-[wrap-file]
4543-directory = glew-2.2.0
4544-source_url = http://downloads.sourceforge.net/glew/glew-2.2.0.tgz
4545-source_filename = glew-2.2.0.tgz
4546-source_hash = d4fc82893cfb00109578d0a1a2337fb8ca335b3ceccf97b97e5cc7f08e4353e1
4547-patch_filename = glew_2.2.0-2_patch.zip
4548-patch_url = https://wrapdb.mesonbuild.com/v2/glew_2.2.0-2/get_patch
4549-patch_hash = df7bc80456da53f83e93e89ca5035d04cdff19a836c956887a684b2bee16eb9b
4550-wrapdb_version = 2.2.0-2
4551-
4552-[provide]
4553-glew = glew_dep
4554diff --git a/subprojects/glfw.wrap b/subprojects/glfw.wrap
4555deleted file mode 100644
4556index a40891274..000000000
4557--- a/subprojects/glfw.wrap
4558+++ /dev/null
4559@@ -1,13 +0,0 @@
4560-[wrap-file]
4561-directory = glfw-3.4
4562-source_url = https://github.com/glfw/glfw/archive/refs/tags/3.4.tar.gz
4563-source_filename = glfw-3.4.tar.gz
4564-source_hash = c038d34200234d071fae9345bc455e4a8f2f544ab60150765d7704e08f3dac01
4565-patch_filename = glfw_3.4-1_patch.zip
4566-patch_url = https://wrapdb.mesonbuild.com/v2/glfw_3.4-1/get_patch
4567-patch_hash = 58a6a6cdb28195d7f7e6f5de85dff7044d378e49b46bf1d4a9b04c97ed93e6b0
4568-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glfw_3.4-1/glfw-3.4.tar.gz
4569-wrapdb_version = 3.4-1
4570-
4571-[provide]
4572-glfw3 = glfw_dep
4573diff --git a/subprojects/glib.wrap b/subprojects/glib.wrap
4574deleted file mode 100644
4575index f448d7aa7..000000000
4576--- a/subprojects/glib.wrap
4577+++ /dev/null
4578@@ -1,11 +0,0 @@
4579-[wrap-file]
4580-directory = glib-2.86.4
4581-source_url = https://download.gnome.org/sources/glib/2.86/glib-2.86.4.tar.xz
4582-source_fallback_url = https://wrapdb.mesonbuild.com/v2/glib_2.86.4-1/get_source/glib-2.86.4.tar.xz
4583-source_filename = glib-2.86.4.tar.xz
4584-source_hash = d4e2b5d791d5015ffd8c6971ad8e975a0a55c1a14926cdb25cf843ff00682260
4585-wrapdb_version = 2.86.4-1
4586-
4587-[provide]
4588-dependency_names = gthread-2.0, gobject-2.0, gmodule-no-export-2.0, gmodule-export-2.0, gmodule-2.0, glib-2.0, gio-2.0, gio-windows-2.0, gio-unix-2.0
4589-program_names = glib-genmarshal, glib-mkenums, glib-compile-schemas, glib-compile-resources, gio-querymodules, gdbus-codegen
4590diff --git a/subprojects/google-benchmark.wrap b/subprojects/google-benchmark.wrap
4591deleted file mode 100644
4592index 7e2e6e733..000000000
4593--- a/subprojects/google-benchmark.wrap
4594+++ /dev/null
4595@@ -1,13 +0,0 @@
4596-[wrap-file]
4597-directory = benchmark-1.8.4
4598-source_url = https://github.com/google/benchmark/archive/refs/tags/v1.8.4.tar.gz
4599-source_filename = benchmark-1.8.4.tar.gz
4600-source_hash = 3e7059b6b11fb1bbe28e33e02519398ca94c1818874ebed18e504dc6f709be45
4601-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/google-benchmark_1.8.4-5/benchmark-1.8.4.tar.gz
4602-patch_filename = google-benchmark_1.8.4-5_patch.zip
4603-patch_url = https://wrapdb.mesonbuild.com/v2/google-benchmark_1.8.4-5/get_patch
4604-patch_hash = 671ffed65f1e95e8c20edb7a06eb54476797e58169160b255f52dc71f4b83957
4605-wrapdb_version = 1.8.4-5
4606-
4607-[provide]
4608-dependency_names = benchmark, benchmark_main
4609diff --git a/subprojects/graphite2.wrap b/subprojects/graphite2.wrap
4610deleted file mode 100644
4611index f4ab19bd7..000000000
4612--- a/subprojects/graphite2.wrap
4613+++ /dev/null
4614@@ -1,12 +0,0 @@
4615-[wrap-file]
4616-directory = graphite2-1.3.14
4617-source_url = https://github.com/silnrsi/graphite/releases/download/1.3.14/graphite2-1.3.14.tgz
4618-source_filename = graphite2-1.3.14.tgz
4619-source_hash = f99d1c13aa5fa296898a181dff9b82fb25f6cc0933dbaa7a475d8109bd54209d
4620-patch_filename = graphite2_1.3.14-1_patch.zip
4621-patch_url = https://wrapdb.mesonbuild.com/v2/graphite2_1.3.14-1/get_patch
4622-patch_hash = 7d5d88ff677990cb0c7bc170f0454ec67315b142ab89cf8a679ca95fe7e47e6d
4623-
4624-[provide]
4625-graphite2 = graphite2_dep
4626-
4627diff --git a/subprojects/icu.wrap b/subprojects/icu.wrap
4628deleted file mode 100644
4629index f6c196f6e..000000000
4630--- a/subprojects/icu.wrap
4631+++ /dev/null
4632@@ -1,15 +0,0 @@
4633-[wrap-file]
4634-directory = icu
4635-source_url = https://github.com/unicode-org/icu/releases/download/release-78.2/icu4c-78.2-sources.tgz
4636-source_filename = icu4c-78.2-sources.tgz
4637-source_hash = 3e99687b5c435d4b209630e2d2ebb79906c984685e78635078b672e03c89df35
4638-source_fallback_url = https://wrapdb.mesonbuild.com/v2/icu_78.2-1/get_source/icu4c-78.2-sources.tgz
4639-patch_filename = icu_78.2-1_patch.zip
4640-patch_url = https://wrapdb.mesonbuild.com/v2/icu_78.2-1/get_patch
4641-patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/icu_78.2-1/icu_78.2-1_patch.zip
4642-patch_hash = a21033c878bf6f09a11888038add7cc070ed6d7e146fc6b4061b547722fc7925
4643-wrapdb_version = 78.2-1
4644-
4645-[provide]
4646-dependency_names = icu-data, icu-i18n, icu-io, icu-uc
4647-program_names = genbrk, genccode, gencmn
4648diff --git a/subprojects/kbts.wrap b/subprojects/kbts.wrap
4649deleted file mode 100644
4650index 356a4756c..000000000
4651--- a/subprojects/kbts.wrap
4652+++ /dev/null
4653@@ -1,5 +0,0 @@
4654-[wrap-git]
4655-url = https://github.com/JimmyLefevre/kb.git
4656-revision = ca6c9624dd7c6b774e6cec9901f3d8d998d6f62a
4657-depth = 1
4658-patch_directory = kbts
4659\ No newline at end of file
4660diff --git a/subprojects/libffi.wrap b/subprojects/libffi.wrap
4661deleted file mode 100644
4662index 18baccc72..000000000
4663--- a/subprojects/libffi.wrap
4664+++ /dev/null
4665@@ -1,13 +0,0 @@
4666-[wrap-file]
4667-directory = libffi-3.5.2
4668-source_url = https://github.com/libffi/libffi/releases/download/v3.5.2/libffi-3.5.2.tar.gz
4669-source_filename = libffi-3.5.2.tar.gz
4670-source_hash = f3a3082a23b37c293a4fcd1053147b371f2ff91fa7ea1b2a52e335676bac82dc
4671-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/libffi_3.5.2-2/libffi-3.5.2.tar.gz
4672-patch_filename = libffi_3.5.2-2_patch.zip
4673-patch_url = https://wrapdb.mesonbuild.com/v2/libffi_3.5.2-2/get_patch
4674-patch_hash = 74ed624f74cd860be3bdf6d473b70ab88707bdf2f940191fbcb577e2a49a9710
4675-wrapdb_version = 3.5.2-2
4676-
4677-[provide]
4678-dependency_names = libffi
4679diff --git a/subprojects/libpng.wrap b/subprojects/libpng.wrap
4680deleted file mode 100644
4681index 7bc11fc0f..000000000
4682--- a/subprojects/libpng.wrap
4683+++ /dev/null
4684@@ -1,14 +0,0 @@
4685-[wrap-file]
4686-directory = libpng-1.6.55
4687-source_url = https://github.com/pnggroup/libpng/archive/v1.6.55.tar.gz
4688-source_filename = libpng-1.6.55.tar.gz
4689-source_hash = 71a2c5b1218f60c4c6d2f1954c7eb20132156cae90bdb90b566c24db002782a6
4690-source_fallback_url = https://wrapdb.mesonbuild.com/v2/libpng_1.6.55-1/get_source/libpng-1.6.55.tar.gz
4691-patch_filename = libpng_1.6.55-1_patch.zip
4692-patch_url = https://wrapdb.mesonbuild.com/v2/libpng_1.6.55-1/get_patch
4693-patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/libpng_1.6.55-1/libpng_1.6.55-1_patch.zip
4694-patch_hash = d5754df441e93e2e2f1dc176cc86f45ec0ef2914e9c77c1e8013c68b106d0ff5
4695-wrapdb_version = 1.6.55-1
4696-
4697-[provide]
4698-dependency_names = libpng
4699diff --git a/subprojects/packagefiles/kbts/meson.build b/subprojects/packagefiles/kbts/meson.build
4700deleted file mode 100644
4701index 1d785523d..000000000
4702--- a/subprojects/packagefiles/kbts/meson.build
4703+++ /dev/null
4704@@ -1,3 +0,0 @@
4705-project('kbts', 'c')
4706-
4707-kbts_dep = declare_dependency(include_directories : include_directories('.'))
4708\ No newline at end of file
4709diff --git a/subprojects/packagefiles/ragel/meson.build b/subprojects/packagefiles/ragel/meson.build
4710deleted file mode 100644
4711index c41ef0a22..000000000
4712--- a/subprojects/packagefiles/ragel/meson.build
4713+++ /dev/null
4714@@ -1,66 +0,0 @@
4715-project('ragel', 'c', 'cpp',
4716- version : '6.10',
4717- default_options: [
4718- 'cpp_eh=default',
4719- ],
4720-)
4721-
4722-cpp = meson.get_compiler('cpp')
4723-add_project_arguments(cpp.get_supported_arguments([
4724- '-fexceptions',
4725-]), language: 'cpp')
4726-
4727-conf = configuration_data()
4728-conf.set_quoted('PACKAGE', meson.project_name())
4729-conf.set_quoted('VERSION', meson.project_version())
4730-configure_file(
4731- output : 'config.h',
4732- configuration : conf
4733-)
4734-
4735-ragel_sources = files(
4736- 'ragel/buffer.h', 'ragel/cdcodegen.cpp', 'ragel/cdcodegen.h',
4737- 'ragel/cdfflat.cpp', 'ragel/cdfflat.h', 'ragel/cdfgoto.cpp',
4738- 'ragel/cdfgoto.h', 'ragel/cdflat.cpp', 'ragel/cdflat.h',
4739- 'ragel/cdftable.cpp', 'ragel/cdftable.h', 'ragel/cdgoto.cpp',
4740- 'ragel/cdgoto.h', 'ragel/cdipgoto.cpp', 'ragel/cdipgoto.h',
4741- 'ragel/cdsplit.cpp', 'ragel/cdsplit.h', 'ragel/cdtable.cpp',
4742- 'ragel/cdtable.h', 'ragel/common.cpp', 'ragel/common.h',
4743- 'ragel/cscodegen.cpp', 'ragel/cscodegen.h', 'ragel/csfflat.cpp',
4744- 'ragel/csfflat.h', 'ragel/csfgoto.cpp', 'ragel/csfgoto.h',
4745- 'ragel/csflat.cpp', 'ragel/csflat.h', 'ragel/csftable.cpp',
4746- 'ragel/csftable.h', 'ragel/csgoto.cpp', 'ragel/csgoto.h',
4747- 'ragel/csipgoto.cpp', 'ragel/csipgoto.h', 'ragel/cssplit.cpp',
4748- 'ragel/cssplit.h', 'ragel/cstable.cpp', 'ragel/cstable.h',
4749- 'ragel/dotcodegen.cpp', 'ragel/dotcodegen.h', 'ragel/fsmap.cpp',
4750- 'ragel/fsmattach.cpp', 'ragel/fsmbase.cpp', 'ragel/fsmgraph.cpp',
4751- 'ragel/fsmgraph.h', 'ragel/fsmmin.cpp', 'ragel/fsmstate.cpp',
4752- 'ragel/gendata.cpp', 'ragel/gendata.h', 'ragel/gocodegen.cpp',
4753- 'ragel/gocodegen.h', 'ragel/gofflat.cpp', 'ragel/gofflat.h',
4754- 'ragel/gofgoto.cpp', 'ragel/gofgoto.h', 'ragel/goflat.cpp', 'ragel/goflat.h',
4755- 'ragel/goftable.cpp', 'ragel/goftable.h', 'ragel/gogoto.cpp',
4756- 'ragel/gogoto.h', 'ragel/goipgoto.cpp', 'ragel/goipgoto.h',
4757- 'ragel/gotable.cpp', 'ragel/gotable.h', 'ragel/gotablish.cpp',
4758- 'ragel/gotablish.h', 'ragel/inputdata.cpp', 'ragel/inputdata.h',
4759- 'ragel/javacodegen.cpp', 'ragel/javacodegen.h', 'ragel/main.cpp',
4760- 'ragel/mlcodegen.cpp', 'ragel/mlcodegen.h', 'ragel/mlfflat.cpp',
4761- 'ragel/mlfflat.h', 'ragel/mlfgoto.cpp', 'ragel/mlfgoto.h',
4762- 'ragel/mlflat.cpp', 'ragel/mlflat.h', 'ragel/mlftable.cpp',
4763- 'ragel/mlftable.h', 'ragel/mlgoto.cpp', 'ragel/mlgoto.h',
4764- 'ragel/mltable.cpp', 'ragel/mltable.h', 'ragel/parsedata.cpp',
4765- 'ragel/parsedata.h', 'ragel/parsetree.cpp', 'ragel/parsetree.h',
4766- 'ragel/pcheck.h', 'ragel/ragel.h', 'ragel/rbxgoto.cpp', 'ragel/rbxgoto.h',
4767- 'ragel/redfsm.cpp', 'ragel/redfsm.h', 'ragel/rlparse.cpp', 'ragel/rlparse.h',
4768- 'ragel/rlscan.cpp', 'ragel/rlscan.h', 'ragel/rubycodegen.cpp',
4769- 'ragel/rubycodegen.h', 'ragel/rubyfflat.cpp', 'ragel/rubyfflat.h',
4770- 'ragel/rubyflat.cpp', 'ragel/rubyflat.h', 'ragel/rubyftable.cpp',
4771- 'ragel/rubyftable.h', 'ragel/rubytable.cpp', 'ragel/rubytable.h',
4772- 'ragel/version.h', 'ragel/xmlcodegen.cpp', 'ragel/xmlcodegen.h',
4773-)
4774-
4775-ragel = executable(
4776- meson.project_name(),
4777- ragel_sources,
4778- include_directories : ['aapl', 'ragel'],
4779- native : true,
4780-)
4781diff --git a/subprojects/ragel.wrap b/subprojects/ragel.wrap
4782deleted file mode 100644
4783index 1dabcbc13..000000000
4784--- a/subprojects/ragel.wrap
4785+++ /dev/null
4786@@ -1,11 +0,0 @@
4787-[wrap-file]
4788-directory = ragel-6.10
4789-source_url = https://www.colm.net/files/ragel/ragel-6.10.tar.gz
4790-source_filename = ragel-6.10.tar.gz
4791-source_hash = 5f156edb65d20b856d638dd9ee2dfb43285914d9aa2b6ec779dac0270cd56c3f
4792-patch_directory = ragel
4793-
4794-[provide]
4795-ragel = ragel
4796-
4797-
4798diff --git a/subprojects/zlib.wrap b/subprojects/zlib.wrap
4799deleted file mode 100644
4800index 0626401ac..000000000
4801--- a/subprojects/zlib.wrap
4802+++ /dev/null
4803@@ -1,14 +0,0 @@
4804-[wrap-file]
4805-directory = zlib-1.3.2
4806-source_url = https://zlib.net/zlib-1.3.2.tar.xz
4807-source_fallback_url = https://wrapdb.mesonbuild.com/v2/zlib_1.3.2-1/get_source/zlib-1.3.2.tar.xz
4808-source_filename = zlib-1.3.2.tar.xz
4809-source_hash = d7a0654783a4da529d1bb793b7ad9c3318020af77667bcae35f95d0e42a792f3
4810-patch_filename = zlib_1.3.2-1_patch.zip
4811-patch_url = https://wrapdb.mesonbuild.com/v2/zlib_1.3.2-1/get_patch
4812-patch_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/zlib_1.3.2-1/zlib_1.3.2-1_patch.zip
4813-patch_hash = 5ae7a2e92f823df118cfb8c1b23d94e3117864392b3446581d669049b2fba6dd
4814-wrapdb_version = 1.3.2-1
4815-
4816-[provide]
4817-dependency_names = zlib
4818diff --git a/test/api/meson.build b/test/api/meson.build
4819deleted file mode 100644
4820index 51d0a016b..000000000
4821--- a/test/api/meson.build
4822+++ /dev/null
4823@@ -1,174 +0,0 @@
4824-if conf.get('HAVE_GLIB', 0) == 0
4825- message('You need to have glib support enabled to run test/api tests')
4826- subdir_done()
4827-endif
4828-
4829-tests = [
4830- 'test-aat-layout.c',
4831- 'test-baseline.c',
4832- 'test-base-minmax.c',
4833- 'test-be-glyph-advance.c',
4834- 'test-be-num-glyphs.c',
4835- 'test-blob.c',
4836- 'test-buffer.c',
4837- 'test-c.c',
4838- 'test-collect-unicodes.c',
4839- 'test-cplusplus.cc',
4840- 'test-common.c',
4841- 'test-draw.c',
4842- 'test-draw-varc.c',
4843- 'test-extents.c',
4844- 'test-face.c',
4845- 'test-font.c',
4846- 'test-font-scale.c',
4847- 'test-get-table-tags.c',
4848- 'test-glyph-names.c',
4849- 'test-instance-cff2.c',
4850- 'test-map.c',
4851- 'test-object.c',
4852- 'test-ot-alternates.c',
4853- 'test-ot-collect-glyphs.c',
4854- 'test-ot-color.c',
4855- 'test-ot-face.c',
4856- 'test-ot-glyphname.c',
4857- 'test-ot-layout.c',
4858- 'test-ot-ligature-carets.c',
4859- 'test-ot-name.c',
4860- 'test-ot-math.c',
4861- 'test-ot-meta.c',
4862- 'test-ot-metrics.c',
4863- 'test-ot-tag.c',
4864- 'test-ot-extents-cff.c',
4865- 'test-ot-metrics-tt-var.c',
4866- 'test-paint.c',
4867- 'test-subset-repacker.c',
4868- 'test-set.c',
4869- 'test-shape.c',
4870- 'test-shape-plan.c',
4871- 'test-style.c',
4872- 'test-subset.c',
4873- 'test-subset-cmap.c',
4874- 'test-subset-drop-tables.c',
4875- 'test-subset-glyf.c',
4876- 'test-subset-hdmx.c',
4877- 'test-subset-hmtx.c',
4878- 'test-subset-nameids.c',
4879- 'test-subset-os2.c',
4880- 'test-subset-post.c',
4881- 'test-subset-vmtx.c',
4882- 'test-subset-cff1.c',
4883- 'test-subset-cff2.c',
4884- 'test-subset-gvar.c',
4885- 'test-subset-hvar.c',
4886- 'test-subset-vvar.c',
4887- 'test-subset-sbix.c',
4888- 'test-subset-gpos.c',
4889- 'test-subset-colr.c',
4890- 'test-subset-cbdt.c',
4891- 'test-unicode.c',
4892- 'test-var-coords.c',
4893- 'test-version.c',
4894-]
4895-
4896-if conf.get('HAVE_FREETYPE', 0) == 1
4897- tests += [
4898- 'test-ft.c',
4899- ]
4900-endif
4901-
4902-if conf.get('HAVE_CORETEXT', 0) == 1
4903- tests += [
4904- 'test-coretext.c',
4905- ]
4906-endif
4907-
4908-if conf.get('HAVE_DIRECTWRITE', 0) == 1
4909- tests += [
4910- 'test-directwrite.cc',
4911- ]
4912-endif
4913-
4914-if conf.get('HAVE_PTHREAD', 0) == 1
4915- tests += 'test-multithread.c'
4916-endif
4917-
4918-# Default test running environment
4919-env = environment()
4920-env.set('MALLOC_CHECK_', '1')
4921-env.set('G_DEBUG', 'gc-friendly')
4922-env.set('G_TEST_SRCDIR', meson.current_source_dir())
4923-env.set('G_TEST_BUILDDIR', meson.current_build_dir())
4924-
4925-foreach source : tests
4926- cpp_args = []
4927- test_name = source.split('.')[0]
4928-
4929- deps = [libharfbuzz_dep,
4930- libharfbuzz_cairo_dep,
4931- libharfbuzz_icu_dep]
4932- suite = ['api']
4933- if test_name.contains('-subset') or test_name.contains('-instance')
4934- if get_option('subset').disabled()
4935- continue
4936- endif
4937- deps += libharfbuzz_subset_dep
4938- suite += 'subset'
4939- endif
4940-
4941- if test_name.contains('-instance')
4942- cpp_args += '-DHB_EXPERIMENTAL_API'
4943- endif
4944-
4945- test(test_name, executable(test_name, source,
4946- cpp_args: cpp_args,
4947- include_directories: [incconfig],
4948- dependencies: deps,
4949- install: false,
4950- ),
4951- protocol: 'tap',
4952- env: env,
4953- suite: suite)
4954-endforeach
4955-
4956-if get_option('harfrust').enabled()
4957- harfrust_shape_env = environment()
4958- harfrust_shape_env.set('MALLOC_CHECK_', '1')
4959- harfrust_shape_env.set('G_DEBUG', 'gc-friendly')
4960- harfrust_shape_env.set('G_TEST_SRCDIR', meson.current_source_dir())
4961- harfrust_shape_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
4962- harfrust_shape_env.set('HB_SHAPER_LIST', 'harfrust')
4963-
4964- test('test-shape-harfrust',
4965- executable('test-shape-harfrust', 'test-shape.c',
4966- include_directories: [incconfig],
4967- dependencies: [libharfbuzz_dep, libharfbuzz_cairo_dep, libharfbuzz_icu_dep],
4968- install: false,
4969- ),
4970- protocol: 'tap',
4971- env: harfrust_shape_env,
4972- suite: ['api', 'harfrust'])
4973-endif
4974-
4975-if not get_option('raster').disabled()
4976- test('test-raster',
4977- executable('test-raster', 'test-raster.cc',
4978- include_directories: [incconfig],
4979- dependencies: [libharfbuzz_raster_dep],
4980- install: false,
4981- ),
4982- protocol: 'tap',
4983- env: env,
4984- suite: ['api', 'raster'])
4985-endif
4986-
4987-if not get_option('gpu').disabled()
4988- test('test-gpu',
4989- executable('test-gpu', 'test-gpu.cc',
4990- include_directories: [incconfig],
4991- dependencies: [libharfbuzz_gpu_dep],
4992- install: false,
4993- ),
4994- protocol: 'tap',
4995- env: env,
4996- suite: ['api', 'gpu'])
4997-endif
4998diff --git a/test/fuzzing/meson.build b/test/fuzzing/meson.build
4999deleted file mode 100644
5000index 6877cf230..000000000
5001--- a/test/fuzzing/meson.build
5002+++ /dev/null
5003@@ -1,176 +0,0 @@
5004-tests = [
5005- 'hb-shape-fuzzer.cc',
5006- 'hb-subset-fuzzer.cc',
5007- 'hb-raster-fuzzer.cc',
5008- 'hb-vector-fuzzer.cc',
5009- 'hb-gpu-fuzzer.cc',
5010- 'hb-repacker-fuzzer.cc',
5011-]
5012-
5013-# Build the binaries
5014-foreach file_name : tests
5015- test_name = file_name.split('.')[0]
5016-
5017- sources = [file_name]
5018- fuzzer_ldflags = []
5019- extra_cpp_args = []
5020-
5021- if get_option('fuzzer_ldflags') == ''
5022- sources += 'main.cc'
5023- else
5024- fuzzer_ldflags += get_option('fuzzer_ldflags').split()
5025- extra_cpp_args += '-DHB_IS_IN_FUZZER'
5026- endif
5027-
5028- if get_option('experimental_api')
5029- extra_cpp_args += '-DHB_EXPERIMENTAL_API'
5030- endif
5031-
5032- if (test_name.contains('subset') or test_name.contains('repacker')) and get_option('subset').disabled()
5033- continue
5034- endif
5035-
5036- if test_name.contains('raster') and get_option('raster').disabled()
5037- continue
5038- endif
5039-
5040- if test_name.contains('vector') and get_option('vector').disabled()
5041- continue
5042- endif
5043-
5044- if test_name.contains('gpu') and get_option('gpu').disabled()
5045- continue
5046- endif
5047-
5048- link_with_libs = [libharfbuzz]
5049- if test_name.contains('subset') or test_name.contains('repacker')
5050- link_with_libs += [libharfbuzz_subset]
5051- endif
5052- if test_name.contains('raster')
5053- link_with_libs += [libharfbuzz_raster]
5054- endif
5055- if test_name.contains('vector')
5056- link_with_libs += [libharfbuzz_vector]
5057- endif
5058- if test_name.contains('gpu')
5059- link_with_libs += [libharfbuzz_gpu]
5060- endif
5061-
5062- exe = executable(test_name, sources,
5063- cpp_args: cpp_args + extra_cpp_args,
5064- include_directories: [incconfig, incsrc],
5065- link_args: fuzzer_ldflags,
5066- link_with: link_with_libs,
5067- install: false,
5068- )
5069- set_variable('@0@_exe'.format(test_name.underscorify()), exe)
5070-endforeach
5071-
5072-glob_cmd = find_program('glob.py', required: true)
5073-
5074-fonts_glob = run_command(glob_cmd, meson.current_source_dir() / 'fonts', check:true).stdout().strip().split('\n')
5075-subset_fonts_glob = run_command(glob_cmd, meson.current_source_dir() / '..' / 'subset' / 'data' / 'fonts', check:true).stdout().strip().split('\n')
5076-graphs_glob = run_command(glob_cmd, meson.current_source_dir() / 'graphs', check:true).stdout().strip().split('\n')
5077-
5078-# Chunk the glob lists to avoid command line length limits, and for parallelization
5079-chunk_size = 64
5080-foreach glob_name : ['fonts_glob', 'subset_fonts_glob', 'graphs_glob']
5081- glob = get_variable(glob_name)
5082- chunks = []
5083- chunk = []
5084- foreach item : glob
5085- if chunk.length() >= chunk_size
5086- chunks += [chunk]
5087- chunk = []
5088- endif
5089- chunk += [item]
5090- endforeach
5091- if chunk.length() > 0
5092- chunks += [chunk]
5093- endif
5094- set_variable('@0@_chunks'.format(glob_name), chunks)
5095-endforeach
5096-
5097-# Run fuzzers
5098-
5099-i = 0
5100-foreach chunk : fonts_glob_chunks
5101- test('shape-fuzzer-chunk-@0@'.format(i),
5102- hb_shape_fuzzer_exe,
5103- args: chunk,
5104- workdir: meson.current_build_dir() / '..' / '..',
5105- protocol: 'tap',
5106- suite: ['fuzzing'],
5107- )
5108- i += 1
5109-endforeach
5110-
5111-if not get_option('raster').disabled()
5112- i = 0
5113- foreach chunk : fonts_glob_chunks
5114- test('raster-fuzzer-chunk-@0@'.format(i),
5115- hb_raster_fuzzer_exe,
5116- args: chunk,
5117- workdir: meson.current_build_dir() / '..' / '..',
5118- protocol: 'tap',
5119- suite: ['fuzzing'],
5120- )
5121- i += 1
5122- endforeach
5123-endif
5124-
5125-if not get_option('vector').disabled()
5126- i = 0
5127- foreach chunk : fonts_glob_chunks
5128- test('vector-fuzzer-chunk-@0@'.format(i),
5129- hb_vector_fuzzer_exe,
5130- args: chunk,
5131- workdir: meson.current_build_dir() / '..' / '..',
5132- protocol: 'tap',
5133- suite: ['fuzzing'],
5134- )
5135- i += 1
5136- endforeach
5137-endif
5138-
5139-if not get_option('gpu').disabled()
5140- i = 0
5141- foreach chunk : fonts_glob_chunks
5142- test('gpu-fuzzer-chunk-@0@'.format(i),
5143- hb_gpu_fuzzer_exe,
5144- args: chunk,
5145- workdir: meson.current_build_dir() / '..' / '..',
5146- protocol: 'tap',
5147- suite: ['fuzzing'],
5148- )
5149- i += 1
5150- endforeach
5151-endif
5152-
5153-if not get_option('subset').disabled()
5154- i = 0
5155- foreach chunk : fonts_glob_chunks + subset_fonts_glob_chunks
5156- test('subset-fuzzer-chunk-@0@'.format(i),
5157- hb_subset_fuzzer_exe,
5158- args: chunk,
5159- workdir: meson.current_build_dir() / '..' / '..',
5160- protocol: 'tap',
5161- suite: ['fuzzing'],
5162- )
5163- i += 1
5164- endforeach
5165-endif
5166-
5167-if not get_option('subset').disabled()
5168- i = 0
5169- foreach chunk : graphs_glob_chunks
5170- test('repacker-fuzzer-chunk-@0@'.format(i),
5171- hb_repacker_fuzzer_exe,
5172- args: chunk,
5173- workdir: meson.current_build_dir() / '..' / '..',
5174- protocol: 'tap',
5175- suite: ['fuzzing'],
5176- )
5177- i += 1
5178- endforeach
5179-endif
5180diff --git a/test/meson.build b/test/meson.build
5181deleted file mode 100644
5182index 90a265227..000000000
5183--- a/test/meson.build
5184+++ /dev/null
5185@@ -1,8 +0,0 @@
5186-subdir('api')
5187-subdir('fuzzing')
5188-subdir('threads')
5189-if not get_option('utilities').disabled()
5190-subdir('subset')
5191-subdir('shape')
5192-subdir('vector')
5193-endif
5194diff --git a/test/shape/data/aots/meson.build b/test/shape/data/aots/meson.build
5195deleted file mode 100644
5196index bda27112b..000000000
5197--- a/test/shape/data/aots/meson.build
5198+++ /dev/null
5199@@ -1,130 +0,0 @@
5200-aots_tests = [
5201- 'classdef1_empty.tests',
5202- 'classdef1_multiple.tests',
5203- 'classdef1_single.tests',
5204- 'classdef1.tests',
5205- 'classdef2_empty.tests',
5206- 'classdef2_multiple.tests',
5207- 'classdef2_single.tests',
5208- 'classdef2.tests',
5209- 'cmap0.tests',
5210- 'cmap10.tests',
5211- 'cmap12.tests',
5212- 'cmap2.tests',
5213- 'cmap4.tests',
5214- 'cmap6.tests',
5215- 'cmap8.tests',
5216- 'gpos_chaining1_boundary.tests',
5217- 'gpos_chaining1_lookupflag.tests',
5218- 'gpos_chaining1_multiple_subrules.tests',
5219- 'gpos_chaining1_next_glyph.tests',
5220- 'gpos_chaining1_simple.tests',
5221- 'gpos_chaining1_successive.tests',
5222- 'gpos_chaining2_boundary.tests',
5223- 'gpos_chaining2_lookupflag.tests',
5224- 'gpos_chaining2_multiple_subrules.tests',
5225- 'gpos_chaining2_next_glyph.tests',
5226- 'gpos_chaining2_simple.tests',
5227- 'gpos_chaining2_successive.tests',
5228- 'gpos_chaining3_boundary.tests',
5229- 'gpos_chaining3_lookupflag.tests',
5230- 'gpos_chaining3_next_glyph.tests',
5231- 'gpos_chaining3_simple.tests',
5232- 'gpos_chaining3_successive.tests',
5233- 'gpos_context1_boundary.tests',
5234- 'gpos_context1_expansion.tests',
5235- 'gpos_context1_lookupflag.tests',
5236- 'gpos_context1_multiple_subrules.tests',
5237- 'gpos_context1_next_glyph.tests',
5238- 'gpos_context1_simple.tests',
5239- 'gpos_context1_successive.tests',
5240- 'gpos_context2_boundary.tests',
5241- 'gpos_context2_classes.tests',
5242- 'gpos_context2_expansion.tests',
5243- 'gpos_context2_lookupflag.tests',
5244- 'gpos_context2_multiple_subrules.tests',
5245- 'gpos_context2_next_glyph.tests',
5246- 'gpos_context2_simple.tests',
5247- 'gpos_context2_successive.tests',
5248- 'gpos_context3_boundary.tests',
5249- 'gpos_context3_lookupflag.tests',
5250- 'gpos_context3_next_glyph.tests',
5251- 'gpos_context3_simple.tests',
5252- 'gpos_context3_successive.tests',
5253- 'gpos1_1_lookupflag.tests',
5254- 'gpos1_1_simple.tests',
5255- 'gpos1_2_lookupflag.tests',
5256- 'gpos1_2.tests',
5257- 'gpos2_1_lookupflag.tests',
5258- 'gpos2_1_next_glyph.tests',
5259- 'gpos2_1_simple.tests',
5260- 'gpos2_1.tests',
5261- 'gpos2_2.tests',
5262- 'gpos3_lookupflag.tests',
5263- 'gpos3.tests',
5264- 'gpos4_lookupflag.tests',
5265- 'gpos4_multiple_anchors.tests',
5266- 'gpos4_simple.tests',
5267- 'gpos5.tests',
5268- 'gpos6.tests',
5269- 'gpos7_1.tests',
5270- 'gpos9.tests',
5271- 'gsub_chaining1_boundary.tests',
5272- 'gsub_chaining1_lookupflag.tests',
5273- 'gsub_chaining1_multiple_subrules.tests',
5274- 'gsub_chaining1_next_glyph.tests',
5275- 'gsub_chaining1_simple.tests',
5276- 'gsub_chaining1_successive.tests',
5277- 'gsub_chaining2_boundary.tests',
5278- 'gsub_chaining2_lookupflag.tests',
5279- 'gsub_chaining2_multiple_subrules.tests',
5280- 'gsub_chaining2_next_glyph.tests',
5281- 'gsub_chaining2_simple.tests',
5282- 'gsub_chaining2_successive.tests',
5283- 'gsub_chaining3_boundary.tests',
5284- 'gsub_chaining3_lookupflag.tests',
5285- 'gsub_chaining3_next_glyph.tests',
5286- 'gsub_chaining3_simple.tests',
5287- 'gsub_chaining3_successive.tests',
5288- 'gsub_context1_boundary.tests',
5289- 'gsub_context1_expansion.tests',
5290- 'gsub_context1_lookupflag.tests',
5291- 'gsub_context1_multiple_subrules.tests',
5292- 'gsub_context1_next_glyph.tests',
5293- 'gsub_context1_simple.tests',
5294- 'gsub_context1_successive.tests',
5295- 'gsub_context2_boundary.tests',
5296- 'gsub_context2_classes.tests',
5297- 'gsub_context2_expansion.tests',
5298- 'gsub_context2_lookupflag.tests',
5299- 'gsub_context2_multiple_subrules.tests',
5300- 'gsub_context2_next_glyph.tests',
5301- 'gsub_context2_simple.tests',
5302- 'gsub_context2_successive.tests',
5303- 'gsub_context3_boundary.tests',
5304- 'gsub_context3_lookupflag.tests',
5305- 'gsub_context3_next_glyph.tests',
5306- 'gsub_context3_simple.tests',
5307- 'gsub_context3_successive.tests',
5308- 'gsub1_1_lookupflag.tests',
5309- 'gsub1_1_modulo.tests',
5310- 'gsub1_1_simple.tests',
5311- 'gsub1_2_lookupflag.tests',
5312- 'gsub1_2_simple.tests',
5313- 'gsub2_1_lookupflag.tests',
5314- 'gsub2_1_multiple_sequences.tests',
5315- 'gsub2_1_simple.tests',
5316- 'gsub3_1_lookupflag.tests',
5317- 'gsub3_1_multiple.tests',
5318- 'gsub3_1_simple.tests',
5319- 'gsub4_1_lookupflag.tests',
5320- 'gsub4_1_multiple_ligatures.tests',
5321- 'gsub4_1_multiple_ligsets.tests',
5322- 'gsub4_1_simple.tests',
5323- 'gsub7.tests',
5324- 'lookupflag_ignore_attach.tests',
5325- 'lookupflag_ignore_base.tests',
5326- 'lookupflag_ignore_combination.tests',
5327- 'lookupflag_ignore_ligatures.tests',
5328- 'lookupflag_ignore_marks.tests',
5329-]
5330diff --git a/test/shape/data/in-house/meson.build b/test/shape/data/in-house/meson.build
5331deleted file mode 100644
5332index 12a313a83..000000000
5333--- a/test/shape/data/in-house/meson.build
5334+++ /dev/null
5335@@ -1,87 +0,0 @@
5336-in_house_tests = [
5337- 'aat-morx.tests',
5338- 'aat-trak.tests',
5339- 'arabic-fallback-shaping.tests',
5340- 'arabic-feature-order.tests',
5341- 'arabic-like-joining.tests',
5342- 'arabic-mark-order.tests',
5343- 'arabic-normalization.tests',
5344- 'arabic-phags-pa.tests',
5345- 'arabic-stch.tests',
5346- 'automatic-fractions.tests',
5347- 'cluster.tests',
5348- 'collections.tests',
5349- 'color-fonts.tests',
5350- 'context-matching.tests',
5351- 'coretext.tests',
5352- 'cursive-positioning.tests',
5353- 'default-ignorables.tests',
5354- 'digits.tests',
5355- 'directwrite.tests',
5356- 'emoji.tests',
5357- 'emoji-clusters.tests',
5358- 'fallback-positioning.tests',
5359- 'glyph-props-no-gdef.tests',
5360- 'hangul-jamo.tests',
5361- 'harfbust.tests',
5362- 'hebrew-diacritics.tests',
5363- 'hyphens.tests',
5364- 'indic-consonant-with-stacker.tests',
5365- 'indic-decompose.tests',
5366- 'indic-feature-order.tests',
5367- 'indic-init.tests',
5368- 'indic-joiner-candrabindu.tests',
5369- 'indic-joiners.tests',
5370- 'indic-malayalam-dot-reph.tests',
5371- 'indic-misc.tests',
5372- 'indic-old-spec.tests',
5373- 'indic-pref-blocking.tests',
5374- 'indic-script-extensions.tests',
5375- 'indic-special-cases.tests',
5376- 'indic-syllable.tests',
5377- 'indic-vowel-letter-spoofing.tests',
5378- 'item-context.tests',
5379- 'kbts.tests',
5380- 'kern-format2.tests',
5381- 'khmer-mark-order.tests',
5382- 'khmer-misc.tests',
5383- 'language-tags.tests',
5384- 'ligature-id.tests',
5385- 'macos.tests',
5386- 'mark-attachment.tests',
5387- 'mark-filtering-sets.tests',
5388- 'mongolian-variation-selector.tests',
5389- 'myanmar-misc.tests',
5390- 'myanmar-syllable.tests',
5391- 'myanmar-zawgyi.tests',
5392- 'nested-mark-filtering-sets.tests',
5393- 'none-directional.tests',
5394- 'positioning-features.tests',
5395- 'per-script-kern-fallback.tests',
5396- 'rand.tests',
5397- 'reverse-sub.tests',
5398- 'rotation.tests',
5399- 'sara-am.tests',
5400- 'simple.tests',
5401- 'sinhala.tests',
5402- 'spaces.tests',
5403- 'synthetic.tests',
5404- 'tibetan-contractions-1.tests',
5405- 'tibetan-contractions-2.tests',
5406- 'tibetan-vowels.tests',
5407- 'tt-kern-gpos.tests',
5408- 'uniscribe.tests',
5409- 'unsafe-to-concat.tests',
5410- 'use-indic3.tests',
5411- 'use-javanese.tests',
5412- 'use-marchen.tests',
5413- 'use-syllable.tests',
5414- 'use-vowel-letter-spoofing.tests',
5415- 'use.tests',
5416- 'use.tests',
5417- 'variation-selectors.tests',
5418- 'variations.tests',
5419- 'variations-rvrn.tests',
5420- 'vertical.tests',
5421- 'zero-width-marks.tests',
5422-]
5423diff --git a/test/shape/data/text-rendering-tests/meson.build b/test/shape/data/text-rendering-tests/meson.build
5424deleted file mode 100644
5425index 6f4b83d2b..000000000
5426--- a/test/shape/data/text-rendering-tests/meson.build
5427+++ /dev/null
5428@@ -1,97 +0,0 @@
5429-text_rendering_tests_tests = [
5430- 'AVAR-1.tests',
5431- 'CFF-1.tests',
5432- 'CFF-2.tests',
5433- 'CFF-3.tests',
5434- 'CFF2-1.tests',
5435- 'CMAP-1.tests',
5436- 'CMAP-2.tests',
5437- 'CMAP-4.tests',
5438- 'CVAR-1.tests',
5439- 'CVAR-2.tests',
5440- 'GLYF-1.tests',
5441- 'GPOS-1.tests',
5442- 'GPOS-2.tests',
5443- 'GPOS-3.tests',
5444- 'GPOS-4.tests',
5445- 'GPOS-5.tests',
5446- 'GSUB-1.tests',
5447- 'GSUB-2.tests',
5448- 'GSUB-3.tests',
5449- 'GVAR-1.tests',
5450- 'GVAR-2.tests',
5451- 'GVAR-3.tests',
5452- 'GVAR-4.tests',
5453- 'GVAR-5.tests',
5454- 'GVAR-6.tests',
5455- 'GVAR-7.tests',
5456- 'GVAR-8.tests',
5457- 'GVAR-9.tests',
5458- 'HVAR-1.tests',
5459- 'HVAR-2.tests',
5460- 'KERN-1.tests',
5461- 'KERN-2.tests',
5462- 'MORX-1.tests',
5463- 'MORX-10.tests',
5464- 'MORX-11.tests',
5465- 'MORX-12.tests',
5466- 'MORX-13.tests',
5467- 'MORX-14.tests',
5468- 'MORX-16.tests',
5469- 'MORX-17.tests',
5470- 'MORX-18.tests',
5471- 'MORX-19.tests',
5472- 'MORX-2.tests',
5473- 'MORX-20.tests',
5474- 'MORX-21.tests',
5475- 'MORX-22.tests',
5476- 'MORX-23.tests',
5477- 'MORX-24.tests',
5478- 'MORX-25.tests',
5479- 'MORX-26.tests',
5480- 'MORX-27.tests',
5481- 'MORX-28.tests',
5482- 'MORX-29.tests',
5483- 'MORX-3.tests',
5484- 'MORX-30.tests',
5485- 'MORX-31.tests',
5486- 'MORX-32.tests',
5487- 'MORX-33.tests',
5488- 'MORX-34.tests',
5489- 'MORX-35.tests',
5490- 'MORX-36.tests',
5491- 'MORX-37.tests',
5492- 'MORX-38.tests',
5493- 'MORX-39.tests',
5494- 'MORX-4.tests',
5495- 'MORX-40.tests',
5496- 'MORX-41.tests',
5497- 'MORX-5.tests',
5498- 'MORX-6.tests',
5499- 'MORX-7.tests',
5500- 'MORX-8.tests',
5501- 'MORX-9.tests',
5502- 'SFNT-1.tests',
5503- 'SFNT-2.tests',
5504- 'SHBALI-3.tests',
5505- 'SHKNDA-1.tests',
5506-]
5507-
5508-disabled_text_rendering_tests_tests = [
5509- 'CMAP-3.tests',
5510- 'SHARAN-1.tests',
5511- 'SHBALI-1.tests',
5512- 'SHBALI-2.tests',
5513- 'SHKNDA-2.tests',
5514- 'SHKNDA-3.tests',
5515- 'SHLANA-1.tests',
5516- 'SHLANA-10.tests',
5517- 'SHLANA-2.tests',
5518- 'SHLANA-3.tests',
5519- 'SHLANA-4.tests',
5520- 'SHLANA-5.tests',
5521- 'SHLANA-6.tests',
5522- 'SHLANA-7.tests',
5523- 'SHLANA-8.tests',
5524- 'SHLANA-9.tests',
5525-]
5526diff --git a/test/shape/meson.build b/test/shape/meson.build
5527deleted file mode 100644
5528index 4407f54ef..000000000
5529--- a/test/shape/meson.build
5530+++ /dev/null
5531@@ -1,28 +0,0 @@
5532-
5533-subdir('data/in-house') # in_house_tests
5534-subdir('data/aots') # aots_tests
5535-subdir('data/text-rendering-tests') # text_rendering_tests
5536-
5537-shape_run_tests_py = find_program('run-tests.py')
5538-
5539-sets = ['in-house', 'aots', 'text-rendering-tests']
5540-foreach set : sets
5541- # in-house -> in_house_tests, aots -> aots_tests, text-rendering-tests -> text_rendering_tests
5542- varname = '@0@_tests'.format(set.underscorify())
5543- tests = get_variable(varname)
5544- file_names = []
5545- foreach test : tests
5546- file_name = meson.current_source_dir() / 'data' / set / 'tests' / test
5547- file_names += [file_name]
5548- endforeach
5549- test(set, shape_run_tests_py,
5550- args: [
5551- hb_shape,
5552- file_names,
5553- ],
5554- protocol: 'tap',
5555- #verbose: true,
5556- workdir: meson.current_build_dir() / '..' / '..',
5557- suite: ['shape', set],
5558- )
5559-endforeach
5560diff --git a/test/subset/meson.build b/test/subset/meson.build
5561deleted file mode 100644
5562index 870601830..000000000
5563--- a/test/subset/meson.build
5564+++ /dev/null
5565@@ -1,141 +0,0 @@
5566-tests = [
5567- 'basics',
5568- 'bidi',
5569- 'cmap',
5570- 'cmap14',
5571- 'cmap4_overflow',
5572- 'preprocess',
5573- 'full-font',
5574- 'cff-full-font',
5575- 'japanese',
5576- 'cff-japanese',
5577- 'cff.notoserifmyanmar',
5578- 'glyf_bug_3131',
5579- 'layout',
5580- 'layout.gpos',
5581- 'layout.gpos2',
5582- 'layout.gpos3',
5583- 'layout.gpos4',
5584- 'layout.gpos5',
5585- 'layout.gpos6',
5586- 'layout.gpos8',
5587- 'layout.gpos8.amiri',
5588- 'layout.gpos9',
5589- 'layout.gsub3',
5590- 'layout.gsub5',
5591- 'layout.gsub5_format2',
5592- 'layout.gsub6',
5593- 'layout.gsub8',
5594- 'layout.gdef',
5595- 'layout.gdef.glyphset',
5596- 'layout.khmer',
5597- 'layout.context',
5598- 'layout.context_format2',
5599- 'layout.gdef-varstore',
5600- 'layout.gdef-attachlist',
5601- 'layout.markfilteringset',
5602- 'layout.notonastaliqurdu',
5603- 'layout.tinos',
5604- 'layout.duplicate_features',
5605- 'layout.unsorted_featurelist',
5606- 'layout.drop_feature',
5607- 'no_layout_closure',
5608- 'sbix',
5609- 'colr',
5610- 'colr_glyphs',
5611- 'math',
5612- 'math_coverage_offset',
5613- 'subset_base',
5614- # TODO: re-enable once colrv1 subsetting is stabilized.
5615- # 'colrv1.notoemoji',
5616- 'colrv1',
5617- 'colrv1_subset_varstore',
5618- 'colr_with_components',
5619- 'cbdt',
5620- 'variable',
5621- 'glyph_names',
5622- 'glyph_map',
5623- 'post',
5624- '32bit_var_store',
5625- 'pin_all_at_default',
5626- 'instantiate_base',
5627- 'instantiate_colrv1',
5628- 'instantiate_glyf',
5629- 'instantiate_cff2',
5630- 'downgrade_cff2',
5631- 'instantiate_cff2_tsb',
5632- 'full_instance',
5633- 'instance_feature_variations',
5634- 'instance_no_double_free',
5635- 'mvar_full_instance',
5636- 'instance_comp_glyph_empty_child',
5637- 'post_apply_mvar_delta',
5638- 'apply_cvar_delta',
5639- 'collect_name_ids',
5640- 'instantiate_cff2_update_metrics',
5641- 'layout.empty_ligature_offset',
5642- 'glyf_partial_instancing',
5643- 'mvar_partial_instance',
5644- 'update_def_wght',
5645- 'feature_variations_partial_instance',
5646- 'gdef_partial_instance',
5647- 'value_format_partial_instance',
5648- 'feature_variation_instance_collect_lookups',
5649- 'sync_vmetrics',
5650- 'empty_region_vardata',
5651- 'colrv1_partial_instance',
5652- 'instantiate_gvar_padding',
5653- 'avar2_full_instance',
5654- 'subset_gvar_padding',
5655-]
5656-
5657-if get_option('experimental_api')
5658- tests += [
5659- 'iftb_requirements',
5660- 'retain-num-glyphs',
5661- ]
5662-endif
5663-
5664-repack_tests = [
5665- 'basic',
5666- 'prioritization',
5667- 'table_duplication',
5668- 'isolation',
5669- 'advanced_prioritization',
5670- 'space_splitting',
5671-]
5672-
5673-run_test = find_program('run-tests.py')
5674-
5675-foreach t : tests
5676- fname = '@0@.tests'.format(t)
5677-
5678- test(t, run_test,
5679- args: [
5680- hb_subset,
5681- meson.current_source_dir() / 'data' / 'tests' / fname,
5682- ],
5683- # as the tests are ran concurrently let's raise acceptable time here
5684- # ideally better to break and let meson handles them in parallel
5685- timeout: 500,
5686- workdir: meson.current_build_dir() / '..' / '..',
5687- protocol: 'tap',
5688- suite: 'subset',
5689- )
5690-endforeach
5691-
5692-run_repack_test = find_program('run-repack-tests.py')
5693-
5694-foreach t : repack_tests
5695- fname = '@0@.tests'.format(t)
5696-
5697- test(t, run_repack_test,
5698- args: [
5699- hb_subset,
5700- meson.current_source_dir() / 'data' / 'repack_tests' / fname,
5701- ],
5702- workdir: meson.current_build_dir() / '..' / '..',
5703- protocol: 'tap',
5704- suite: ['subset', 'repack'],
5705- )
5706-endforeach
5707diff --git a/test/threads/meson.build b/test/threads/meson.build
5708deleted file mode 100644
5709index a6d27ac61..000000000
5710--- a/test/threads/meson.build
5711+++ /dev/null
5712@@ -1,30 +0,0 @@
5713-test('shape_threads', executable('hb-shape-threads', 'hb-shape-threads.cc',
5714- dependencies: [
5715- freetype_dep, thread_dep
5716- ],
5717- cpp_args: [],
5718- include_directories: [incconfig, incsrc],
5719- link_with: [libharfbuzz],
5720- install: false,
5721- ),
5722- workdir: meson.current_source_dir() / '..' / '..',
5723- timeout: 300,
5724- suite: ['threads', 'slow'],
5725-)
5726-
5727-
5728-if not get_option('subset').disabled()
5729- test('subset_threads', executable('hb-subset-threads', 'hb-subset-threads.cc',
5730- dependencies: [
5731- thread_dep
5732- ],
5733- cpp_args: [],
5734- include_directories: [incconfig, incsrc],
5735- link_with: [libharfbuzz, libharfbuzz_subset],
5736- install: false,
5737- ),
5738- workdir: meson.current_source_dir() / '..' / '..',
5739- timeout: 300,
5740- suite: ['threads', 'slow'],
5741- )
5742-endif
5743diff --git a/test/vector/meson.build b/test/vector/meson.build
5744deleted file mode 100644
5745index 8247aecfe..000000000
5746--- a/test/vector/meson.build
5747+++ /dev/null
5748@@ -1,20 +0,0 @@
5749-run_test = find_program('run-tests.py')
5750-
5751-tests = [
5752- 'basic',
5753- 'varc',
5754-]
5755-
5756-foreach t : tests
5757- fname = '@0@.tests'.format(t)
5758-
5759- test(t, run_test,
5760- args: [
5761- hb_vector,
5762- meson.current_source_dir() / 'data' / 'tests' / fname,
5763- ],
5764- workdir: meson.current_build_dir() / '..' / '..',
5765- protocol: 'tap',
5766- suite: 'vector',
5767- )
5768-endforeach
5769diff --git a/util/gpu/meson.build b/util/gpu/meson.build
5770deleted file mode 100644
5771index 86f28c7a9..000000000
5772--- a/util/gpu/meson.build
5773+++ /dev/null
5774@@ -1,69 +0,0 @@
5775-gpu_demo_sources = files(
5776- 'demo-atlas.h',
5777- 'demo-atlas.cc',
5778- 'demo-buffer.h',
5779- 'demo-buffer.cc',
5780- 'demo-common.h',
5781- 'demo-font.h',
5782- 'demo-font.cc',
5783- 'demo-glstate.h',
5784- 'demo-glstate.cc',
5785- 'demo-renderer.h',
5786- 'demo-renderer-gl.cc',
5787- 'demo-shader.h',
5788- 'demo-shader.cc',
5789- 'demo-view.h',
5790- 'demo-view.cc',
5791- 'default-text-en.hh',
5792- 'default-text-fa.hh',
5793- 'default-font.hh',
5794- 'matrix4x4.hh',
5795- 'trackball.hh',
5796-)
5797-
5798-demo_shader_sources = [
5799- [ 'demo-vertex.glsl', 'demo-vertex-glsl.hh' ],
5800- [ 'demo-fragment.glsl', 'demo-fragment-glsl.hh' ],
5801- [ 'demo-shader.msl', 'demo-shader-msl.hh' ],
5802- [ 'demo-shader.hlsl', 'demo-shader-hlsl.hh' ],
5803- [ 'demo-shader.wgsl', 'demo-shader-wgsl.hh' ],
5804-]
5805-
5806-demo_shader_helper = find_program('../../src/gen-gpu-shader-artifacts.py')
5807-foreach p: demo_shader_sources
5808- gpu_demo_sources += custom_target('@0@'.format(p.get(1)),
5809- build_by_default: true,
5810- input: p.get(0),
5811- output: p.get(1),
5812- command: [ demo_shader_helper, '@OUTPUT@',
5813- meson.current_source_dir(), '@INPUT@' ])
5814-endforeach
5815-
5816-if host_machine.system() == 'darwin'
5817- gpu_demo_sources += files(
5818- 'demo-metal.mm',
5819- )
5820-endif
5821-
5822-if host_machine.system() == 'windows'
5823- gpu_demo_sources += files(
5824- 'demo-renderer-d3d11.cc',
5825- )
5826-endif
5827-
5828-gpu_demo_opt = get_option('gpu_demo')
5829-have_gpu_demo_deps = false
5830-if not gpu_demo_opt.disabled()
5831- glew_dep = dependency('glew', required: gpu_demo_opt)
5832- glfw_dep = dependency('glfw3', required: gpu_demo_opt)
5833- if host_machine.system() == 'darwin'
5834- gl_dep = dependency('appleframeworks', modules: ['OpenGL'], required: gpu_demo_opt)
5835- metal_dep = dependency('appleframeworks', modules: ['Metal', 'QuartzCore', 'Foundation', 'AppKit'], required: gpu_demo_opt)
5836- else
5837- gl_dep = dependency('gl', required: gpu_demo_opt)
5838- metal_dep = disabler()
5839- endif
5840- d3d11_dep = meson.get_compiler('cpp').find_library('d3d11', required: false)
5841- d3dcompiler_dep = meson.get_compiler('cpp').find_library('d3dcompiler', required: false)
5842- have_gpu_demo_deps = glew_dep.found() and glfw_dep.found() and gl_dep.found()
5843-endif
5844diff --git a/util/meson.build b/util/meson.build
5845deleted file mode 100644
5846index d7b50dbbd..000000000
5847--- a/util/meson.build
5848+++ /dev/null
5849@@ -1,248 +0,0 @@
5850-hb_view_sources = [
5851- 'hb-view.cc',
5852-]
5853-
5854-hb_shape_sources = [
5855- 'hb-shape.cc',
5856-]
5857-
5858-hb_draw_sources = [
5859- 'hb-vector.cc',
5860-]
5861-
5862-hb_raster_sources = [
5863- 'hb-raster.cc',
5864-]
5865-
5866-hb_ft_raster_sources = [
5867- 'hb-ft-raster.cc',
5868-]
5869-
5870-hb_info_sources = [
5871- 'hb-info.cc',
5872-]
5873-
5874-hb_subset_cli_sources = [
5875- 'hb-subset.cc',
5876-]
5877-
5878-# If found, invoke it on our four binaries to build man pages
5879-# If not found, just skip this step
5880-if not get_option('docs').disabled() and not meson.is_cross_build()
5881- help2man = find_program('help2man', required: false)
5882-else
5883- help2man = disabler()
5884-endif
5885-if help2man.found()
5886- help2man_command = ['sh', '-c', help2man.full_path() + ' --help-option=--help-all --no-info -n "$(@INPUT@ --help | head -n 4 | tail -n 1)" --output=$0 @INPUT@', '@OUTPUT@']
5887- help2man_env = environment()
5888- help2man_env.set('HB_UTIL_HELP_VERBOSE', '1')
5889-endif
5890-
5891-util_deps = [freetype_dep, cairo_dep, cairo_ft_dep, glib_dep]
5892-
5893-if conf.get('HAVE_GLIB', 0) == 1
5894- if conf.get('HAVE_CAIRO', 0) == 1
5895- hb_view = executable('hb-view', hb_view_sources,
5896- cpp_args: cpp_args,
5897- include_directories: [incconfig, incsrc],
5898- dependencies: [util_deps, chafa_dep],
5899- link_with: [libharfbuzz, libharfbuzz_cairo],
5900- install: true,
5901- )
5902- meson.override_find_program('hb-view', hb_view)
5903- if help2man.found()
5904- target = hb_view.name() + '.1'
5905- hb_view_manpage = custom_target(target,
5906- input: hb_view,
5907- output: target,
5908- command: help2man_command,
5909- depends: [hb_view],
5910- env: help2man_env,
5911- install: true,
5912- install_dir: get_option('mandir') / 'man1',
5913- )
5914- endif
5915- else
5916- hb_view = disabler()
5917- endif
5918-
5919- hb_shape = executable('hb-shape', hb_shape_sources,
5920- cpp_args: cpp_args,
5921- include_directories: [incconfig, incsrc],
5922- dependencies: [util_deps],
5923- link_with: [libharfbuzz],
5924- install: true,
5925- )
5926- meson.override_find_program('hb-shape', hb_shape)
5927-
5928- if not get_option('vector').disabled()
5929- hb_vector = executable('hb-vector', hb_draw_sources,
5930- cpp_args: cpp_args,
5931- include_directories: [incconfig, incsrc],
5932- dependencies: [util_deps],
5933- link_with: [libharfbuzz, libharfbuzz_vector],
5934- install: true,
5935- )
5936- meson.override_find_program('hb-vector', hb_vector)
5937- else
5938- hb_vector = disabler()
5939- endif
5940-
5941- if not get_option('raster').disabled()
5942- hb_raster = executable('hb-raster', hb_raster_sources,
5943- cpp_args: cpp_args,
5944- include_directories: [incconfig, incsrc],
5945- dependencies: [util_deps, chafa_dep],
5946- link_with: [libharfbuzz, libharfbuzz_raster],
5947- install: true,
5948- )
5949- meson.override_find_program('hb-raster', hb_raster)
5950- else
5951- hb_raster = disabler()
5952- endif
5953-
5954- if conf.get('HAVE_FREETYPE', 0) == 1
5955- hb_ft_raster_util = executable('hb-ft-raster', hb_ft_raster_sources,
5956- cpp_args: cpp_args,
5957- include_directories: [incconfig, incsrc],
5958- dependencies: [util_deps],
5959- link_with: [libharfbuzz],
5960- install: false,
5961- )
5962-
5963- hb_ft_raster_all = executable('hb-ft-raster-all', ['hb-ft-raster-all.cc'],
5964- cpp_args: cpp_args,
5965- include_directories: [incconfig, incsrc],
5966- dependencies: [util_deps],
5967- link_with: [libharfbuzz],
5968- install: false,
5969- )
5970- endif
5971-
5972- hb_draw_all = executable('hb-draw-all', ['hb-draw-all.c'],
5973- cpp_args: cpp_args,
5974- include_directories: [incconfig, incsrc],
5975- link_with: [libharfbuzz],
5976- install: false,
5977- )
5978-
5979- if not get_option('vector').disabled()
5980- hb_vector_svg_all = executable('hb-vector-svg-all', ['hb-vector-svg-all.c'],
5981- cpp_args: cpp_args,
5982- include_directories: [incconfig, incsrc],
5983- link_with: [libharfbuzz, libharfbuzz_vector],
5984- install: false,
5985- )
5986- endif
5987-
5988- hb_paint_all = executable('hb-paint-all', ['hb-paint-all.c'],
5989- cpp_args: cpp_args,
5990- include_directories: [incconfig, incsrc],
5991- link_with: [libharfbuzz],
5992- install: false,
5993- )
5994-
5995- if not get_option('raster').disabled()
5996- hb_raster_all = executable('hb-raster-all', ['hb-raster-all.cc'],
5997- cpp_args: cpp_args,
5998- include_directories: [incconfig, incsrc],
5999- link_with: [libharfbuzz, libharfbuzz_raster],
6000- install: false,
6001- )
6002- endif
6003-
6004- hb_info = executable('hb-info', [hb_info_sources, gobject_enums_h],
6005- cpp_args: cpp_args,
6006- include_directories: [incconfig, incsrc],
6007- dependencies: [util_deps, libharfbuzz_gobject_dep, chafa_dep],
6008- link_with: [libharfbuzz],
6009- install: true,
6010- )
6011- meson.override_find_program('hb-info', hb_info)
6012-
6013- if not get_option('subset').disabled()
6014- hb_subset = executable('hb-subset', hb_subset_cli_sources,
6015- cpp_args: cpp_args,
6016- include_directories: [incconfig, incsrc],
6017- dependencies: util_deps,
6018- link_with: [libharfbuzz, libharfbuzz_subset],
6019- install: true,
6020- )
6021- meson.override_find_program('hb-subset', hb_subset)
6022- else
6023- hb_subset = disabler()
6024- endif
6025-
6026- if help2man.found()
6027- foreach binary: [hb_shape, hb_raster, hb_vector, hb_info, hb_subset]
6028- target = binary.name() + '.1'
6029- manpage = custom_target(target,
6030- input: binary,
6031- output: target,
6032- command: help2man_command,
6033- depends: [binary],
6034- env: help2man_env,
6035- install: true,
6036- install_dir: get_option('mandir') / 'man1',
6037- )
6038- endforeach
6039- endif
6040-
6041- if get_option('experimental_api')
6042- if not get_option('subset').disabled()
6043- test('test-hb-subset-parsing',
6044- executable('test-hb-subset-parsing',
6045- ['test-hb-subset-parsing.c'],
6046- cpp_args: cpp_args,
6047- c_args: ['-DHB_EXPERIMENTAL_API'],
6048- include_directories: [incconfig, incsrc],
6049- dependencies: util_deps,
6050- link_with: [libharfbuzz, libharfbuzz_subset],
6051- install: false,
6052- ),
6053- workdir : meson.current_source_dir(),
6054- suite: ['util'])
6055- endif
6056- endif
6057-else
6058- # Disable tests that use this
6059- hb_view = disabler()
6060- hb_shape = disabler()
6061- hb_vector = disabler()
6062- hb_info = disabler()
6063- hb_subset = disabler()
6064-endif
6065-
6066-if not get_option('gpu').disabled()
6067- if host_machine.system() == 'darwin'
6068- add_languages('objcpp', required: true)
6069- endif
6070- subdir('gpu')
6071-
6072- if have_gpu_demo_deps and conf.get('HAVE_GLIB', 0) == 1
6073- gpu_demo_deps = [util_deps, gl_dep, glew_dep, glfw_dep]
6074- if host_machine.system() == 'darwin'
6075- gpu_demo_deps += metal_dep
6076- endif
6077- if host_machine.system() == 'windows' and d3d11_dep.found() and d3dcompiler_dep.found()
6078- gpu_demo_deps += [d3d11_dep, d3dcompiler_dep]
6079- endif
6080- hb_gpu_util = executable('hb-gpu',
6081- ['hb-gpu.cc'] + gpu_demo_sources,
6082- cpp_args: cpp_args,
6083- include_directories: [incconfig, incsrc],
6084- dependencies: gpu_demo_deps,
6085- link_with: [libharfbuzz, libharfbuzz_gpu],
6086- install: true,
6087- )
6088- endif
6089-
6090- hb_gpu_encode_all = executable('hb-gpu-encode-all',
6091- 'hb-gpu-encode-all.cc',
6092- cpp_args: cpp_args,
6093- include_directories: [incconfig, incsrc],
6094- link_with: [libharfbuzz, libharfbuzz_gpu],
6095- install: false,
6096- )
6097-endif