Mozilla研究—編譯基于GTK+DFB的minimo
轉載時請注明出處和作者
更新時間:2007-2-26
mozilla是一個以浏覽器為中心的軟體平台,它在我們平台中占有重要地位。我們用它來實作WEB浏覽器、WAP浏覽器、郵件系統、電子書和幫助閱讀器等應用程式。為此,我最近花了不少時間去閱讀mozilla的代碼和文檔,我将寫一系列的BLOG作為筆記,供有需要的朋友參考。本文重點介紹編譯基于GTK+DFB的minimo的方法。
Minimo是mozilla為移動裝置定制的一款浏覽器,由于它基于mozilla那套軟體平台,它所要求硬體資源仍然較高(共享庫版本約18M,靜态版本約10M)。之是以說是為移動裝置定制的,是因為它為小螢幕裝置做了一些修改,而不是因為它真的小巧玲珑。
慎重考慮後,我們決定采用minimo作為WEB浏覽器和WAP浏覽器,但是由于我們的GUI是基于DFB的GTK+,而當時發現基于GTK+的minimo還依賴于X Window。不過,經過分析後,我們認為移植minimo到基于DFB的GTK+上是可行的,但是工作量有點大。本來計劃今天年初開始移植,幸運的是,前段時間發現已經有人完成了這項移植工作,隻是和我們的情況有點出入:
1. 他們的DFB的版本是0.9.25的,而我們的是0.9.24的。
2. 他們的GTK+的版本是2.10的,而我們的是2.6的。
3. 他們是針對firefox 1.5的,而我們要的是minimo。
同時由于:
1. mozilla規模龐大,編譯時間很長,我在虛拟機編譯編譯更慢,遇到問題後要重新編譯,耗費了我不少時間。
2. mozilla相當複雜,涉及的技術也較多,解決遇到問題也不是那麼簡單。
由于以上和其它一些原因,編譯minimo不是很順利。下面我詳細介紹編譯基于GTK+DFB的minimo的過程。
1. 下載下傳軟體包。
到www.mozilla.org下載下傳firefox-1.5.0.3-source.tar.bz2。
到https://bugzilla.mozilla.org/show_bug.cgi?id=357946下載下傳TEL_Moz_Dfb_1_5_0_3_Nov17_patch1.dat
2. 打更新檔。
tar jxvf firefox-1.5.0.3-source.tar.bz2
cd firefox-1.5.0.3
patch -p0 <../TEL_Moz_Dfb_1_5_0_3_Nov17_patch1.dat
3. 修改Makefile.in
tier_99_dirs += embedding/minimo minimo
-->
tier_99_dirs += embedding/minimo
4. 修改configure,使用0.9.24的DFB。
0.9.25-->0.9.24
5. 修改widget/src/gtk2/nsWindow.cpp
gdk_atom_intern_static_string
gdk_atom_intern
6. 修改gfx/src/gtk/mozilla-decoder.cpp,原因是GTK+2.6沒有用cairo。
#include <pango/pangocairo.h>
#include <pango/pangoft2.h>
pango_cairo_font_map_get_default
pango_ft2_font_map_for_display
7. 修改embedding/minimo/app/Minimo.cpp
(MinimoBrowser *)(dialogParams->main_combo) = browser;
->
dialogParams->main_combo = (GtkWidget*)browser;
8. 修改embedding/minimo/app/Makefile.in
EXTRA_LIBS += -L$(DEPTH)/dist/lib/components /
$(EXTRA_DSO_LIBS) /
$(STATIC_EXTRA_LIBS) /
$(MOZ_JS_LIBS) /
$(MOZ_COMPONENT_LIBS) /
-lSM -lICE /
$(TK_LIBS) /
$(NULL)
-->
ifndef TELTEL_MOZ_DFB
$(TK_LIBS) /
else
$(MOZ_JS_LIBS) /
endif
9. 設定minimo的版本号。
echo 1.5 >embedding/minimo/wince/version.txt
10. 修改intl/uconv/native/Makefile.in
ifeq ($(OS_ARCH), UNIX)
ifeq ($(OS_ARCH), Linux)
11. 編輯編譯選項檔案.mozconfig,其内容如下:
LIBS=-lsupc++
mk_add_options MOZ_CO_PROJECT=browser
ac_add_options --enable-application=minimo
ac_add_options --enable-default-toolkit=gtk2
ac_add_options --disable-pedantic
ac_add_options --without-x
ac_add_options --disable-gtktest
ac_add_options --disable-tests
ac_add_options --enable-pango
ac_add_options --disable-xft
ac_add_options --enable-extensions=default
ac_add_options --disable-xinerama
ac_add_options --enable-directfb
ac_add_options --without-system-nspr
ac_add_options --disable-mailnews
ac_add_options --disable-composer
ac_add_options --disable-ldap
ac_add_options --disable-xprint
ac_add_options --disable-accessibility
ac_add_options --disable-postscript
ac_add_options --disable-mathml
ac_add_options --disable-jsd
ac_add_options --disable-jsloader
ac_add_options --disable-installer
ac_add_options --disable-xpfe-components
ac_add_options --disable-necko-disk-cache
ac_add_options --disable-plugins
ac_add_options --enable-necko-small-buffers
ac_add_options --disable-dtd-debug
ac_add_options --disable-logging
ac_add_options --enable-necko-protocols=http,file,res
ac_add_options --disable-xpcom-obsolete
ac_add_options --enable-optimize=-Os
ac_add_options --enable-strip
ac_add_options --enable-plaintext-editor-only
12. 配置并編譯
./configure; make; make install
附:
如果出現cannot restore segment prot after reloc: Permission denied的問題,可以用下列方法解決:
1. 使用chcon 指令
示例: chcon -t texrel_shlib_t dist/lib/*.so
2. 禁止掉SELinux
更改/etc/sysconfig/selinux 檔案的内容為 SELINUX=disabled