去年JNetHackのWindows版をAppVeyorでビルドしてみるという記事を書いて、結局未遂だったのですが、再挑戦して成功したので手段をまとめます。
(これはRoguelike Advent Calendar 2018 14日目の記事です。)
前回までのあらすじ
前回の記事をどうぞ。前回「3.6.1ではVS2015に移行する必要がある」と書いていましたが3.6.1がリリースされたのでVS2015に移行がてらAppVeyorでのビルドに再挑戦しました。
設定ファイル
まずは成功した設定ファイルを以下に。
version: 1.0.{build}
branches:
only:
- develop
image: Visual Studio 2015
init:
- ps: >-
Set-WinSystemLocale ja-JP
Start-Sleep -s 10
Restart-Computer
Start-Sleep -s 10
before_build:
- cmd: echo done | sys\winnt\nhsetup.bat
build:
project: win\win32\vs2015\NetHack.sln
verbosity: minimal
先に本題でない変更点を:
- 環境は前述の通りVS2015に。
- nhsetup.batが改良されてVS2015 Communityも検出されるようになり、独自パッチが不要になったので普通にdevelopブランチを対象に。
- 前回はプロジェクトファイルを設定していたのだけど、ソリューションファイルでもいいようなのでこちらに。ttyとguiを両方ビルドできる。
本題
今回ビルドできるようにするための肝はinit:
節で、この指定によりシステムロケールを日本語に切り替えて再起動しています。
前回は/source-charset:.932
の指定が必要で、VS2013では対応していないので無理、という結論だったのですが、実は前回参照した日本語を含むC++のプロジェクトをAppVeyorでビルドしたらはまったをよく読むと、実はこのオプションは本命ではなく、その後に書いてあるロケール切り替えが本命でした。実際手元でこのオプション指定してもビルドが通らず、ロケール切り替えをするようにしたらこのオプションは不要でした。つまり、実はVS2013でもロケール切り替えさえすればビルドは通っていたのかもしれません…。
なお、再起動前後にStart-Sleep
がありますが、この値が小さいとたまにビルドに失敗します。プロジェクトによって必要な値が変わるかもしれませんのでそこは調節してみてください。
まとめ
JNetHackをAppVeyorでビルドする設定を示しました。少々設定には癖がありますが、とりあえずビルドが通ることが確認できるだけでも便利なので、皆さんも一度試して見てください。