UTF-8でman-pages-jaをインストールし、既存のEUC-JPなmanページもUTF-8に変換するebuild
下のebuildファイルをローカルOverlayに入れて*1USE=unicodeでemergeするだけで、インストールされるmanページのエンコーディングをUTF-8に変換し、更に、既存の日本語manページに関しても、EUC-JPのものを検出し、UTF-8への変換を行う。
ファイル名: man-pages-ja-20070515.ebuild
# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/app-i18n/man-pages-ja/man-pages-ja-20070515.ebuild,v 1.2 2007/07/15 07:12:30 mr_bones_ Exp $ IUSE="unicode" GENTOO_MAN_P="portage-${PN}-20060415" DESCRIPTION="A collection of manual pages translated into Japanese" HOMEPAGE="http://www.linux.or.jp/JM/ http://www.gentoo.gr.jp/jpmain/translation.xml" SRC_URI="http://www.linux.or.jp/JM/${P}.tar.gz http://dev.gentoo.org/~hattya/distfiles/${GENTOO_MAN_P}.tar.gz" LICENSE="GPL-2" KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86" SLOT="0" RDEPEND="virtual/man" src_compile() { if use unicode; then einfo "Converting EUC-JP manpages to UTF-8..." local x for x in manual/*/*/*.[1-9] "${WORKDIR}"/${GENTOO_MAN_P}/*/*.[1-9]; do mv ${x} ${x}.old iconv -f eucjp -t utf8 ${x}.old > ${x} rm ${x}.old -f done fi sed -i -e "/^\(man\|shadow\)/s:Y:N:" script/pkgs.list || die # remove man pages that are provided by other packages. # - sys-apps/shadow +nls rm -f manual/*/man1/{chfn,chsh,newgrp,su,passwd,groups}.1 rm -f manual/*/man8/{vigr,vipw}.8 } src_install() { local x y z pkg for x in $(tac script/pkgs.list | grep -v '^[#].*'); do if [[ -z "${pkg}" ]]; then pkg=${x} continue fi if [[ "${x}" == "N" ]]; then pkg= continue fi einfo "install ${pkg}" for y in $(ls -d manual/${pkg}/man* 2>/dev/null); do doman -i18n=ja ${y}/* done pkg= done dodoc ChangeLog README cd "${WORKDIR}"/${GENTOO_MAN_P} for x in *; do if [ -d "${x}" ]; then einfo "install ${x}" for z in $(for y in ${x}/*.[1-9]; do echo ${y##*.}; done | sort | uniq); do doman -i18n=ja ${x}/*.${z} done fi done newdoc ChangeLog ChangeLog.GentooJP } pkg_postinst() { if use unicode; then einfo "Scanning existing Japanese manpages..." local x lst lst=$(for x in /usr/share/man/ja/*/*.bz2; do bzcat ${x} | iconv -f utf8 -t utf8 >/dev/null 2>&1 || echo ${x}; done) if [ -n "${lst}" ]; then for x in ${lst}; do einfo "Converting $(basename ${x}) to UTF-8..." mv ${x} ${x}.old bzcat ${x}.old | iconv -f eucjp -t utf8 | bzip2 > ${x} rm ${x}.old done else einfo "No EUC-JP manpages found." fi else echo elog "You need to set appropriate LANG variables to use" elog "Japanese manpages." elog "e.g." elog "\tLANG=\"ja_JP.eucJP\"" elog "\texport LANG" echo fi }
以下は、インストール作業の例。
$ sudo mkdir /usr/local/overlays/local/app-i18n/man-pages-ja/files -p $ sudo cp man-pages-ja-20070515.ebuild /usr/local/overlays/local/app-i18n/man-pages-ja/ $ sudo ebuild /usr/local/overlays/local/app-i18n/man-pages-ja/man-pages-ja-20070515.ebuild digest $ sudo emerge -av man-pages-ja
現在のPortageでは、別のパッケージ(dpkgやw3mなど)に付属するmanページの圧縮は全てbzip2形式に統一されているようなので、bzip2圧縮されたmanページファイル(.1.bz2など)のみ、検出と変換を行うようにしている。
インストール後、EUC-JPなmanページの検出とUTF-8への変換のみを行うには
$ sudo ebuild /usr/local/overlays/local/app-i18n/man-pages-ja/man-pages-ja-20070515.ebuild postinst
を実行すればよい。以前の記事の作業と比べると、非常に楽になったと思う。