Mozilla研究—编译基于GTK+DFB的minimo
Mozilla研究—编译基于GTK+DFB的minimo
转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd
作者联系方式:Li XianJing <xianjimli at hotmail dot com>
更新时间: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
EXTRA_LIBS += -L$(DEPTH)/dist/lib/components /
$(EXTRA_DSO_LIBS) /
$(STATIC_EXTRA_LIBS) /
$(MOZ_JS_LIBS) /
$(MOZ_COMPONENT_LIBS) /
-lSM -lICE /
$(TK_LIBS) /
$(NULL)
else
EXTRA_LIBS += -L$(DEPTH)/dist/lib/components /
$(EXTRA_DSO_LIBS) /
$(STATIC_EXTRA_LIBS) /
$(MOZ_JS_LIBS) /
$(MOZ_COMPONENT_LIBS) /
$(TK_LIBS) /
$(NULL)
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
ac_add_options --disable-mailnews
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
~~end~~