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

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

x86_64版Gentoo Linuxの32bitライブラリを自前で管理(chroot無しでemul-linux-x86-sdlをビルド)

準備として、「emul-linux-x86-sdl」をインストールしておく。

  1. 問題なくビルドできるもの
  2. smpeg(0.4.4-r9)とsdl-ttf(2.0.8)
  3. sdl-sound(1.0.1-r2 USE="mikmod mp3 mpeg vorbis -flac")
  4. sdl-mixer(1.2.7 USE="mikmod mp3 vorbis")
  5. インストールするebuildの例

問題なくビルドできるもの

smpeg(0.4.4-r9)とsdl-ttf(2.0.8)

USE="-X"でエラー回避できる。得られるライブラリはどちらも同じ。smpegの「USE=opengl」は問題なし。

sdl-sound(1.0.1-r2 USE="mikmod mp3 mpeg vorbis -flac")

USE="-flac"でビルド。USE=flacを付けるなら、32bitのFLACも必要になる。更に、lib64の修正をする。

--- /usr/portage/media-libs/sdl-sound/sdl-sound-1.0.1-r2.ebuild.orig
+++ /usr/portage/media-libs/sdl-sound/sdl-sound-1.0.1-r2.ebuild
@@ -52,6 +52,9 @@
                $(use_enable physfs) \
                $(use_enable vorbis ogg) \
                || die
+       if use amd64 && [[ "${ABI}" = "x86" ]]; then
+               find . -name Makefile | xargs sed -i -e 's/lib64/lib32/g'
+       fi
        emake || die "emake failed"
 }

sdl-mixer(1.2.7 USE="mikmod mp3 vorbis")

これもlib64の関係でリンクエラーになるのだが、Makefile

EXTRA_LDFLAGS =  -L/usr/local/lib -lSDL -lpthread -L/usr/lib -lmikmod

のように探索パスが書かれている形により/usr/lib=/usr/lib64を検索するためなのか、リンクエラーになる。この部分を「lib32」へ置換することで回避。

--- /usr/portage/media-libs/sdl-mixer/sdl-mixer-1.2.7.ebuild.orig
+++ /usr/portage/media-libs/sdl-mixer/sdl-mixer-1.2.7.ebuild
@@ -46,6 +46,9 @@
                $(use_enable mp3 music-mp3) \
                $(use_enable vorbis music-ogg) \
                || die
+       if use amd64 && [[ "${ABI}" = "x86" ]]; then
+               find . -name Makefile | xargs sed -i -e 's|-L/usr/lib|-L/usr/lib32|'
+       fi
        emake || die "emake failed"
 }

インストールするebuildの例

SDL関連のパッケージは/etc/env.d/以下にファイルを作らないので、USE="-nodevelop"で入れた場合の${ALLOWED}には「^${S}/etc/env.d」のパターンを含めていない。
ファイル名: emul-linux-x86-sdl-9999.ebuild

# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-emulation/emul-linux-x86-sdl/emul-linux-x86-sdl-10.1.ebuild,v 1.3 2007/07/12 06:39:56 mr_bones_ Exp $

inherit emul-libs

SRC_URI="mirror://gentoo/libsdl-1.2.11-r2.tbz2
	mirror://gentoo/openal-0.0.8-r2.tbz2
	mirror://gentoo/sdl-image-1.2.5-r1.tbz2
	mirror://gentoo/sdl-mixer-1.2.7.tbz2
	mirror://gentoo/sdl-net-1.2.6.tbz2
	mirror://gentoo/sdl-sound-1.0.1-r2.tbz2
	mirror://gentoo/sdl-ttf-2.0.8.tbz2
	mirror://gentoo/smpeg-0.4.4-r9.tbz2"

LICENSE="LGPL-2 LGPL-2.1"
KEYWORDS="-* ~amd64"
IUSE="nodevelop"

DEPEND=""
RDEPEND=">=app-emulation/emul-linux-x86-xlibs-10.0
	>=app-emulation/emul-linux-x86-soundlibs-10.0"

src_unpack() {
	! use nodevelop && ALLOWED="(^${S}/usr/lib32/pkgconfig|.*lib32.*\.l?a$)"
	emul-libs_src_unpack
}

インストール例。

$ sudo mkdir /usr/local/overlays/local/app-emulation/emul-linux-x86-sdl/files -p
$ sudo mv emul-linux-x86-sdl-9999.ebuild /usr/local/overlays/local/app-emulation/emul-linux-x86-sdl/
$ sudo cp [tbz2の保存先] /usr/portage/distfiles/
$ sudo emerge -avu emul-linux-x86-sdl