Firefox 3 Beta 1のビルドメモ
ビルドの流れ
基本的な流れ自体は、過去のバージョンと同じ。$ tar jxf [firefox-3.0b1-source.tar.bz2の場所] $ cd mozilla/ (ここで.mozconfigを作成) $ make -f client.mk build_all
ビルドが正常終了した場合、下のようにすると
$ make -C browser/installer/ (中略) Removing unpackaged files... cd ../../dist/firefox; rm -rf firefox-config firefox-bin.elf regchrome* regxpcom* xpcshell* xpidl* xpt_dump* xpt_link* core bsdecho gtscc jscpucfg nsinstall viewer TestGtkEmbed bloaturls.txt codesighs* elf-dynstr-gc mangle* maptsv* mfc* mkdepend* msdump* msmap* nm2tsv* nsinstall* rebasedlls* res/samples res/throbber shlibsign* winEmbed.exe os2Embed.exe chrome/chrome.rdf chrome/app-chrome.manifest chrome/overlayinfo components/compreg.dat components/xpti.dat content_unit_tests necko_unit_tests /usr/src/mozilla/config/nsinstall -t removed-files ../../dist/firefox Compressing... cd ../../dist && tar -c --owner=0 --group=0 --numeric-owner --mode="go-w" -f - firefox | bzip2 -vf > firefox-3.0b1.en-US.linux-x86_64.tar.bz2 (stdin): 3.004:1, 2.663 bits/byte, 66.71% saved, 24913920 in, 8294618 out. gmake[1]: Leaving directory `/usr/src/mozilla/browser/installer' /usr/bin/gmake tools gmake[1]: Entering directory `/usr/src/mozilla/browser/installer' gmake[1]: Leaving directory `/usr/src/mozilla/browser/installer' make: Leaving directory `/usr/src/mozilla/browser/installer'
distディレクトリ以下に配布形式のfirefox-3.0b1.en-US.linux-x86_64.tar.bz2(これはx86_64の場合のファイル名)が保存される。これを後で適当な場所に展開して、中のfirefoxを実行する。
もしくは
$ sudo make install
を実行すると、,mozconfig内で指定した--prefix=のディレクトリ以下にインストールされる。この場合、中のbin/firefoxを実行する。
現在の.mozconfig
試行錯誤中。幾つか、バージョン3で新規に必須となったオプションがある。(2007/12/21)必須と書いたものも実際には省略可だった。
ファイル名: mozilla/.mozconfig
CC="ccache gcc" CXX="ccache g++" ac_add_options --prefix=[インストール先(sudo make installする場合)] ac_add_options --enable-application=browser # ac_add_options --enable-canvas ac_add_options --enable-crypto ac_add_options --enable-default-toolkit=cairo-gtk2 # ac_add_options --enable-extensions=default,-gnomevfs ac_add_options --enable-feeds # ac_add_options --enable-image-decorders=png,gif,jpeg ac_add_options --enable-install-strip #ac_add_options --enable-native-uconv # (2007/12/21)付けないほうがよさそう ac_add_options --enable-necko-protocols='about data file ftp http res viewsource' ac_add_options --enable-official-branding # ! 付けると配布不可となるので注意 ! ac_add_options --enable-optimize='-Os -march=[CPUごとのアーキテクチャ名] -pipe' ac_add_options --enable-pango ac_add_options --enable-places # ac_add_options --enable-plaintext-editor-only ac_add_options --enable-static ac_add_options --enable-strip ac_add_options --enable-xft ac_add_options --disable-accessibility ac_add_options --disable-composer ac_add_options --disable-debug ac_add_options --disable-gnomeui ac_add_options --disable-gnomevfs ac_add_options --disable-jsd ac_add_options --disable-logging ac_add_options --disable-logrefcnt ac_add_options --disable-installer ac_add_options --disable-ldap ac_add_options --disable-libxul ac_add_options --disable-mailnews ac_add_options --disable-mathml ac_add_options --disable-necko-disk-cache ac_add_options --disable-profilesharing ac_add_options --disable-svg ac_add_options --disable-tests ac_add_options --disable-updater ac_add_options --with-system-jpeg ac_add_options --with-system-zlib
GUIツールキット指定はCairo/GTK+ 2のみサポート
GUIツールキットを指定する--enable-default-toolkit=の値は、(Beta 1の時点では)「cairo-gtk2」のみ有効で、GTK+ 1ではビルドできなくなっている。同様にQtやXlibもサポートされない。mozilla/.mozconfigにおける--enable-system-[ライブラリ名]のオプションは、付けるとうまくいかないものがあった。
--enable-system-cairo
ccache g++ -o nsLocalHandlerApp.o -c -fvisibility=hidden -DMOZILLA_INTERNAL_API -DOSTYPE=\"Linux2.6\" -DOSARCH=Linux -I. -I../../dist/include/xpcom -I../../dist/include/string -I../../dist/include/unicharutil -I../../dist/include/mimetype -I../../dist/include/uriloader -I../../dist/include/necko -I../../dist/include/webshell -I../../dist/include/plugin -I../../dist/include/pref -I../../dist/include/intl -I../../dist/include/uconv -I../../dist/include/docshell -I../../dist/include/windowwatcher -I../../dist/include/embed_base -I../../dist/include/dom -I../../dist/include/toolkitcomps -I../../dist/include -I../../dist/include/exthandler -I../../dist/include/nspr -DMOZ_PNG_READ -DPNG_NO_MMX_CODE -DMOZ_PNG_WRITE -I../../dist/sdk/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wno-long-long -pedantic -fshort-wchar -pthread -pipe -DNDEBUG -DTRIMMED [最適化フラグ] -I/usr/include/gtk-2.0 -I/usr/lib64/gtcairo-xlib-utils.c: In function 'cairo_draw_with_xlib': cairo-xlib-utils.c:586: warning: implicit declaration of function '_compute_alpha_values' cairo-xlib-utils.c:586: error: 'uint32_t' undeclared (first use in this function) cairo-xlib-utils.c:586: error: (Each undeclared identifier is reported only once cairo-xlib-utils.c:586: error: for each function it appears in.) cairo-xlib-utils.c:586: error: expected expression before ')' token gmake[6]: *** [cairo-xlib-utils.o] Error 1 gmake[6]: Leaving directory `/usr/src/mozilla/gfx/thebes/src' gmake[5]: *** [libs] Error 2
configure.in(バージョン1.4.2以上を要求している)を見る限り、手元のバージョン(1.4.12)で古いわけではなさそうなのだが、このオプションを付けるとダメで、内蔵版を使用すると問題なく進んだ。
--enable-glitz
ccache g++ -o nsToken.o -c -fvisibility=hidden -DXPCOM_TRANSLATE_NSGM_ENTRY_POINT=1 -DMOZILLA_INTERNAL_API -DOSTYPE=\"Linux2.6\" -DOSARCH=Linux -I../../../xpcom/io -I../../../dist/include/xpcom -I../../../dist/include/string -I../../../dist/include/necko -I../../../dist/include/util -I../../../dist/include/uconv -I../../../dist/include/unicharutil -I../../../dist/include/expat -I../../../dist/include/xml -I../../../dist/include/content -I../../../dist/include/dom -I../../../dist/include/pref -I../../../dist/include/nkcache -I../../../dist/include/intl -I../../../dist/include/xpconnect -I../../../dist/include -I../../../dist/includ from glitz_glx_drawable.c:30: ./../glitzint.h:29:28: error: cairo-platform.h: No such file or directory glitz_glx_drawable.c: In function 'glitz_glx_create_drawable_for_window': glitz_glx_drawable.c:156: warning: comparison between signed and unsigned glitz_glx_drawable.c: In function 'glitz_glx_create_pbuffer_drawable': glitz_glx_drawable.c:191: warning: comparison between signed and unsigned gmake[7]: *** [glitz_glx_drawable.o] Error 1 gmake[7]: Leaving directory `/usr/src/mozilla/gfx/cairo/glitz/src/glx' gmake[6]: *** [libs] Error 2
cairo-platform.hがなくても、それ以外に「エラー」が起きていないため、
$ sed -i -e 's|\(#include "cairo-platform.h"\)|/* \1 */|' gfx/cairo/glitz/src/glitzint.h
でコメントアウトして回避できた。しかし
ccache g++ -o gfxGlitzSurface.o -c -fvisibility=hidden -DIMPL_THEBES -DMOZILLA_I NTERNAL_API -DOSTYPE=\"Linux2.6\" -DOSARCH=Linux -I../../../dist/include/cairo -I../../../dist/include/libpixman -I../../../dist/include/string -I../../../dist /include/pref -I../../../dist/include/xpcom -I../../../dist/include/unicharutil -I../../../dist/include/lcms -I../../../dist/include/glitz -I../../../dist/inclu de/glitzglx -I../../../dist/include -I../../../dist/include/thebes -I../../../ dist/include/nspr -DMOZ_PNG_READ -DPNG_NO_MMX_CODE -DMOZ_PNG_WRITE -I../../.. /dist/sdk/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-a rith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-v irtual-dtor -Wno-long-long -pedantic -fshort-wchar -pthread -pipe -DNDEBUG -DTR IMMED [最適化フラグ] -I../../../dist/include/cairo -I/usr/include/gtk -2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng12 -DMOZILLA_CLIENT -include ../../../mozilla-config.h -Wp,-MD,.deps/gfxGlitzSurface.pp gfxGlitzSurface.cpp gmake[6]: *** No rule to make target `../../../dist/lib/libmozglitz.a', needed by `libthebes.a'. Stop. gmake[6]: Leaving directory `/usr/src/mozilla/gfx/thebes/src' gmake[5]: *** [libs] Error 2
結局ダメだったので、これも内蔵版を使用することに。
--enable-system-lcms
バージョンが1.17(以降)でないとconfigureが通らない。今回は、無理に上げるつもりがなかったため、外した。--with-system-png
checking for png_get_acTL in -lpng... no configure: error: --with-system-png won't work because the system's libpng doesn't have APNG support
これも、手元のバージョン(1.2.22)が低いせいなのかは分からないが、付けるとダメだった。
その他覚え書き
ビルドツリーの使用ディスク領域
ビルド後のディスク使用量は「650M」(duコマンドによる)となった。.mozconfigの内容、ファイルシステムとそのチューニング、コンパイラオプションなどによって多少の違いが出る可能性はある。なお、「make distclean」後の使用量は「334M」だった。描画の速度と崩れ
新しくプロファイルを作成し、使ってみた感想としては、描画時間の短縮がやはり大きい。しかし、(gecko:21428): Pango-WARNING **: failed to create cairo scaled font, expect ugly output. the offending font is 'Arial 0' (gecko:21428): Pango-WARNING **: failed to create cairo scaled font, expect ugly output. the offending font is 'Arial 0' (gecko:21428): Pango-WARNING **: shaping failure, expect ugly output. shape-engine='BasicEngineFc', font='Arial 0', text='Japanese (' (gecko:21428): Pango-WARNING **: pango_font_get_glyph_extents called with null font argument, expect ugly output
のような表示があるので、その「ugly output」が出ているのかもしれない*1。
崩れた状態のテキストは下の画像のようになる(ぐちゃぐちゃで、見ると気持ち悪いかもしれないので注意)。
http://f.hatena.ne.jp/kakurasan/20071212211813
(2007/12/21)この現象の原因は--enable-native-uconvによるものと特定できた。これを外すと大丈夫だった。メッセージとは無関係ということになる。
*1:メッセージ自体は起動時に出るが、そのときに表示されるページは正常に表示されているため、確実とは言えないが...