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人だかの方にメールが飛んだみたい。 ご迷惑になりませんように。
脳味噌から汁が出るくらい考える。こともある。
最近のツッコまれどころ