git: e33286a12132 - main - japanese/mozc-server: Fix IPC handling and separate license definitions
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 19 Oct 2026 07:52:18 UTC
The branch main has been updated by hrs:
URL: https://cgit.FreeBSD.org/ports/commit/?id=e33286a121320b156e52a6bcd5405420c3071a97
commit e33286a121320b156e52a6bcd5405420c3071a97
Author: Hiroki Sato <hrs@FreeBSD.org>
AuthorDate: 2026-10-19 07:51:23 +0000
Commit: Hiroki Sato <hrs@FreeBSD.org>
CommitDate: 2026-10-19 07:51:23 +0000
japanese/mozc-server: Fix IPC handling and separate license definitions
- Set FreeBSD Unix socket permissions to 0600 with fchmod() before
bind(), and abort IPC initialization if permission setup fails.
- Close accepted sockets when peer credential validation fails,
preventing file descriptor leaks.
- Prevent zombie child processes in mozc_emacs_helper by setting
SA_NOCLDWAIT for SIGCHLD.
- Move license definitions and preparation rules into Makefile.licenses
to simplify the main Makefile. There is no functional change.
---
japanese/mozc-server/Makefile | 128 +------------------
japanese/mozc-server/files/Makefile.licenses | 142 +++++++++++++++++++++
.../mozc-server/files/patch-src-ipc-unix_ipc.cc | 24 +++-
.../patch-src-unix-emacs-mozc_emacs_helper.cc | 28 ++++
4 files changed, 194 insertions(+), 128 deletions(-)
diff --git a/japanese/mozc-server/Makefile b/japanese/mozc-server/Makefile
index c6e36abd34c4..d971fea52a0d 100644
--- a/japanese/mozc-server/Makefile
+++ b/japanese/mozc-server/Makefile
@@ -1,5 +1,6 @@
PORTNAME= mozc
PORTVERSION= 3.35.6354.101
+PORTREVISION= 1
CATEGORIES= japanese
DIST_SUBDIR= ${PORTNAME}
EXTRACT_ONLY= ${DISTFILE_DEFAULT}
@@ -29,16 +30,6 @@ CONFLICTS_INSTALL+= ${P}-2.*
.endfor
.if ${BUILD_MOZC_LIST:Mmozc_el} != "mozc_el"
-LICENSE= BSD3CLAUSE APACHE20 MIT
-LICENSE_COMB= multi
-LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.BSD3CLAUSE
-LICENSE_DISTFILES_BSD3CLAUSE= ${DISTFILE_DEFAULT} \
- protobuf-34.1.bazel.tar.gz
-LICENSE_FILE_APACHE20= ${WRKDIR}/LICENSE.abseil
-LICENSE_DISTFILES_APACHE20= abseil-cpp-20260107.1.tar.gz
-LICENSE_FILE_MIT= ${WRKDIR}/LICENSE.utf8_range
-LICENSE_DISTFILES_MIT= protobuf-34.1.bazel.tar.gz
-
BUILD_DEPENDS= bazel9>=9.0.0:devel/bazel9
USES= compiler:c++20-lang pkgconfig java:build python:3.12+,build
USE_CXXSTD= c++20
@@ -49,22 +40,7 @@ MAKE_ENV+= JAVA_HOME=${JAVA_HOME:Q}
.if ${BUILD_MOZC_LIST:Mmozc_server} == "mozc_server"
PKGNAMEPREFIX= ja-
PKGNAMESUFFIX= -server
-
-LICENSE+= BSD2CLAUSE NAISTL
-LICENSE_FILE_BSD2CLAUSE= ${WRKSRC}/src/japanese_usage_dictionary/LICENSE
-LICENSE_DISTFILES_BSD2CLAUSE= ${DISTFILE_udic}
-LICENSE_NAME_NAISTL= Nara Institute of Science and Technology License
-LICENSE_PERMS_NAISTL= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
-LICENSE_FILE_NAISTL= ${WRKSRC}/src/data/dictionary_oss/README.txt
-LICENSE_DISTFILES_NAISTL= ${DISTFILE_DEFAULT}
-LICENSE_FILE_MIT= ${WRKDIR}/LICENSE.MIT.server
-LICENSE_DISTFILES_MIT+= ${DISTFILE_DEFAULT}
.elif ${BUILD_MOZC_LIST:Mmozc_tool} == "mozc_tool"
-LICENSE+= NAISTL
-LICENSE_NAME_NAISTL= Nara Institute of Science and Technology License
-LICENSE_PERMS_NAISTL= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
-LICENSE_FILE_NAISTL= ${WRKSRC}/src/data/dictionary_oss/README.txt
-LICENSE_DISTFILES_NAISTL= ${DISTFILE_DEFAULT}
USES+= gl qt:6
USE_GL= gl
USE_QT= base
@@ -74,12 +50,7 @@ USE_GNOME+= glib20
USE_GL= gl
USE_QT= base
.elif ${BUILD_MOZC_LIST:Mmozc_el} == "mozc_el"
-LICENSE= BSD3CLAUSE BSD2CLAUSE
-LICENSE_COMB= multi
-LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.mozc-el
-LICENSE_DISTFILES_BSD3CLAUSE= ${DISTFILE_DEFAULT}
-LICENSE_FILE_BSD2CLAUSE= ${WRKDIR}/LICENSE.leim-list
-LICENSE_DISTFILES_BSD2CLAUSE=
+CATEGORIES+= elisp
USES+= emacs
.elif ${BUILD_MOZC_LIST:Muim_mozc} == "uim_mozc"
USES+= gettext-runtime
@@ -94,6 +65,7 @@ USES+= gettext-tools
.if ${BUILD_MOZC_LIST:Mmozc_el} != "mozc_el" || make(makesum)
. include "${FILESDIR}/Makefile.distfiles"
.endif
+. include "${FILESDIR}/Makefile.licenses"
EMACS_SITE_LISPDIR?= share/emacs/site-lisp
EXTRA_SUB_LIST= PREFIX LOCALBASE DOCSDIR EMACS_SITE_LISPDIR
@@ -115,26 +87,6 @@ post-extract-zipcode:
post-extract: post-extract-zipcode
.endif
-.if ${BUILD_MOZC_LIST:Mmozc_el} != "mozc_el"
-post-extract-mozc-licenses:
- ${TAR} -xOf \
- ${DISTDIR}/${DIST_SUBDIR}/protobuf-34.1.bazel.tar.gz \
- protobuf-34.1/third_party/utf8_range/LICENSE \
- > ${WRKDIR}/LICENSE.utf8_range
- ${INSTALL_DATA} ${WRKSRC}/LICENSE ${WRKDIR}/LICENSE.BSD3CLAUSE
- ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE
- ${TAR} -xOf \
- ${DISTDIR}/${DIST_SUBDIR}/protobuf-34.1.bazel.tar.gz \
- protobuf-34.1/LICENSE \
- >> ${WRKDIR}/LICENSE.BSD3CLAUSE
- ${TAR} -xOf \
- ${DISTDIR}/${DIST_SUBDIR}/abseil-cpp-20260107.1.tar.gz \
- abseil-cpp-20260107.1/LICENSE \
- > ${WRKDIR}/LICENSE.abseil
-
-post-extract: post-extract-mozc-licenses
-.endif
-
# mozc_server
.if ${BUILD_MOZC_LIST:Mmozc_server} == "mozc_server" || make(makesum)
@@ -170,20 +122,6 @@ PLIST_FILES+= bin/mozc \
%%DATADIR%%/icons/outlined/tool.svg
SUB_FILES+= mozc
-post-extract-mozc_server-mit: post-extract-mozc-licenses
- ${INSTALL_DATA} ${WRKDIR}/LICENSE.utf8_range \
- ${WRKDIR}/LICENSE.MIT.server
- ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.MIT.server
- ${AWK} '\
- /<h3>Tamachi Phonetic Kanji Alphabet / { section = 1 } \
- section && /^<pre>/ { body = 1; next } \
- body && /^<\/pre>/ { exit } \
- body { print }' \
- ${BUILD_WRKSRC}/data/installer/credits_en.html \
- >> ${WRKDIR}/LICENSE.MIT.server
-
-post-extract: post-extract-mozc_server-mit
-
do-build-mozc_server:
${BUILD_MOZC_CMD} \
//server:mozc_server \
@@ -273,9 +211,6 @@ do-install-ibus_mozc:
GH_TUPLE+= e-kato:macuim:7beac7b:MU
EXTRACT_ONLY+= ${DISTFILE_MU}
-LICENSE_DISTFILES_BSD3CLAUSE+= ${DISTFILE_MU}
-LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
-
LIB_DEPENDS+= libuim.so:textproc/uim
RUN_DEPENDS+= ${LOCALBASE}/libexec/mozc_server:japanese/mozc-server \
mozc_tool:japanese/mozc-tool
@@ -307,20 +242,6 @@ post-extract-uim_mozc:
post-extract: post-extract-uim_mozc
-post-extract-uim-licenses: post-extract-mozc-licenses post-extract-uim_mozc
- ${INSTALL_DATA} ${WRKDIR}/LICENSE.BSD3CLAUSE \
- ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
- ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
- ${SED} -n '1,/^[[:space:]]*\*\//p' \
- ${BUILD_WRKSRC}/unix/uim/mozc.cc \
- >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
- ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
- ${SED} '/^$$/q' \
- ${BUILD_WRKSRC}/unix/uim/key_translator.cc \
- >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
-
-post-extract: post-extract-uim-licenses
-
post-patch-uim_mozc:
${REINPLACE_CMD} -e "s,/usr/lib/mozc,${LOCALBASE}/libexec," \
${BUILD_WRKSRC}/unix/uim/scm/mozc-custom.scm
@@ -364,14 +285,6 @@ DISTFILES+= legalcode.txt:cc0
.endif
.if ${BUILD_MOZC_LIST:Mfcitx5_mozc} == "fcitx5_mozc"
-LICENSE+= LGPL20+ CC0-1.0
-LICENSE_FILE_LGPL20+ = ${WRKDIR}/LICENSE.LGPL20.fcitx5
-LICENSE_DISTFILES_LGPL20+ = ${DISTFILE_fcitx}
-LICENSE_DISTFILES_CC0-1.0= ${DISTFILE_fcitx}
-LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
-LICENSE_DISTFILES_BSD3CLAUSE+= ${DISTFILE_fcitx}
-LICENSE_FILE_CC0-1.0= ${WRKDIR}/LICENSE.CC0
-
LIB_DEPENDS+= libFcitx5Core.so:textproc/fcitx5
RUN_DEPENDS+= ${LOCALBASE}/libexec/mozc_server:japanese/mozc-server \
xdg-open:devel/xdg-utils \
@@ -395,31 +308,6 @@ post-extract-fcitx5_mozc:
${MV} ${WRKSRC_fcitx}/src/unix/fcitx/gen_fcitx_mozc_i18n.sh \
${BUILD_WRKSRC}/unix/fcitx5/
-post-extract-fcitx5-licenses: post-extract-mozc-licenses post-extract-fcitx5_mozc
- ${INSTALL_DATA} ${WRKDIR}/LICENSE.BSD3CLAUSE \
- ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
-.for src in fcitx_key_event_handler fcitx_key_translator mozc_client_pool \
- mozc_response_parser mozc_state surrounding_text_util
-. for ext in cc h
- ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
- ${SED} '/^$$/q' \
- ${BUILD_WRKSRC}/unix/fcitx5/${src}.${ext} \
- >> ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
-. endfor
-.endfor
- ${INSTALL_DATA} ${PORTSDIR}/Templates/Licenses/LGPL20 \
- ${WRKDIR}/LICENSE.LGPL20.fcitx5
-.for src in mozc_engine.cc mozc_engine.h mozc_engine_factory.cc i18nwrapper.h
- ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.LGPL20.fcitx5
- ${SED} -n '1,/^[[:space:]]*\*\//p' \
- ${BUILD_WRKSRC}/unix/fcitx5/${src} \
- >> ${WRKDIR}/LICENSE.LGPL20.fcitx5
-.endfor
- ${INSTALL_DATA} ${DISTDIR}/${DIST_SUBDIR}/legalcode.txt \
- ${WRKDIR}/LICENSE.CC0
-
-post-extract: post-extract-fcitx5-licenses
-
do-build-fcitx5_mozc:
${BUILD_MOZC_CMD} //unix/fcitx5:fcitx5-mozc.so
cd ${BUILD_WRKSRC}/unix/fcitx5 && \
@@ -465,7 +353,6 @@ do-install-fcitx5_mozc:
# mozc_el
.if ${BUILD_MOZC_LIST:Mmozc_el} == "mozc_el"
-CATEGORIES+= elisp
RUN_DEPENDS+= ${LOCALBASE}/libexec/mozc_server:japanese/mozc-server
NO_ARCH= yes
@@ -475,15 +362,6 @@ PLIST_DIRS+= ${EMACS_SITE_LISPDIR}/mozc
EXTRA_SUB_FILES+= unix/emacs/mozc.el
-post-extract-mozc-el-licenses:
- ${SED} -n '/^;; Copyright/p; /^;; Redistribution/,/^$$/p' \
- ${BUILD_WRKSRC}/unix/emacs/mozc.el \
- > ${WRKDIR}/LICENSE.mozc-el
- ${SED} '/^$$/q' ${FILESDIR}/leim-list.el \
- > ${WRKDIR}/LICENSE.leim-list
-
-post-extract: post-extract-mozc-el-licenses
-
do-build-mozc_el:
cd ${BUILD_WRKSRC}/unix/emacs && ${GZIP_CMD} mozc.el
diff --git a/japanese/mozc-server/files/Makefile.licenses b/japanese/mozc-server/files/Makefile.licenses
new file mode 100644
index 000000000000..fcfc789351f9
--- /dev/null
+++ b/japanese/mozc-server/files/Makefile.licenses
@@ -0,0 +1,142 @@
+.if ${BUILD_MOZC_LIST:Mmozc_el} != "mozc_el"
+LICENSE= BSD3CLAUSE APACHE20 MIT
+LICENSE_COMB= multi
+LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.BSD3CLAUSE
+LICENSE_DISTFILES_BSD3CLAUSE= ${DISTFILE_DEFAULT} \
+ protobuf-34.1.bazel.tar.gz
+LICENSE_FILE_APACHE20= ${WRKDIR}/LICENSE.abseil
+LICENSE_DISTFILES_APACHE20= abseil-cpp-20260107.1.tar.gz
+LICENSE_FILE_MIT= ${WRKDIR}/LICENSE.utf8_range
+LICENSE_DISTFILES_MIT= protobuf-34.1.bazel.tar.gz
+.endif
+
+.if ${BUILD_MOZC_LIST:Mmozc_server} == "mozc_server"
+LICENSE+= BSD2CLAUSE NAISTL
+LICENSE_FILE_BSD2CLAUSE= ${WRKSRC}/src/japanese_usage_dictionary/LICENSE
+LICENSE_DISTFILES_BSD2CLAUSE= ${DISTFILE_udic}
+LICENSE_NAME_NAISTL= Nara Institute of Science and Technology License
+LICENSE_PERMS_NAISTL= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+LICENSE_FILE_NAISTL= ${WRKSRC}/src/data/dictionary_oss/README.txt
+LICENSE_DISTFILES_NAISTL= ${DISTFILE_DEFAULT}
+LICENSE_FILE_MIT= ${WRKDIR}/LICENSE.MIT.server
+LICENSE_DISTFILES_MIT+= ${DISTFILE_DEFAULT}
+.elif ${BUILD_MOZC_LIST:Mmozc_tool} == "mozc_tool"
+LICENSE+= NAISTL
+LICENSE_NAME_NAISTL= Nara Institute of Science and Technology License
+LICENSE_PERMS_NAISTL= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+LICENSE_FILE_NAISTL= ${WRKSRC}/src/data/dictionary_oss/README.txt
+LICENSE_DISTFILES_NAISTL= ${DISTFILE_DEFAULT}
+.elif ${BUILD_MOZC_LIST:Mmozc_el} == "mozc_el"
+LICENSE= BSD3CLAUSE BSD2CLAUSE
+LICENSE_COMB= multi
+LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.mozc-el
+LICENSE_DISTFILES_BSD3CLAUSE= ${DISTFILE_DEFAULT}
+LICENSE_FILE_BSD2CLAUSE= ${WRKDIR}/LICENSE.leim-list
+LICENSE_DISTFILES_BSD2CLAUSE=
+.endif
+
+.if ${BUILD_MOZC_LIST:Mmozc_el} != "mozc_el"
+post-extract-mozc-licenses:
+ ${TAR} -xOf \
+ ${DISTDIR}/${DIST_SUBDIR}/protobuf-34.1.bazel.tar.gz \
+ protobuf-34.1/third_party/utf8_range/LICENSE \
+ > ${WRKDIR}/LICENSE.utf8_range
+ ${INSTALL_DATA} ${WRKSRC}/LICENSE ${WRKDIR}/LICENSE.BSD3CLAUSE
+ ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE
+ ${TAR} -xOf \
+ ${DISTDIR}/${DIST_SUBDIR}/protobuf-34.1.bazel.tar.gz \
+ protobuf-34.1/LICENSE \
+ >> ${WRKDIR}/LICENSE.BSD3CLAUSE
+ ${TAR} -xOf \
+ ${DISTDIR}/${DIST_SUBDIR}/abseil-cpp-20260107.1.tar.gz \
+ abseil-cpp-20260107.1/LICENSE \
+ > ${WRKDIR}/LICENSE.abseil
+
+post-extract: post-extract-mozc-licenses
+.endif
+
+# mozc_server
+.if ${BUILD_MOZC_LIST:Mmozc_server} == "mozc_server"
+
+post-extract-mozc_server-mit: post-extract-mozc-licenses
+ ${INSTALL_DATA} ${WRKDIR}/LICENSE.utf8_range \
+ ${WRKDIR}/LICENSE.MIT.server
+ ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.MIT.server
+ ${AWK} '\
+ /<h3>Tamachi Phonetic Kanji Alphabet / { section = 1 } \
+ section && /^<pre>/ { body = 1; next } \
+ body && /^<\/pre>/ { exit } \
+ body { print }' \
+ ${BUILD_WRKSRC}/data/installer/credits_en.html \
+ >> ${WRKDIR}/LICENSE.MIT.server
+
+post-extract: post-extract-mozc_server-mit
+.endif
+
+# uim_mozc
+.if ${BUILD_MOZC_LIST:Muim_mozc} == "uim_mozc"
+LICENSE_DISTFILES_BSD3CLAUSE+= ${DISTFILE_MU}
+LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
+
+post-extract-uim-licenses: post-extract-mozc-licenses post-extract-uim_mozc
+ ${INSTALL_DATA} ${WRKDIR}/LICENSE.BSD3CLAUSE \
+ ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
+ ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
+ ${SED} -n '1,/^[[:space:]]*\*\//p' \
+ ${BUILD_WRKSRC}/unix/uim/mozc.cc \
+ >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
+ ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
+ ${SED} '/^$$/q' \
+ ${BUILD_WRKSRC}/unix/uim/key_translator.cc \
+ >> ${WRKDIR}/LICENSE.BSD3CLAUSE.uim
+
+post-extract: post-extract-uim-licenses
+.endif
+
+# fcitx5_mozc
+.if ${BUILD_MOZC_LIST:Mfcitx5_mozc} == "fcitx5_mozc"
+LICENSE+= LGPL20+ CC0-1.0
+LICENSE_FILE_LGPL20+ = ${WRKDIR}/LICENSE.LGPL20.fcitx5
+LICENSE_DISTFILES_LGPL20+ = ${DISTFILE_fcitx}
+LICENSE_DISTFILES_CC0-1.0= ${DISTFILE_fcitx}
+LICENSE_FILE_BSD3CLAUSE= ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
+LICENSE_DISTFILES_BSD3CLAUSE+= ${DISTFILE_fcitx}
+LICENSE_FILE_CC0-1.0= ${WRKDIR}/LICENSE.CC0
+
+post-extract-fcitx5-licenses: post-extract-mozc-licenses post-extract-fcitx5_mozc
+ ${INSTALL_DATA} ${WRKDIR}/LICENSE.BSD3CLAUSE \
+ ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
+.for src in fcitx_key_event_handler fcitx_key_translator mozc_client_pool \
+ mozc_response_parser mozc_state surrounding_text_util
+. for ext in cc h
+ ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
+ ${SED} '/^$$/q' \
+ ${BUILD_WRKSRC}/unix/fcitx5/${src}.${ext} \
+ >> ${WRKDIR}/LICENSE.BSD3CLAUSE.fcitx5
+. endfor
+.endfor
+ ${INSTALL_DATA} ${PORTSDIR}/Templates/Licenses/LGPL20 \
+ ${WRKDIR}/LICENSE.LGPL20.fcitx5
+.for src in mozc_engine.cc mozc_engine.h mozc_engine_factory.cc i18nwrapper.h
+ ${ECHO_CMD} "" >> ${WRKDIR}/LICENSE.LGPL20.fcitx5
+ ${SED} -n '1,/^[[:space:]]*\*\//p' \
+ ${BUILD_WRKSRC}/unix/fcitx5/${src} \
+ >> ${WRKDIR}/LICENSE.LGPL20.fcitx5
+.endfor
+ ${INSTALL_DATA} ${DISTDIR}/${DIST_SUBDIR}/legalcode.txt \
+ ${WRKDIR}/LICENSE.CC0
+
+post-extract: post-extract-fcitx5-licenses
+.endif
+
+# mozc_el
+.if ${BUILD_MOZC_LIST:Mmozc_el} == "mozc_el"
+post-extract-mozc-el-licenses:
+ ${SED} -n '/^;; Copyright/p; /^;; Redistribution/,/^$$/p' \
+ ${BUILD_WRKSRC}/unix/emacs/mozc.el \
+ > ${WRKDIR}/LICENSE.mozc-el
+ ${SED} '/^$$/q' ${FILESDIR}/leim-list.el \
+ > ${WRKDIR}/LICENSE.leim-list
+
+post-extract: post-extract-mozc-el-licenses
+.endif
diff --git a/japanese/mozc-server/files/patch-src-ipc-unix_ipc.cc b/japanese/mozc-server/files/patch-src-ipc-unix_ipc.cc
index f4070da66eaf..7edf2a9406f7 100644
--- a/japanese/mozc-server/files/patch-src-ipc-unix_ipc.cc
+++ b/japanese/mozc-server/files/patch-src-ipc-unix_ipc.cc
@@ -1,4 +1,4 @@
---- src/ipc/unix_ipc.cc.orig 2026-10-17 20:10:12 UTC
+--- src/ipc/unix_ipc.cc.orig 2026-10-16 12:33:33 UTC
+++ src/ipc/unix_ipc.cc
@@ -28,13 +28,16 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -112,7 +112,7 @@
pid_t pid = 0;
if (::connect(socket_, reinterpret_cast<const sockaddr *>(&address),
sun_len) != 0 ||
-@@ -381,7 +417,12 @@ IPCServer::IPCServer(absl::string_view name, int32_t n
+@@ -381,10 +417,22 @@ IPCServer::IPCServer(absl::string_view name, int32_t n
int on = 1;
::setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char *>(&on),
sizeof(on));
@@ -124,8 +124,26 @@
+#endif // __FreeBSD__
if (is_file_socket) {
// Linux does not use files for IPC.
++#if defined(__FreeBSD__)
++ if (::fchmod(socket_, 0600) != 0) {
++ LOG(ERROR) << "fchmod() failed: " << strerror(errno);
++ return;
++ }
++#else // __FreeBSD__
::chmod(server_address_.c_str(), 0600);
-@@ -481,4 +522,4 @@ void IPCServer::Terminate() {
++#endif // __FreeBSD__
+ }
+ if (::bind(socket_, reinterpret_cast<sockaddr *>(&addr), sun_len) != 0) {
+ // The UNIX domain socket file (server_address_) already exists?
+@@ -434,6 +482,7 @@ void IPCServer::Loop() {
+ return;
+ }
+ if (!IsPeerValid(new_sock, &pid)) {
++ ::close(new_sock);
+ continue;
+ }
+
+@@ -481,4 +530,4 @@ void IPCServer::Terminate() {
} // namespace mozc
diff --git a/japanese/mozc-server/files/patch-src-unix-emacs-mozc_emacs_helper.cc b/japanese/mozc-server/files/patch-src-unix-emacs-mozc_emacs_helper.cc
new file mode 100644
index 000000000000..17e00e5fb7ee
--- /dev/null
+++ b/japanese/mozc-server/files/patch-src-unix-emacs-mozc_emacs_helper.cc
@@ -0,0 +1,28 @@
+--- src/unix/emacs/mozc_emacs_helper.cc.orig 2026-10-19 07:22:21 UTC
++++ src/unix/emacs/mozc_emacs_helper.cc
+@@ -31,6 +31,9 @@
+ #include <cstdio>
+ #include <iostream>
+ #include <memory>
++#if defined(__FreeBSD__)
++#include <signal.h>
++#endif
+ #include <string>
+ #include <vector>
+
+@@ -127,6 +130,15 @@ int main(int argc, char** argv) {
+
+ int main(int argc, char** argv) {
+ mozc::InitMozc(argv[0], &argc, &argv);
++
++#if defined(__FreeBSD__)
++ struct sigaction sa = {};
++ sa.sa_handler = SIG_DFL;
++ ::sigemptyset(&sa.sa_mask);
++ sa.sa_flags = SA_NOCLDWAIT;
++ CHECK_EQ(::sigaction(SIGCHLD, &sa, nullptr), 0);
++#endif
++
+ if (absl::GetFlag(FLAGS_suppress_stderr)) {
+ #ifdef _WIN32
+ constexpr char kPath[] = "NUL";