試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

mfiler2-3.2.1.ebuild

安定版のバージョンが3.2.1になっているので、これに合わせるついでにebuildも多少いじってみた。

  • 各種修正を全てsedで行い、外部パッチを用いないようにした(修正の量が少ないことと、差分を取って配置してなどとやるのが面倒なのが理由)
  • configureスクリプトRuby関係の情報を渡す必要がなくなったので、この部分は外した
  • ソースに付属していたnet-sshなどが無くなっているので、依存パッケージから外した
  • dev-lang/rubyをUSE=cjkでビルドした場合(OnigUCharの関係で)ビルドエラーになるため、USE=onigを付けたとしてもRuby付属の鬼車を使用する*1ように修正
  • 「#else if defined(HAVE_NCURSES_H)」の部分でしつこく警告が出るので、「#elif」になるように修正
  • mdndは、USE=gtkのときにのみインストールするようにした

配置場所はローカルOverlayのapp-misc/の下などに。
ファイル名: mfiler2-3.2.1.ebuild

# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

inherit eutils

DESCRIPTION="a two pane file manager under UNIX console."
HOMEPAGE="http://www.geocities.jp/daisuke530221jp/"
SRC_URI="http://www.geocities.jp/daisuke530221jp/${P}.tgz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="migemo onig gtk"
RESTRICT="strip"

RDEPEND="virtual/libiconv
	>=sys-libs/ncurses-5
	>=dev-lang/ruby-1.8
	migemo? (
		>=app-text/cmigemo-1.3
		onig? ( >=dev-libs/oniguruma-4.6.1 )
	)
	gtk? ( >=dev-ruby/ruby-gtk2-0.15.0 )"
DEPEND="${RDEPEND}
	>=sys-devel/libtool-1.5"

pkg_setup() {
	if use migemo && ! use onig; then
		if has_version "=dev-lang/ruby-1.8.6-r1"; then
			# ruby-1.8.6-r1 lacks "cjk" USE flag
			eerror
			eerror "C/Migemo support requires oniguruma library"
			eerror "You need to enable \"onig\" use flag"
			eerror " or install other version of Ruby with USE=cjk enabled"
			eerror
			die "Please enable \"onig\" use flag or install other version of Ruby with USE=cjk"
		elif ! built_with_use dev-lang/ruby cjk; then
			eerror
			eerror "C/Migemo support requires oniguruma library"
			eerror "You need to enable \"onig\" use flag"
			eerror " or rebuild dev-lang/ruby with USE=cjk enabled"
			eerror
			die "Please enable \"onig\" use flag or rebuild dev-lang/ruby with USE=cjk"
		fi
	elif use migemo && use onig && built_with_use dev-lang/ruby cjk; then
		ewarn
		ewarn "Oniguruma(version 2) is embedded in Ruby"
		ewarn "We'll use oniguruma in Ruby (NOT \"dev-lang/oniguruma\")"
		ewarn
	fi
}

src_unpack() {
	unpack ${A}
	cd "${S}"
	# We don't use bundled origuruma
	sed -i 's|\(LIBONIG=\)onig-4.6.1/.libs/libonig.a|\1|' Makefile.in
	sed -i -e 's/\(INCONIG=\)-I onig-4.6.1/\1/' -e 's/^$(LIBONIG):$//' -e 's/cd onig-/#/' Makefile.in
	if use migemo; then
		if ! use onig || built_with_use dev-lang/ruby cjk; then
			# embedded version of oniguruma (Ruby/oniguruma)
			sed -i -e 's/const \(OnigUChar\)/\1/g' -e 's/Onig\(UChar\)/\1/g' isearch.cpp
		else
			# official version of oniguruma
			sed -i 's|\(LIBONIG=\)|\1-lonig|' Makefile.in
		fi
	else  # Disable C/Migemo if "migemo" USE flag is disabled
		sed -i -e 's/#define HAVE_MIGEMO_H 1//' -e 's/-lmigemo//' configure
	fi
	# Inclusion of string.h is lacked
	local name
	for name in extra hash string vector; do
		mv minato_${name}.h{,.orig}
		echo "#include <string.h>" > minato_${name}.h
		cat minato_${name}.h.orig >> minato_${name}.h
	done
	# Fix for "warning: extra tokens at end of #else directive" (else if > elif)
	sed -i 's/\(#el\)se \(if\)/\1\2/' minato_curses.h
	# Don't install mdnd if "gtk" USE flag is disabled
	use gtk || sed -i 's/$(INSTALL) -m 755 mdnd $(bindir)//' Makefile.in
}

src_compile() {
	export CC="$(tc-getCC) ${CFLAGS}" CXX="$(tc-getCXX) ${CXXFLAGS}"
	econf --sysconfdir=/etc/mfiler2 || die "econf failed"
	emake || die "emake failed"
}

src_install() {
	einstall sysconfdir="${D}"/etc/mfiler2 || die "einstall failed"
	dodoc README README.utf8.jp
	dohtml *.html
}

以下は、その他のメモ。

  • パッチを使用する代わりにsedで置換している部分は実は結構汚い。
  • C/Migemoがインストール済みのときにUSEフラグで無効にする場合のconfigureの修正は特に汚いが、一応無効にはできているようだ。
  • 「inherit eutils」は、built_with_use()関数(パッケージにUSEフラグを指定してインストールしたかを調べる)のために必要
  • ファイルの先頭に「#include 」の行を追加するのに、下のような手順を用いた。*2
    1. 元ファイルの退避
    2. echoでinclude行を書く
    3. 退避していたファイルをcatで追加書き込み
  • x86_64でwkf-1.3.9/ディレクトリのconfigureスクリプトが通らない不具合は残っている。ebuildでは、econf()関数*3が自動的に下のように更新を行うため、手動でlibtoolize --copy --forceする必要はない。
 * econf: updating mfiler2-3.2.1/wkf-1.3.9/config.sub with /usr/share/gnuconfig/config.sub
 * econf: updating mfiler2-3.2.1/wkf-1.3.9/config.guess with /usr/share/gnuconfig/config.guess

*1:sed -i -e 's/const \(OnigUChar\)/\1/g' -e 's/Onig\(UChar\)/\1/g' isearch.cpp」の修正を行う

*2:関連した操作として、「CompizのVideo PlaybackプラグインとMPlayer」では、新しいバージョンのMPlayerではそのままではパッチの当たらない部分があったので、その前後をheadtailで書き出し、パッチの当たらない部分をヒアドキュメントで書き出して新しいパッチを作成して適用する、ということを行った。これは、差分を取り直さずに古いパッチを再利用するのが目的

*3:/usr/lib/portage/bin/ebuild.shに書かれている