#!/usr/bin/make -f # -*- makefile -*- # export DEB_BUILD_MAINT_OPTIONS = hardening=+all # Propagate hardening flags correctly to Bazel, build up options here include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/buildflags.mk # Private directory for the generated protobuf shared libraries. Everything # that carries mozc's generated code has to resolve to the same .so, otherwise # the descriptor pool gets the same .proto registered twice. MOZC_PRIVATE_LIBDIR = /usr/lib/$(DEB_HOST_MULTIARCH)/mozc BAZEL_BUILD_FLAGS = \ $(foreach flag,$(CPPFLAGS),--copt=$(flag)) \ $(foreach flag,$(CXXFLAGS),--cxxopt=$(flag)) \ $(foreach flag,$(LDFLAGS),--linkopt=$(flag)) \ --linkopt=-Wl,-rpath,$(MOZC_PRIVATE_LIBDIR) # $(foreach flag,$(CFLAGS),--conlyopt=$(flag)) # Clear XDG_CONFIG_DIRS for qtchooser unexport XDG_CONFIG_DIRS TARGETS=dictionary:zip_code_data \ gui/tool:mozc_tool \ renderer/qt:mozc_renderer \ server:mozc_server \ unix/emacs:mozc_emacs_helper \ unix:icons \ unix/ibus:ibus_mozc # Built transitively, but named explicitly so d/*.install can rely on the paths TARGETS_SHLIB=ipc:libmozc_ipc_pb.so \ protocol:libmozc_protocol_pb.so TARGET_UIM=unix/uim:libuim-mozc.so TARGET_FCITX5=unix/fcitx5:fcitx5-mozc.so # Extract upstream version (e.g. 3.33.6133) DEB_VERSION := $(shell dpkg-parsechangelog -S Version) MOZC_UPSTREAM_VERSION := $(shell printf '%s' '$(DEB_VERSION)' | sed 's/+.*//') # Override module and repository to disable network access completely BAZEL_OPTIONS=--compilation_mode=opt \ --config=oss_linux \ --features=-compiler_param_file \ --noenable_workspace \ --override_module=abseil-cpp=../debian/third_party/abseil-cpp \ --override_module=apple_support=../debian/third_party/apple_support \ --override_module=buildozer=../debian/third_party/buildozer \ --override_module=googletest=../debian/third_party/gtest \ --override_module=platforms=../debian/third_party/platforms \ --override_module=protobuf=../debian/third_party/protobuf \ --override_module=rules_android_ndk=../debian/third_party/rules_android_ndk \ --override_module=rules_apple=../debian/third_party/rules_apple \ --override_module=rules_cc=/usr/share/bazel/rules/cc \ --override_module=rules_license=/usr/share/bazel/rules/license \ --override_module=rules_pkg=/usr/share/bazel/rules/pkg \ --override_module=rules_proto=/usr/share/bazel/rules/proto \ --override_module=rules_swift=../debian/third_party/rules_swift \ --override_module=zlib=../debian/third_party/zlib \ --override_repository=_main~_repo_rules~ja_usage_dict=third_party/ja_usage_dict \ --override_repository=_main~_repo_rules~material_icon_dictionary_png=third_party/material_icon_dictionary_png \ --override_repository=_main~_repo_rules~material_icon_dictionary_svg=third_party/material_icon_dictionary_svg \ --override_repository=_main~_repo_rules~material_icon_properties_png=third_party/material_icon_properties_png \ --override_repository=_main~_repo_rules~material_icon_properties_svg=third_party/material_icon_properties_svg \ --override_repository=_main~_repo_rules~material_icon_tool_png=third_party/material_icon_tool_png \ --override_repository=_main~_repo_rules~material_icon_tool_svg=third_party/material_icon_tool_svg \ --override_repository=_main~_repo_rules~zip_code_jigyosyo=third_party/zip_code_jigyosyo \ --override_repository=_main~_repo_rules~zip_code_ken_all=third_party/zip_code_ken_all \ --registry="file://$(CURDIR)/debian/empty-bazel-registry" \ --repo_env=BAZEL_CXXOPTS=-std=c++20 \ --repository_disable_download \ --sandbox_add_mount_pair=/usr \ --strip=never \ --subcommands # Same as bazel-java-tools, put build cache here BAZEL_STARTUP_OPTIONS=--output_user_root=/tmp/bazel-debian-build %: dh $@ override_dh_auto_configure: # Setup symlinks for bazel-rules-platforms cd debian/third_party/platforms ; make # Setup debian/third_party/platforms/host/constrains.bzl case "$(DEB_HOST_ARCH_CPU)" in \ amd64) bazel_cpu=x86_64 ;; \ arm64) bazel_cpu=aarch64 ;; \ loong64) bazel_cpu=loongarch64 ;; \ ppc64el) bazel_cpu=ppc ;; \ riscv64) bazel_cpu=riscv64 ;; \ *) echo "unsupported Debian CPU: $(DEB_HOST_ARCH_CPU)" >&2; exit 1 ;; \ esac; \ case "$(DEB_HOST_ARCH_OS)" in \ linux) bazel_os=linux ;; \ *) echo "unsupported Debian OS: $(DEB_HOST_ARCH_OS)" >&2; exit 1 ;; \ esac; \ sed \ -e "s/@BAZEL_CPU@/$$bazel_cpu/g" \ -e "s/@BAZEL_OS@/$$bazel_os/g" \ $(CURDIR)/debian/third_party/platforms/host/constraints.bzl.in > $(CURDIR)/debian/third_party/platforms/host/constraints.bzl # Setup third_party/zip_code_jigyosyo, third_party/zip_code_ken_all # Keeping upstream .CSV only patch as simple, copy required BUILD.bazel and MODULE.bazel from # debian/third_party/zip_code_* mkdir -p $(CURDIR)/src/third_party/zip_code_jigyosyo mkdir -p $(CURDIR)/src/third_party/zip_code_ken_all cp $(CURDIR)/debian/third_party/zip_code_jigyosyo/* $(CURDIR)/src/third_party/zip_code_jigyosyo/ cp $(CURDIR)/debian/third_party/zip_code_ken_all/* $(CURDIR)/src/third_party/zip_code_ken_all/ # Create REPO.bazel to be recognized as repository setup_material_icons: touch $(CURDIR)/src/third_party/material_icon_dictionary_svg/REPO.bazel touch $(CURDIR)/src/third_party/material_icon_dictionary_png/REPO.bazel touch $(CURDIR)/src/third_party/material_icon_properties_svg/REPO.bazel touch $(CURDIR)/src/third_party/material_icon_properties_png/REPO.bazel touch $(CURDIR)/src/third_party/material_icon_tool_svg/REPO.bazel touch $(CURDIR)/src/third_party/material_icon_tool_png/REPO.bazel # As binary should not be included in patchset, build it from svg here rsvg-convert -w 48 -h 48 $(CURDIR)/src/third_party/material_icon_dictionary_svg/file/dictionary.svg \ -o src/third_party/material_icon_dictionary_png/file/dictionary.png rsvg-convert -w 48 -h 48 $(CURDIR)/src/third_party/material_icon_properties_svg/file/properties.svg \ -o src/third_party/material_icon_properties_png/file/properties.png rsvg-convert -w 48 -h 48 $(CURDIR)/src/third_party/material_icon_tool_svg/file/tool.svg \ -o src/third_party/material_icon_tool_png/file/tool.png rsvg-convert -w 16 -h 16 $(CURDIR)/src/data/images/icon.svg \ -o $(CURDIR)/src/data/images/unix/ime_product_icon_opensource-16.png override_dh_auto_build: setup_material_icons # Build .mo files for pofile in $(CURDIR)/src/unix/fcitx5/po/*.po; do \ filename=`basename $$pofile`; \ lang=$${filename%.po}; \ mofile=$${pofile%.po}.mo; \ msgfmt $$pofile -o $$mofile; \ done; msgfmt --xml -d $(CURDIR)/src/unix/fcitx5/po/ \ --template $(CURDIR)/src/unix/fcitx5/org.fcitx.Fcitx5.Addon.Mozc.metainfo.xml.in \ --output-file $(CURDIR)/src/unix/fcitx5/org.fcitx.Fcitx5.Addon.Mozc.metainfo.xml # Show options for debug echo $(BAZEL_OPTIONS) cd src ; \ bazel clean --expunge; \ for d in $(TARGETS_SHLIB) $(TARGETS); do \ bazel $(BAZEL_STARTUP_OPTIONS) build $(BAZEL_BUILD_FLAGS) $(BAZEL_OPTIONS) $${d} || exit 1; \ done; \ bazel $(BAZEL_STARTUP_OPTIONS) build $(BAZEL_BUILD_FLAGS) $(BAZEL_OPTIONS) $(TARGET_UIM) || exit 1; \ bazel $(BAZEL_STARTUP_OPTIONS) build $(BAZEL_BUILD_FLAGS) $(BAZEL_OPTIONS) $(TARGET_FCITX5) || exit 1 # Embed upstream version for ibus-mozc sed -i -e 's/0\.0\.0\.0/$(MOZC_UPSTREAM_VERSION)/g' $(CURDIR)/src/bazel-bin/unix/ibus/mozc.xml override_dh_auto_test: : override_dh_auto_clean: rm -f src/MODULE.bazel.lock rm -rf $(CURDIR)/debian/.build-cache rm -rf $(CURDIR)/src/bazel-bin rm -rf $(CURDIR)/src/bazel-out rm -rf $(CURDIR)/src/bazel-src rm -rf $(CURDIR)/src/bazel-testlogs rm -rf $(CURDIR)/debian/third_party/platforms/BUILD rm -rf $(CURDIR)/debian/third_party/platforms/cpu rm -rf $(CURDIR)/debian/third_party/platforms/os rm -f $(CURDIR)/src/third_party/zip_code_jigyosyo/*.bazel rm -f $(CURDIR)/src/third_party/zip_code_ken_all/*.bazel override_dh_auto_install: desktop-file-install --dir=$(CURDIR)/debian/mozc-utils-gui/usr/share/applications \ $(CURDIR)/debian/setup-mozc.desktop desktop-file-install --dir=$(CURDIR)/debian/mozc-utils-gui/usr/share/applications \ $(CURDIR)/debian/ibus-setup-mozc-jp.desktop install -D -m 644 $(CURDIR)/src/data/images/unix/ime_product_icon_opensource-16.png \ $(CURDIR)/debian/fcitx-mozc-data/usr/share/icons/mozc/ime_product_icon_opensource-16.png # For debhelper 14 or later, make ELF writable in advance execute_before_dh_strip-arch: chmod +w debian/emacs-mozc-bin/usr/bin/mozc_emacs_helper chmod +w debian/fcitx5-mozc/usr/lib/$(DEB_HOST_MULTIARCH)/fcitx5/fcitx5-mozc.so chmod +w debian/ibus-mozc/usr/lib/ibus-mozc/ibus-engine-mozc chmod +w debian/mozc-server/usr/lib/mozc/mozc_renderer chmod +w debian/mozc-server/usr/lib/mozc/mozc_server chmod +w debian/mozc-utils-gui/usr/lib/mozc/mozc_tool chmod +w debian/uim-mozc/usr/lib/$(DEB_HOST_MULTIARCH)/uim/plugin/libuim-mozc.so chmod +w debian/libmozc-protocol/$(MOZC_PRIVATE_LIBDIR)/libmozc_ipc_pb.so chmod +w debian/libmozc-protocol/$(MOZC_PRIVATE_LIBDIR)/libmozc_protocol_pb.so # These are a private ABI between mozc's own binaries, not a public library. override_dh_makeshlibs: dh_makeshlibs --exclude=$(MOZC_PRIVATE_LIBDIR) # The generated libraries carry an unversioned SONAME, so dh_makeshlibs writes # no shlibs entry for them and dpkg-shlibdeps cannot map them to a package. # The dependency is declared explicitly in d/control instead. override_dh_shlibdeps: dh_shlibdeps -l$(CURDIR)/debian/libmozc-protocol$(MOZC_PRIVATE_LIBDIR) \ -- --ignore-missing-info override_dh_fixperms-arch: dh_fixperms chmod -x debian/emacs-mozc/usr/share/emacs/site-lisp/emacs-mozc/mozc.el chmod -x debian/ibus-mozc/usr/share/ibus/component/mozc.xml override_dh_fixperms-indep: dh_fixperms chmod -x debian/mozc-data/usr/share/icons/mozc/*.png .PHONY: override_dh_installemacsen override_dh_installemacsen: dh_installemacsen --priority=50 override_dh_builddeb: if dpkg-vendor --is ubuntu; then \ sed -i 's/^Recommends/Suggests/' debian/ibus-mozc/DEBIAN/control; \ fi dh_builddeb