続・玩式草子 ―戯れせんとや生まれけん―

第36回 Days of WINE and Struggles again[5]

この記事を読むのに必要な時間:およそ 4 分

WINEでは毎年1月にメジャーバージョンを更新することになっており,現在,12月上旬に公開されたWine-6.23を開発版の最終バージョンとして,来年公開予定のWine-7.0への最終調整段階に入っています。

Plamo用の正式なパッケージは7.0が公開されてから作成する予定なものの,今回はその予行演習としてWINEをソースコードからビルドする作業を紹介しましょう。

ソースコードのダウンロードとビルドスクリプトの用意

WINEのビルドには32ビット用のコンパイラやライブラリが必要で,ゼロから用意するのはなかなか大変なものの,先に紹介したパッケージ群をインストールしてWINEが動作する環境を作っておけば,後は他のソフトウェアと同じ手順でビルドすることができます。今回は本稿執筆時点での最新版であるwine-7.0-rc2をビルドしてみることにします。

まずは,WineHQのサイトから,wine-7.0-rc2のソースコードをダウンロード,展開しておきます。

$ wget https://dl.winehq.org/wine/source/7.0/wine-7.0-rc2.tar.xz
 --2021-12-22 17:04:31--  https://dl.winehq.org/wine/source/7.0/wine-7.0-rc2.tar.xz
 dl.winehq.org をDNSに問いあわせています... 151.101.90.217
 ...
 2021-12-22 17:04:33 (11.2 MB/s) - `wine-7.0-rc2.tar.xz' へ保存完了 [27108028/27108028]
$ tar xvf wine-7.0-rc2.tar.xz
 wine-7.0-rc2/tools/wrc/CHANGES
 wine-7.0-rc2/tools/wrc/Makefile.in
 ...
 wine-7.0-rc2/tools/wrc/wrctypes.h

WINEのソースコードにはconfigureスクリプトが付属しているので,configureとmake installで手動インストールすることも可能なものの,パッケージ化しておけばインストールやアンインストールが簡単になるので,既存のビルドスクリプトを流用してパッケージ化することにします。Plamo Linuxでは,各パッケージのビルドスクリプトは/usr/share/doc/以下に収められています。

$ cp /usr/share/doc/wine-6.20/PlamoBuild.wine-6.20.gz .
$ gunzip PlamoBuild.wine-6.20.gz
$ cp PlamoBuild.wine-{6.20,7.0-rc2}

今回はconfigureスクリプトに渡すオプション等は6.20の設定のまま使い,ヘッダ部分のバージョン番号回りのみを7.0-rc2用に修正しました。

$ cat -n PlamoBuild.wine-7.0-rc2 
   1  #!/bin/sh
   2  ##############################################################
   3  pkgbase="wine"
   4  vers="7.0_rc2"
   5  url="https://dl.winehq.org/wine/source/6.x/wine-7.0-rc2.tar.xz"
   6  verify=""
   7  digest=""
   8  arch=`uname -m`
   9  build=B1
  10  src="wine-7.0-rc2"
  11  OPT_CONFIG="--with-x --enable-win64"

エラー発生!!

config処理では,6.20の時と同様OpenCLやOSS sound system,libcapi20がサポートされない旨が指摘されたものの,特に問題なく終了しました。

$ ./PlamoBuild.wine-7.0-rc2 config | cat -n
   1  checking build system type... x86_64-pc-linux-gnu
   2  checking host system type... x86_64-pc-linux-gnu
   ...
  419  configure: OpenCL 64-bit development files not found, OpenCL won't be supported.
  420  configure: OSS sound system found but too old (OSSv4 needed), OSS won't be supported.
  421  configure: libcapi20 64-bit development files not found, ISDN won't be supported.
  422  
  423  configure: Finished.  Do 'make' to compile Wine.

ところが,ビルドしてみると途中でエラー終了してしまいます。

$ ./PlamoBuild.wine-7.0-rc2 build | cat -n
   1  x86_64-w64-mingw32-gcc -c -o dlls/acledit/main.cross.o /home/kojima/Wine/wine-7.0-rc2/dlls/acledit/main.c -Idlls/acledit \
   2    -I/home/kojima/Wine/wine-7.0-rc2/dlls/acledit -Iinclude -I/home/kojima/Wine/wine-7.0-rc2/include \
   3    -I/home/kojima/Wine/wine-7.0-rc2/include/msvcrt -D__WINESRC__ -D_UCRT -D__WINE_PE_BUILD -Wall \
   4    -fno-strict-aliasing -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers -Winit-self \
    ....
 23068  /home/kojima/Wine/wine-7.0-rc2/dlls/d3d12/d3d12_main.c:341:24: エラー: ‘VKD3D_API_VERSION_1_2’ undeclared (first use in this function); did you mean ‘VK_API_VERSION_1_2’?
 23069    341 |         .api_version = VKD3D_API_VERSION_1_2,
 23070        |                        ^~~~~~~~~~~~~~~~~~~~~
 23071        |                        VK_API_VERSION_1_2
 23072  /home/kojima/Wine/wine-7.0-rc2/dlls/d3d12/d3d12_main.c:341:24: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます
 23073  make: *** [Makefile:37240: dlls/d3d12/d3d12_main.o] エラー 1
 23074  make: *** 未完了のジョブを待っています....
 23075  build error. ./PlamoBuild.wine-7.0-rc2 script stop

あれれ,と思って調べたところ,Wine-7.0系ではDirect3D12の機能をVULKAN用に変換するvkd3dライブラリ1.2以上が必要になるようです。それでは,とvkd3d-1.2をビルドしようとすると,今度はSPIR-Vのヘッダが古すぎると怒られました。

$ ./PlamoBuild.vkd3d-1.2 config
checking for gcc... gcc
checking whether the C compiler works... yes
...
checking whether SpvCapabilityDemoteToHelperInvocationEXT is declared... no
configure: error: SPIR-V headers are too old.
configure error. ./PlamoBuild.vkd3d-1.2 script stop

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html