トップ | GentooJPについて | GentooJPの歩き方 | 各種ドキュメント

Gentoo Linux eclass リファレンス

  この文章では、現在利用可能である eclass の詳細な解説を行います。 eclass の概要については eclass HOWTO をご参照下さい。


Contents:
Author, Editor : 渡邊 集

Updated 18 Oct 2003


1.flag-o-matic.eclass

eclass flag-o-matic には、コンパイルオプションの操作を円滑に行うための関数が収められています。 flag-o-matic を継承することによって利用できるようになる関数には、以下のようなものがあります。

append-flags <フラグ> CFLAGS、CXXFLAGS に <フラグ> を追加することができます。 追加するフラグは複数設定できます。
filter-flags <フラグ> CFLAGS、CXXFLAGS から <フラグ> を取り除きます。 取り除きたいフラグは複数設定でき、 * や ? などのワイルドカードも使用可能です。 ただし * は最長マッチを意味するので、扱いには十分注意して下さい。
get-flag <フラグ> CFLAGS、CXXFLAGS から特定のフラグを探しだし、そのフラグに設定されている値を返します。 例えば CFLAGS に -march=pentium3 が設定されていた場合、get-flag march とすることで pentium3 を取得できることになります。 ここで、引数となるフラグの先頭に - が必要ないことに注意してください。
is-flag <フラグ> CFLAGS、CXXFLAGS から <フラグ> を検索し、ヒットすれば真を返します。
replace-flags <フラグ1> <フラグ2> CFLAGS、CXXFLAGS の中にある <フラグ1> を <フラグ2> に置換します。
strip-flags CFLAGS、CXXFLAGS の中から危険なフラグを全て取り除きます。
append-ldflags <フラグ> LDFLAGS に <フラグ> を追加します。追加するフラグは複数設定できます。

オーバーライド 

なし

2.gcc.eclass

eclass gcc には、コンパイル時に使用される gcc についての情報を調べるための関数が収められています。 また、変数 WANT_GCC_3 に yes や no を格納することによって、gcc-3.x についての情報が欲しいのか gcc-2.x についての情報が欲しいのかを特定することができます。

gcc-getCC C コンパイラの名前を返します。
gcc-getCXX C++ コンパイラの名前を返します。
gcc-fullversion ${CC} -dumpversion で得られるような完全なバージョンを返します。
gcc-version gcc の <メジャーバージョン>.<マイナーバージョン> を返します。
gcc-major-version gcc のメジャーバージョンを返します。
gcc-minor-version gcc のマイナーバージョンを返します。
gcc-micro-version gcc のマイクロバージョンを返します。
gcc-libpath gcc の内部ライブラリパスを返します。
gcc-libstdcxx-version libstdc++.so の完全なバージョンを返します。
gcc-libstdcxx-major-version libstdc++.so のメジャーバージョンを返します。
gcc2-flags CFLAGS と CXXFLAGS に設定されているフラグを gcc-2.95.3 互換の形式に変換し export します。

Note: WANT_GCC_3 のデフォルト値は no です。

オーバーライド 

なし

3.cvs.eclass

eclass cvs は cvs ツリーから自動的モジュールをチェックアウトしてくるような ebuild を作成したい場合に便利な eclass です。 cvs.eclass は多くの設定用変数と、CVS からソースをチェックアウトする関数、チェックアウトしたソースをビルドのためのディレクトリへコピーする関数から成り立っています。

  • 変数
    ECVS_CVS_COMMAND cvs リポジトリからモジュールをチェックアウトするためのコマンドです。 デフォルト値として "cvs -q -f -z4" が設定されており、通常これを変更する必要はありません。
    ECVS_UP_OPTS モジュールのアップデートを行う際に、ECVS_CVS_COMMAND に渡すオプションです。 デフォルト値として "-dP" が設定されており、通常これを変更する必要はありません。
    ECVS_CO_OPTS チェックアウトを行う際に、ECVS_CVS_COMMAND に渡すオプションです。 デフォルト値は設定されていませんが、通常これを設定する必要はありません。
    ECVS_TOP_DIR チェックアウトされた cvs モジュールが保存される場所です。 デフォルト値として "${DISTDIR}/cvs-src" が設定されており、通常これを変更する必要はありません。
    ECVS_SERVER この変数にはモジュールをチェックアウトする cvs サーバを指定します。 デフォルト値として "offline" が設定されており、offline が設定されていると既に ECVS_TOP_DIR にモジュールがチェックアウトされていると仮定します。
    ECVS_AUTH モジュールをチェックアウトするための認証方法を設定します。 デフォルト値として "pserver" が設定されており、通常これを変更する必要はありません。
    ECVS_RUNAS cvs コマンドをどのユーザとして実行させるかをこの変数で決定します。 デフォルト値は "`whoami`"、つまり root として実行します。
    ECVS_USER cvs サーバにログインするためのユーザ名を設定します。 デフォルト値は "anonymous" です。
    ECVS_PASS cvs サーバにログインするためのパスワードを設定します。 デフォルト値はありません。
    ECVS_MODULE cvs サーバからチェックアウトするモジュール名です。 この変数は必ず設定してください。 設定されていない場合エラーとなります。
    ECVS_BRANCH チェックアウトするブランチを設定します。 デフォルト値として "HEAD" が設定されています。
    ECVS_CLEAN この変数に真が設定されていると、ECVS_UP_OPTS に "-C" を加えてアップデートを行います。 すなわちローカルでの変更を全て捨て去って、cvs モジュールのクリーンコピーを取得します。
    ECVS_LOCALNAME この変数が設定されていると、モジュールを別名で保存します。 すなわちモジュールの保存先が ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} となります。
  • 関数
    cvs_fetch cvs サーバからモジュールをチェックアウトする関数です。 通常この関数を自分で呼ぶ必要はなく、cvs_src_unpack 関数によって呼ばれます。
    cvs_src_unpackcvs_fetch 関数を呼んでサーバからモジュールをチェックアウトし、保存したディレクトリを ${WORKDIR} にコピーします。 したがって、cvs.eclass を継承した ebuild は通常 ${S} に ${WORKDIR}/${ECVS_MODULE} か、ECVS_LOCALNAME が設定されている場合には ${WORKDIR}/${ECVS_LOCALNAME} を設定します。

ここで実例を見てみましょう。 これは風博士というソフトウェアの CVS ツリーを自動的に取得してくる ebuild です。

Code listing 3.1
# Copyright 1999-2003 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header $

inherit cvs
ECVS_SERVER="cvs.sourceforge.jp:/cvsroot/kazehakase"
ECVS_USER="anonymous"
ECVS_MODULE="kazehakase"
// sf.jp から kazehakase プロジェクト上の kazehakase というモジュールを anonymous ユーザでチェックアウトします

DESCRIPTION="A browser that use Mozilla, dillo embed, w3m and etc. to render HTML."
HOMEPAGE="http://poincare.ikezoe.net/kazehakase/"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="x86 ~ppc ~sparc alpha"
IUSE=""

DEPEND="${DEPEND}
	!kazehakase
	!kazehakase-cvs-test-lirs
	sys-devel/automake
	sys-devel/libtool
	net-www/mozilla
	x11-libs/pango
	>=x11-libs/gtk+-2*
	dev-util/pkgconfig
	net-libs/gnet"
RDEPEND="${DEPEND}"

S="${WORKDIR}/${ECVS_MODULE}"
// cvs_src_unpack 関数が ${WORKDIR}/${ECVS_MODULE} にモジュールをコピーするので S に設定します

pkg_setup(){
	if grep -v gtk2 /var/db/pkg/net-www/mozilla-[[:digit:]]*/USE > /dev/null 2>&1
	then
		echo
		eerror
		eerror "This needs mozilla used gtk2."
		eerror "To build mozilla use gtk2, please type following command:"
		eerror
		eerror "    # USE=\"gtk2\" emerge mozilla"
		eerror
		die
	fi
}

// src_unpack 関数はオーバーライドされます
// モジュールのチェックアウトとコピー以外に処理が必要ないので省略しています

src_compile(){
	export WANT_AUTOCONF_2_5=1

	./autogen.sh || die
	econf || die
	emake || die
}

src_install(){
	emake DESTDIR="${D}" install || die
	dodoc ABOUT-NLS AUTHORS COPYING* ChangeLog NEWS README* TODO.ja
}

オーバーライド 

src_unpack 「CVS ツリーからモジュールをチェックアウトし、${S} にコピーする」という動作に変更します。
Copyright© 2002-2004 Gentoo Linux Users Group Japan. ご質問、ご意見などはこちらまで。 Email www@gentoo.gr.jp.