git: e33286a12132 - main - japanese/mozc-server: Fix IPC handling and separate license definitions

From: Hiroki Sato <hrs_at_FreeBSD.org>
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";