mattintosh note

どこかのエンジニアモドキの備忘録

MacPorts も Homebrew も使わずに Wine を最小構成でインストールする

Mac で Wine を自前でビルドする方法。

必要なもの

  • Xcode(Lion 以降はコマンドラインツール)
  • Wine のソース(Git の場合は git clone git://source.winehq.org/git/wine.git で取得可能)

別途、libpngfreetype ライブラリが必要。X11.app か XQuartz.app にあるものが使えます(無くても --without-PACKAGE で強制ビルドはできるけど結局動かない)。

以下のライブラリがあるといいかもしれません。各ライブラリは i386 もしくは i386 を含むユニバーサルバイナリでなくてはなりません。

  • gettext(インターフェイスを日本語化する場合に必要)
  • libjpeg
  • libtiff
  • pkg-config(無い場合は Wine の configure が勝手に探す)

これらが含まれていて代用できそうなフレームワークに Mono SDK と GStreamer SDK がありますが、CMake を使う場合に誤検出することがあるので注意が必要です。

Wine のビルド

Wine のソースディレクトリが $HOME/wine-git にあるものとします。ここでは XQuartz のライブラリを使用しています。Wine のビルドは作業ディレクトリを作成して行います。コンパイラApple GCC 4.2 です。pkg-config を使用する場合は pc ファイルが検出されるように PKG_CONFIG_LIBDIRPKG_CONFIG_PATH を設定しておきます。

--without-PACKAGE オプションを指定しない場合、configure 時にエラーメッセージが表示されますが無視してビルドを進めることは可能です。

export PATH=/opt/X11/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
export CFLAGS="-m32 -arch i386"
export CXXFLAGS="${CFLAGS}"
export CPPFLAGS="-I/usr/local/include"
export LDFLAGS="-L/usr/local/lib"
# pkg-config を使う場合
export PKGCONFIG_LIBDIR=/opt/X11/lib/pkgconfig:/opt/X11/share/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/pkgconfig

mkdir build
cd build
$HOME/wine-git/configure \
    --prefix=/usr/local \
    --with-x \
    --x-includes=/opt/X11/include \
    --x-libraries=/opt/X11/lib
make
make install

WINELOADER(起動用スクリプト)の作成

実行ファイルは /usr/local/bin/wine にありますが、実行ファイルにライブラリの場所が設定されていないためそのままでは起動出来ません。毎回 DYLD_FALLBACK_LIBRARY_PATH を指定するのは面倒なので起動ファイルを別に作成します。

まず、実行ファイルの名前を変更します(他のファイルと被らなければ大丈夫)。

mv /usr/local/bin/wine /usr/local/bin/wine.bin

/usr/local/bin/wine という名前で WINELOADER を作成します。

#!/bin/sh
export DYLD_FALLBACK_LIBRARY_PATH=/opt/X11/lib:/usr/lib
exec /usr/local/bin/wine.bin "$@"

WINELOADER に実行権限を付加。

chmod +x /usr/local/bin/wine

アプリケーションランチャの作成

Dock に置いたりするためのランチャは AppleScript などで簡単に作成できます。

Mac で AppleScript を使って Wine.app を作成する - mattintosh note -hatena- Mac で AppleScript を使って Wine.app を作成する - mattintosh note -hatena-