multilib-build.eclassGentooで-style multilib を使用した経験がほとんどないことを開示する必要があります。
ABI_X86あるUSE_EXPAND変数は、設定ABI_X86="32 64"またはUSE="abi_x86_32 abi_x86_64"同等です。この記事の執筆時点(2013-09-09)でのdefault/linux/amd64/13.0プロファイルのABI_X86のデフォルト設定は、ちょうどのようですABI_X86=64。
この変数は、ebuildでの明示的なmultilibサポートを制御します。multilib-build.eclassこれは、元の方法よりもGentooに似たmultilibの実行方法です。
Gentooに32ビットライブラリをインストールする元の方法は、という名前のバイナリスナップショットを使用することapp-emulation/emul-linux-*です。これらのエミュレーションバイナリパッケージにはそれぞれ、Gentoo開発者がコンパイルした32ビットライブラリのセットがすべて含まれています。それぞれが一緒に調整する必要があるライブラリのバンドルをインストールするため、32ビットのみのebuildの依存関係を追跡するのはより困難です。たとえば、media-libs/alsa-lib32ビットシステムで32 ビットが必要な場合、インストールするだけですmedia-libs/alsa-libが、64ビットmultilibシステムでapp-emulation/emul-linux-soundlibsは、他のライブラリの中でも32ビットバージョンのをインストールすることを発見する必要がありmedia-libs/alsa-libます。また、そのようなバイナリパッケージを1つ作成するGentoo開発者は、それぞれの multilibとbuildsystemの癖を把握する作業を行う必要があります。スナップショットパッケージに含まれるライブラリのことで、メンテナンスが難しくなります。そして、最も重要なのは、Gentooでmultilibを使用するための唯一の公式オプションとしてバイナリパッケージを提供することは、Gentooの精神に反することです。すべてを自分でコンパイルする権利が必要です!
multilib-build.eclass個々のebuildを助けることによって、この挙動から離れるインストール両方、32ビットおよび64ビットバージョン。これにより、たとえば、wineパッケージをプルするのではなく、必要なパッケージに対して直接依存関係を指定するだけで済みapp-emulation/emul-linux-*ます。ssuominenがあなたが参照したフォーラムスレッドで言及しているように:
= app-emulation / emul-linux-x86-xlibs-20130224-r1これは空のパッケージであり、ファイルはx11-libs /から直接取得されるため、ファイルはありません
(注-r1以降に変更された-r2)最終的に、app-emulation/emul-linux-x86-xlibsそれ自体が32ビットのみパッケージが適切で正しいパッケージに直接依存するようにドロップすることができなければならないx11-libsと、そのmultilib-build.eclass必要な32ビットLIBSを提供する、の助け。これは、ABI_X86遊びに出てくるところです。どれmultilib-build.eclass少なくとも-enabledパッケージの向上、新たなUSEフラグabi_x86_32とabi_x86_64、おそらくabi_x86_x32。EAPI=2-style USE依存関係を使用すると、パッケージは他のパッケージの32ビットバージョンに依存できます。x11-libs/libX11がwhile ABI_X86="32 64"に出現した場合、USE-flags abi_x86_32およびabi_x86_64USE-flagsが設定された状態でインストールされます。特定のグラフィカルパッケージに32ビットバージョンのが必要な場合、libX11指定できますx11-libs/libX11[abi_x86_32]その依存関係。この方法で、このグラフィカルパッケージをemergeしようとしてlibX1132ビットライブラリをインストールしていない場合、portageは拒否します。multilib-build.eclassまた、ユニバーサルであり、32ビットシステムと互換性があります。この同じグラフィカルパッケージを32ビットシステムにインストールlibX11すると、abi_x86_32useflagが設定されていないとインストールできないため、常に動作します。これapp-emulation/emul-linux-x86-xlibsにより、multilibシステムの場合とx11-libs/libX1132ビットのみのシステムの場合に直接依存する必要があるという問題が解決されます。multilibシステム上でよりクリーンで賢明なパッケージ間依存関係を持つ道を開いています。は、たとえばに直接依存する方法がわからない=app-emulation/emul-linux-x86-xlibs-20130224-r2、app-emulation/emul-linux-x86-xlibs以前は依存していた古いパッケージを動作させるための仲介者として存在しますx11-libs/libX11[abi_x86_32]。=app-emulation/emul-linux-x86-xlibs-20130224-r2同じ32ビットライブラリがインストールされている/usr/lib32かのように存在することを確認しますが=app-emulation/emul-linux-x86-xlibs-20130224、バイナリパッケージを提供するのではなく、依存関係を介してこれらの32ビットライブラリを構築することでGentooの方法を実行します。virtualこの方法では、このカテゴリのパッケージのように動作します。何もインストールせず、既存のebuildの依存関係を「転送」するだけです。
multilib-build.eclassmultilibシステムへのよりクリーンな依存関係への道を開く方法を見てきました。/ を指定した場合、ABI_X86オプションがあるパッケージ(abi_x86_*useflagsがあるということと同じもの)はそれ自体の32ビットバージョンをインストールします。これはどのように機能しますか(高い概念レベルで)?ebuild自体を読むことができます。基本的に、このアイデアは、複数のバージョンのpythonとrubyを同時にインストールするオプションがあるpythonまたはruby ebuildと同じです。ebuildがを継承すると、ABI_X86をループし、ABI_X86の各エントリに対して展開、コンパイル、インストールの各ステップを実行します。Portageはebuildのような位相の全てを通過するので、と順番に(他)と一度だけ、USE=abi_x86_32ABI_X86=32multilib-build.eclasssrc_unpack()src_compile()src_install()multilib-build.eclass(現在、の助けを借りてmultibuild.eclass)は、ABI_X86の異なる値ごとにディレクトリを作成します。これらの各ディレクトリにソースのコピーを展開します。そこから、これらの各ディレクトリは、それぞれが特定のABIをターゲットにすると分岐し始めます。ディレクトリABI_X86=32きます./configure --libdir=/usr/lib32FLAGSは、32ビットをターゲットにして実行します(たとえば、CFLAGS=-m32:portageのプロファイルはほとんどABI_X86 = 32を参照してくださいとしてABI = x86とABI_X86 ABI = AMD64など= 64)(注multilibのプロファイルのCFLAGS_x86のENVVARから来ています)。間にsrc_install()フェーズでは、すべての異なるコンパイル済みABIが相互にインストールされるため、ファイルに32ビットバージョンと64ビットバージョンの両方がある場合、ネイティブABIが勝ちます(たとえば、PATHにライブラリと実行可能ファイルの両方をインストールするebuildは64 -32ビットと64ビットの両方のライブラリを含むPATHに実行可能ファイル。まとめると、を設定ABI_X86="32 64"するとmake.conf、サポートmultilib-build.eclassするパッケージは、ABIごとに1回ビルドされるため、コンパイルにおよそ2倍の作業量がかかります(時間とは言いません;-))/usr/lib32。
ABI_X86まだ公式のドキュメントがあるのか、詳細なステータスがあるのかわかりません。現在使用してmultilib-build.eclassいるEbuild はほとんど不安定なようです。新しいスタイルのmultilibとのABI_X86違いを理解していれば、リンクしているブログの指示に従って、体験とテストを開始できます。しかし、古いスタイルのバイナリパッケージに問題がなければ、機能を維持する必要があると思います。あなただけに移動する必要があるでしょうあなたはどのパッケージを使用する場合、直接他のパッケージの依存するuseflag(たとえば、と彼らはおそらく両方に同じライブラリをインストールするために共存することはできませんつまり、)。速いですapp-emulation/emul-linux-x86-xlibs-20130224app-emulation/emul-linux-x86-xlibs-20130224-r2app-emulation/emul-linux-x86-xlibs-20130224-r2abi_x86_32app-emulation/emul-linux-x86-xlibs-20130224x1-libs/libX11[abi_x86_32]/usr/lib32/usr/lib32/libX11.so.6を見wine-1.7.0.ebuildて、それは必要ないことを私に示唆している-r2。
app-emulation/emul-linux-x86と、一部のパッケージが依存し、他のパッケージが直接のパッケージに依存することになります。多くのキーワードとUSEフラグの変更が必要でしたが、一緒にコンパイルして実行するためのすべてを手に入れました!:-D