VS2005でQDBMのRubyバインディングをビルド

もう少してこずるかと思ったけど、案外サクッとビルドできた。
一応、メモ。

QDBMのビルド

QDBM付属のVCmakefileを少し手直しして、Microsoft Platform SDKコマンドプロンプトから、nmake。

--- VCmakefile.orig	2006-01-07 19:13:08.000000000 +0900
+++ VCmakefile	2007-11-18 18:35:06.171875000 +0900
@@ -8,7 +8,7 @@
 
 
 # VC++ directory
-VCPATH = C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7
+VCPATH = C:\Program Files\Microsoft Visual Studio 8\VC
 
 # User options
 YOUR_CLFLAGS =
@@ -46,7 +46,7 @@
 EXE_APPEND = _t
 !ELSEIF "$(CFG)" == "dd"
 !MESSAGE Build using dynamic threaded debug configuration
-BASE_FLAGS = /MDd /W3 /ZI /Od /FD /GZ /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\"
+BASE_FLAGS = /MTd /W3 /ZI /Od /FD /GZ /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\"
 BASE_DEFS = /D_DEBUG /D__DEBUG__
 OUTDIR = .\tmp_dd
 LIB_APPEND = _dd
@@ -54,7 +54,7 @@
 !ELSE
 !MESSAGE Build using dynamic threaded release configuration
 BASE_DEFS = /DNDEBUG
-BASE_FLAGS = /MD /W3 /O2 /FD /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\"
+BASE_FLAGS = /MT /W3 /O2 /FD /Fo"$(OUTDIR)\\" /Fd"$(OUTDIR)\\"
 OUTDIR = .\tmp
 LIB_APPEND =
 EXE_APPEND =
C:\...>nmake /f VCmakefile

warning出まくってるけど、気にしない。

拡張ライブラリのビルド

ソースを少し手直し。

--- ruby/curia/mod_curia.c	2006-09-25 21:26:06.000000000 +0900
+++ /vs2005/Projects/qdbm_ruby/curia/mod_curia.c	2007-11-18 19:35:30.671875000 +0900
@@ -1,3 +1,5 @@
+#pragma warning(disable:4312)
+__declspec(dllexport) int Init_mod_curia(void);
 /*************************************************************************************************
  * Implementation of Curia for Ruby
  *                                                      Copyright (C) 2000-2006 Mikio Hirabayashi
@@ -18,7 +20,7 @@
 #include <depot.h>
 #include <curia.h>
 #include <stdlib.h>
-#include <unistd.h>
+//#include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
--- ruby/depot/mod_depot.c	2006-09-25 21:21:38.000000000 +0900
+++ /vs2005/Projects/qdbm_ruby/depot/mod_depot.c	2007-11-18 19:35:58.453125000 +0900
@@ -1,3 +1,5 @@
+#pragma warning(disable:4312)
+__declspec(dllexport) int Init_mod_depot(void);
 /*************************************************************************************************
  * Implementation of Depot for Ruby
  *                                                      Copyright (C) 2000-2006 Mikio Hirabayashi
@@ -17,7 +19,7 @@
 #include "ruby.h"
 #include <depot.h>
 #include <stdlib.h>
-#include <unistd.h>
+//#include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
--- ruby/villa/mod_villa.c	2006-09-25 23:47:04.000000000 +0900
+++ /vs2005/Projects/qdbm_ruby/villa/mod_villa.c	2007-11-18 19:36:13.953125000 +0900
@@ -1,3 +1,5 @@
+#pragma warning(disable:4312)
+__declspec(dllexport) int Init_mod_villa(void);
 /*************************************************************************************************
  * Implementation of Villa for Ruby
  *                                                      Copyright (C) 2000-2006 Mikio Hirabayashi
@@ -19,7 +21,7 @@
 #include <cabin.h>
 #include <villa.h>
 #include <stdlib.h>
-#include <unistd.h>
+//#include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -494,7 +496,7 @@
   VILLA *villa;
   const char *kbuf;
   int index, ksiz, jmode;
-  VALUE vval;
+  //VALUE vval;
   FIXNUM_P(vindex);
   if((index = FIX2INT(vindex)) == -1) myerror(DP_EMISC);
   kbuf = STR2CSTR(vkey);

qbdm.libとQBDMのヘッダファイル、msvcrt-ruby18.libとRubyのヘッダファイルにパスを通して /MT でビルド。
サクッとビルド。unistd.hとかpthreadとか使ってない?

デプロイ


%RUBY_HOME%
├─bin
│ qdbm.dll

└─lib
└─ruby
└─site_ruby
└─1.8
│ curia.rb
│ depot.rb
│ villa.rb

└─i386-msvcrt
mod_curia.so
mod_depot.so
mod_villa.so