« LinuxでコマンドラインからURLやファイルを開けるxdg-open/gnome-openのメモ | メイン | go言語でgosqlite3を使ってみるためのcgoへのパッチ »

macでもgo言語でX11に描画してみるメモ

最近個人的に興味を持っているのがGoogleのGo言語です。今年に入ってからぼちぼち勉強がてら軽く使ってみているのですが、少し癖はあるものの悪くありません。さほど高速ではありませんが、丁度C言語とスクリプト言語の間の隔たりをカバーできそうな感じです。

go言語のコンパイル/インストールは本家ページのInstalling Goを見ればとても簡単です。リポジトリは積極的にアップデートされているのでたまに問題があることもあるかもしれません。続けて使うなら時折"hg pull ; hg update"して"make"しておいたほうがよさげです。本家でのサポートが決まったということで期待のgccベースのgccgoはコンパイルに結構時間がかかる上、GCがまだとのことなので様子見です。

で表題の件ですが

上のページを発見。go付属のライブラリを使ってx11に絵を描くサンプルを公開されています。これはと思い早速Macでも試そうとしたところexpのx11がないと宣われてしまいました。

少し調べてみると"muddy brown thang"さんのサンプルにも少し修正は必要そうなものの、ext/draw/x11がそもそもコンパイルされていない模様。手動でmake && make installしてみても"unsupported DISPLAY"などと言われ動作しません。

ライブラリをチラ見するとUnixドメインソケットが半分決め打ちになっています。仕方がないのでちょこっと以下のようなパッチをでっち上げてみました。

diff -rw x11.orig/auth.go x11/auth.go
10a11,12
>
>       "strings"
15a18,37
>       if strings.Index(d,"/tmp/launch") >= 0 {
>           return d
>       }
>       if len(d) < 1 || d[0] != ':' {
>               return ""
>       }
>       i := 1
>       for ; i < len(d); i++ {
>               if d[i] < '0' || d[i] > '9' {
>                       break
>               }
>       }
>       return "/tmp/.X11-unix/X" + d[1:i]
> }
>
> func getDisplayNum() string {
>       d := os.Getenv("DISPLAY")
>       if strings.Index(d,"/tmp/launch") >= 0 {
>           return "0"
>       }
27a50
>
75c98
<       display := getDisplay()
---
>       display := getDisplayNum()
diff -rw x11.orig/conn.go x11/conn.go
456c456
<       s, err := net.Dial("unix", "", "/tmp/.X11-unix/X"+display)
---
>       s, err := net.Dial("unix", "", display)

$GOHOME/go/src/pkg/exp/draw/x11に入って上のパッチを適用。手動で

make
make install

後は上の"muddy brown thang"さんから描画するサンプルプログラムをもらってきて、先頭付近のimport文中の"draw"を"exp/draw", "draw/x11"を"exp/draw/x11"に変更してコンパイル

以上。
パッチはいい加減ですがめでたくX11に円が表示されました。

まだ余り調べていませんがCとはリンクできるみたいなので、Objective Cとのリンク方法を調べてみて、うまくいけたらCocoaとの連携、armバージョンでiPhoneアプリが作れたりしたら面白いかもしれません。

トラックバック

このエントリーのトラックバックURL:
http://blog.browncat.org/cgi-bin/mt/mt-tb-abc.cgi/862


コメントを投稿

(お書きになったコメントはすぐには表示されません。ご了承ください。)


About

2010年02月02日 03:32に投稿されたエントリーのページです。

ひとつ前の投稿は「LinuxでコマンドラインからURLやファイルを開けるxdg-open/gnome-openのメモ」です。

次の投稿は「go言語でgosqlite3を使ってみるためのcgoへのパッチ」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

           

カテゴリー

Powered by
Movable Type 3.36

Twitter


最近のエントリー

デル株式会社ads

注目エントリー