aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Barbieri <lssndrbarbieri@gmail.com>2022-06-22 04:34:24 +0200
committerAlessandro Barbieri <lssndrbarbieri@gmail.com>2022-06-26 04:29:44 +0200
commit3a19c07b162cb1de41d98cf9d3b523a6397180d5 (patch)
tree5a4a51084db2cd0ece2c372519fe0de5d6e4ebb5 /app-i18n
parentcannadic.eclass: add cannadic eclass (diff)
downloadguru-3a19c07b162cb1de41d98cf9d3b523a6397180d5.tar.gz
guru-3a19c07b162cb1de41d98cf9d3b523a6397180d5.tar.bz2
guru-3a19c07b162cb1de41d98cf9d3b523a6397180d5.zip
app-i18n/canna: new package, add 3.7_p3-r4
Signed-off-by: Alessandro Barbieri <lssndrbarbieri@gmail.com>
Diffstat (limited to 'app-i18n')
-rw-r--r--app-i18n/canna/Manifest2
-rw-r--r--app-i18n/canna/canna-3.7_p3-r4.ebuild207
-rw-r--r--app-i18n/canna/files/Canna-3.6-dont-grab-ctrl-o.patch11
-rw-r--r--app-i18n/canna/files/Canna-3.6-fix-warnings.patch10
-rw-r--r--app-i18n/canna/files/Canna-3.6-wconv.patch18
-rw-r--r--app-i18n/canna/files/Canna-3.7p1-fix-duplicated-strings.patch93
-rw-r--r--app-i18n/canna/files/Canna-3.7p1-notimeout.patch12
-rw-r--r--app-i18n/canna/files/Canna-3.7p3-fix-gcc4-warning.patch136
-rw-r--r--app-i18n/canna/files/Canna-3.7p3-redecl.patch11
-rw-r--r--app-i18n/canna/files/Canna-3.7p3-yenbs.patch11
-rw-r--r--app-i18n/canna/files/Canna-oldsock.patch29
-rw-r--r--app-i18n/canna/files/canna-05_fix_spelling_error.patch63
-rw-r--r--app-i18n/canna/files/canna-06_fix_manpages_error.patch37
-rw-r--r--app-i18n/canna/files/canna-07_fix_ftbfs_on_hurd-i386.patch16
-rw-r--r--app-i18n/canna/files/canna-10_fix_configure.ac.patch19
-rw-r--r--app-i18n/canna/files/canna-11_fix_spelling_error_in_binary.patch91
-rw-r--r--app-i18n/canna/files/canna-12_make_the_output_of_mkbindic_reproducible.patch61
-rw-r--r--app-i18n/canna/files/canna-Wformat-security.patch199
-rw-r--r--app-i18n/canna/files/canna-Wformat.patch11
-rw-r--r--app-i18n/canna/files/canna-canuum.patch34
-rw-r--r--app-i18n/canna/files/canna-gentoo.patch146
-rw-r--r--app-i18n/canna/files/canna-kpdef.patch18
-rw-r--r--app-i18n/canna/files/canna-overflow.patch20
-rw-r--r--app-i18n/canna/files/canna-posix-sort.patch11
-rw-r--r--app-i18n/canna/files/canna-respect-flags.patch29
-rw-r--r--app-i18n/canna/files/canna-rundir.patch15
-rw-r--r--app-i18n/canna/files/canna-tmpfiles.conf2
-rw-r--r--app-i18n/canna/files/canna.confd7
-rw-r--r--app-i18n/canna/files/canna.hosts1
-rw-r--r--app-i18n/canna/files/canna.initd31
-rw-r--r--app-i18n/canna/files/canna.service12
-rw-r--r--app-i18n/canna/files/cannaping.c46
-rw-r--r--app-i18n/canna/files/dot-canna195
-rw-r--r--app-i18n/canna/files/update-canna-dics_dir36
-rw-r--r--app-i18n/canna/metadata.xml12
35 files changed, 1652 insertions, 0 deletions
diff --git a/app-i18n/canna/Manifest b/app-i18n/canna/Manifest
new file mode 100644
index 000000000..56de9dcb2
--- /dev/null
+++ b/app-i18n/canna/Manifest
@@ -0,0 +1,2 @@
+DIST 09_fix_manpages_error.patch 35789 BLAKE2B 83765aef44cf459922b027d6ea5e083fc793da5cff422fd4aae68d4fd2b921553b32f0d5afb488141dd8b87ceeb3495f256b33a3bb55fcd6c959a117da5ea015 SHA512 6b80744743a0421fdac30d4d470f3e0cc53c5aedaa3b9ca0c7b12db587c2dd02333d166fabda428dd8618a36b5b559dfd6a64db44b98d490d8a920703c38f6b4
+DIST Canna37p3.tar.bz2 1263065 BLAKE2B b5fb496c0ef71dc57b2da1409eea2238ea62ece3286d498d694bc7a18cb0f5e052dca95d692b4302988acd2199d350b893ae4aedc91aab0b737c3e0675be9cba SHA512 82846f2393aa2654dd2c97a93178098b8bd11e5409b584447f1b6fdf303adacc9802e2293cafd98b68af8b69622625ed00aa9712bf270feaa119adfdf4211158
diff --git a/app-i18n/canna/canna-3.7_p3-r4.ebuild b/app-i18n/canna/canna-3.7_p3-r4.ebuild
new file mode 100644
index 000000000..16d07b2a7
--- /dev/null
+++ b/app-i18n/canna/canna-3.7_p3-r4.ebuild
@@ -0,0 +1,207 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools cannadic edo systemd tmpfiles toolchain-funcs
+
+MY_P="Canna${PV//[._]/}"
+MYPV="${PV/_/}"
+
+DESCRIPTION="A client-server based Kana-Kanji conversion system"
+HOMEPAGE="http://canna.osdn.jp/"
+SRC_URI="
+ mirror://sourceforge.jp/${PN}/9565/${MY_P}.tar.bz2
+ https://sources.debian.org/data/main/c/${PN}/${MYPV}-19/debian/patches/09_fix_manpages_error.patch
+"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="MIT GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="canuum doc ipv6"
+
+RDEPEND="
+ acct-group/canna
+ acct-user/canna
+ canuum? (
+ dev-libs/libspt
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ x11-misc/gccmakedep
+ x11-misc/imake
+ canuum? ( virtual/pkgconfig )
+ doc? (
+ app-text/ghostscript-gpl
+ dev-texlive/texlive-langjapanese
+ dev-texlive/texlive-latexrecommended
+ )
+"
+PATCHES=(
+ "${FILESDIR}/Canna-3.6-dont-grab-ctrl-o.patch"
+ "${FILESDIR}/Canna-oldsock.patch"
+ "${FILESDIR}/Canna-3.6-fix-warnings.patch"
+ "${FILESDIR}/Canna-3.6-wconv.patch"
+ "${FILESDIR}/Canna-3.7p1-fix-duplicated-strings.patch"
+ "${FILESDIR}/Canna-3.7p1-notimeout.patch"
+ "${FILESDIR}/Canna-3.7p3-fix-gcc4-warning.patch"
+ "${FILESDIR}/Canna-3.7p3-redecl.patch"
+ "${FILESDIR}/Canna-3.7p3-yenbs.patch"
+ "${FILESDIR}/${PN}-gentoo.patch"
+ "${FILESDIR}/${PN}-05_fix_spelling_error.patch"
+ "${FILESDIR}/${PN}-06_fix_manpages_error.patch"
+ "${FILESDIR}/${PN}-07_fix_ftbfs_on_hurd-i386.patch"
+ "${FILESDIR}/${PN}-Wformat.patch"
+ "${FILESDIR}/${PN}-Wformat-security.patch"
+ "${DISTDIR}/09_fix_manpages_error.patch"
+ "${FILESDIR}/${PN}-10_fix_configure.ac.patch"
+ "${FILESDIR}/${PN}-11_fix_spelling_error_in_binary.patch"
+ "${FILESDIR}/${PN}-12_make_the_output_of_mkbindic_reproducible.patch"
+ "${FILESDIR}/${PN}-canuum.patch"
+ "${FILESDIR}/${PN}-kpdef.patch"
+ "${FILESDIR}/${PN}-overflow.patch"
+ "${FILESDIR}/${PN}-posix-sort.patch"
+ "${FILESDIR}/${PN}-respect-flags.patch"
+ "${FILESDIR}/${PN}-rundir.patch"
+)
+
+src_prepare() {
+ tc-export CC LD AR
+ export CDEBUGFLAGS="${CFLAGS}"
+ export LOCAL_LDFLAGS="${LDFLAGS}"
+ export SHLIBGLOBALSFLAGS="${LDFLAGS}"
+ export LOCAL_LDFLAGS="${LDFLAGS}"
+ export CCOPTIONS="${CFLAGS} ${CPPFLAGS}"
+
+ default
+
+ sed \
+ -e "/DefLibCannaDir/s:/lib$:/$(get_libdir):" \
+ -e "/UseInet6/s:0:$(usex ipv6 1 0):" \
+ -i ${PN^c}.conf \
+ || die
+
+ eautoreconf
+ rm -rf autom4te.cache || die
+ if use canuum; then
+ pushd canuum || die
+ mv configure.{in,ac} || die
+ eautoreconf
+ rm -rf autom4te.cache || die
+ popd || die
+ fi
+}
+
+src_configure() {
+ xmkmf -a || die
+
+ if use canuum; then
+ pushd canuum >/dev/null || die
+ xmkmf -a || die
+ # workaround for sys-libs/ncurses[tinfo]
+ sed -i "/^TERMCAP_LIB/s:=.*:=$($(tc-getPKG_CONFIG) --libs ncurses):" Makefile || die
+ popd >/dev/null || die
+ fi
+ if use doc; then
+ pushd doc/man/guide/tex >/dev/null || die
+ xmkmf -a || die
+ popd >/dev/null || die
+ fi
+}
+
+src_compile() {
+ # bug #279706
+ emake -j1 canna \
+ CC="${CC}" \
+ AR="${AR} -cq" \
+ CDEBUGFLAGS="${CFLAGS}" \
+ LOCAL_LDFLAGS="${LDFLAGS}" \
+ SHLIBGLOBALSFLAGS="${LDFLAGS}" \
+ CCOPTIONS="${CFLAGS} ${CPPFLAGS}"
+
+ edo ${CC} ${CFLAGS} ${LDFLAGS} -fPIE "${FILESDIR}/cannaping.c" -o ./misc/cannaping -I./include -L./lib/canna -lcanna
+
+ if use canuum; then
+ einfo "Compiling canuum"
+ emake -C canuum -j1 canuum \
+ CC="${CC}" \
+ AR="${AR} -cq" \
+ CDEBUGFLAGS="${CFLAGS}" \
+ LOCAL_LDFLAGS="${LDFLAGS}" \
+ SHLIBGLOBALSFLAGS="${LDFLAGS}" \
+ CCOPTIONS="${CFLAGS} ${CPPFLAGS}"
+ fi
+
+ if use doc; then
+ # NOTE: build fails if infinality enabled in fontconfig
+ einfo "Compiling DVI, PS, and PDF documents"
+ # bug #223077
+ export JLATEXCMD="platex -kanji=euc"
+ export DVI2PSCMD="dvips"
+ export VARTEXFONTS="${T}/fonts"
+ emake -C doc/man/guide/tex -j1 canna.ps canna.pdf
+ fi
+}
+
+src_install() {
+ emake DESTDIR="${D}" install install.man
+ einstalldocs
+ dodoc *CHANGES* INSTALL* RKCCONF* WHATIS*
+
+ if use canuum; then
+ emake -C canuum DESTDIR="${D}" install install.man
+ docinto canuum
+ dodoc README.jp
+ fi
+
+ use doc && dodoc doc/man/guide/tex/canna.{dvi,ps,pdf}
+
+ # for backward compatibility
+ dosbin "${FILESDIR}/update-canna-dics_dir"
+
+ dobin ./misc/cannaping
+ exeinto /usr/libexec/canna
+ doexe dic/ideo/pubdic/pod
+
+ insinto /etc
+ newins "${FILESDIR}/canna.hosts" hosts.canna
+
+ insinto /etc/canna
+ newins "${FILESDIR}/dot-canna" "default.canna"
+ newins "${FILESDIR}/canna.hosts" "cannahosts"
+
+ insinto /etc/canna/dics.dir.d
+ newins "${ED}/var/lib/canna/dic/canna/dics.dir" 00canna.dics.dir
+ rm -r "${ED}/var/lib/canna/dic/canna/dics.dir" || die
+
+ keepdir /var/lib/canna/dic/{user,group}
+ fowners canna:canna /var/lib/canna
+ fperms 0775 /var/lib/canna/dic/{user,group}
+
+ keepdir /var/log/canna
+ fowners canna:canna /var/log/canna
+
+ newconfd "${FILESDIR}/canna.confd" canna
+ newinitd "${FILESDIR}/canna.initd" canna
+
+ systemd_dounit "${FILESDIR}/canna.service"
+ newtmpfiles "${FILESDIR}/canna-tmpfiles.conf" "canna.conf"
+
+ find "${ED}" -type f -name "*.a" -delete || die
+}
+
+pkg_postinst() {
+ tmpfiles_process canna.conf
+ update-cannadic-dir
+
+ if ! locale -a | grep -iq "ja_JP.eucjp"; then
+ elog "Some dictionary tools in this package require ja_JP.EUC-JP locale."
+ elog
+ elog "# echo 'ja_JP.EUC-JP EUC-JP' >> ${EROOT}/etc/locale.gen"
+ elog "# locale-gen"
+ elog
+ fi
+}
diff --git a/app-i18n/canna/files/Canna-3.6-dont-grab-ctrl-o.patch b/app-i18n/canna/files/Canna-3.6-dont-grab-ctrl-o.patch
new file mode 100644
index 000000000..c5fccdbd7
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.6-dont-grab-ctrl-o.patch
@@ -0,0 +1,11 @@
+--- a/lib/canna/alphamap.h
++++ b/lib/canna/alphamap.h
+@@ -65,7 +65,7 @@
+ /* C-l */ CANNA_FN_SelfInsert,
+ /* C-m */ CANNA_FN_SelfInsert,
+ /* C-n */ CANNA_FN_SelfInsert,
+-/* C-o */ CANNA_FN_JapaneseMode,
++/* C-o */ CANNA_FN_SelfInsert,
+ /* C-p */ CANNA_FN_SelfInsert,
+ /* C-q */ CANNA_FN_SelfInsert,
+ /* C-r */ CANNA_FN_SelfInsert,
diff --git a/app-i18n/canna/files/Canna-3.6-fix-warnings.patch b/app-i18n/canna/files/Canna-3.6-fix-warnings.patch
new file mode 100644
index 000000000..74f134eb1
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.6-fix-warnings.patch
@@ -0,0 +1,10 @@
+--- a/lib/canna/kctrl.c
++++ b/lib/canna/kctrl.c
+@@ -27,6 +27,7 @@
+ #include "canna.h"
+
+ #include <errno.h>
++#include <string.h>
+ #include <sys/types.h>
+ #include <canna/mfdef.h>
+
diff --git a/app-i18n/canna/files/Canna-3.6-wconv.patch b/app-i18n/canna/files/Canna-3.6-wconv.patch
new file mode 100644
index 000000000..90fa049f0
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.6-wconv.patch
@@ -0,0 +1,18 @@
+--- a/server/wconvert.c
++++ b/server/wconvert.c
+@@ -2096,12 +2096,12 @@
+ char *buf = (char *)0;
+
+ if (validcontext(cxnum, client, wThrough)) {
+- buf = malloc((int)Request.type20.bufsize);
++ content_size = Request.type20.datalen - (SIZEOFINT * 2 + SIZEOFSHORT);
++ buf = malloc(content_size);
+ if (buf) {
+- content_size = Request.type20.datalen - (SIZEOFINT * 2 + SIZEOFSHORT);
+ bcopy(Request.type20.buf, buf, content_size);
+ stat = size = RkThrough(cxnum, Request.type20.command,
+- buf, content_size, (int)Request.type20.bufsize);
++ buf, content_size, content_size);
+ }
+ }
+ retval = SendType6Reply(client, wThrough, EXTPROTO, stat, buf, size);
diff --git a/app-i18n/canna/files/Canna-3.7p1-fix-duplicated-strings.patch b/app-i18n/canna/files/Canna-3.7p1-fix-duplicated-strings.patch
new file mode 100644
index 000000000..303f79255
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.7p1-fix-duplicated-strings.patch
@@ -0,0 +1,93 @@
+--- a/lib/canna/romaji.c
++++ b/lib/canna/romaji.c
+@@ -21,7 +21,7 @@
+ */
+
+ #if !defined(lint) && !defined(__CODECENTER__)
+-static char rcs_id[] = "@(#) 102.1 $Id: romaji.c,v 1.10 2003/09/17 08:50:53 aida_s Exp $";
++static char rcs_id[] = "@(#) 102.1 $Id: romaji.c,v 1.11 2004/03/15 04:33:23 aida_s Exp $";
+ #endif /* lint */
+
+ #include "canna.h"
+@@ -2626,6 +2626,7 @@
+ yc->englishtype = CANNA_ENG_KANA;
+ yc->cStartp = yc->cRStartp = 0;
+ yc->jishu_kEndp = 0;
++ yc->n_susp_chars = 0;
+ }
+
+ static int
+@@ -2782,8 +2783,13 @@
+ }
+ yc->last_rule = 0;
+ howManyDelete = howFarToGoBackward(yc);
+- if (howManyDelete > 0 && (yc->generalFlags & CANNA_YOMI_BREAK_ROMAN)) {
+- yc->generalFlags &= ~CANNA_YOMI_BREAK_ROMAN;
++ if (howManyDelete > 0 && (yc->generalFlags & CANNA_YOMI_BREAK_ROMAN)
++ && (yc->kAttr[yc->kCurs] & SENTOU)) {
++ /*
++ * ローマ字1文字に対応する仮名を消した時はローマ字、仮名とも
++ * SENTOUフラグが1個減る。
++ * そうでないときはSENTOUフラグの個数は変わらない
++ */
+ yc->rStartp = yc->rCurs - 1;
+ while ( yc->rStartp > 0 && !(yc->rAttr[yc->rStartp] & SENTOU) ) {
+ yc->rStartp--;
+@@ -2792,16 +2798,23 @@
+ yc->kRStartp = yc->kCurs - 1;
+ while ( yc->kRStartp > 0 && !(yc->kAttr[yc->kRStartp] & SENTOU) )
+ yc->kRStartp--;
++ /* これ必ず真では? */
+ prevflag = (yc->kAttr[yc->kRStartp] & SENTOU);
+ kanaReplace(yc->kRStartp - yc->kCurs,
+ yc->romaji_buffer + yc->rStartp,
+ yc->rCurs - yc->rStartp,
+ 0);
++ /* ローマ字1文字に対応する仮名を消したときは最初からSENTOUである */
+ yc->kAttr[yc->kRStartp] |= prevflag;
+ yc->n_susp_chars = 0; /* とりあえずクリアしておく */
+ makePhonoOnBuffer(d, yc, (unsigned char)0, 0, 0);
++ /* 以前は常にフラグを下げていたが、未変換ローマ字が残っているときは
++ * フラグを下げないことにする */
++ if (yc->kRStartp == yc->kCurs)
++ yc->generalFlags &= ~CANNA_YOMI_BREAK_ROMAN;
+ }
+ else {
++ yc->generalFlags &= ~CANNA_YOMI_BREAK_ROMAN;
+ if ( yc->kAttr[yc->kCurs - howManyDelete] & HENKANSUMI ) {
+ if (yc->kAttr[yc->kCurs - howManyDelete] & SENTOU) {
+ /* ローマ字かな変換の先頭だったら */
+@@ -2821,6 +2834,12 @@
+ yc->rEndp -= n;
+ }
+ else {
++ /* 仮名のカーソル位置は先頭になるのでローマ字のカーソルも動かす*/
++ while ( yc->rCurs > 0 && !(yc->rAttr[--yc->rCurs] & SENTOU) )
++ ;
++ if (yc->rCurs < yc->rStartp) {
++ yc->rStartp = yc->rCurs;
++ }
+ yc->kAttr[yc->kCurs] |= SENTOU;
+ }
+ }
+@@ -2829,6 +2848,12 @@
+ romajiReplace(-howManyDelete, (wchar_t *)NULL, 0, 0);
+ }
+ kanaReplace(-howManyDelete, (wchar_t *)NULL, 0, 0);
++ if ((yc->rAttr[yc->rCurs] & SENTOU) && yc->kRStartp == yc->kCurs) {
++ /* 未変換のローマ字を消してしまったので、次に入力したローマ字は
++ * SENTOUになる方が自然だろう
++ */
++ yc->rStartp = yc->rCurs;
++ }
+ }
+ debug_yomi(yc);
+ return(0);
+@@ -2944,6 +2969,7 @@
+ currentModeInfo(d);
+ }
+ makeYomiReturnStruct(d);
++ debug_yomi(yc);
+ return 0;
+ }
+
diff --git a/app-i18n/canna/files/Canna-3.7p1-notimeout.patch b/app-i18n/canna/files/Canna-3.7p1-notimeout.patch
new file mode 100644
index 000000000..3f27a32cc
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.7p1-notimeout.patch
@@ -0,0 +1,12 @@
+ゃ若祉<ゃCanna37p1.orig/lib/RKC/.wconvert.c.swpCanna37p1/lib/RKC/.wconvert.c.swp障
+--- a/lib/RKC/conf.c
++++ b/lib/RKC/conf.c
+@@ -1496,7 +1496,7 @@
+ };
+
+ const NumberDefaultRec host_num_defaults[] = {
+- { CONF_SERVER_TIMEOUT, 1500u },
++ { CONF_SERVER_TIMEOUT, 0u },
+ };
+
+ const char *
diff --git a/app-i18n/canna/files/Canna-3.7p3-fix-gcc4-warning.patch b/app-i18n/canna/files/Canna-3.7p3-fix-gcc4-warning.patch
new file mode 100644
index 000000000..42e9ee3a8
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.7p3-fix-gcc4-warning.patch
@@ -0,0 +1,136 @@
+--- a/cmd/crxgram/crxgram.c
++++ b/cmd/crxgram/crxgram.c
+@@ -485,7 +485,7 @@
+ int j;
+
+ nextS = scanToken(nextS, namevec, sizeof(namevec));
+- name = strtok(namevec, SEP);
++ name = strtok((char *)namevec, SEP);
+ for (j = 0; name && j < 255;) {
+ if (r = probeIdent(Row, name))
+ rdata[i][j++] = r->rownum;
+--- a/cmd/cshost/cshost.c
++++ b/cmd/cshost/cshost.c
+@@ -152,12 +152,12 @@
+ goto protoerr;
+ assert(wp + 2 <= endp);
+ printf("HOST NAME:%s\n", wp ) ;
+- wp += strlen( wp ) + 1 ;
++ wp += strlen((char *) wp ) + 1 ;
+ if( *wp ) {
+ printf("USER NAME:" ) ;
+ while( *wp ) {
+ printf("%s ", wp ) ;
+- wp += strlen( wp ) + 1 ;
++ wp += strlen((char *) wp ) + 1 ;
+ }
+ } else
+ printf("ALL USER" ) ;
+--- a/cmd/wtoc/wtoc.c
++++ b/cmd/wtoc/wtoc.c
+@@ -144,8 +144,8 @@
+ int hindo;
+ {
+ if( !strcmp((char *)hinshi,"#kxuru") || !strcmp((char *)hinshi,"#sxuru")){
+- strcat(yomi,"る");
+- strcat(kouho,"る");
++ strcat((char *)yomi,"る");
++ strcat((char *)kouho,"る");
+ }
+ if( hindo == 0 )
+ fprintf( fp, "%s %s %s \n", yomi, hinshi, kouho );
+--- a/lib/canna/ebind.c
++++ b/lib/canna/ebind.c
+@@ -364,7 +364,7 @@
+ /* list_cbはKC_setListCallbackでd->elistcbに引っ越す */
+ list_cb.client_data = (char *)arg;
+ list_cb.callback_func = &EUCListCallback;
+- ret = XwcKanjiControl2(display, window, request, (char *)&list_cb);
++ ret = XwcKanjiControl2(display, window, request, (BYTE *)&list_cb);
+ goto return_ret;
+ /* FALLTHROUGH */
+ default: /* ワイドでもEUCでも変わらないもの */
+--- a/lib/canna/obind.c
++++ b/lib/canna/obind.c
+@@ -500,7 +500,7 @@
+ /* list_cbはKC_setListCallbackでd->elistcbに引っ越す */
+ list_cb.client_data = (char *)arg;
+ list_cb.callback_func = &owcListCallback;
+- ret = XwcKanjiControl2(display, window, request, (char *)&list_cb);
++ ret = XwcKanjiControl2(display, window, request, (BYTE *)&list_cb);
+ goto return_ret;
+ default: /* 新ワイドと変わらないもの */
+ ret = XwcKanjiControl2(display, window, request, arg);
+--- a/server/convert.c
++++ b/server/convert.c
+@@ -1506,7 +1506,7 @@
+ const char *username;
+ const char *hostname;
+ {
+- int (*ReqCallFunc) pro((char *, int)) ;
++ int (*ReqCallFunc) pro((BYTE *, int)) ;
+ register Req0 *req0 = &Request.Request0 ;
+ const char *username0 = username ? username : "";
+ const char *hostname0 = hostname ? hostname : "";
+--- a/server/wconvert.c
++++ b/server/wconvert.c
+@@ -189,7 +189,7 @@
+ size_t size;
+ {
+ ir_debug( Dmsg(10, "WriteClient:") );
+- ir_debug( DebugDump( 10, buf, size ) );
++ ir_debug( DebugDump( 10, (const char *)buf, size ) );
+ return ClientBuf_store_reply(client->client_buf, buf, size);
+ }
+ #else
+@@ -1372,8 +1372,8 @@
+ /* 以下、パーミッションのチェック */
+ stat = ACCES;
+ if (checkPermissionToRead(client, dirname, (char *)0) >= 0) {
+- stat = RkwListDic(cxnum, (unsigned char *)dirname,
+- (unsigned char *)dicnames, requestsize);
++ stat = RkwListDic(cxnum, (char *)dirname,
++ (char *)dicnames, requestsize);
+ }
+
+ listdicdone:
+@@ -1403,7 +1403,7 @@
+ ir_debug( Dmsg(5, "dicname = %s\n",
+ (req->dicname)?req->dicname:null) );
+
+- stat = (char)RkwCreateDic(cxnum, (unsigned char *)req->dicname,
++ stat = (char)RkwCreateDic(cxnum, (char *)req->dicname,
+ req->mode);
+ }
+
+@@ -1438,7 +1438,7 @@
+ ir_debug( Dmsg(5, "dicname = %s\n",
+ (req->dicname)?req->dicname:null) );
+
+- stat = (char)RkwRemoveDic(cxnum, (unsigned char *)req->dicname,
++ stat = (char)RkwRemoveDic(cxnum, (char *)req->dicname,
+ req->mode);
+ }
+
+@@ -1456,8 +1456,8 @@
+
+ if (validcontext(cxnum, client, wRenameDictionary)) {
+ diclen = strlen(req->dicname) + 1 ;
+- stat = RkwRenameDic(cxnum, (unsigned char *)req->dicname,
+- (unsigned char *)&(req->dicname)[diclen],
++ stat = RkwRenameDic(cxnum, (char *)req->dicname,
++ (char *)&(req->dicname)[diclen],
+ req->mode);
+ }
+ return SendType2Reply(client, wRenameDictionary, EXTPROTO, stat);
+@@ -1950,8 +1950,8 @@
+ ir_debug( Dmsg(5, "dicname = %s\n", Request.type15.dicname) );
+ ir_debug( Dmsg(5, "username = %s\n", username) );
+
+- stat = (RkwQueryDic(cxnum, (unsigned char *)username,
+- (unsigned char *)Request.type15.dicname,
++ stat = (RkwQueryDic(cxnum, (char *)username,
++ (char *)Request.type15.dicname,
+ dicinfo) < 0) ? -1 : 0;
+
+ if (stat < 0) {
diff --git a/app-i18n/canna/files/Canna-3.7p3-redecl.patch b/app-i18n/canna/files/Canna-3.7p3-redecl.patch
new file mode 100644
index 000000000..816b73887
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.7p3-redecl.patch
@@ -0,0 +1,11 @@
+--- a/lib/canna/lisp.c
++++ b/lib/canna/lisp.c
+@@ -1355,8 +1355,6 @@
+ static int
+ tyi()
+ {
+- char *gets(), *fgets();
+-
+ if (untyibuf) {
+ int ret = untyibuf[--untyip];
+ if (untyip == 0) {
diff --git a/app-i18n/canna/files/Canna-3.7p3-yenbs.patch b/app-i18n/canna/files/Canna-3.7p3-yenbs.patch
new file mode 100644
index 000000000..837fecdca
--- /dev/null
+++ b/app-i18n/canna/files/Canna-3.7p3-yenbs.patch
@@ -0,0 +1,11 @@
+--- a/lib/RK/RkGetDic.man
++++ b/lib/RK/RkGetDic.man
+@@ -41,7 +41,7 @@
+ Dictionary names are got in the area \f2dics\f1 in the following format:
+ .P
+ .RS 0.2c
+-dictionary-name-1 ¥0 dictionary-name-2 ¥0 ... dictionary-name-n ¥0 ¥0
++dictionary-name-1 \\0 dictionary-name-2 \\0 ... dictionary-name-n \\0 \\0
+ .RE
+ .P
+ The size of the area \f2dics\f1 is given in bytes by \f2maxdics\f1. The dictionary list is truncated in character strings when it exceeds this size.
diff --git a/app-i18n/canna/files/Canna-oldsock.patch b/app-i18n/canna/files/Canna-oldsock.patch
new file mode 100644
index 000000000..f62ee6c97
--- /dev/null
+++ b/app-i18n/canna/files/Canna-oldsock.patch
@@ -0,0 +1,29 @@
+--- a/lib/RKC/wconvert.c
++++ b/lib/RKC/wconvert.c
+@@ -150,8 +150,25 @@
+ if ((ServerFD = socket((int) addr->sa_family, SOCK_STREAM, 0)) >= 0){
+ if( try_connect( ServerFD, addr, sizeof unaddr ) < 0 ) {
+ close( ServerFD ) ;
+- return( -1 ) ;
++ ServerFD = -1;
++ }
++ }
++ if (ServerFD < 0) {
++ /* for the backward compatibility */
++#define OLD_IR_UNIX_PATH "/tmp/.iroha_unix/IROHA"
++
++ if (number)
++ sprintf (unaddr.sun_path, "%s:%d", OLD_IR_UNIX_PATH, number);
++ else
++ strcpy (unaddr.sun_path, OLD_IR_UNIX_PATH);
++
++ if ((ServerFD = socket ((int) addr->sa_family, SOCK_STREAM, 0)) >= 0) {
++ if (try_connect (ServerFD, addr, sizeof (unaddr)) < 0) {
++ close (ServerFD);
++ return -1;
++ }
+ }
++#undef OLD_IR_UNIX_PATH
+ }
+ return( ServerFD ) ;
+ }
diff --git a/app-i18n/canna/files/canna-05_fix_spelling_error.patch b/app-i18n/canna/files/canna-05_fix_spelling_error.patch
new file mode 100644
index 000000000..372c7a627
--- /dev/null
+++ b/app-i18n/canna/files/canna-05_fix_spelling_error.patch
@@ -0,0 +1,63 @@
+## 06_fix_spelling_error by HIGUCHI Daisuke (VDR dai) <dai@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: eliminate lintian warning: spelling-error-in-{binary,manpages}
+
+--- a/cmd/wtoc/wtoc.c
++++ b/cmd/wtoc/wtoc.c
+@@ -195,7 +195,7 @@ main(argc,argv)
+ #endif
+ }
+ else { /* 引数が不正 */
+- fprintf(stderr,gettxt("cannacmd:50", "Usage: wtoc [-f part-of-speach table] [wnndic] [cannadic]\n"));
++ fprintf(stderr,gettxt("cannacmd:50", "Usage: wtoc [-f part-of-speech table] [wnndic] [cannadic]\n"));
+ exit(2);
+ }
+ if( argc >= (2 + option*2) ) { /* Wnn辞書をオープン */
+--- a/cmd/ctow/ctow.c
++++ b/cmd/ctow/ctow.c
+@@ -256,9 +256,9 @@ char *argv[];
+ hinshis = chghinshi(h, hinshiSize, taiou, fsize);
+ if (!strcmp(hinshis,"")) {
+ fprintf(stderr,gettxt("cannacmd:13",
+- "reading:%s nomination:%s a part of speach:%s\n"),y,k,h);
++ "reading:%s nomination:%s a part of speech:%s\n"),y,k,h);
+ fprintf(stderr,gettxt("cannacmd:14",
+- "This part of speach is undefined. Cannot convert.\n"));
++ "This part of speech is undefined. Cannot convert.\n"));
+ }
+ else {
+ for ( ; *hinshis; hinshis++, p++) {
+--- a/lib/canna/lisp.c
++++ b/lib/canna/lisp.c
+@@ -3610,7 +3610,7 @@
+ numtostr(xnum(e2), ee);
+ num = howManyCharsAre(ss, ee, &sku, &sten, &cs);
+ if (num <= 0) {
+- error("Inconsistent range of charcter code ", buf);
++ error("Inconsistent range of character code ", buf);
+ /* NOTREACHED */
+ }
+ kigolen = kigolen + (cswidth[cs] + 1) * num;
+--- a/lib/canna/uilib.man
++++ b/lib/canna/uilib.man
+@@ -809,7 +809,7 @@ data input:
+ int length; /* length of echo string */
+ int revPos; /* reverse position */
+ int revLen; /* reverse length */
+- unsigned long info; /* other informations */
++ unsigned long info; /* other information */
+ unsigned char *mode; /* mode information */
+ struct {
+ unsigned char *line; /* a grance of Kanji characters */
+--- a/lib/canna/uilib.jmn
++++ b/lib/canna/uilib.jmn
+@@ -749,7 +749,7 @@ XCompose構造体へのポインタを指定します。
+ int revPos; /* reverse position */
+ int revLen; /* reverse length */
+ .mc \(br
+- unsigned long info; /* other informations */
++ unsigned long info; /* other information */
+ unsigned char *mode; /* mode information */
+ struct {
+ unsigned char *line; /* a grance of Kanji characters */
diff --git a/app-i18n/canna/files/canna-06_fix_manpages_error.patch b/app-i18n/canna/files/canna-06_fix_manpages_error.patch
new file mode 100644
index 000000000..7b1cd0328
--- /dev/null
+++ b/app-i18n/canna/files/canna-06_fix_manpages_error.patch
@@ -0,0 +1,37 @@
+## 07_fix_manpage_error by HIGUCHI Daisuke (VDR dai) <dai@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: eliminate lintian warning: manpage-has-errors-from-man
+
+--- a/cmd/dpromdic/dpromdic.man
++++ b/cmd/dpromdic/dpromdic.man
+@@ -1,7 +1,7 @@
+ .TH DPROMDIC 1
+-.S HNAME
++.SH NAME
+ dpromdic \- Convert the binary-form Romaji-to-Kana conversion table into the text-form table
+-.SHSYNOPSYS
++.SH SYNOPSYS
+ .B dpromdic
+ [
+ .I file
+--- a/cmd/dicar/dicar.man
++++ b/cmd/dicar/dicar.man
+@@ -28,7 +28,7 @@ dicar \- Archive Binary Dictionary
+ archives binary dictionary
+ .I bindic1.
+ The hyphen of each option may be omitted.
+-.OPTIONS
++.SH OPTIONS
+ .TP
+ .B \-t
+ Displays the dictionaries contained in binary dictionary file
+--- a/cmd/cshost/cshost.man
++++ b/cmd/cshost/cshost.man
+@@ -1,5 +1,5 @@
+ .TH CSHOST 1
+-.SH "NAMES"
++.SH "NAME"
+ cshost \- Server access control program for canna
+ .SH "SYNOPSIS"
+ .B "cshost [{\-cs|\-cannaserver} \fIcannaserver\fP]"
diff --git a/app-i18n/canna/files/canna-07_fix_ftbfs_on_hurd-i386.patch b/app-i18n/canna/files/canna-07_fix_ftbfs_on_hurd-i386.patch
new file mode 100644
index 000000000..2b3bc3c07
--- /dev/null
+++ b/app-i18n/canna/files/canna-07_fix_ftbfs_on_hurd-i386.patch
@@ -0,0 +1,16 @@
+## 08_fix_ftbfs_on_hurd-i386 by HIGUCHI Daisuke (VDR dai) <dai@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: fix FTBFS on hurd-i386. use O_RDONLY instead of bare 0.
+
+--- a/cmd/crxdic/crxdic.c
++++ b/cmd/crxdic/crxdic.c
+@@ -1228,7 +1228,7 @@ main (argc, argv)
+ if (!(dic->gramdata = RkiReadWholeFile(fp, &dic->gramsz)))
+ goto gram_err;
+ fclose(fp);
+- if ((fd = open(gfile, 0)) < 0 || !(gram = RkReadGram(fd, dic->gramsz)))
++ if ((fd = open(gfile, O_RDONLY)) < 0 || !(gram = RkReadGram(fd, dic->gramsz)))
+ goto gram_err;
+ close(fd);
+ goto gram_ok;
diff --git a/app-i18n/canna/files/canna-10_fix_configure.ac.patch b/app-i18n/canna/files/canna-10_fix_configure.ac.patch
new file mode 100644
index 000000000..d53f3f233
--- /dev/null
+++ b/app-i18n/canna/files/canna-10_fix_configure.ac.patch
@@ -0,0 +1,19 @@
+Description: fix FTBFS caused after the DH level has bumped.
+Author: Francisco Vilmar Cardoso Ruviaro <francisco.ruviaro@riseup.net>
+Last-Update: 2020-06-20
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,9 +3,9 @@ AC_INIT([canna], [3.7p3], [canna-dev@lis
+ AC_CONFIG_SRCDIR([WHATIS.jp])
+ AC_CONFIG_HEADER([accanna.h])
+
+-if test "x$IN_MAKE" != xyes; then
+- AC_MSG_ERROR([You cannot invloke configure directly.])
+-fi
++#if test "x$IN_MAKE" != xyes; then
++# AC_MSG_ERROR([You cannot invloke configure directly.])
++#fi
+
+ # Checks for programs.
+ AC_PROG_CC
diff --git a/app-i18n/canna/files/canna-11_fix_spelling_error_in_binary.patch b/app-i18n/canna/files/canna-11_fix_spelling_error_in_binary.patch
new file mode 100644
index 000000000..77ff26b27
--- /dev/null
+++ b/app-i18n/canna/files/canna-11_fix_spelling_error_in_binary.patch
@@ -0,0 +1,91 @@
+Description: Fix spelling error in binaries.
+Author: Francisco Vilmar Cardoso Ruviaro <francisco.ruviaro@riseup.net>
+Last-Update: 2020-07-16
+
+--- a/cmd/catdic/can.c
++++ b/cmd/catdic/can.c
+@@ -281,7 +281,7 @@ int sig;
+ */
+ (void) RkFinalize();
+ fprintf(stderr,"\n");
+- Message(gettxt("cannacmd:232", "Process was intrrupted."));
++ Message(gettxt("cannacmd:232", "Process was interrupted."));
+ exit(ERR_VALUE);
+ }
+
+@@ -323,7 +323,7 @@ int sig;
+ (void) RkFinalize();
+ }
+
+- Message(gettxt("cannacmd:232", "Process was intrrupted."));
++ Message(gettxt("cannacmd:232", "Process was interrupted."));
+ exit(ERR_VALUE);
+ }
+
+@@ -1475,7 +1475,7 @@ int force;
+ }
+ else {
+ fprintf(stderr, gettxt("cannacmd:174",
+- "Specified dictionary \"%s\" does not overwite.\n"),dicname2);
++ "Specified dictionary \"%s\" does not overwrite.\n"),dicname2);
+ ret = 1;
+ }
+ break;
+--- a/cmd/crfreq/crfreq.c
++++ b/cmd/crfreq/crfreq.c
+@@ -199,7 +199,7 @@ main(argc, argv)
+
+ if ((fr = create(freqfile, 0666)) == -1) {
+ (void)close(fd);
+- (void)fprintf(stderr, "%s: cannot create freqency file %s\n", program, freqfile);
++ (void)fprintf(stderr, "%s: cannot create frequency file %s\n", program, freqfile);
+ exit(1);
+ }
+ #ifdef __CYGWIN32__
+--- a/server/convert.c
++++ b/server/convert.c
+@@ -887,7 +887,7 @@ ClientPtr *clientp ;
+ if ((ret = RkwStoreYomi( cxnum, (Ushort *)cbuf, ret )) >= 0) {
+ size = getFirstKouho(cxnum, bunsetu, ret, &stat, &lbufp);
+ } else {
+- PrintMsg("%s RkwStoreYomi faild\n", irerrhdr(client));
++ PrintMsg("%s RkwStoreYomi failed\n", irerrhdr(client));
+ }
+ } else {
+ print_context_error(client);
+--- a/server/misc.c
++++ b/server/misc.c
+@@ -316,7 +316,7 @@ BecomeDaemon ()
+
+ #ifndef __EMX__
+ if ((parent = fork()) == -1) {
+- PrintMsg( "Fork faild\n" );
++ PrintMsg( "Fork failed\n" );
+ exit( 1 ) ;
+ }
+ if ( parent ) {
+@@ -989,11 +989,11 @@ DetachTTY()
+ sprintf(errfile,"%s/%s%d%s", ERRDIR, ERRFILE, PortNumberPlus, ERRFILE2);
+
+ if((errfd = open(errfile, O_CREAT | O_RDWR | O_TRUNC, 0644)) < 0) {
+- (void)fprintf(stderr, "Warning: %s: %s open faild\n", Name, errfile);
++ (void)fprintf(stderr, "Warning: %s: %s open failed\n", Name, errfile);
+ (void)perror("");
+ } else {
+ if(dup2( errfd, fileno(stderr)) < 0) {
+- (void)fprintf(stderr, "Warning: %s: %s dup2 faild\n", Name, errfile);
++ (void)fprintf(stderr, "Warning: %s: %s dup2 failed\n", Name, errfile);
+ (void)perror("");
+ close(fileno(stderr));
+ }
+--- a/server/wconvert.c
++++ b/server/wconvert.c
+@@ -1153,7 +1153,7 @@ ClientPtr *clientp ;
+ sizeof(local_buffer) / sizeof(Ushort), &bufp);
+ RkwGoTo(cxnum, bunsetu);
+ } else {
+- PrintMsg("%s RkwStoreYomi faild\n",
++ PrintMsg("%s RkwStoreYomi failed\n",
+ irwerrhdr(client, wStoreYomi));
+ stat = -1 ;
+ }
diff --git a/app-i18n/canna/files/canna-12_make_the_output_of_mkbindic_reproducible.patch b/app-i18n/canna/files/canna-12_make_the_output_of_mkbindic_reproducible.patch
new file mode 100644
index 000000000..5019ec0ee
--- /dev/null
+++ b/app-i18n/canna/files/canna-12_make_the_output_of_mkbindic_reproducible.patch
@@ -0,0 +1,61 @@
+Description: make the output of mkbindic reproducible.
+Author: Chris Lamb <lamby@debian.org>
+Bug-Debian: https://bugs.debian.org/861955
+Forwarded: no
+Reviewed-By: Francisco Vilmar Cardoso Ruviaro <francisco.ruviaro@riseup.net>
+Last-Update: 2020-08-17
+
+--- a/cmd/crxdic/crxdic.c
++++ b/cmd/crxdic/crxdic.c
+@@ -31,6 +31,7 @@ static char rcsid[]="@(#) 102.1 $Id: crx
+ #include <time.h>
+ #include <ctype.h>
+ #include <fcntl.h>
++#include <limits.h>
+ #include <assert.h>
+ #include "ccompat.h"
+ #include "RKindep/file.h"
+@@ -932,6 +933,9 @@ makeHeader(dic)
+ unsigned i;
+ RkiCksumCalc calc;
+ unsigned off;
++ char *source_date_epoch;
++ unsigned long long epoch;
++ char *endptr;
+
+ if (RkiCksumCRCInit(&calc)
+ || RkiCksumAdd(&calc, dic->Dir->buf, dic->Dir->dirsiz)) {
+@@ -963,7 +967,32 @@ makeHeader(dic)
+ hd.data[HD_CMPV].var = 0x300702L;
+ hd.flag[HD_CMPV] = -1;
+ }
+- hd.data[HD_TIME].var = tloc = time(0);
++ source_date_epoch = getenv("SOURCE_DATE_EPOCH");
++ if (source_date_epoch) {
++ errno = 0;
++ epoch = strtoull(source_date_epoch, &endptr, 10);
++ if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0))
++ || (errno != 0 && epoch == 0)) {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n", strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++ if (endptr == source_date_epoch) {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n", endptr);
++ exit(EXIT_FAILURE);
++ }
++ if (*endptr != '\0') {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n", endptr);
++ exit(EXIT_FAILURE);
++ }
++ if (epoch > ULONG_MAX) {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to %lu but was found to be: %llu \n", ULONG_MAX, epoch);
++ exit(EXIT_FAILURE);
++ }
++ tloc = epoch;
++ } else {
++ tloc = time(0);
++ }
++ hd.data[HD_TIME].var = tloc;
+ hd.flag[HD_TIME] = -1;
+ hd.data[HD_DMNM].ptr = (unsigned char *)STrdup(dic->name);
+ hd.flag[HD_DMNM] = strlen(dic->name);
diff --git a/app-i18n/canna/files/canna-Wformat-security.patch b/app-i18n/canna/files/canna-Wformat-security.patch
new file mode 100644
index 000000000..c83552b5c
--- /dev/null
+++ b/app-i18n/canna/files/canna-Wformat-security.patch
@@ -0,0 +1,199 @@
+--- a/cmd/catdic/can.c
++++ b/cmd/catdic/can.c
+@@ -1236,7 +1236,7 @@
+ break;
+ default:
+ if (init[0] == '/') {
+- (void)fprintf(stderr,msg_abnl);
++ (void)fprintf(stderr,"%s",msg_abnl);
+ } else {
+ (void)fprintf(stderr,msg_abnls,init);
+ }
+@@ -1297,11 +1297,11 @@
+
+ if ( opt_fq ) {
+ if ( opt_s ) {
+- (void) fprintf(stderr,msg_sfq);
++ (void) fprintf(stderr,"%s",msg_sfq);
+ exit(ERR_VALUE) ;
+ }
+ if ( opt_l || opt_std ) {
+- (void) fprintf(stderr,msg_l);
++ (void) fprintf(stderr,"%s",msg_l);
+ exit(ERR_VALUE) ;
+ }
+ mode = mode | PL_DIC ;
+@@ -1491,7 +1491,7 @@
+ break;
+ default:
+ if(init[0] == '/') {
+- fprintf(stderr,msg_abnl );
++ fprintf(stderr,"%s",msg_abnl );
+ }
+ else {
+ fprintf(stderr,msg_abnls,init);
+--- a/cmd/catdic/rutil.c
++++ b/cmd/catdic/rutil.c
+@@ -271,7 +271,7 @@
+ "Dictionary \"%s\" does not exist.\n"), dicname);
+ break;
+ case NOTALC :
+- (void)fprintf(stderr, msg_mem);
++ (void)fprintf(stderr, "%s", msg_mem);
+ break;
+ case BADF :
+ (void)fprintf(stderr, gettxt("cannacmd:196",
+@@ -297,7 +297,7 @@
+ (void)fprintf(stderr,msg_abnls,init);
+ }
+ else {
+- (void)fprintf(stderr,msg_abnl);
++ (void)fprintf(stderr,"%s",msg_abnl);
+ }
+ break;
+ }
+@@ -321,7 +321,7 @@
+ (void)fprintf(stderr, msg_abnls, init);
+ }
+ else {
+- (void)fprintf(stderr, msg_abnl);
++ (void)fprintf(stderr, "%s", msg_abnl);
+ }
+ ret = -1;
+ return ret;
+@@ -332,13 +332,13 @@
+ (void)fprintf(stderr, msg_mnts, init);
+ }
+ else {
+- (void)fprintf(stderr, msg_mnt);
++ (void)fprintf(stderr, "%s", msg_mnt);
+ }
+ ret = -1;
+ return ret;
+ }
+ if ((mode & PL_DIC) == PL_DIC ) {
+- (void)fprintf(stderr,msg_fq);
++ (void)fprintf(stderr,"%s",msg_fq);
+ ret = -1 ;
+ return ret ;
+ }
+@@ -359,7 +359,7 @@
+ ret = 0;
+ break;
+ case NOTALC :
+- (void)fprintf(stderr, msg_mem);
++ (void)fprintf(stderr, "%s", msg_mem);
+ ret = -1;
+ break;
+ case BADF :
+@@ -421,7 +421,7 @@
+ ret = -1;
+ break;
+ case BADCONT :
+- (void)fprintf(stderr,msg_cnt);
++ (void)fprintf(stderr,"%s",msg_cnt);
+ ret = -1;
+ break;
+ default:
+@@ -429,7 +429,7 @@
+ (void)fprintf(stderr, msg_abnls, init);
+ }
+ else {
+- (void)fprintf(stderr, msg_abnl);
++ (void)fprintf(stderr, "%s", msg_abnl);
+ }
+ exit(ERR_VALUE);
+ break;
+@@ -448,7 +448,7 @@
+ ret = 0;
+ break;
+ case NOTALC :
+- (void)fprintf(stderr, msg_mem);
++ (void)fprintf(stderr, "%s", msg_mem);
+ ret = -1;
+ break;
+ case BADF :
+@@ -509,11 +509,11 @@
+ ret = -1;
+ break;
+ case BADARG :
+- (void)fprintf(stderr,msg_fq);
++ (void)fprintf(stderr,"%s",msg_fq);
+ ret = -1;
+ break;
+ case BADCONT :
+- (void)fprintf(stderr,msg_cnt);
++ (void)fprintf(stderr,"%s",msg_cnt);
+ ret = -1;
+ break;
+ case NOENT : /* 91.12.03 */
+@@ -526,7 +526,7 @@
+ (void)fprintf(stderr, msg_abnls, init);
+ }
+ else {
+- (void)fprintf(stderr, msg_abnl);
++ (void)fprintf(stderr, "%s", msg_abnl);
+ }
+ exit(ERR_VALUE);
+ break;
+@@ -556,7 +556,7 @@
+ (void)fprintf(stderr, msg_abnls,init);
+ }
+ else {
+- (void)fprintf(stderr, msg_abnl);
++ (void)fprintf(stderr, "%s", msg_abnl);
+ }
+ ret = -1;
+ return ret;
+@@ -567,13 +567,13 @@
+ (void)fprintf(stderr, msg_mnts, init);
+ }
+ else {
+- (void)fprintf(stderr, msg_mnt);
++ (void)fprintf(stderr, "%s", msg_mnt);
+ }
+ ret = -1;
+ return ret;
+ }
+ if ((mode & PL_DIC) == PL_DIC ) {
+- (void)fprintf(stderr, msg_fq);
++ (void)fprintf(stderr, "%s", msg_fq);
+ ret = -1 ;
+ return ret ;
+ }
+@@ -608,7 +608,7 @@
+ ret = -2; /* 93.03.03 */
+ break;
+ case BADCONT :
+- (void)fprintf(stderr, msg_cnt);
++ (void)fprintf(stderr, "%s", msg_cnt);
+ ret = -1;
+ break;
+ default:
+@@ -616,7 +616,7 @@
+ (void)fprintf(stderr, msg_abnls, init);
+ }
+ else {
+- (void)fprintf(stderr, msg_abnl);
++ (void)fprintf(stderr, "%s", msg_abnl);
+ }
+ ret = -1;
+ break;
+@@ -651,7 +651,7 @@
+ ret = -2; /* 93.03.03 */
+ break;
+ case BADCONT :
+- (void)fprintf(stderr, msg_cnt);
++ (void)fprintf(stderr, "%s", msg_cnt);
+ ret = -1;
+ break;
+ default:
+@@ -659,7 +659,7 @@
+ (void)fprintf(stderr, msg_abnls, init);
+ }
+ else {
+- (void)fprintf(stderr, msg_abnl);
++ (void)fprintf(stderr, "%s", msg_abnl);
+ }
+ ret = -1;
+ break;
diff --git a/app-i18n/canna/files/canna-Wformat.patch b/app-i18n/canna/files/canna-Wformat.patch
new file mode 100644
index 000000000..a8f5aa371
--- /dev/null
+++ b/app-i18n/canna/files/canna-Wformat.patch
@@ -0,0 +1,11 @@
+--- a/doc/man/guide/tex/cannaindex.c
++++ b/doc/man/guide/tex/cannaindex.c
+@@ -198,7 +198,7 @@
+ }
+ inf = fopen(argv[1], "r");
+ if (!inf) {
+- fprintf(stderr, "%s: Can not open file \"%s\".\n", argv[1]);
++ fprintf(stderr, "%s: Can not open file \"%s\".\n", program, argv[1]);
+ exit(1);
+ }
+ pages = readindex(inf, entries);
diff --git a/app-i18n/canna/files/canna-canuum.patch b/app-i18n/canna/files/canna-canuum.patch
new file mode 100644
index 000000000..293ffbb54
--- /dev/null
+++ b/app-i18n/canna/files/canna-canuum.patch
@@ -0,0 +1,34 @@
+--- a/canuum/configure.in
++++ b/canuum/configure.in
+@@ -401,7 +401,7 @@
+ dnl
+ olibs="$LIBS"
+ AC_MSG_CHECKING(--with-term-libs argument)
+-AC_ARG_WITH(tlib,
++AC_ARG_WITH(term-libs,
+ [ --with-term-libs=-lLIB terminal library to be used ],)
+ if test -n "$with_term_libs"; then
+ AC_MSG_RESULT($with_term_libs)
+--- a/canuum/wnn_config.h
++++ b/canuum/wnn_config.h
+@@ -149,8 +149,8 @@
+ #define TTY_KCODE J_EUJIS
+ #define PTY_KCODE J_EUJIS
+ # else /* !DGUX */
+-#define TTY_KCODE J_JIS
+-#define PTY_KCODE J_JIS
++#define TTY_KCODE J_EUJIS
++#define PTY_KCODE J_EUJIS
+ # endif
+ #endif
+
+--- a/canuum/wnn_os.h
++++ b/canuum/wnn_os.h
+@@ -41,6 +41,7 @@
+ #include <signal.h>
+ #if STDC_HEADERS
+ # include <stdlib.h>
++# include <string.h>
+ # include <limits.h>
+ #endif /* STDC_HEADERS */
+
diff --git a/app-i18n/canna/files/canna-gentoo.patch b/app-i18n/canna/files/canna-gentoo.patch
new file mode 100644
index 000000000..7ff274c2c
--- /dev/null
+++ b/app-i18n/canna/files/canna-gentoo.patch
@@ -0,0 +1,146 @@
+--- a/Canna.conf
++++ b/Canna.conf
+@@ -109,12 +109,12 @@
+ # define DefErrDir $(cannaPrefix)/log
+ # define DefLibCannaDir $(cannaExecPrefix)/lib
+ #else
+-# define DefCannaPrefix /usr/local/canna
++# define DefCannaPrefix $(EPREFIX)/usr
+ # ifdef ObsoleteInstallDir
+ # define DefErrDir /usr/spool/canna
+ # define DefLibCannaDir /usr/lib
+ # else
+-# define DefErrDir /var/log
++# define DefErrDir $(EPREFIX)/var/log/$(PN)
+ # define DefLibCannaDir $(cannaExecPrefix)/lib
+ # endif
+ #endif
+@@ -123,7 +123,7 @@
+ # define DefCannaLibDir $(cannaPrefix)/lib
+ #else
+ # define DefCannaSrvDir $(cannaExecPrefix)/sbin
+-# define DefCannaLibDir $(cannaPrefix)/share/canna
++# define DefCannaLibDir /etc/canna
+ #endif
+
+ #if defined(LinuxArchitecture) || defined(FreeBSDArchitecture) \
+@@ -147,9 +147,11 @@
+ XCOMM cannaLibDir = /var/lib/canna
+ XCOMM cannaLibDir = /var/db/canna
+ cannaLibDir = DefCannaLibDir
+-XCOMM cannaManDir = $(cannaPrefix)/share/man
+-cannaManDir = $(cannaPrefix)/man
+-cannaIncDir = $(cannaPrefix)/include/canna
++cannaManDir = $(cannaPrefix)/share/man
++XCOMM cannaManDir = $(cannaPrefix)/man
++cannaIncDir = $(cannaPrefix)/include/$(PN)
++cannaShareDir = $(cannaPrefix)/share/$(PN)
++cannaDocDir = $(cannaPrefix)/share/doc/$(PF)
+
+ libCannaDir = DefLibCannaDir
+ ErrDir = DefErrDir
+@@ -237,7 +239,7 @@
+ /* #define UseInstalledLibCanna YES */
+ #define UseInstalledLibCanna NO
+
+-DicDir = $(cannaLibDir)/dic
++DicDir = $(EPREFIX)/var/lib/$(PN)/dic
+
+ /* ここから下は変更不要です */
+
+--- a/Imakefile
++++ b/Imakefile
+@@ -87,6 +87,7 @@
+ echo "#define CANNAHOSTFILE \"$(cannaLibDir)/cannahost\"";\
+ echo "/* for lib/canna */";\
+ echo "#define CANNALIBDIR \"$(cannaLibDir)\""; \
++ echo "#define CANNASHAREDIR \"$(cannaShareDir)\""; \
+ echo "#define SUPPORT_OLD_WCHAR $(supportOldWchar)"; \
+ echo "/* for scripts */";\
+ echo "#define CANNABINDIR $(cannaBinDir)"; \
+--- a/dic/phono/Imakefile
++++ b/dic/phono/Imakefile
+@@ -27,9 +27,10 @@
+
+ ROMAJI_DIC_DEF = -DSHIFT
+
+- DICDIR = $(cannaLibDir)/dic
+- SAMPLEDIR = $(cannaLibDir)/sample
+- SAMPLESRCDIR = $(cannaLibDir)/sample/src
++ DICDIR = $(DicDir)
++ CANNASHAREDIR = $(cannaShareDir)
++ SAMPLEDIR = $(cannaDocDir)/sample
++ SAMPLESRCDIR = $(cannaDocDir)/sample/src
+
+ KPDEF = default.kpdef jdaemon.kpdef just.kpdef kaisoku.kpdef kana.kpdef \
+ lan5.kpdef matsu.kpdef newjis.kpdef romaji.kpdef sokuon.kpdef \
+@@ -69,7 +70,7 @@
+ MakeDirectories(install,$(DICDIR))
+ MakeDirectories(install,$(SAMPLESRCDIR))
+
+-InstallMultiple($(ROMKANA_TABLES),$(DICDIR))
++InstallMultiple($(ROMKANA_TABLES),$(CANNASHAREDIR))
+
+ #ifdef USE_OBSOLETE_STYLE_FILENAME
+ InstallNonExec(default.kpdef,$(SAMPLESRCDIR))
+--- a/lib/canna/romaji.c
++++ b/lib/canna/romaji.c
+@@ -427,7 +427,6 @@
+ }
+ }
+
+-#if 0 /* currently CANNASHAREDDIR is not defined */
+ if (retval == (struct RkRxDic *)NULL) { /* added for Debian by ISHIKAWA Mutsumi <ishikawa@linux.or.jp> */
+ extern jrUserInfoStruct *uinfo;
+
+@@ -450,7 +449,6 @@
+ }
+ }
+ }
+-#endif
+
+ if (retval == (struct RkRxDic *)NULL) { /* 全部オープンできない */
+ sprintf(rdic,
+--- a/misc/Imakefile
++++ b/misc/Imakefile
+@@ -48,7 +48,7 @@
+ MakeLintLibSubdirs($(SUBDIRS))
+ MakeLintSubdirs($(SUBDIRS),install.ln,install.ln)
+
+-MakeDirectories(install,$(cannaLibDir)/sample/src)
++MakeDirectories(install,$(cannaDocDir)/sample/src)
+
+ #ifdef USE_OBSOLETE_STYLE_FILENAME
+ default.canna: default.ca
+@@ -58,8 +58,8 @@
+ $(CP) default.ca default.canna
+ #endif
+
+ InstallNonExec(default.canna,$(cannaLibDir))
+-InstallNonExec(is.c,$(cannaLibDir)/sample/src)
++InstallNonExec(is.c,$(cannaDocDir)/sample/src)
+
+ clean::
+ $(RM) $(PROGRAMS)
+--- a/misc/initfiles/Imakefile
++++ b/misc/initfiles/Imakefile
+@@ -6,7 +6,7 @@
+ #endif
+
+ CANNAROOT = ../..
+- SAMPLEDIR = $(cannaLibDir)/sample
++ SAMPLEDIR = $(cannaDocDir)/sample
+
+ all::
+
+--- a/server/Imakefile
++++ b/server/Imakefile
+@@ -6,7 +6,7 @@
+ #ifdef __EMX__
+ INSTFLAGS = $(INSTUGIDFLAGS)
+ #else
+- INSTFLAGS = -s $(INSTUGIDFLAGS)
++ INSTFLAGS = $(INSTUGIDFLAGS)
+ #endif
+ DEFINES = $(CANNASERVER_DEFINES) $(SIGNAL_DEFINES) ConnectionFlags
+ INCLUDES = -I$(CANNAROOT)/include
diff --git a/app-i18n/canna/files/canna-kpdef.patch b/app-i18n/canna/files/canna-kpdef.patch
new file mode 100644
index 000000000..b0b71b444
--- /dev/null
+++ b/app-i18n/canna/files/canna-kpdef.patch
@@ -0,0 +1,18 @@
+--- a/dic/phono/default.kpdef
++++ b/dic/phono/default.kpdef
+@@ -350,3 +350,15 @@
+ _ _
+ / /
+ \\ ¥
++
++# some useful romkan symbols
++z, ‥
++z- 〜
++z. …
++z/ ・
++z[ 『
++z] 』
++zh ←
++zj ↓
++zk ↑
++zl →
diff --git a/app-i18n/canna/files/canna-overflow.patch b/app-i18n/canna/files/canna-overflow.patch
new file mode 100644
index 000000000..ef3b6ad1b
--- /dev/null
+++ b/app-i18n/canna/files/canna-overflow.patch
@@ -0,0 +1,20 @@
+--- a/cmd/catdic/rutil.c
++++ b/cmd/catdic/rutil.c
+@@ -384,7 +384,7 @@
+ (void)fprintf(stderr,gettxt("cannacmd:205",
+ "Specified dictionary \"%s\" already exists. Do you overwrite it ? (y/n)"),
+ dicname);
+- fgets(ans,80,stdin);
++ fgets(ans,sizeof(ans),stdin);
+ } else {
+ (void)fprintf(stderr,gettxt("cannacmd:206",
+ "Specified dictionary \"%s\" already exists."),dicname);
+@@ -474,7 +474,7 @@
+ if (isatty(fileno(stdin)) != 0) {
+ (void)fprintf(stderr,gettxt("cannacmd:216",
+ "Personal learning file of dictionary \"%s\" exists. Do you overwrite it ? (y/n)"),dicname);
+- fgets(ans,80,stdin);
++ fgets(ans,sizeof(ans),stdin);
+ } else {
+ (void)fprintf(stderr,gettxt("cannacmd:217",
+ "Personal learning file of system dictionary \"%s\" already exists."),
diff --git a/app-i18n/canna/files/canna-posix-sort.patch b/app-i18n/canna/files/canna-posix-sort.patch
new file mode 100644
index 000000000..1f98aaf5e
--- /dev/null
+++ b/app-i18n/canna/files/canna-posix-sort.patch
@@ -0,0 +1,11 @@
+--- a/cmd/mkbindic/mkbindic.cpp
++++ b/cmd/mkbindic/mkbindic.cpp
+@@ -40,7 +40,7 @@
+ bck_text=;
+ flag=;
+ compat_flag=;
+-sortcmd="sort -d -s +0 -1"
++sortcmd="sort -d -s -k 1,1"
+ usage="usage: mkbindic [-m|-s] [-name dicname] [-c version] textfile [cpp-args ...]";
+ : ${TMPDIR:=/tmp}
+
diff --git a/app-i18n/canna/files/canna-respect-flags.patch b/app-i18n/canna/files/canna-respect-flags.patch
new file mode 100644
index 000000000..13fb1ed9c
--- /dev/null
+++ b/app-i18n/canna/files/canna-respect-flags.patch
@@ -0,0 +1,29 @@
+--- /var/tmp/portage/app-i18n/canna-3.7_p3-r4/work/Canna37p3/canuum/Imakefile
++++ Canna37p3/canuum/Imakefile
+@@ -51,6 +51,8 @@
+ $(CONFIGURE_CMD)
+ XCOMM Invoked from confwrapper
+ cwenv.sh:
+- $(CANNAROOT)/confwrapper mkenv CPPFLAGS $(ALLDEFINES) > $@
+- $(CANNAROOT)/confwrapper mkenv CC env $(CC) >> $@
++ $(CANNAROOT)/confwrapper mkenv CPPFLAGS $(ALLDEFINES) $(CPPFLAGS) > $@
++ $(CANNAROOT)/confwrapper mkenv CC $(CC) >> $@
++ $(CANNAROOT)/confwrapper mkenv AR $(AR) >> $@
+ $(CANNAROOT)/confwrapper mkenv CFLAGS $(PURE_CFLAGS) >> $@
++ $(CANNAROOT)/confwrapper mkenv LDFLAGS $(LDFLAGS) >> $@
+--- /var/tmp/portage/app-i18n/canna-3.7_p3-r4/work/Canna37p3/Imakefile
++++ Canna37p3/Imakefile
+@@ -117,9 +117,11 @@
+ $(CONFIGURE_CMD)
+ XCOMM Invoked from confwrapper
+ cwenv.sh:
+- $(CANNAROOT)/confwrapper mkenv CPPFLAGS $(ALLDEFINES) > $@
+- $(CANNAROOT)/confwrapper mkenv CC env $(CC) >> $@
++ $(CANNAROOT)/confwrapper mkenv CPPFLAGS $(ALLDEFINES) $(CPPFLAGS) > $@
++ $(CANNAROOT)/confwrapper mkenv CC $(CC) >> $@
++ $(CANNAROOT)/confwrapper mkenv AR $(AR) >> $@
+ $(CANNAROOT)/confwrapper mkenv CFLAGS $(PURE_CFLAGS) >> $@
++ $(CANNAROOT)/confwrapper mkenv LDFLAGS $(LDFLAGS) >> $@
+
+ CANNAROOT = .
+ SERVERDIR = server dic/phono dic/ideo
diff --git a/app-i18n/canna/files/canna-rundir.patch b/app-i18n/canna/files/canna-rundir.patch
new file mode 100644
index 000000000..d8c58be49
--- /dev/null
+++ b/app-i18n/canna/files/canna-rundir.patch
@@ -0,0 +1,15 @@
+--- a/Canna.conf
++++ b/Canna.conf
+@@ -341,10 +341,10 @@
+ #endif
+
+ #ifdef InstallAsUser
+-UnixSockDir = $(cannaPrefix)/tmp/.iroha_unix
++UnixSockDir = $(cannaPrefix)/run/.iroha_unix
+ AccessFile = $(cannaPrefix)/etc/hosts.canna
+ #else
+-UnixSockDir = /tmp/.iroha_unix
++UnixSockDir = /run/.iroha_unix
+ AccessFile = /etc/hosts.canna
+ #endif
+ UnixSockName = IROHA
diff --git a/app-i18n/canna/files/canna-tmpfiles.conf b/app-i18n/canna/files/canna-tmpfiles.conf
new file mode 100644
index 000000000..8b70ef1a1
--- /dev/null
+++ b/app-i18n/canna/files/canna-tmpfiles.conf
@@ -0,0 +1,2 @@
+d /run/.iroha_unix 0755 canna canna -
+
diff --git a/app-i18n/canna/files/canna.confd b/app-i18n/canna/files/canna.confd
new file mode 100644
index 000000000..d3fdce542
--- /dev/null
+++ b/app-i18n/canna/files/canna.confd
@@ -0,0 +1,7 @@
+CANNASERVER_ENABLE_SYSLOG="yes"
+
+# Specify user to run as
+CANNASERVER_OWNER="bin"
+
+# Options for cannaserver
+CANNASERVER_OPTS=""
diff --git a/app-i18n/canna/files/canna.hosts b/app-i18n/canna/files/canna.hosts
new file mode 100644
index 000000000..509143d86
--- /dev/null
+++ b/app-i18n/canna/files/canna.hosts
@@ -0,0 +1 @@
+unix
diff --git a/app-i18n/canna/files/canna.initd b/app-i18n/canna/files/canna.initd
new file mode 100644
index 000000000..fdfc3fc20
--- /dev/null
+++ b/app-i18n/canna/files/canna.initd
@@ -0,0 +1,31 @@
+#!/sbin/openrc-run
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command="/usr/sbin/${RC_SVCNAME}server"
+command_args="${CANNASERVER_OPTS}"
+
+# CANNASERVER_OPTS and CANNASERVER_OWNER is defined in /etc/conf.d/canna
+CANNASERVER_LOGFILE="/var/log/${RC_SVCNAME}/CANNA0msgs"
+
+depend() {
+ use logger
+ need net
+}
+
+start_pre() {
+ if [ "${CANNASERVER_ENABLE_SYSLOG}" = "yes" ]; then
+ command_args="${command_args} -syslog"
+ elif [ -z "${CANNASERVER_OWNER}" ]; then
+ checkpath "${CANNASERVER_LOGFILE}"
+ else
+ checkpath -o "${CANNASERVER_OWNER}" "${CANNASERVER_LOGFILE}"
+ command_args="${command_args} -u ${CANNASERVER_OWNER}"
+ fi
+}
+
+stop() {
+ ebegin "Stopping ${name:-${RC_SVCNAME}}"
+ /usr/sbin/${RC_SVCNAME}kill
+ eend ${?}
+}
diff --git a/app-i18n/canna/files/canna.service b/app-i18n/canna/files/canna.service
new file mode 100644
index 000000000..1bd0498fb
--- /dev/null
+++ b/app-i18n/canna/files/canna.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Canna Japanese Conversion Engine
+After=syslog.target
+
+[Service]
+User=canna
+Type=forking
+ExecStart=/usr/sbin/cannaserver -syslog
+ExecStop=/usr/sbin/cannakill
+
+[Install]
+WantedBy=multi-user.target
diff --git a/app-i18n/canna/files/cannaping.c b/app-i18n/canna/files/cannaping.c
new file mode 100644
index 000000000..67f49808b
--- /dev/null
+++ b/app-i18n/canna/files/cannaping.c
@@ -0,0 +1,46 @@
+/*
+ * cannaping - the minimal cannaserver check program
+ *
+ * Copyright (C) 2003 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Bugs & suggestions about this program are welcome:
+ * http://bugzilla.redhat.com/
+ *
+ * 2003/02/04
+ * Yukihiro Nakai <ynakai@redhat.com>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <canna/jrkanji.h>
+
+int main() {
+ char** warning = NULL;
+ int res = jrKanjiControl(0, KC_INITIALIZE, (char*)&warning);
+
+ if( res != 0 ) {
+ exit(-1);
+ } else if( warning ) {
+ exit(-1);
+ }
+
+ jrKanjiControl(0, KC_FINALIZE, 0);
+ return 0;
+}
diff --git a/app-i18n/canna/files/dot-canna b/app-i18n/canna/files/dot-canna
new file mode 100644
index 000000000..37fdc2f27
--- /dev/null
+++ b/app-i18n/canna/files/dot-canna
@@ -0,0 +1,195 @@
+;; Copyright 1992 NEC Corporation, Tokyo, Japan.
+;;
+;; Permission to use, copy, modify, distribute and sell this software
+;; and its documentation for any purpose is hereby granted without
+;; fee, provided that the above copyright notice appear in all copies
+;; and that both that copyright notice and this permission notice
+;; appear in supporting documentation, and that the name of NEC
+;; Corporation not be used in advertising or publicity pertaining to
+;; distribution of the software without specific, written prior
+;; permission. NEC Corporation makes no representations about the
+;; suitability of this software for any purpose. It is provided "as
+;; is" without express or implied warranty.
+;;
+;; NEC CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+;; INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+;; NO EVENT SHALL NEC CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+;; USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+;; OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+;; PERFORMANCE OF THIS SOFTWARE.
+
+;; $Id: dot-canna,v 1.1 2005/09/26 09:29:14 tagoh Exp $
+
+;; 記号置き換え変換を利用するか。
+
+(setq use-symbolic-definition t)
+
+;;; ローマ字かな変換の設定
+;
+; ローマ字かな変換テーブルを指定します。ローマ字かな変換テーブルは
+; (1) カレントディレクトリ
+; (2) ホームディレクトリ
+; (3) /usr/lib/canna/dic
+; の順にサーチされます。
+;
+
+;(setq romkana-table "unix.cbp")
+(setq romkana-table "default.cbp")
+
+;; 外来語変換
+;(setq english-table "canna/english.cbp")
+
+
+;;; 利用する辞書
+;
+; ただ単に書き並べているのは単語登録を行わない辞書でシステム辞書などが
+; これに当たります。
+;
+; 部首辞書に関しては :bushu を先行させて記述します。
+;
+; 単語登録をしたい辞書に関しては :user を先行させて記述します。単語登
+; 録をする辞書はテキスト形式辞書でなければなりません。単語登録させたい
+; 辞書は mkdic user の様なコマンドを打つことでで簡単に作成することがで
+; きます。
+;
+(use-dictionary
+ "gcanna"
+ "gcannaf"
+ "chimei"
+; "iroha"
+ "fuzokugo"
+ "hojomwd"
+ "hojoswd"
+ "software"
+ "keishiki"
+ "zipcode"
+ "geo"
+; "zip99"
+ "basho"
+ "keisan"
+ "pub"
+ "scien"
+ "sup"
+ "bonobo"
+ :bushu "bushu"
+ :user "user"
+ )
+
+;;; さまざまなパラメタの設定
+;
+; 真理値を設定するものについては真については t 、偽については nil を設
+; 定します。
+
+; 一番右で右に行こうとすると左端にいくようにするか
+(setq cursor-wrap t) ; default t
+
+; 一覧表示で数字を打ったときにカーソル移動に留める(nil)か選択までして
+; しまうか(t)
+(setq select-direct t) ; default t
+
+; 一覧表示で数字で選択するか(t)。nilの時は数字が表示されません
+(setq numerical-key-select t) ; default t
+
+; 候補表示時に文節の区切りに空白をいれるか
+(setq bunsetsu-kugiri nil) ; default nil
+
+; 文字ベースの移動をするか(t)。 nilの時はローマ字かな変換の単位でカー
+; ソル移動が行われます。
+(setq character-based-move t) ; default t
+
+; 入力中の読み全体をリバースするか
+(setq reverse-widely nil) ; default nil
+
+; 頻度学習をするか
+(setq gakushu t) ; default t
+
+; 一覧の最後までいったら一旦一覧表示をやめるか
+(setq quit-if-end-of-ichiran nil); default nil
+
+; 文節の右端で右移動をすると全体が確定してしまうか
+(setq kakutei-if-end-of-bunsetsu nil) ; default nil
+
+; 一覧選択後同じ文節にとどまるか(t)。nilの時は一覧選択を行うとひとつ先
+; の文節に移動します。
+(setq stay-after-validate t) ; default t
+
+; 読みを入力中にバックスペースを打つとローマ字までバラバラにするか
+(setq break-into-roman t) ; default nil
+
+; 何回の変換キーで一覧表示を行うか。0を入れると変換キーだけでは
+; 一覧表示には移りません。その場合には C-w を入力して一覧表示して
+; 下さい。
+(setq n-henkan-for-ichiran 2) ; default 2
+
+; 単語登録時に文法関連の質問をするか(t)。nilの時は適当な品詞を付けてし
+; まいます。
+(setq gramatical-question t) ; default t
+
+; 候補が全体の何番目かを表示するか
+(setq kouho-count t) ; default t
+
+; 逐次変換をするか
+(setq auto nil) ; default nil
+
+; 逐次変換をする時に何個の文節までを未確定で保持するか
+(setq n-kouho-bunsetsu 16) ; default 16
+
+; ローマ字かな変換でイリーガルなローマ字を捨てるか
+(setq abandon-illegal-phonogram nil) ; default nil
+
+; 一覧の時も次の入力を認めるか
+(setq allow-next-input t) ; default t
+
+; 一文字レベルのローマ字かな変換の補助テーブル
+(if use-symbolic-definition
+ (progn
+ (defsymbol ?- "ー" "-" "−" "‐")
+ (defsymbol ?/ "/" "/" "・")
+ (defsymbol ?\\ "\\" "\" "¥")
+ (defsymbol
+ ?( "(" "(" "【"
+ ?) ")" ")" "】" )
+ (defsymbol
+ ?[ "「" "『" "[" "〔" "["
+ ?] "」" "』" "]" "〕" "]")
+ (defsymbol
+ ?. "。" "." "."
+ ?, "、" "," "," )
+ (defsymbol
+ ?0 "0" "0" "〇" "零"
+ ?1 "1" "1" "一" "壱"
+ ?2 "2" "2" "二" "弐"
+ ?3 "3" "3" "三" "参"
+ ?4 "4" "4" "四" "四"
+ ?5 "5" "5" "五" "伍"
+ ?6 "6" "6" "六" "六"
+ ?7 "7" "7" "七" "七"
+ ?8 "8" "8" "八" "八"
+ ?9 "9" "9" "九" "九" )
+ (defsymbol
+ ?? "?" "?"
+ ?! "!" "!")
+ (defsymbol ?# "#" "#")
+ (defsymbol ?$ "$" "$")
+ (defsymbol ?% "%" "%")
+ (defsymbol ?& "&" "&")
+ (defsymbol ?+ "+" "+")
+ (defsymbol ?* "*" "*" "×")
+ (defsymbol ?_ "_" "_")
+ (defsymbol ?' "'" "’")
+ (defsymbol ?` "`" "‘")
+ (defsymbol ?\" "\"" "”")
+ ))
+
+;; delete キーもバックスペースと同じ処理をさせる
+(global-set-key "\Delete" 'delete-previous) ; necessary in using Emacs
+
+;; Help がない人もいるので F1 でも同じ動作をさせる。
+(global-set-key "\F1" 'extend-mode)
+
+;; Escape key should escape from the mode.
+(global-set-key "\Escape" 'quit)
+
+;; Ctrl-o の抑制
+(global-unbind-key-function 'japanese-mode)
diff --git a/app-i18n/canna/files/update-canna-dics_dir b/app-i18n/canna/files/update-canna-dics_dir
new file mode 100644
index 000000000..b4061c885
--- /dev/null
+++ b/app-i18n/canna/files/update-canna-dics_dir
@@ -0,0 +1,36 @@
+#!/bin/sh
+# update-canna-dics_dir
+# compiles dics.dir files for Canna Server
+# Copyright 2001 ISHIKAWA Mutsumi
+# Licensed under the GNU General Public License, version 2. See the file
+# /usr/share/common-licenses/GPL or <http://www.gnu.org/copyleft/gpl.txt>.
+
+SRC=/etc/canna/dics.dir.d
+DEST=/var/lib/canna/dic/canna
+
+for DIR in $SRC $DEST; do
+ VALID=yes
+ if [ ! -d $DIR ]; then
+ echo "$0: $DIR does not exist or is not a directory." >&2
+ VALID=
+ fi
+done
+
+if [ -n "$VALID" ]; then
+ # write new dics.dir file in case we are interrupted
+ echo '# dics.dir -- automatically generated file. DO NOT EDIT.' > $DEST/dics.dir.update-new
+# echo '# To modify, see update-canna-dics_dir(8). >> $DEST/dics.dir.update-new
+ # are there any files to process?
+ if [ "$(echo $SRC/*.dics.dir)" != "$SRC/*.dics.dir" ]; then
+ for file in $SRC/*.dics.dir; do
+ echo "# $file" >> $DEST/dics.dir.update-new
+ cat $file >> $DEST/dics.dir.update-new
+ done
+ mv $DEST/dics.dir.update-new $DEST/dics.dir
+ else
+ # no files to process, remove the one
+ rm -f $DEST/dics.dir
+ fi
+fi
+
+exit
diff --git a/app-i18n/canna/metadata.xml b/app-i18n/canna/metadata.xml
new file mode 100644
index 000000000..88181e8f0
--- /dev/null
+++ b/app-i18n/canna/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <description>co-maintainers welcome</description>
+ <name>Alessandro Barbieri</name>
+ <email>lssndrbarbieri@gmail.com</email>
+ </maintainer>
+ <use>
+ <flag name="canuum">Build canuum</flag>
+ </use>
+</pkgmetadata>