One-click installer for Ruby-Gnome2-0.18.1 まとめ

ruby は美しいし GNOME は便利だけど win32 用が古すぎるとお嘆きのあなた.
最新の one-click installer を作ってみませんか?


これは unofficial な情報です.なので本家の人々にゴルァしたりしないでください.

全体の流れ

  1. 必要なものを蒐める
  2. ruby を build (不要?)
  3. rcairo を build, install
  4. ruby-gnome2 を build
  5. インストーラ作成

必要なもの・使ったもの

  1. MinGW
    1. MinGW-5.1.4
    2. MSYS-0.10
    3. MinGW Utilities/bison: ruby_1_8_6 の build に必要
  2. gladewin32
    1. Gtk+ 2.12.9 Development Environment Revision2
  3. その他のGNOME のライブラリたち (hoge-version.zip と hoge-dev-version.zip の両方)
    1. GConf-2.20.0
    2. ORBit2-2.14.3
    3. gail-1.22.0
    4. gnome-vfs.2.22.0
    5. goocanvas-0.12
    6. gtksourceview-1.8.5
    7. gtksourceview-2.2.2
    8. libbonobo-2.22.0
    9. libbonoboui-2.22.0
    10. libgnomeprint-1.12.1
    11. libgnomeprintui-1.12.1
    12. libgnome-2.20.1
    13. libgnomecanvas-2.22.0
    14. libgnomeui-2.22.1
    15. libgnomeprint-2.12.1
    16. libgnomeprintui-2.12.1
    17. poppler-0.6.4 (2008.12.09追記)
  4. rcairo-1.6.3 gladewin32 の cairo が 1.6.4 なのです
  5. NSIS
  6. ruby_1_8_6 svn から 1.8.6 の current を取ってきて使いました
  7. rake インストーラ作成に必要
  8. ruby-gnome2-all-0.18.1
  9. win32installer/trunk

環境の作成

ディレクトリ構造
c:\
    GTK\
    ruby-gnome2-dev\
        rcairo-1.6.3\
        ruby_1_8_6\
        ruby-gnome2-all-0.18.1\
        win32installer\trunk\
        dist\
    MinGW\
    msys\1.0\
    Program Files\NSIS\
MinGW, msys のセットアップ

普通.bison は ruby-1.8.7-p72 では不要.

NSIS のセットアップ

普通.

GTK のセットアップ

まずは gladewin32 をセットアップ.普通.
そのときに,環境変数 PKG_CONFIG_PATH を設定しておく.

SET PKG_CONFIG_PATH=C:\GTK\lib\pkgconfig
SET PATH=C:\GTK\bin;%PATH%

それから,GNOME から落としてきた zip たちを展開し,遠慮なくC:\GTK に上書き

始める前に

これ以降の作業は MSYS 上で行います.
とりあえず

unset RUBYOPT

ruby の build

ほんとは必要ないかも.

  • prefix に注意.謎.
  • make install する
ruby_1_8_6 $ ./configure --prefix=/ruby-gnome2-dev/dist
ruby_1_8_6 $ make
ruby_1_8_6 $ make install

rcairo の build

C:\GTK\lib\pkgconfig\cairo.pc の修正
--- cairo.pc.org        Sun Apr 20 01:14:48 2008
+++ cairo.pc    Sat Dec  6 19:34:08 2008
@@ -7,7 +7,7 @@
 Description: Multi-platform 2D graphics library
 Version: 1.6.4
 
-Requires.private: freetype2 >= 9.7.3 fontconfig libpng12 pixman-1 >= 0.10.0 
+Requires.private: freetype2 >= 9.7.3 fontconfig libpng12 
 Libs: -L${libdir} -lcairo
 Libs.private: -lz -lz -lm
 Cflags: -I${includedir}/cairo

win32 版の cairo-1.6.4 は pixman-1 を static link している.なので不要.
gnome.org から落とせる cairo-1.6.4-2 では修正されてるみたい.
http://www.nabble.com/pixman-1-was-not-found-in-the-pkg-config-td16842574.html

cairo がみつからない
rcairo-1.6.3 $ cp /c/GTK/include/cairo/*.h ./
rcairo-1.6.3 $ cp /c/GTK/lib/libcairo.dll.a ./

たぶんもうちょっとまともな方法があるはず.

rcairo の build
  • make install する
rcairo-1.6.3 $ /c/ruby-gnome2-dev/dist/bin/ruby.exe extconf.rb --ruby=/c/ruby-gnome2-dev/dist/bin/ruby.exe
rcairo-1.6.3 $ make
rcairo-1.6.3 $ make install

ruby-gnome2 の build

基本的には http://ruby-gnome2.sourceforge.jp/hiki.cgi?compile_mingw
でももうすでにちょっと違う.
とりあえずまず

export CAIRO_PATH=/c/ruby-gnome2-dev/rcairo-1.6.3

そして基本的に,make install しない

ruby-gnome2/libart/src/rbart_canvas.c の修正
--- rbart_canvas.c.bak  Thu Oct 23 22:24:04 2008
+++ rbart_canvas.c      Sun Dec  7 11:48:09 2008
@@ -11,7 +11,17 @@
 
 **********************************************************************/
 
+#ifdef __MINGW32__
+#define XMD_H
+#endif
+
+#ifdef __MINGW32__
+#define boolean boolean2
 #include "rbart.h"
+#undef boolean
+#else
+#include "rbart.h"
+#endif
 
 #include <jpeglib.h>
 #include <png.h>

jpeglib の boolean と INT32 が mingw のライブラリと干渉するため.
boolean は jpeglib の,INT32 は mingw のを使用.

ruby-gnome2/gnome/src/rbgnome.h の修正
-- rbgnome.h.bak    Thu Oct 23 22:24:04 2008
+++ rbgnome.h       Sun Dec  7 00:02:45 2008
@@ -20,7 +20,9 @@
 
 #define ENABLE_NLS 1
 
+#ifndef __MINGW32__
 #include <sys/time.h>
+#endif
 #include <gnome.h>
 
 #undef PATH_SEP

sys/time.h と ruby/win32/win32.h が衝突するため.

ruby-gnome2/bonobo/src/rbbonobo-main.c の修正
--- rbbonobo-main.c.bak   Sun Dec  7 01:03:22 2008
+++ rbbonobo-main.c       Sun Dec  7 01:03:46 2008
@@ -97,7 +97,10 @@
 rbonobo_setup_x_error_handler(self)
     VALUE self;
 {
+#ifdef __MINGW32__
+#else
     bonobo_setup_x_error_handler();
+#endif
     return self;
 }

win32 に X はない…けどこれでいいのかなぁ

ruby-gnome2/glib の build
ruby-gnome2-all-0.18.1 $ cd glib
glib $ /c/ruby-gnome2-dev/dist/bin/ruby.exe extconf.rb --ruby=/c/ruby-gnome2-dev/dist/bin/ruby.exe
glib $ make
その他の build
ruby-gnome2-all-0.18.1 $ /c/ruby-gnome2-dev/dist/bin/ruby.exe extconf.rb --ruby=/c/ruby-gnome2-dev/dist/bin.ruby.exe
ruby-gnome2-all-0.18.1 $ make

で,この作業で作れるのがこんな感じ.

Target libraries: glib, gdkpixbuf, pango, atk, gtk, bonobo, bonoboui, gconf, gnome, gnomecanvas, gnomeprint, gnomeprintui, gnomevfs, goocanvas, gtkglext, gtksourceview, gtksourceview2, libart, libglade, poppler, rsvg
Ignored libraries: gstreamer, gtkhtml2, gtkmozembed, panel-applet, vte

なんかいろいろ入ってないけど,gstreamer とかむりぽ.

インストーラの作成

実は今までも win32installer/trunk/HOWTO.txt のトレースできたのだが,
仕様変更も多いので一筋縄ではいかんのです.
とりあえずは,もうそろそろ dist の ruby に path を通しておいてもいいかなと.

export PATH=/c/ruby-gnome2-dev/dist/bin:$PATH

作業ディレクトリは /c/ruby-gnome2-dev/win32installer/trunk.

rake のインストール

ruby/zlib を忘れたので,直接入れてもよいかと.まあ普通に.

rake-0.8.3 $ ruby install.rb
win32installer/trunk/Rakefile の修正
--- Rakefile.org        Mon Feb 12 11:37:25 2007
+++ Rakefile    Sun Dec  7 06:05:13 2008
@@ -105,7 +105,8 @@
   mkdir_p dest_dir unless File.exist? dest_dir
   cp_r(File.join(sitelibdir, "cairo.rb"), dest_dir)
   mkdir_p File.join(dest_dir, "cairo") unless File.exist? File.join(dest_dir, "cairo")
-  cp_r(Dir.glob(File.join(sitelibdir, "cairo")), File.join(dest_dir, "cairo"))
+  mkdir_p File.join(dest_dir, "i386-msvcrt") unless File.exist? File.join(dest_dir, "i386-msvcrt")
+  cp_r(Dir.glob(File.join(sitelibdir, "cairo")), dest_dir)
   cp_r(Dir.glob(File.join(sitelibdir, "i386-msvcrt", "cairo.so")), File.join(dest_dir, "i386-msvcrt"))
   cp_r(Dir.glob(File.join(sitelibdir, "i386-msvcrt", "rb_cairo.h")), File.join(dest_dir, "i386-msvcrt"))
 end
  • ruby/lib/ruby/site_ruby/1.8/i386-msvcrt が作成されない
  • cairo のインストールする場所がてぃがう
win32/installer/trunk/Rakefile の編集

これは HOWTO.txt にあるとおり.

GTK_DIR     = "c:/GTK" 
CAIRO_DIR   = "c:/ruby-gnome2-dev/rcairo-1.6.3"
MINGW_DIR   = "c:\\MinGW"
MSYS_DIR    = "c:\\msys\\1.0"
NSIS_DIR    = "C:\\Program Files\\NSIS"
RGNOME2_DIR = "c:/ruby-gnome2-dev/ruby-gnome2-all-0.18.1"

なんか入り乱れてるけど気にしない.

setup.nsi の編集
--- setup.nsi.org       Mon Feb 12 11:37:24 2007
+++ setup.nsi   Sun Dec  7 02:24:06 2008
@@ -6,7 +6,7 @@
 
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "Ruby-GNOME2"
-!define PRODUCT_VERSION "0.16.0-1"
+!define PRODUCT_VERSION "0.18.1-1"
 !define PRODUCT_PUBLISHER "Masao Mutoh"
 !define PRODUCT_WEB_SITE "http://ruby-gnome2.sourceforge.jp/"
 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"

とりあえずこれだけ頑張ってバージョンが変わらないのは悲しすぎ.
まあ,本来ならもうちょっといろいろ編集すべき.

README_win32.txt, NEWS_win32.txt の編集

めんどくさいので適宜.

インストールするファイルの列挙
win32installer/trunk $ rake makeinstall

そう,だから ruby-gnome2 を make しても install はしなかったの.
で,ruby-gnome2-all-0.18.1/install.log が生成され,これを parse してファイル一覧とするわけですが,
一行嬉しくない行が残ってるので,下記のような行を探し,消す.

install -c -m 0755 c:/ruby-gnome2/ruby-gnome2-all-0.18.1/libglade/bin/ruby-glade-create-template c:/ruby-gnome2/target/bin
インストーラの作成
win32installer/trunk $ rake copygtk    # かなりかかる
win32installer/trunk $ rake copyglade
win32installer/trunk $ rake copydoc
win32installer/trunk $ rake copysamples
win32installer/trunk $ rake copyrcairo
win32installer/trunk $ rake copyrgnome2
win32installer/trunk $ rake makensis

完成

…という作業を経てこれができるわけですよ.
One-click installer for Ruby-Gnome2 0.18.1 unofficial
まあ.自分用.
README も古いし足りないのもいっぱいある微妙な奴なので,参考程度に.
まともになれば本家さんにも一応お話したほうがいいんだろうけど.


ちなみに,こんな感じ.

謝辞

Masao 神.