VC++ で JS_THREADSAFE な Spidermonkey をビルドする
昨日のつづき。なんとか無理やりビルドしてみました。
結局、問題となるのは NSPR のライブラリに関するリンカオプションのところで、nspr-config スクリプトが Windows link.exe 式の出力をしてこないのにそれをそのまま link.exe に渡してエラーになっているわけです。とりあえず、リンカオプションだけで言えば、nspr-config を書き換えるなり configure にオプションを与えるなりで明示的に指定してやれば OK ですね。
しかし、単純にオプションを指定しただけでは、EXTRA_DSO_LDOPTS (シェルの Makefile では LIBS)に入ってしまい、ライブラリが別ディレクトリにあるのに DLL なり exe の dependency に入ってしまうので、Makefile.in を書き換える必要があります。
- js/src/Makefile.in
268c268,270 < EXTRA_DSO_LDOPTS += $(NSPR_LIBS) --- > # for JS_THREADSAFE build on Windows > #EXTRA_DSO_LDOPTS += $(NSPR_LIBS) > EXTRA_LIBS += $(NSPR_LIBS)
- js/src/shell/Makefile.in
52c52,54 < LIBS = $(NSPR_LIBS) $(EDITLINE_LIBS) $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) --- > # for JS_THREADSAFE build on Windows > LIBS = $(EDITLINE_LIBS) $(DEPTH)/$(LIB_PREFIX)js_static.$(LIB_SUFFIX) > EXTRA_LIBS += $(NSPR_LIBS)
で、ビルドします。
$ export p=D:/Devel/mozilla $ ./configure --prefix=$p --with-nspr-cflags="-I$p/include/nspr" --with-nspr-libs="-LIBPATH:$p/lib libplds4.lib libplc4.lib libnspr4.lib" --enable-threadsafe ... $ make && make install ... $ cp shell/js.exe $p/bin/ $ cd $p/lib; ../bin/js js>
js.exe が static library をリンクしちゃうんだけど、DLL 使うようにならないかなあ。