なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Debianでwine-1.5をビルド

Debianのパッケージに入っているWineが古いので、wineをgitからとってきてビルドしてみた。

GistとはてなブログCSSがうまく連携できない〜
Wineのビルド · GitHub

環境の準備

Debianでの環境構築については以下に方法が書いてある
BuildingWine - The Official Wine Wiki

ビルド


最新版をビルドしたいところ

 $ git log 
commit 35aaa42669f0e5048b0f3b7583ec8230a5f4d7ba
Author: Alexandre Julliard <julliard@winehq.org>
Date:   Fri May 10 20:30:10 2013 +0200

    Release 1.5.30.


・注意
ここにあるように、パスにclangが入っているとビルドエラーになる。そしてこの状態は解消されていない。
wineの最新版をビルドする際は、clangを抜いた状態で行おう。
最近のwineはMac OSXよりなんだなあ
[Bug 32872] New: Compilation broken if clang is installed, but not used for compilation.

Wineのソースコードはよくメンテナンスされているようで、軽快にビルドできた。
configureの際はCFLAGS, CPPFLAGSにインクルードパスを設定しなければいけない。

 $ cd wine/  
 $ CFLAGS='-I/usr/include -I/usr/include/x86_64-linux-gnu'   \  
   CPPFLAGS='-I/usr/include -I/usr/include/x86_64-linux-gnu' \  
   ./configure --prefix=/usr --without-freetype  
 $ make  
32bit/64bit対応Wine


ここの情報を元にする
Wine64 - The Official Wine Wiki

Wineのconfigureは /usr 以下においてあるmingwのクロスコンパイラを認識しているようです。その状態で/usr/include:/usr/include/x86_64-linux-gnuをCFLAGSやCPPFLAGSに指定すると、/usr/x86_64-w64-mingw32 以下のヘッダファイルと /usr/include/x86_64-linux-gnu 以下のヘッダファイルが合わさり最強に見える 混ざり合ってコンパイルエラーになる。

 $ mkdir ~/wine64  
 $ cd ~/wine64  
 $ PATH=$PATH:/usr/include:/usr/include/x86_64-linux-gnu \ 
   ~/git/wine/configure --prefix=/usr --enable-win64  

 $ mkdir ~/wine32  
 $ cd ~/wine32
 $ CFLAGS='-I/usr/include -I/usr/include/x86_64-linux-gnu'   \  
   CPPFLAGS='-I/usr/include -I/usr/include/x86_64-linux-gnu' \  
   LDFLAGS='-L/usr/lib/i386-linux-gnu' ~/git/wine/configure  \  
   --prefix=/usr --with-wine64=../wine64  


Debian Wheezyにて libhoge:i386 というパッケージ名でライブラリを入れると。たいてい /usr/lib/i386-linux-gnu 以下にライブラリの実体が入る。configureはそいつらをリンクできるかどうか内部で試している。

例えばlibfontconfig:i386をインストールしていても、実際のファイル名が、libfontconfig.so.x.xとかになっているため。config.logに -lfontconfig でリンクしててエラーになっていることがある。

その場合configureに合わせてシンボリックリンクを張ってやればテストに通るようになる。

 $ ln -s libXrender.so.1.3.0 libXrender.so

i386ライブラリの自前ビルド


32bit向けライブラリがどうしても64bitのものと共存できない時がある。そういう時はLinux内でクロスコンパイルしてしまえばいい。/usr 以下に適当な場所を用意して、そこに32bit用ライブラリを入れる。

 # mkdir /usr/i386-linux-gnu  

最近wineをビルドした時のconfigureオプション

  $ ./configure PNG_CFLAGS=-I/usr/i386-linux-gnu/include PNG_LIBS=-L/usr/i386-linux-gnu/lib -lpng16