トップ «前の日記 最新 次の日記» 追記

おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google[TM] してもらう

2009年11月13日(金) ひどい雨だ [同日]

[memo] Sunbirdのtrunkを作る (進んだよ編)

前回undefined referenceが出て止まっていた sunbirdづくりの続編です。

まずは見つけられないというシンボルがどこかで定義されていないか探してみました。

$ find . -name '*.cpp' | xargs grep -H ^nsDiskCache::Hash
./mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp:nsDiskCache::Hash(const char * key, PLDHashNumber initval)
$ find . -name 'nsDiskCacheDevice*'
./mozilla/netwerk/cache/src/nsDiskCacheDevice.h
./mozilla/netwerk/cache/src/nsDiskCacheDeviceSQL.h
./mozilla/netwerk/cache/src/nsDiskCacheDevice.cpp
./mozilla/netwerk/cache/src/nsDiskCacheDeviceSQL.cpp
./obj-i686-pc-linux-gnu/mozilla/netwerk/cache/src/nsDiskCacheDeviceSQL.o
./obj-i686-pc-linux-gnu/mozilla/netwerk/cache/src/.deps/nsDiskCacheDeviceSQL.pp

あるよ。 というわけで、nsDiskCacheDeviceSQL.oのリンクに必要なnsDiskCacheDevice.cppがコンパイルされていないようでした。

Makefileはどうなってるかな? obj-i686-pc-linux-gnu/mozilla/netwerk/cache/src/Makefile には下記がありました。 NECKO_DISK_CACHEって何だろう?

ifdef NECKO_DISK_CACHE
CPPSRCS += \
        nsDiskCacheBinding.cpp \
        nsDiskCacheBlockFile.cpp \
        nsDiskCacheDevice.cpp \
        nsDiskCacheEntry.cpp \
        nsDiskCacheMap.cpp \
        nsDiskCacheStreams.cpp \
        nsDeleteDir.cpp \
        $(NULL)
endif

参照元はnsDiskCacheDeviceSQL.cppなので、 nsDiskCacheDeviceSQL.cppを使うときはnsDiskCacheDevice.cppも 必要ってことになりますね。

Makefileの元を編集してみよう。 えーと。hg*1は ブランチで作業したほうがいいのかしら。 とりあえずはいいか。cloneしてあるんだし。

あ、でも、 作業前にpullしておくといいのかも

$ hg pull
http://hg.mozilla.org/comm-central/ から取り込み中
変更点を探索中
チェンジセットを追加中
マニフェストを追加中
ファイルの変更を追加中
9 のチェンジセット(23 の変更を 19 ファイルに適用)を追加
(作業領域の更新は 'hg update')
$ hg diff

何が更新されたのかは見られなかったけど。

$ hg update
19 個のファイルが更新, 0 個のファイルがマージ, 1 個のファイルが削除, 0 個のファイルが衝突未解決

一度 make -f client.mk して、同じところでエラーになるのを確認してから、 mozilla/netwerk/cache/src/Makefile.in を編集しました。

$ hg diff
$ hg diff mozilla/netwerk/cache/src/Makefile.in
中止: パス 'mozilla/netwerk/cache/src/Makefile.in' はリポジトリ 'mozilla' 内にあります

むずかしい。とにかく編集しました。

$ hg diff 
diff --git a/netwerk/cache/src/Makefile.in b/netwerk/cache/src/Makefile.in
--- a/netwerk/cache/src/Makefile.in
+++ b/netwerk/cache/src/Makefile.in
@@ -76,16 +76,21 @@ CPPSRCS += \
 endif
 
 ifdef MOZ_STORAGE
 CPPSRCS += \
 	nsDiskCacheDeviceSQL.cpp \
 	$(NULL)
 
 DEFINES += -DNECKO_OFFLINE_CACHE
+ifndef NECKO_DISK_CACHE
+CPPSRCS += \
+	nsDiskCacheDevice.cpp \
+	$(NULL)
+endif
 endif
 
 LOCAL_INCLUDES=-I$(srcdir)/../../base/src
 
 include $(topsrcdir)/config/config.mk
 
 
 include $(topsrcdir)/config/rules.mk

またmake -f client.mkすると、まだソースファイルが足りないようです。

c++  -fno-rtti -fno-exceptions -Wall -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wcast-align -Wno-invalid-offsetof -Wno-long-long -pedantic -fno-strict-aliasing -fshort-wchar -pthread -pipe  -DNDEBUG -DTRIMMED -Os -freorder-blocks -fno-reorder-functions  -fPIC -shared -Wl,-z,defs -Wl,-h,libnecko.so -o libnecko.so  nsNetModule.o     -lpthread   -Wl,-rpath-link,/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu/mozilla/dist/bin -Wl,-rpath-link,/usr/local/lib  -Wl,--whole-archive ../base/src/libneckobase_s.a ../dns/src/libneckodns_s.a ../socket/base/libneckosocket_s.a ../streamconv/src/libnkconv_s.a ../streamconv/converters/libnkcnvts_s.a ../mime/src/libnkmime_s.a ../cache/src/libnkcache_s.a ../protocol/about/src/libnkabout_s.a  ../protocol/data/src/libnkdata_s.a  ../protocol/file/src/libnkfile_s.a  ../protocol/ftp/src/libnkftp_s.a  ../protocol/http/src/libnkhttp_s.a  ../protocol/res/src/libnkres_s.a  ../protocol/viewsource/src/libnkviewsource_s.a  ../wifi/src/libneckowifi_s.a  -Wl,--no-whole-archive -L../../dist/bin -L../../dist/lib  /home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu/mozilla/dist/lib/libunicharutil_s.a -L/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu/mozilla/dist/bin -lxpcom -lxpcom_core  -L/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu/mozilla/dist/bin -L/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu/mozilla/dist/lib -lplds4 -lplc4 -lnspr4 -lpthread -ldl -L../../modules/zlib/src -lmozz  -Wl,--version-script -Wl,/home/zunda/local/src/comm-central/mozilla/build/unix/gnu-ld-scripts/components-version-script -Wl,-Bsymbolic -ldl -lm    
../cache/src/libnkcache_s.a(nsDiskCacheDevice.o): In function `nsDiskCacheDevice::EvictDiskCacheEntries(unsigned int)':
nsDiskCacheDevice.cpp:(.text+0x306): undefined reference to `nsDiskCacheMap::EvictRecords(nsDiskCacheRecordVisitor*)'
../cache/src/libnkcache_s.a(nsDiskCacheDevice.o): In function `nsDiskCacheDevice::OpenDiskCache()':
nsDiskCacheDevice.cpp:(.text+0x38c): undefined reference to `nsDiskCacheMap::Open(nsILocalFile*)'
  <後略>

undefined referenceになってるメソッドが定義されてるcppファイルをどんどんMakefile.inに追加していくと、最終的には下記のようになりました。

diff --git a/netwerk/cache/src/Makefile.in b/netwerk/cache/src/Makefile.in
--- a/netwerk/cache/src/Makefile.in
+++ b/netwerk/cache/src/Makefile.in
@@ -76,16 +76,27 @@ CPPSRCS += \
 endif
 
 ifdef MOZ_STORAGE
 CPPSRCS += \
 	nsDiskCacheDeviceSQL.cpp \
 	$(NULL)
 
 DEFINES += -DNECKO_OFFLINE_CACHE
+ifndef NECKO_DISK_CACHE
+CPPSRCS += \
+	nsDiskCacheBinding.cpp \
+	nsDiskCacheBlockFile.cpp \
+	nsDiskCacheDevice.cpp \
+	nsDiskCacheEntry.cpp \
+	nsDiskCacheMap.cpp \
+	nsDeleteDir.cpp \
+	nsDiskCacheStreams.cpp \
+	$(NULL)
+endif
 endif
 
 LOCAL_INCLUDES=-I$(srcdir)/../../base/src
 
 include $(topsrcdir)/config/config.mk
 
 
 include $(topsrcdir)/config/rules.mk

ビルドはまだまだ進行中。これどこかにご報告した方がいいのかな、 と思ってmozilla以下でhg pullしていないのに気づいたのでした。

*1 「水銀」のつづりが覚えらえない

[run] CSO+76+行き止まり+周回コース+坂の下+職場の前の道1往復延長コース

久しぶりなのでどうかと思ったが、筋力も心肺機能も悪くないようだ。しかーし。体じゅうがかゆーい。

くそー。

そしてスタート時に心拍計のスタートボタンを押し忘れました。だいたい後半半分くらいの測定で、脈拍平均155、最大175BPM、ペース平均5分06秒/km。

もし3時間半を切ろうとすると5分/kmより速く走らなきゃいけないんだね。すごいや。

[memo] Sunbirdのtrunkを作る (できたみたいだよ編)

ジョギングから帰ってくるとバイナリができたみたいだった。

パッチを報告していいものか、pullからやりなおしておく。

$ cd mozilla
$ hg pull
http://hg.mozilla.org/mozilla-central/ から取り込み中
変更点を探索中
チェンジセットを追加中
マニフェストを追加中
ファイルの変更を追加中
56 のチェンジセット(561 の変更を 545 ファイルに適用)を追加
(作業領域の更新は 'hg update')
$ hg update
545 個のファイルが更新, 0 個のファイルがマージ, 0 個のファイルが削除, 0 個のファイルが衝突未解決
$ hg diff
  <上記と同じ>
$ cd ..

あー。Gettinc comm-central Source Code Using Mercurialを見ると、updateするのもpython client.py checkoutで良かったようです。

$ make -f client.mk
  <省略>
$ make -f client.mk install
Adding client.mk options from /home/zunda/local/src/comm-central/.mozconfig:
    MOZ_OBJDIR=$(TOPSRCDIR)/obj-$(CONFIG_GUESS)
    MOZ_MAKE_FLAGS=-j4
    MOZ_CO_PROJECT=calendar
make -j4 -C /home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu install
make[1]: ディレクトリ `/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu' に入ります
make[1]: `install' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu' から出ます
$ make -f client.mk install
Adding client.mk options from /home/zunda/local/src/comm-central/.mozconfig:
    MOZ_OBJDIR=$(TOPSRCDIR)/obj-$(CONFIG_GUESS)
    MOZ_MAKE_FLAGS=-j4
    MOZ_CO_PROJECT=calendar
make -j4 -C /home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu install
make[1]: ディレクトリ `/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu' に入ります
make[1]: `install' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/zunda/local/src/comm-central/obj-i686-pc-linux-gnu' から出ます

ん?suしても同じで何も起きない。

$ ./obj-i686-pc-linux-gnu/calendar/sunbird/app/sunbird-bin 
./obj-i686-pc-linux-gnu/calendar/sunbird/app/sunbird-bin: error while loading shared libraries: libxpcom_core.so: cannot open shared object file: No such file or directory
$ find obj-i686-pc-linux-gnu -name libxpcom_core.so
obj-i686-pc-linux-gnu/mozilla/dist/bin/libxpcom_core.so
obj-i686-pc-linux-gnu/mozilla/dist/lib/libxpcom_core.so
obj-i686-pc-linux-gnu/mozilla/xpcom/build/libxpcom_core.so
$ LD_LIBRARY_PATH=./obj-i686-pc-linux-gnu/mozilla/dist/lib ./obj-i686-pc-linux-gnu/calendar/sunbird/app/sunbird-bin
Couldn't read application.ini

うーん。

$ cd ./obj-i686-pc-linux-gnu/mozilla/dist/bin/
$ ./sunbird

おぉ!起動した。

そうそう、mozillaディレクトリの状態は

$ cd mozilla
$ LANG=C hg parents
changeset:   34849:63bd5af8386b
tag:         tip
user:        Mark Finkle <mfinkle at mozilla.com>
date:        Fri Nov 13 23:23:00 2009 -0500
summary:     Bug 507817: BorderImage should not call ExtractCurrentFrame each time it draws [r=dbaron r=joedrew]

$ LANG=C hg status
M netwerk/cache/src/Makefile.in

(追記) Bugzllaに登録してみました。Submitした瞬間に10人だかの方にメールが飛んだみたい。 ご迷惑になりませんように。


トップ «前の日記 最新 次の日記»

脳味噌から汁が出るくらい考える。こともある。


zunda <zunda at freeshell.org>