読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

【Gentoo】VIDEO_CARDS や INPUT_DEVICES などは、隠れUSEフラグ

Gentoo Linux

Gentoo Wiki などでは、VIDEO_CARDSINPUT_DEVICES などを make.conf で指定するように書いてあります。 これらは Gentoo Wiki に"USE_EXPAND"と書いてあるとおり、 USE フラグの一種です。

例えば、 INPUT_DEVICES="evdev" は、 input_devices_evdev というUSEフラグに相当します。 もしも /etc/portage/make.conf

INPUT_DEVICES="evdev keyboard mouse

と書いたらそれは、

USE="${USE} input_devices_evdev input_devices_keyboard input_devices_mouse"

と同じです。 *1

eix(app-portage/eix) で検索してみても、

$ eix -U input_devices_evdev -\#
dev-libs/DirectFB
x11-base/xorg-drivers

検索結果が出ることが判ります。

VIDEO_CARDS="intel i965" の意味

例えば IntelGPU だと、製造世代ごとに機能が異なるため、指定する ${VIDEO_CARDS} も異なります。 Gentoo Wiki の intel GPU に関する項目 にも、表が載っています。

VIDEO_CARDS="intel i915"VIDEO_CARDS="intel i965" のように(intel だけではなく)2つも指定する場合があります。 近年の Intel GPU ならばほとんどは、 VIDEO_CARDS="intel i965" になるでしょう。

例えば VIDEO_CARDS="intel i965" は、 USEフラグに video_cards_intelvideo_cards_i965 の2つを加えたのと同じです。 つまり、USE フラグに video_cards_intel を含んでいるパッケージも、 video_cards_i965 を含んでいるパッケージもあるから、VIDEO_CARDS="intel i965" にしろというわけです。

eix で検索してみると実際に

$ eix -U video_cards_intel -\#  
dev-libs/DirectFB
media-libs/mesa
sys-boot/plymouth
sys-power/pm-utils
x11-base/xorg-drivers
x11-libs/libdrm
x11-libs/libva

$ eix -U video_cards_i965 -\# 
media-libs/mesa

となります。

現在のところは、VIDEO_CARDS="i965" という指定は media-libs/mesa しか意味がないようですね。 ちなみに Mesa は OpenGL 用のライブラリです。 Mesa 3D - Wikipedia

近年の Intel GPU では、VIDEO_CARDS="intel i965" が指定可能で、そうすれば Mesa の性能が上がるわけですね。 つまり、 VIDEO_CARDS="intel" しか書かないと、GPU の性能を引き出せないわけです。

x11-base/xorg-drivers video_cards_intel の実際

例えば x11-base/xorg-drivers にかぎっていえば、 video_cards_intel は、 equery u x11-base/xorg-drivers をしてみると説明が出ますが、

video_cards_intel         : VIDEO_CARDS setting to build driver for Intel
                            video cards

という目的があります。つまり、 X.OrgIntel GPUドライバをインストールするためにあるわけです。

equery w -e xorg-drivers をしてみると判りますが、 ${PDEPEND} の中に video_cards_intel? ( x11-drivers/xf86-video-intel ) という行があります

${PDEPEND} というのは、"post depend" ということで、パッケージのインストール後にインストールするパッケージを指定します。

ちなみに、dependency であっても、インストールにインストールしなければならないパッケージと、インストール可能なパッケージと、インストール後でなければならないパッケージの3種類にわかれます。 この3つをそれぞれ、 ${DEPEND}${RDEPEND}${PDEPEND} の variable に指定します。

とにかく、x11-base/xorg-drivers というパッケージについては、video_cards_intel という USE フラグは、x11-drivers/xf86-video-intel というパッケージをインストールさせるために用いられているというわけです。


この投稿は Gentoo Advent Calendar 2015 - Qiita 12日めの記事です。

*1:${name} という書き方は、Bash における variable(可変値、いわゆる「変数」)の記法です。たとえば USE という名称の変数に値を格納するときには、 USE="X gtk" のように $ が付きませんが、変数の中身を読みだすときには $ を付けます。また、 { } は変数の名称の区切り文字で、生の文字列との混同を避けるために区切られます。USE="${USE} input_devices_evdev input_devices_keyboard input_devices_mouse" は、 USE 変数の末尾に文字列" input_devices_evdev input_devices_keyboard input_devices_mouse"を追加するという意味です。