ビルド

依存

  • C++17 コンパイラ(MSVC 2022 / GCC 9+ / Clang)、CMake 3.24+、Ninja(preset が使う)
  • vcpkg: FreeType / HarfBuzz(subset 含む)/ libunibreak / zlib / stb / doctest / tinyxml2(MicroTeX が使う)を vcpkg.json(manifest)から入れる。VCPKG_ROOT を設定しておく
  • glyphware(FreeType + HarfBuzz の包み): CMake の FetchContent で自動取得。 開発中は GLYPHWARE_DIR=/path/to/glyphware でローカルツリーを指せる
  • Python バインディング: Python 3.9+ と pip install pybind11
  • テスト・サンプル用フォント: make fontdata(Noto Serif/Sans JP とその Bold、Noto Serif/Sans(Bold・Italic・可変版)、 アラビア文字・ヘブライ文字の Noto Sans、絵文字の Noto-COLRv1 / NotoColorEmoji、 それに欧文ハイフネーションのパターン hyph-en-us.texdata/ にダウンロードする)

手順

export VCPKG_ROOT=/path/to/vcpkg
make fontdata
make prebuild                              # cmake --preset <OS に応じた preset>
make build                                 # Release。BUILD_TYPE=Debug も可
make test                                  # ctest(doctest。リポジトリルートで動く)

preset は CMakePresets.json にあります(x64-windowsx86-windowsx64-linuxarm64-linuxx64-osxarm64-osx。 Windows は静的 triplet x64-windows-static)。PRESET=... で選べます。

直接 CMake を叩くなら:

cmake --preset x64-windows -DGLYPHWARE_DIR=d:/work/glyphware -DTYPESET_BUILD_PYTHON=ON
cmake --build build/x64-windows --config Release
./build/x64-windows/tests/Release/typeset_tests.exe

オプション

CMake オプション 既定 内容
TYPESET_BUILD_SAMPLES ON(トップレベルのとき) samples/ の実行ファイル
TYPESET_BUILD_TESTS ON(トップレベルのとき) doctest
TYPESET_BUILD_PYTHON OFF pybind11 モジュール jtypeset._jtypesetpython/<Config>/jtypeset/ にパッケージがまとまる
TYPESET_HANDLER_MICROTEX ON MicroTeX(LaTeX 数式)ハンドラとサンプル。MicroTeX は FetchContent、tinyxml2 は vcpkg。Python 拡張にもリンクされ、数式フォント(res、2MB)がパッケージに同梱される
GLYPHWARE_DIR glyphware のローカルツリー。空なら FetchContent

Python パッケージ(jtypeset)

# 開発ツリーから使う
make prebuild CMAKEOPT=-DTYPESET_BUILD_PYTHON=ON
make build
PYTHONPATH=build/x64-windows/python/Release python -c "import jtypeset; print(jtypeset.__version__)"

# wheel を作る(scikit-build-core。VCPKG_ROOT があれば toolchain は CMakeLists が補う)
pip wheel . -w dist --no-deps
pip install dist/jtypeset-*.whl

Windows では x64-windows-static-md(静的ライブラリ+動的 CRT)で wheel を作ります(pyproject の override)。 DLL を同梱しなくてよく、Python 本体と CRT が一致します。

配布用の wheel は GitHub Actions(.github/workflows/wheels.yml)が cibuildwheel で作ります。 対象は Windows (AMD64) / Linux (manylinux_2_28 x86_64) / macOS (arm64・x86_64) の CPython 3.9〜3.13 で、 macOS の x86_64 は Apple Silicon のランナーからクロスビルドします。

ドキュメントの生成

make docs        # C++ リファレンス(Doxygen)→ build/docs/cpp/html。DOXYGEN=path で実行ファイル指定
make pydocs      # 型スタブ(pybind11-stubgen)と Python リファレンス(pdoc)→ build/docs/python
make site        # 上の 2 つとこのサイト(MkDocs)を build/site にまとめる

pip install mkdocs pdoc pybind11-stubgen が必要です。Doxygen は OS のパッケージか公式のバイナリを入れてください。

別のプロジェクトから使う

include(FetchContent)
FetchContent_Declare(typeset GIT_REPOSITORY https://github.com/wamsoft/jtypeset.git GIT_TAG main)
FetchContent_MakeAvailable(typeset)
target_link_libraries(myapp PRIVATE typeset)

vcpkg の依存(FreeType / HarfBuzz / libunibreak / zlib / stb)は利用側の manifest にも書いてください。 glyphware は typeset が FetchContent で取ります(利用側に glyphware ターゲットがあればそれを使います)。