こんにちは、なかむら(う)です。
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>