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

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

2009. 3. 9. 23:15
피진을 쓰는 중에, 누가 말을 걸어도 효과음이 안나서 그러려니- 하고 살았는데, 최근에 실은 소리가 안나는게 정상이 아니고 사운드 설정 쪽이 맛이 갔다는것을 깨닳았다.

그래서 이리저리 구글 등을 찾는 뻘짓을 하면서 해결법을 모았다.

  1. (gentoo 같이 Gnome을 직접 컴파일해서 설치한 경우에 해당)
    esd 지원이 포함되었는지 확인한다. 없으면 포함시킨다.
  2. pulseaudio 설정파일(/etc/pulse/system.pa)을 열어 다음 네 행을 추가한다. (비슷한 것이 보이는 곳 근처에 추가하는 것이 좋을 것이라고 생각한다.)
    (만약 pulseaudio가 개인 계정 권한으로 돌아가고 있다면 default.pa가 될 것이다.)
     .ifexists module-esound-protocol-tcp.so
    load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1
    .endif
    load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
  3. 그놈 소리 설정 프로그램을 통해서 사운드 출력을 ESD나 PulseAudio 중 하나로 설정한다.
  4. 이제 ESD 쓰는 어플들도 소리 잘 난다.
참조: http://www.pulseaudio.org/wiki/PerfectSetup, http://kldp.org/node/91425
2008. 12. 9. 04:57

Ruby-GNOME2

프로그래밍/Ruby 2008. 12. 9. 04:57
GUI 어플을 짜긴 해야겠는데 C는 이제 귀찮고, 기존 스크립팅 언어 중에 아무거나 택해서 짜보기로 한 것이 꽤 전 일이다.

그때 당시 Ruby on Rails를 시작으로 해서 루비에 상당히 재미를 붙이고 있던 시점이라, PyGTK같은 툴이 루비에도 있나 한번 뒤져봤었다.

거기서 찾은 것이 Ruby/Tk 인데, 이건 너무나도(후략)

루비용 GTK 바인딩이 있지 않을까 하고 뒤져보다가, Ruby-GNOME2를 발견했다.


아직 모든 GTK API가 구현된 것은 아닌거 같지만, 일단 GUI 어플을 짜는 데는 큰 불편함이 없다.

리눅스용 ruby-gnome2는 적당히 제공되는 패키지 관리자에서 찾아 깔거나(우분투, 젠투는 기본 패키지중에 있다. emerge나 apt-get으로 간단히 설치가 가능하다.) 공식 홈에서 소스를 받아 설치하면 될 것이다.

윈도용은 공식 홈페이지에서 설치 프로그램을 받아다 깔면 되는데, 이게 찾기 상당히 귀찮게 되어 있다는 단점이 있다. Install Guide에서 다운받을 수 있는 링크가 있으므로 이 쪽을 쓰면 될 듯 하다. 설치시 반드시 PATH관련을 설정하도록 해야 제대로 사용이 가능하다.

기본적인 사용법은 OOP 언어인 루비에 맞게끔 네임스페이스 역할을 하는 모듈들, 그리고 각 클래스들로 형태가 조금씩 다르긴 하지만 원래 GTK와 크게 차이가 나지는 않는다.

가끔 조심할 부분이 있는데, 현재 윈도용은 최신판이 0.16이기 때문에 0.18용 레퍼런스와 약간 맞지 않는 문제가 있다. 이후 버전업이 되면 해결될 것 같다.

사용법은 그리 어렵지 않기 때문에 공식홈페이지의 튜토리얼만 잠깐 봐도 GTK에 관한 지식이 전혀 없더라도 어느 정도 프로그래밍이 가능한 레벨이다.

단지 조금 아쉬운점은, Ruby-GNOME2에 한한 이야기는 아니지만- GTK 자체가 설계상 약간의 불편한점이 있는 듯 하다. 크기조절이 상당히 비직관적이다!

첨부파일로, 현재 제작중인 사칙연산 연습 프로그램을 달아둔다. Ruby-GNOME2를 설치하고 실행해야 제대로 동작할 것이다. 테스트 환경은 Ruby 1.8.6, Ruby-GNOME2 0.16.0 에서 테스트를 했고, 아직 일부 문제가 있다 -_-
ps1. 아직 완성도 안된걸 올리는 이유는 숙제중이기 때문이다 -_-
ps2. 왜 첨부파일 아이콘이 알집 아이콘이지 -_- 맘에 안든다.

'프로그래밍 > Ruby' 카테고리의 다른 글

Ruby-GNOME2 0.18 One-Click Installer for Windows  (0) 2009.10.20
rubyscript2exe 로 ruby-gnome2를 이용한 어플 패킹하기  (0) 2009.02.02
GMemRB 공개  (0) 2009.02.01
Ruby-GD2 in WIN32  (0) 2008.12.23
Ruby-GNOME2  (0) 2008.12.09
Ruby on Rails  (0) 2008.05.28