こんにちは、なかむら(う)です。

In message "[ruby-dev:17401] Re: [mswin32] static linked exts"
    on Jun.12,2002 11:43:08, <usa / osb.att.ne.jp> wrote:
| どっちゃにしろ、extmk.rb.inを真面目にいじらないといけなさそ
| うではありますが。

なんてことを言ってましたが、extmk.rb.in以外をいじったらでき
てしまいました。
末尾に1.6.7からのパッチをつけときます。
# 動作はあんまり真面目に確認してません。

やってみて判明したことは以下の通り。

* 1.6の仕組みだと、win32/Makefile.sub などを書き換えないとい
  けない。
  1.7なら、nmake への引数(または環境変数)で対応可能だと思い
  ます。

* 拡張ライブラリのコンパイル後、なぜか miniruby.exe を作り直
  そうとする。
  パッチでは、依存関係をちょっと削除してごまかしてあります。

* mswin32-ruby16.dll 作成時に、「出力ファイル名と入力ファイ
  ル名が同じ」というようなエラーが発生する。
  なんでそうなるか考えたくなかったので ^^; lib のファイル名
  を変えてごかましてあります。

diff -u2pr ruby-1.6.7/ext/extmk.rb.in extstatic/ext/extmk.rb.in --- ruby-1.6.7/ext/extmk.rb.in Mon Jan 28 17:42:04 2002 +++ extstatic/ext/extmk.rb.in Wed Jun 12 13:57:02 2002 @@ -775,5 +775,10 @@ if $extlist.size > 0 $extlibs.gsub!("-L/usr/local/lib", "") if $extlibs end - system format(%[#{$make} #{ruby} EXTOBJS='%s' EXTLIBS='%s'], $extobjs, $extlibs) + if /nmake/i =~ $make + cmd = format(%[#{$make} #{ruby} EXTOBJS="%s" EXTLIBS="%s"], $extobjs, $extlibs) + else + cmd = format(%[#{$make} #{ruby} EXTOBJS='%s' EXTLIBS='%s'], $extobjs, $extlibs) + end + system cmd else Dir.chdir ".." diff -u2pr ruby-1.6.7/win32/Makefile.sub extstatic/win32/Makefile.sub --- ruby-1.6.7/win32/Makefile.sub Tue Nov 13 17:35:06 2001 +++ extstatic/win32/Makefile.sub Wed Jun 12 13:56:57 2002 @@ -62,5 +62,5 @@ ORGLIBPATH = $(LIB) LIBRUBY_A = lib$(RUBY_INSTALL_NAME).lib LIBRUBY_SO = $(RUBY_SO_NAME).dll -LIBRUBY = $(RUBY_SO_NAME).lib +LIBRUBY = $(RUBY_SO_NAME).dll.lib LIBRUBYARG = $(LIBRUBY) @@ -111,5 +111,5 @@ all: miniruby$(EXEEXT) rbconfig.rb ext/ $(LIBRUBY) $(MISCLIBS) set LIB=..\..;$(ORGLIBPATH) - @.\miniruby$(EXEEXT) -Cext extmk.rb + @.\miniruby$(EXEEXT) -Cext extmk.rb static ruby: $(PROGRAM) @@ -155,5 +155,5 @@ rubymw.dll: $(LIBRUBY) !endif -$(RUBYDEF): $(LIBRUBY_A) miniruby$(EXEEXT) +$(RUBYDEF): $(LIBRUBY_A) #miniruby$(EXEEXT) .\miniruby$(EXEEXT) $(srcdir)/win32/mkexports.rb -output=$@ $(LIBRUBY_A) @@ -209,5 +209,5 @@ test: miniruby$(EXEEXT) @.\miniruby$(EXEEXT) $(srcdir)/rubytest.rb -rbconfig.rb: miniruby$(EXEEXT) config.status +rbconfig.rb: config.status #miniruby$(EXEEXT) @.\miniruby$(EXEEXT) $(srcdir)/mkconfig.rb -srcdir=$(srcdir) \ -install_name=$(RUBY_INSTALL_NAME) \ diff -u2pr ruby-1.6.7/win32/config.status.in extstatic/win32/config.status.in --- ruby-1.6.7/win32/config.status.in Mon Feb 25 18:16:44 2002 +++ extstatic/win32/config.status.in Wed Jun 12 13:50:20 2002 @@ -46,5 +46,5 @@ s%@DLEXT@%so%g s%@DLEXT2@%dll%g s%@STRIP@%%g -s%@EXTSTATIC@%%g +s%@EXTSTATIC@%static%g s%@setup@%Setup%g s%@LIBRUBY_LDSHARED@%%g @@ -55,6 +55,6 @@ s%@LIBRUBY_A@%lib$(RUBY_INSTALL_NAME).li s%@LIBRUBY_SO@%$(RUBY_SO_NAME).dll%g s%@LIBRUBY_ALIASES@%%g -s%@LIBRUBY@%$(RUBY_SO_NAME).lib%g -s%@LIBRUBYARG@%$(RUBY_SO_NAME).lib%g +s%@LIBRUBY@%$(RUBY_SO_NAME).dll.lib%g +s%@LIBRUBYARG@%$(RUBY_SO_NAME).dll.lib%g s%@SOLIBS@%%g s%@DLDLIBS@%%g
それでは。 -- U.Nakamura <usa / osb.att.ne.jp>