Chromiumのビルドでつまった話 on MAC OSX 10.8


ChromiumをMacでビルドしようとしたら、色々と詰まったので備忘録として書いてみる。

Get the Code

ソースコードの入手方法は以下に書いてある。
http://dev.chromium.org/developers/how-tos/get-the-code

空き容量が少ないと、失敗したというログ(保存し忘れた)を吐きつつも何度もやり直すので無限ループになる。特にWebKitは容量が大きいので4~5時間経っても終わらない場合は、空き容量を増やした方が良いかもしれない。

Ninja Build

Buildの方法については、以下のページにプラットフォームごとへのリンクが張られている。

OSXの場合は以下となる。

NinjaとClangを使う方法しかサポートされていない。
Ninjaを使った方法は以下のページで説明されている。

よく分からないエラーで止まったときは

ninja -v -C out/Debug chrome

これで、コマンドを全部見てみる。

pythonのversion

Ninjaでビルドしていたら、以下のようなエラーが出てきた。

Failed at tvcm: </script> expected but get </h2>

エラーを保存し忘れたので文自体は違うかもしれないが、tvcmをparseしている最中にscriptの閉じタグがこなきゃいけないのに、h2がきているといった内容。

chromium/src/third_party/trace-viewer/third_party/tvcm/src/tvcm.html (chromiumはsrcまでのpath)

を見てみるとしっかりscriptタグで閉じられているが、途中で

panicMessageEl.innerHTML =
    '<h2 id="message"></h2>' +
    '<pre id="details"></pre>';

という式を発見。h2タグを消してみるとpreタグでエラーになった。
パーサが怪しそうなので、使用しているHTMLパーサを調べてみると標準ライブラリを使用していた。このタイミングでPythonのversionが怪しいと思って調べてみると、2.7.3だった。最新のversion(2.7.8)にしてみたら、エラーが出なくなった。

ImportError: No module named CoreFoundation

今度は、以下のエラーが出てきた。

[7/15257] MACTOOL copy-bundle-resource ../../breakpad/src/client/mac/sender/English.lproj/Localizable.strings
FAILED:  ./gyp-mac-tool copy-bundle-resource ../../breakpad/src/client/mac/sender/English.lproj/Localizable.strings crash_report_sender.app/Contents/Resources/English.lproj/Localizable.strings
Traceback (most recent call last):
  File "./gyp-mac-tool", line 515, in <module>
    sys.exit(main(sys.argv[1:]))
  File "./gyp-mac-tool", line 28, in main
    exit_code = executor.Dispatch(args)
  File "./gyp-mac-tool", line 43, in Dispatch
    return getattr(self, method)(*args[1:])
  File "./gyp-mac-tool", line 66, in ExecCopyBundleResource
    self._CopyStringsFile(source, dest)
  File "./gyp-mac-tool", line 105, in _CopyStringsFile
    import CoreFoundation
ImportError: No module named CoreFoundation

CoreFoundationなんてmodule無いよという内容。
CoreFoundationとはAppleが提供しているframeworkのこと。

これをpythonから呼び出せるようにするため、pyobjcが必要となる。install方法は以下に載ってる。

pipとeasy_installのどちらでinstallしようとしても失敗する。調べてみると以下のようなissueがあった。

まだ、issueが解決していないので手動でinstallすることにする。

  • pyobjc-core

  • pyobjc-framework-Cocoa

  • pyobjc-framework-Quartz

の順にinstallする。
pyobjc-framework-Cocoaをinstallしようとすると以下のエラーが出た。

ImportError: No module named pkg_resources

調べてみると、stackoverflowに解決方法があった。

pyobjcをinstallし終えた後にbuildしてみるとエラーを吐かなくなった。