- 컴파일을 위한 준비물
MinGW, MSYS, GTK Development Environment, 그리고 GNOME2 환경을 구성하는 라이브러리들의dev 버전들.
MinGW는 5.1.6 버전 인스톨러를 받아서 Current 버전들을 설치했다. MSYS는 1.0.11을 다운로드받았다. Gtk+ 2.12.9 Development Environment를 사용하였고, 각각의 라이브러리의 버전은 다음과 같다.
이 중 poppler-dev는 dependancy 안에 들어가면 존재하고, poppler-data는 http://poppler.freedesktop.org/에서 받을 수 있다.poppler-dev 0.12.0-1 poppler-data 0.4.0 libgnomeprintui-dev 2.12.1 libgnomeprint-dev 2.12.1 libgnomecanvas-dev 2.30.1-1 libgnome-dev 2.24.1-1 libbonoboui-dev 2.24.0-1 libbonobo-dev 2.24.0-1 gtksourceview-dev 1.8.5 gtksourceview-dev 2.10.0 goocanvas-dev 0.15 gnome-vfs-dev 2.24.1-1 gail-dev 1.22.0 ORBit2-dev 2.14.16-1 GConf-dev 2.22.0-3
시작하기 전에, msys를 띄우고$ export PKG_CONFIG_PATH=/c/GTK/lib/pkgconfig
을 수행시켜 환경을 준비시킨다.
$ export PATH=/c/GTK/bin:$PATH
- Compile and Install ruby
http://ruby-lang.org/ 에서 루비 최신 버전 소스파일을 받는다. 참고로 이번에는 1.8.7 p249를 받아 컴파일했다.
다운로드를 받으면 압축을 푼 디렉토리에서 다음을 수행해서 루비를 컴파일한다.
여기서 --prefix 옵션을 줘서, 모든 작업이 종료된 후 /ruby-gnome2-dev/dist에 ruby와 ruby-gnome2 바인딩을 위치시킬 것이다. 참고로, 여기서 ruby를 다시 컴파일 하는 이유는 루비 홈페이지에서 제공되는 루비는 Microsoft Visual C 컴파일러로 컴파일이 되어 있어서 native extension을 컴파일 할 때 같은 것을 써야만 하기 때문에, ruby-gnome2를 MinGW로 컴파일하기 위해서 ruby를 다시 컴파일하는 것이다.$ ./configure --prefix=/ruby-gnome2-dev/dist
$ make
$ make install
- Compile and Install rcairo
다음 단계는 rcairo를 컴파일하고 설치하는 것이다. http://cairographics.org/releases/에서 rcairo의 최신 버전을 다운받아 압축을 풀고, 그 디렉토리에서 다음을 수행한다.
당연한 이야기이지만, 첫 번째 줄에서 줄 바꿈은 없다. 여기서 가정하고 있는 것은 C 드라이버에서 작업중이고 GTK 런타임은 C:\GTK에 설치되었다는 것이다. --with-override-variables=prefix=/c/GTK가 빠지면 이후 pkg-config가 오작동하게 되기 때문에 꼭 필요하다. 위에서는 prefix에 /c/가 없지만 여기서는 필요하다는 것에 주의할 필요가 있다.$ /c/ruby-gnome2-dev/dist/bin/ruby.exe extconf.rb --ruby=/c/ruby-gnome2-dev/dist/bin/ruby.exe --with-override-variables=prefix=/c/GTK
$ make
$ make install
- Modify Ruby-GNOME2 source code
http://ruby-gnome2.sourceforge.jp 에서 최신의 ruby-gnome2 소스파일을 다운받는다. 여기서는 0.19.4를 이용했다.
컴파일 에러를 방지하기 위한 수정이 두 군데 필요하고, 기능상 미비한 점을 보강하기 위한 수정이 두 군데 필요하다. 두 번째 것은 굳이 할 필요는 없지만, 해 두면 여러모로 유익하기 때문에 추가해 둔다. 참고로 참조한 문서에서 수정해야한다고 한 부분은 최신 버전에서는 모두 해결된 것으로 보인다.
다음은 유용성을 위해 추가하는 내용이다. 행 번호는 위에서부터 수정한 뒤의 파일을 기준으로 삼았다.C:\GTK\include\jmorecfg.h 에서
160행#ifndef XMD_H => #if !defined(XMD_H) && !defined(_BASETSD_H)
226행
#ifndef HAVE_BOOLEAN => #if !defined(HAVE_BOOLEAN) && !defined(_RPCNDR_H)
마지막으로, ruby-gnome2-all-0.19.4\gtk\src 디렉토리에서 다음 명령을 수행해 파일을 하나 만들어 둔다.ruby-gnome2-all-0.19.4\gtk\src\rbgdkdraw.c 에서
388행 다음에 다음 9줄 삽입
#ifdef GDK_WINDOWING_WIN32
#include <gdk/gdkwin32.h>
static VALUE
gdkdraw_get_hwnd(self)
VALUE self;
{
return ULONG2NUM(GDK_WINDOW_HWND(_SELF(self)));
}
#endif
473행 다음에 다음 3줄 삽입
#ifdef GDK_WINDOWING_WIN32rb_define_method(gdkDrawable, "hwnd", gdkdraw_get_hwnd, 0);#endif
이걸 해 두지 않으면, 이 파일을 만들어야할 때 이 파일을 요구하는 어처구니 없는 일이 발생한다 -_-$ ar q libruby-gtk2.a
- Compile and install Ruby-GNOME2
컴파일 하기 전에 CAIRO_PATH를 설정해주어야 한다. 여기선 1.8.1을 사용한 것으로 한다.
$ export CAIRO_PATH=/c/ruby-gnome2-dev/rcairo-1.8.1
이제 컴파일을 시작한다. 먼저, ruby-gnome2-all-0.19.4\glib 디렉토리로 옮긴 다음 다음과 같이 make를 수행한다. 단, make install은 하지 않는다.
glib이 컴파일 다 되면 이제 한 단계 위로 돌아가서 전체 대상에 대해 컴파일을 수행한다. 단, 한번에 컴파일이 완료되지 않기 때문에 make install은 하지 않는다.$ /c/ruby-gnome2-dev/dist/bin/ruby.exe extconf.rb --ruby=/c/ruby-gnome2-dev/dist/bin/ruby.exe
$ make
중간에 gnome-print, gnome-printui가 실패할텐데, 한번 수행해서 libart가 컴파일되고 나면 다시 make를 수행하고 make install으로 설치한다.$ /c/ruby-gnome2-dev/dist/bin/ruby.exe extconf.rb --ruby=/c/ruby-gnome2-dev/dist/bin/ruby.exe
$ make
최종적으로 만들어지는 라이브러리는 다음과 같다.$ make
$ make install
이것은 extconf를 수행할 때 뜨는 것으로, 컴파일이 완료됐을 때는 Ignored libraries는 나오지 않는다.-----
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, libgda, panel-applet, vte
-----
- Distribute
루비와 루비 바인딩 자체는 C:\ruby-gnome2-dev\dist 안에 있는 것을 그대로 배포하면 된다. 만약 기존에 설치된 루비에 라이브러리를 추가할 경우는 C:\ruby-gnome2-dev\dist\lib\ruby\site_ruby\1.8 안에 있는 모든 파일을 복사하면 된다.
단순하게 Gtk만 사용할 경우에는 런타임을 다 설치할 것 없이, C:\GTK\bin에 들어 있는 dll들과 config로 끝나는 파일들, reconfig.bat, gdk-pixbuf-query-loaders.exe. gtk-query-immodules-2.0.exe, pango-querymodules.exe 파일을 bin 디렉토리에 복사하고, C:\GTK\lib 안의 gtk-2.0, pango 디렉토리를 lib에, C:\GTK\etc의 fonts, gtk-2.0, pango를 etc에, C:\GTK\share에 sgml, themes, xml을 복사하면 정상적으로 동작한다. 이에 관한 내용은 사실, 좀 더 찾아보고 시도한 다음에 확실하게 할 필요가 있을 듯 하다.
'프로그래밍 > Ruby' 카테고리의 다른 글
| POVIS 자동화 라이브러리 (0) | 2010/10/06 |
|---|---|
| Fortune Delivery (0) | 2010/06/17 |
| Ruby-GNOME2-0.19.4 for Windows (0) | 2010/04/27 |
| ruby 동영상 플레이어 라이브러리 with DirectShow (0) | 2010/04/18 |
| Ruby-GTK2 0.19.3 for Windows (0) | 2010/04/13 |
| 네이트온 자동 로그인 (0) | 2009/12/04 |
ruby-gnome2-0.19.4.zip
