ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

WebKitのビルドが出来た(for Windows)

先日のねたから、ずっとWebKitのビルドに挑戦し続けていましたが、何とかWebKitのビルドが出来ましたよ!
(再現できるか、全然自信が無いけど)

参考リンク

本家は、ここ。


日本語での参考リンクは、これあたりですかね。(多謝、多謝)


英語で役に立ったのは、以下でした。

ビルドに至るまでの道程

WebKit Nightly Buildsより、ソースファイルをゲットして展開します。
自分が使ったのは、以下のファイルです。


日本語参考リンクの助言に従い、以下を実施しました。

  1. WindowsSafariをインストールする。
  2. Visual Studio 2005のサービスパックを最新に更新
  3. KB918559などのHotfixを当てる
  4. cygwin-downloader.zipをダウンロードして展開し、setup.exeを実行して、Cygwinを更新。
  5. QuickTime SDKをインストール
  6. Windows Server 2003 R2 Platform SDKをインストール
  7. Visual Studio 2005を起動し、「ツール」→「オプション」から、「プロジェクトおよびソリューション」→「VC++ ディレクトリ」を開き、Windows Server 2003 R2 Platform SDKQuickTime SDKの各bin, lib, includeファイルの各パスを設定する。
    何を設定すれば良いかは、日本語参考リンクの各説明に書いています。
  8. WebKit Support LibrariesWebKit Auxiliary Libraryをダウンロード。
    (詳しくはsafari for windows, co-wiki, room1 - WindowsとCore Services DLLのページ参照)
  9. WebKit-r58638.tar.bz2 を展開し、展開先ルートに先ほどダウンロードした、WebKitAuxiliaryLibrary.zipとWebKitSupportLibrary.zipを配置。
    と、いいつつ、後で手動展開しました。(後述)
  10. コマンドプロンプトを起動し、カレントディレクトリを展開先ルートに合わせる。
  11. 次に、Visual Studio 2005のフォルダにある、vsvars32.batを実行し、コンパイラの実行パスを追加。
    (デフォルトでは、"C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"にあります)
  12. WEBKITLIBRARIESDIRとWEBKITOUTPUTDIRの環境パスを手動設定する。(後述)
  13. 'bash[enter]'を入力して、Cygwinのシェルを起動。
  14. WebKit/WebKitTools/Scripts/update-webkit」を呼び出す。
  15. WebKit/WebKitTools/Scripts/set-webkit-configuration --debug」を呼び出す。
  16. WebKit/WebKitTools/Scripts/build-webkit」を呼び出す。
  17. 暫くすると、ビルドが終了する。
    (とかいいつつ、後述するように WebKit-r58638.tar.bz2 のファイルは一部修正しましたけど)
  18. WebKitTools/Scripts/run-safari」と打ち込むと、以下のようにビルドしたバージョンのSafariが起動します。
    1
    1 posted by (C)wacky
  19. ビルドバージョンかどうかは、Process Explorerでチェックすれば一目瞭然です。やった。
    2
    2 posted by (C)wacky


以降は、引っかかったポイントを幾つかメモします。
(とかいいつつ、日本語参考リンクの言い回しそのままですが)

ポイント:WEBKITLIBRARIESDIRとWEBKITOUTPUTDIRの環境パスを間違えるな

以下のWeb siteでも指摘されておられますが、ビルドして失敗した時、WEBKITLIBRARIESDIRとWEBKITOUTPUTDIRの環境パスが望ましい設定値になっているか、よくよく確認しましょう。


例えば、自分が使用したソースのルートパスが、以下の場合

F:\Wacky\Test\webkit\WebKit_

環境パスは、以下であるべきです。

set WEBKITOUTPUTDIR=F:\Wacky\Test\webkit\webkit_\WebKitBuild
set WEBKITLIBRARIESDIR=F:\Wacky\Test\webkit\webkit_\WebKitLibraries\win


自分は、この環境パス設定を間違えて、あらぬ場所にコンパイル途中のファイルを生成させてしまい、何度もリビルドを繰り返してしまいました。

ポイント:エラーが発生したら最初のBuildLog.htmを見よう

以下のWeb siteでも言及されていますが、ちゃんとBuildLog.htmを見ましょう。
しかも、最初にエラーになった奴を。


例えば、自分の場合、ビルドに失敗したので、BuildLog.htmを見たんですよ。
すると、以下のエラーメッセージが。

####### COMPILING 1 FILES USING AT MOST 2 PARALLEL INSTANCES OF cl.exe ###########
ThreadGlobalData.cpp
..\platform\ThreadGlobalData.cpp : error C2220: 警告をエラーとして扱いました。'object' ファイルは生成されません。
..\platform\ThreadGlobalData.cpp : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
プロジェクト : warning PRJ0018 : 以下の環境変数が見つかりませんでした:


んん?と思って、ThreadGlobalData.cppを開いてみたら、以下の場所が見つかったんですよ旦那。

 71:    // This constructor will have been called on the main thread before being called on
 72:    // any other thread, and is only called once per thread 窶・this makes this a convenient
 73:    // point to call methods that internally perform a one-time initialization that is not

72行の文字化け部分をカットしたら、ちゃんとビルド出来たんですね。これが。
という訳で、BuildLog.htm重要です。

ポイント:Cygwinは、システムドライブのCygwinフォルダに入れましょう

これは、英語のWeb siteの言及を、英日機械翻訳を掛けて眺めていた+BuildLog.htmのエラーを見ていて気づきました。


自分は、Cygwinをとあるフォルダに突っ込んでいたので、ジャンクションを使って、「C:\Cygwin」フォルダにパスを貼り直しました。

ポイント?:WebKit-SVN-source.tar.bz2 はあまり お奨めしません

ビルドするソースの入手手段として、幾つか用意されているのですが、
http://nightly.webkit.org/files/WebKit-SVN-source.tar.bz2
は、正直 あまりお奨めできません。


WebKit Nightly Buildsのtar.bz2アーカイブか、SVNコマンドを使ったチェックアウト(svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit)が良いと思います。


何故かと言うと、2つあります。

  1. アーカイブファイルが500MB超ある。
    光速回線な人はどうでも良いのでしょうけど、Nightly Buildのtar.bz2が20MB程度なのを考えるとねぇ。私の型落ちマシンでは、展開にえらい時間を喰いましたよ。

  2. ACLが変になるので、いざファイルを削除する際、困る。
    これが一番大変でした。

    展開に使用したアーカイバも悪いのでしょうけど、生成されたファイルのACL権限がプロテクトな設定になるらしく、後で削除しようとすると「ファイルのアクセスが拒否されました」エラーが連発しました。

    しょうがないので、caclsコマンドでACLを追加して、フルアクセスにして、ファイルも大量なので一気に削除しようとすると反応が返ってこないので、少しずつファイルを削除するという苦行を味あわせてもらいましたよ。
    もう、二度としたくありません。はい。

ポイント?:WebKitAuxiliaryLibrary.zipとWebKitSupportLibrary.zipを手動展開する場合

本当は必要ないのでしょうけど、WebKitAuxiliaryLibrary.zipとWebKitSupportLibrary.zipを手動展開した際、突っ込むべきフォルダは、「WebKitLibraries\win」です。


これは、update-webkitスクリプトだっけを動かした際のメッセージを眺めていると判ります。
私の環境では、Cygwinで両ZIPをCURL?でダウンロードした後、配置する際に失敗しているようだったので、手動展開した次第です。

最後に

ここまで書いておいて何ですが、自分のビルド手順&ポイント事例は、これで正しいのかどうかよく判っていません。
本来なら仮想マシンを立ち上げて、検証を繰り返すべきなんでしょうけど、今日はビルドできただけで、もうお腹いっぱいです。