From: WATANABE Hirofumi Date: 2002-08-21T16:44:22+09:00 Subject: [ruby-dev:18055] Re: msvcrt わたなべです。 "U.Nakamura" writes: > 他にもなんか引っかかるところがあるんじゃないかとも思ってます > が、Ruby本体で発生する問題は、それなりに回避できるんじゃない > かと楽観的に考えてます。 RUBY_PLATFORMじゃなくてCONFIG["arch"]を参照してるようなスク リプトがあると問題になりそうです。 > 定数の名前は特によさそうなアイデアがないので保留します。 とりあえずRUBY_ORIG_ARCHLIBにしてみました。 > あと、rbconfig.rbの中でどんな名前でi386-(mswin32|mingw32)を > 残すか、も考える必要がありますね。 こっちもorig_archに。 > 1.6から1.8へ移行する人の場合はバージョン番号が違うから関係な > いし、1.7を使ってる人は覚悟の上ということで。 Andyさんのinstallerがたぶん面倒なことになります。 いつのまにか1.7.2も用意されているので。 http://www.pragmaticprogrammer.com/ruby/downloads/ruby-install.html それはそれとして実際に作ってみてwin32oleで試してみたら、 i386-mingw32/rbconfig.rbの存在に騙されました。 とりあえず古い環境のファイルを消すのも面倒なので、 いつもと違うディレクトリにインストールしてwin32oleがちゃんと makeできるか確認してみました。大丈夫そう。 % msvcrt-ruby17 -e 'puts $:' d:/ruby/lib/ruby/site_ruby/1.7 d:/ruby/lib/ruby/site_ruby/1.7/i386-mingw32 d:/ruby/lib/ruby/site_ruby/1.7/i386-msvcrt d:/ruby/lib/ruby/site_ruby d:/ruby/lib/ruby/1.7 d:/ruby/lib/ruby/1.7/i386-mingw32 d:/ruby/lib/ruby/1.7/i386-msvcrt . % msvcrt-ruby17 ../extconf.rb checking for main() in -lole32... yes checking for main() in -loleaut32... yes checking for main() in -luuid... yes checking for main() in -luser32... yes checking for main() in -ladvapi32... yes creating Makefile % make gcc -mno-cygwin -DIMPORT -DNT -D__NO_ISOCEXT -Os -DNONAMELESSUNION -I. -Id:/ruby/lib/ruby/1.7/i386-msvcrt -I.. -c ../win32ole.c gcc -mno-cygwin -shared -s win32ole.def -Ld:/ruby/lib -o win32ole.so win32ole.o -L. -lmsvcrt-ruby17 -ladvapi32 -luser32 -luuid -loleaut32 -lole32 % make install win32ole.so -> d:/ruby/lib/ruby/1.7/i386-msvcrt/win32ole.so chmod 0555 d:/ruby/lib/ruby/1.7/i386-msvcrt/win32ole.so ../lib/oleproperty.rb -> d:/ruby/lib/ruby/1.7/oleproperty.rb chmod 0644 d:/ruby/lib/ruby/1.7/oleproperty.rb 参考のパッチをつけます。 Index: Makefile.in =================================================================== RCS file: /src/ruby/Makefile.in,v retrieving revision 1.35 diff -u -1 -r1.35 Makefile.in --- Makefile.in 2002/05/14 06:22:25 1.35 +++ Makefile.in 2002/08/21 07:19:15 @@ -143,3 +143,3 @@ remove_const :RUBY_VERSION; \ - RUBY_PLATFORM = "@arch@"; \ + RUBY_PLATFORM = "@orig_arch@"; \ RUBY_VERSION = "@MAJOR@.@MINOR@.@TEENY@"; \ Index: configure.in =================================================================== RCS file: /src/ruby/configure.in,v retrieving revision 1.133 diff -u -1 -r1.133 configure.in --- configure.in 2002/08/21 07:17:55 1.133 +++ configure.in 2002/08/21 07:19:18 @@ -1047,3 +1047,13 @@ cygwin*|mingw*) - RUBY_SO_NAME=$target_os-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR} + case "$target_os" in + cygwin*) + RUBY_SO_NAME=$target_os-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR} + AC_LIBOBJ([strftime]) + CCDLFLAGS=-DUSEIMPORTLIB ;; + mingw*) + RUBY_SO_NAME=msvcrt-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR} + AC_LIBOBJ([win32]) + CFLAGS="-DNT -D__NO_ISOCEXT $CFLAGS" + CCDLFLAGS=-DIMPORT ;; + esac if test x"$enable_shared" = xyes; then @@ -1062,11 +1072,2 @@ SOLIBS='$(LIBS)' - case "$target_os" in - cygwin*) - AC_LIBOBJ([strftime]) - CCDLFLAGS=-DUSEIMPORTLIB ;; - mingw*) - AC_LIBOBJ([win32]) - CFLAGS="-DNT -D__NO_ISOCEXT $CFLAGS" - CCDLFLAGS=-DIMPORT ;; - esac ;; @@ -1128,2 +1129,3 @@ AC_SUBST(arch)dnl +AC_SUBST(orig_arch)dnl AC_SUBST(sitedir)dnl @@ -1133,2 +1135,3 @@ + if test "$fat_binary" = yes ; then @@ -1146,2 +1149,12 @@ fi + +orig_arch="${arch}" + +case "${target_os}" in + mingw*) + arch="i386-msvcrt" + AC_DEFINE_UNQUOTED(RUBY_ORIG_ARCHLIB, "${RUBY_LIB_PATH}/${orig_arch}") + AC_DEFINE_UNQUOTED(RUBY_SITE_ORIG_ARCHLIB, "${RUBY_SITE_LIB_PATH2}/${orig_arch}") + ;; +esac Index: ruby.c =================================================================== RCS file: /src/ruby/ruby.c,v retrieving revision 1.63 diff -u -1 -r1.63 ruby.c --- ruby.c 2002/08/12 13:39:22 1.63 +++ ruby.c 2002/08/21 07:19:18 @@ -270,2 +270,4 @@ ruby_incpush(RUBY_RELATIVE(RUBY_SITE_THIN_ARCHLIB)); +#elif defined RUBY_SITE_ORIG_ARCHLIB + ruby_incpush(RUBY_RELATIVE(RUBY_SITE_ORIG_ARCHLIB)); #endif @@ -277,2 +279,4 @@ ruby_incpush(RUBY_RELATIVE(RUBY_THIN_ARCHLIB)); +#elif defined RUBY_ORIG_ARCHLIB + ruby_incpush(RUBY_RELATIVE(RUBY_ORIG_ARCHLIB)); #endif