試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Firefox 3 Beta 1のビルドメモ

  1. ビルドの流れ
  2. 現在の.mozconfig
  3. GUIツールキット指定はCairo/GTK+ 2のみサポート
    1. --enable-system-cairo
    2. --enable-glitz
    3. --enable-system-lcms
    4. --with-system-png
  4. その他覚え書き
    1. ビルドツリーの使用ディスク領域
    2. 描画の速度と崩れ

ビルドの流れ

基本的な流れ自体は、過去のバージョンと同じ。

$ 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:メッセージ自体は起動時に出るが、そのときに表示されるページは正常に表示されているため、確実とは言えないが...