rroonga > Windows用gemの作り方メモ > 1.0.8

用意するもの


gitからチェックアウト

# 読み書き可能(要管理権限)
$ git clone  git@github.com:ongaeshi/rroonga.git
# 読み込み専用
$ git clone git://github.com/ongaeshi/rroonga.git
 

extconf.rb(失敗する)

$ ruby extconf.rb
checking for groonga version (>= 1.0.4)... no
downloading http://groonga.org/files/groonga/groonga-1.0.4.tar.gz... done
extracting... done
configuring... failed
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.
 

vendor/groonga-1.0.4 が出来ているはずなので、そっちから先に片付ける。

groongaのコンパイル


configureの設定

$ cd vendor/groonga-1.0.4
$ ./configure CC='i686-w64-mingw32-gcc' CFLAGS='-g -O0 -mno-cygwin' prefix='/c/users/ongaeshi/work/rroonga/vendor/local' i386-pc-mingw32
 

rubyのヘッダを一部修正する

_c:/app/ruby187-mingw32/lib/ruby/1.8/i386-mingw32/win32/win32.h_

#ifdef __MINGW32__
// struct timezone {
//   int tz_minuteswest;
//   int tz_dsttime;
// };
 

_src/Makefile 125行目_
# @todo
# LDFLAGS = 
LDFLAGS = -L/usr/i686-w64-mingw32/sys-root/mingw/lib -L/usr/lib
 

make

$ make
.
.
.
 

make install

$ make install
Making install in include
make[1]: Entering directory `/c/users/ongaeshi/work/rroonga_new/vendor/groonga-1.0.4/include'
Making install in groonga
make[2]: Entering directory `/c/users/ongaeshi/work/rroonga_new/vendor/groonga-1.0.4/include/groonga'
.
.
 

これで、vendor/local 以下にbin/libgroonga-0.dll 等が作られたら成功。
rroongaのコンパイルに戻る。

rroonga-1.0.8-x86-mingw32.gem を作る


$ cd ~/work/rroonga
 

rake native gem

$ rake native gem
rake-compiler must be configured first to enable cross-compilation
cd tmp/i386-mingw32/groonga/1.8.7
(in c:/users/ongaeshi/work/rroonga_new)
make
Makefile:121: *** target pattern contains no `%'.  Stop.

エラーが起きるのでmakefileを修正する

_tmp/i386-mingw32/groonga/1.8.7/Makefile_
C: → /c
c: → /c
 
に変換(どちらも小文字の''c''にする必要があることに注意)
 

もう一箇所修正

_tmp/i386-mingw32/groonga/1.8.7/Makefile_

# 42行目 gcc → i686-w64-mingw32-gcc
# CC = gcc
CC = i686-w64-mingw32-gcc
.
.
# 51行目 : -mo-cygwin追加 
# CFLAGS   =  -mno-cygwin -g -O2 -DFD_SETSIZE=256  $(cflags) -I../../../../vendor/local/include/groonga 
CFLAGS   =  -g -O2 -DFD_SETSIZE=256  $(cflags) -I../../../../vendor/local/include/groonga
.
.
# 62行目 : gcc → i686-w64-mingw32-gcc
# LDSHARED = gcc -shared -s
LDSHARED = i686-w64-mingw32-gcc -shared -s
 

rake native gem

$ rake native gem
cp tmp/i386-mingw32/groonga/1.8.7/groonga.so lib/groonga.so
mkdir -p pkg
rm -f pkg/rroonga-1.0.8/AUTHORS
ln AUTHORS pkg/rroonga-1.0.8/AUTHORS
rm -f pkg/rroonga-1.0.8/NEWS.ja.rdoc
ln NEWS.ja.rdoc pkg/rroonga-1.0.8/NEWS.ja.rdoc
rm -f pkg/rroonga-1.0.8/NEWS.rdoc
ln NEWS.rdoc pkg/rroonga-1.0.8/NEWS.rdoc
rm -f pkg/rroonga-1.0.8/README.ja.rdoc
ln README.ja.rdoc pkg/rroonga-1.0.8/README.ja.rdoc
.
.
 

_pkg/rroonga-1.0.8-x86-mingw32.gem_ が出来ていれば成功

$ cd pkg
$ ls -la
total 6532
drwx------+ 1 ongaeshi       0 Dec 30 17:41 .
drwx------+ 1 ongaeshi       0 Dec 30 17:41 ..
drwx------+ 1 ongaeshi       0 Dec 30 17:40 rroonga-1.0.8
-rwx------+ 1 ongaeshi 3370496 Dec 30 17:41 rroonga-1.0.8-x86-mingw32.gem
-rwx------+ 1 ongaeshi 3316736 Dec 30 17:41 rroonga-1.0.8.gem
 

インストール


.gemファイルを直接指定

$ gem install rroonga-1.0.8-x86-mingw32.gem 
Enclosing class/module 'mGrn' for class Accessor not known
Enclosing class/module 'mGrn' for class ArrayCursor not known
Enclosing class/module 'mGrn' for class Array not known
Enclosing class/module 'mGrn' for class Column not known
.
.
 

動作確認


テスト、モジュールが無いと怒られる。
$ gem install gren # rroongaを使っているアプリ
PostInstall.txt
Successfully installed gren-0.3.1
1 gem installed
Installing ri documentation for gren-0.3.1...
Installing RDoc documentation for gren-0.3.1...
$ mkgrendb.bat
c:/app/ruby187-mingw32/lib/ruby/gems/1.8/gems/rroonga-1.0.8-x86-mingw32/lib/groonga.so: 126: 指定されたモジュールが見つかりません。   - c:/app/ruby187-mingw32/lib/ruby/gems/1.8/gems/rroonga-1.0.8-x86-mingw32/lib/groonga.so (LoadError)
	from c:/app/ruby187-mingw32/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
	from c:/app/ruby187-mingw32/lib/ruby/gems/1.8/gems/rroonga-1.0.8-x86-mingw32/lib/groonga.rb:44
.
.

あと一息、コマンドプロンプトで実行すると、pthreadGC2.dllが無いと怒られる。
問題はpthreadGC2.dllがgroonga.soから見つけられないことなので、pthreadGC2.dllをパスの通った場所へ置けば良い。

cygwin持ってる人*

$ cp -v /c/cygwin/usr/i686-w64-mingw32/sys-root/mingw/bin/pthreadGC2.dll /c/WINDOWS/system32/
 

cygwin持ってない人*

手っ取り早くやるには、MinGW32からコンパイル済みのpthreadGC2.dllを持ってくれば動くと思う(多分)
$ wget http://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/pthreads/pthreads-20100604.zip/download
.
.
$ unzip pthreads-20100604.zip 
.
.
$ cd pthreads-20100604/mingw32/
$ unzip pthreads-w32.zip 
.
.
$ cp -v bin/pthreadGC2-w32.dll /c/WINDOWS/system32/pthreadGC2.dll
`bin/pthreadGC2-w32.dll' -> `/c/WINDOWS/system32/pthreadGC2.dll'
 

もう一回テスト
$ mkgrendb.bat
mkgrendb INPUT_YAML1 [INPUT_YAML2 ...]
        --ddb, --default-db          Create or Update default DB. (Plase set ENV['GRENDB_DEFAULT_DB'])
        --full                       Full update DB. (Delete and create)
        --delete                     Delete DB. (Not delete yaml)
        --dump                       Dump DB.
        --report                     Database Report.
 

動いたよー。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月15日 01:41
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。