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 を書き換える必要があります。

268c268,270
< EXTRA_DSO_LDOPTS += $(NSPR_LIBS)
---
> # for JS_THREADSAFE build on Windows
> #EXTRA_DSO_LDOPTS += $(NSPR_LIBS)
> EXTRA_LIBS    += $(NSPR_LIBS)
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 使うようにならないかなあ。