#!/bin/bash # Builds libm3ui.so against an upstream Fcitx5 source tree of the same version # as the Fcitx5 installed on this system. The addon needs Fcitx5's internal # Wayland protocol wrappers, which are not part of fcitx5-devel, so it is built # inside the upstream tree. set -euo pipefail root=$(cd "$(dirname "$0")/.." && pwd) work=${WORK_DIR:-$root/build} version=${FCITX_VERSION:-$(pkg-config --modversion Fcitx5Core)} # Commit of the yoga submodule pinned by Fcitx5 (third_party/yoga). yoga_commit=${YOGA_COMMIT:-042f5013152eb81c1552dec945b88f7b95ca350f} srcdir=$work/fcitx5-$version mkdir -p "$work" if [ ! -d "$srcdir" ]; then echo ">> fetching Fcitx5 $version" curl -fsSL "https://github.com/fcitx/fcitx5/archive/refs/tags/$version.tar.gz" | tar -xz -C "$work" fi if [ ! -f "$srcdir/third_party/yoga/yoga/CMakeLists.txt" ]; then echo ">> fetching yoga $yoga_commit" rm -rf "$srcdir/third_party/yoga" mkdir -p "$srcdir/third_party/yoga" curl -fsSL "https://github.com/facebook/yoga/archive/$yoga_commit.tar.gz" | tar -xz -C "$srcdir/third_party/yoga" --strip-components=1 fi echo ">> overlaying m3ui" rm -rf "$srcdir/src/ui/m3ui" cp -r "$root/src" "$srcdir/src/ui/m3ui" if ! grep -q 'add_subdirectory(m3ui)' "$srcdir/src/ui/CMakeLists.txt"; then sed -i 's/^add_subdirectory(classic)$/add_subdirectory(classic)\nadd_subdirectory(m3ui)/' \ "$srcdir/src/ui/CMakeLists.txt" fi echo ">> configuring" cmake -S "$srcdir" -B "$work/cmake" -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${PREFIX:-$HOME/.local/m3ui}" \ -DENABLE_X11=On -DENABLE_WAYLAND=On \ -DENABLE_TEST=Off -DENABLE_TESTING_ADDONS=Off -DENABLE_ENCHANT=Off \ -DENABLE_DOC=Off -DENABLE_XDGAUTOSTART=Off -DENABLE_EMOJI=Off echo ">> building" ninja -C "$work/cmake" m3ui src/ui/m3ui/m3ui.conf echo ">> done, run scripts/install.sh"