MySQL Ruby Module ver2.4.2-1 for windows binaries

これは MySQL の Ruby API である MySQL の Windows環境でのバイナリです。 cygwin版と、mingw32版、mswin32版があります。 rubyのバージョンは、1.6.6です。 ruby test.rb のテストはすべて通ってます。 確認したサーバは、

Linux    3.23.41
WinNT4WS 3.23.38-nt(同じマシン)

です。

[インストール]

% ruby install.rb -n で、インタプリタを自動認識して、インストール先が表示されます。(たぶん)

ex.
  install
    mingw32/mysql.so => e:/usr/local/mingw/lib/ruby/site_ruby/1.6/i686-mingw32

Config::CONFIGを利用してますので、rbconfig.rbが正常にインストールされている 必要があります。バイナリ配布なパッケージで確認したのは、うささんの MSWin32配布パッケージ <URL:http://www.ruby-lang.org/~usa/mswin32/ruby-1.6.6-i586-mswin32.zip> だけです。

ActiveRuby や Apollo 利用な方は、適当なディレクトリにコピーしてください。

(see. ruby -e 'p $:' )

originalfiles/test.rb の先頭を読んで、サーバとの接続テストをしてください。 後は、お好きに (^^;

[作り方]

Cygwin版

Cygwin-1.3.9 にて、mysql-3.23.47 の client のみをコンパイル。 zlib をスタティックにリンクするため、zlib-1.1.3 をソースから コンパイルしてlibzstatic.a として利用。upx かけてます。

mysql-ruby-2.4.2 における変更点は extconf.rbの修正

$ cat extconf.rb
require 'mkmf'
have_library('zstatic')
inc, lib = dir_config('mysql', '/usr/local')
find_library('mysqlclient', 'mysql_query', lib, "#{lib}/mysql") or exit 1
# If you have error such as 'undefined symbol', delete '#' mark follow
# lines:
#have_library('m')
#have_library('z')
have_header('mysql.h') or have_header('mysql/mysql.h') or exit 1
create_makefile("mysql")

mingw32版

libmysqlclient MinGW port <URL:http://www.johnydog.cz/projects.php> にあった、 MySQL 3.23.43 mingw Source を利用。

ちょっとだけ修正。 (クロス対応じゃなくするのと、STDCALLの問題回避)

#
--- Makefile.org        Thu Oct  4 01:52:38 2001
+++ Makefile    Wed Jan 23 21:59:39 2002
@@ -14,18 +14,18 @@
 # team. Please see http://www.mysql.com in that case.
 #

-CROSS_DIR = /usr/local/cross-tools/i386-mingw32msvc
-CFLAGS = -O2 -Wall
+CROSS_DIR = /usr/local/mingw
+CFLAGS = -Os -Wall
 LIBS =
 INCLUDES = -I./include

 INSTALL_INCLUDES = $(CROSS_DIR)/include/mysql/
 INSTALL_LIBS = $(CROSS_DIR)/lib/

-CC = $(CROSS_DIR)/bin/gcc
-RANLIB = $(CROSS_DIR)/bin/ranlib
-AR = $(CROSS_DIR)/bin/ar
-ARFLAGS = cr
+CC = gcc -bmingw #$(CROSS_DIR)/bin/gcc
+#RANLIB = $(CROSS_DIR)/bin/ranlib
+#AR = $(CROSS_DIR)/bin/ar
+ARFLAGS = cru
 RM = rm -f
 CP = cp
 MV = mv
@@ -83,4 +83,4 @@
 clean:
        rm -f $(OBJECTS) libmysqlclient.a

-
\ No newline at end of file
+
--- include/mysql.h-orig        Thu Oct 18 01:24:52 2001
+++ include/mysql.h     Wed Jan 23 21:03:18 2002
@@ -48,6 +48,10 @@
 #else
 #define STDCALL __stdcall
 #endif
+#if !defined(__MINGW32__)
+#define STDCALL
+#endif
+
 typedef char * gptr;

 #ifndef ST_USED_MEM_DEFINED

Ruby MySQLでは、標準の extconf.rb では libmysqlclient のリンクが 解決されないので書き換えた。wsock32 と、zlib も追加。

$ cat extconf.rb
require 'mkmf'
inc, lib = dir_config('mysql', '/usr/local')

have_library('z')
have_library('wsock32')
# find_library('mysqlclient', 'mysql_query', lib, "#{lib}/mysql") or exit 1
have_library('mysqlclient')

# If you have error such as 'undefined symbol', delete '#' mark follow
# lines:
#have_library('m')
have_header('mysql.h') or have_header('mysql/mysql.h') or exit 1
create_makefile("mysql")

mswin32版

<URL:http://www.sfc.keio.ac.jp/~s01397ms/d/?date=20020201#p06> を見て思い出した。

うささんち <URL:http://www.ruby-lang.org/~usa/mswin32/> の mswin32-ruby16.lib を適当にコピーして、 mingw32版の Makefile の $(LDSHARED)行の、-lmingw32-ruby16 を -lmswin32-ruby16 に変更しただけです :-)

ruby -i.bak -pe 'sub(/mingw32-/, "mswin32-")' Makefile くらい

ちゃんと、テストは通ってます。

<URL:http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/33461?33335-33630> に、試行錯誤がつづられてます。

[リンク]

MySQL/Ruby

<URL:http://www.tmtm.org/mysql/ruby/>

<URL:http://www.ruby-lang.org/en/raa-list.rhtml?name=MySQL%2FRuby>

Ruby

<URL:http://www.ruby-lang.org/>

MySQL

<URL:http://www.mysql.com/>

<URL:http://www.mysql.gr.jp/>

[履歴]

2002-02-04 2.4.2-1

2002-01-29 2.4.2

たむら <URL:mailto:sgs02516@nifty.com>