2010. 4. 27. 20:44
지난번에 0.19.3 버전을 컴파일해서 올렸었는데, 그새 새 버전이 나온데다가 인스톨러로 만들어 보겠답시고 다시 삽질해보았다.

... 그러나, 인스톨러로 만드는 법은 여전히 모르겠고, 바뀐 것은 0.19.4 버전을 쓸 수 있게 되었다는 점 정도? -_-....

이번엔 컴파일 방법을 같이 첨부해 두겠다. MinGW, MSYS 등의 외계어들을 보면 두드러기가 나는 분들은 위의 파일과 GNOME2 런타임을 설치하면 사용할 수 있다. 이 런타임은 먼저 http://gladewin32.sourceforge.net/에서 Gtk+ Runtime Environment를 받아서 깐 다음 http://ftp.gnome.org/pub/gnome/binaries/win32/ 에서 필요한 라이브러리를 받아다 C:\GTK에 덮어 풀면 동작한다.

먼저 밝혀 두는 것은, 이 설치 과정은 http://d.hatena.ne.jp/luna_8bit/20090321/1237598167 문서를 참조하였다.

수정사항: CAIRO_PATH를 설정해 주지 않으면 컴파일이 되지 않는데, 까먹고 빼먹었다 -_-
  1. 컴파일을 위한 준비물
    MinGW, MSYS, GTK Development Environment, 그리고 GNOME2 환경을 구성하는 라이브러리들의dev 버전들.
    MinGW는 5.1.6 버전 인스톨러를 받아서 Current 버전들을 설치했다. MSYS는 1.0.11을 다운로드받았다. Gtk+ 2.12.9 Development Environment를 사용하였고, 각각의 라이브러리의 버전은 다음과 같다.
    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
    이 중 poppler-dev는 dependancy 안에 들어가면 존재하고, poppler-data는 http://poppler.freedesktop.org/에서 받을 수 있다.

    시작하기 전에, msys를 띄우고
    $ export PKG_CONFIG_PATH=/c/GTK/lib/pkgconfig
    $ export PATH=/c/GTK/bin:$PATH
    을 수행시켜 환경을 준비시킨다.
  2. Compile and Install ruby
    http://ruby-lang.org/ 에서 루비 최신 버전 소스파일을 받는다. 참고로 이번에는 1.8.7 p249를 받아 컴파일했다.
    다운로드를 받으면 압축을 푼 디렉토리에서 다음을 수행해서 루비를 컴파일한다.

    $ ./configure --prefix=/ruby-gnome2-dev/dist
    $ make
    $ make install

     여기서 --prefix 옵션을 줘서, 모든 작업이 종료된 후 /ruby-gnome2-dev/dist에 ruby와 ruby-gnome2 바인딩을 위치시킬 것이다. 참고로, 여기서 ruby를 다시 컴파일 하는 이유는 루비 홈페이지에서 제공되는 루비는 Microsoft Visual C 컴파일러로 컴파일이 되어 있어서 native extension을 컴파일 할 때 같은 것을 써야만 하기 때문에, ruby-gnome2를 MinGW로 컴파일하기 위해서 ruby를 다시 컴파일하는 것이다.
  3. Compile and Install rcairo
    다음 단계는 rcairo를 컴파일하고 설치하는 것이다. http://cairographics.org/releases/에서 rcairo의 최신 버전을 다운받아 압축을 풀고, 그 디렉토리에서 다음을 수행한다.

    $ /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

     당연한 이야기이지만, 첫 번째 줄에서 줄 바꿈은 없다. 여기서 가정하고 있는 것은 C 드라이버에서 작업중이고 GTK 런타임은 C:\GTK에 설치되었다는 것이다. --with-override-variables=prefix=/c/GTK가 빠지면 이후 pkg-config가 오작동하게 되기 때문에 꼭 필요하다. 위에서는 prefix에 /c/가 없지만 여기서는 필요하다는 것에 주의할 필요가 있다.
  4. 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\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_WIN32
        rb_define_method(gdkDrawable, "hwnd", gdkdraw_get_hwnd, 0);
    #endif
    마지막으로, ruby-gnome2-all-0.19.4\gtk\src 디렉토리에서 다음 명령을 수행해 파일을 하나 만들어 둔다.

    $ ar q libruby-gtk2.a

     이걸 해 두지 않으면, 이 파일을 만들어야할 때 이 파일을 요구하는 어처구니 없는 일이 발생한다 -_-
  5. 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은 하지 않는다.

    $ /c/ruby-gnome2-dev/dist/bin/ruby.exe extconf.rb --ruby=/c/ruby-gnome2-dev/dist/bin/ruby.exe
    $ make

    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으로 설치한다.

    $ make
    $ make install

     최종적으로 만들어지는 라이브러리는 다음과 같다.

    -----

    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

    -----

    이것은 extconf를 수행할 때 뜨는 것으로, 컴파일이 완료됐을 때는 Ignored libraries는 나오지 않는다.
  6. 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  (1) 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
  • Favicon of http://www.jaketjfleece.com/ BlogIcon jaket online 2012.11.06 19:47

    이 게시물은 웹 프로그래머와 관련된 모든 새 개인 홈 페이지의 지원에 좋은 결실이며 그들이 연구하고 연습을 수행해야합니다.