Star Rubyのインストール

Star Rubyという2Dのゲーム作りの環境を提供してくれるライブラリをMavericksにインストールしてみた。

環境

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]

手順

  • Homebrewで依存するライブラリをインストール。
$ brew update	# Homebrew本体を最新版にアップデート
$ brew upgrade	# Homebrewが管理する既存のライブラリを最新版にアップグレード
$ brew doctor	# ErrorがなければOK WarningはOK

$ brew install sdl
$ brew install sdl_mixer
$ brew install sdl_ttf
$ brew install libpng
$ brew install fontconfig
  • Gemでrsdlをインストール。
$ sudo gem update --system	# Gem本体を最新版にアップデート
$ sudo gem install rsdl
$ cd ~/Downloads
$ git clone git://github.com/hajimehoshi/starruby.git
$ cd starruby
  • ソースコードから自分でmake installする必要があるのだが、makeの段階でエラーが発生...。
$ ruby extconf.rb
checking for png.h... yes
checking for zlib.h... yes
checking for Mix_OpenAudio() in -lSDL_mixer... yes
checking for TTF_Init() in -lSDL_ttf... yes
checking for fontconfig/fontconfig.h... yes
checking for FcInit() in -lfontconfig... yes
checking for main() in -lGL... no
creating Makefile

$ make
linking shared-object starruby.bundle
clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
make: *** [starruby.bundle] Error 1
  • どうやら自分の環境では、Makefile(87行目)の'-multiply_definedsuppress'というオプションが使えなくなっている模様。
$ grep -n multiply_definedsuppress Makefile
87:dldflags = -undefineddynamic_lookup -multiply_definedsuppress 
  • いろいろ試してみたのだけど、一向にエラーは消えてくれない...。
  • こんなオプション、指定しなければいいのに!と思って削除してみると、
$ cat Makefile | sed 's/-multiply_definedsuppress//' > Makefile~

$ mv -f Makefile~ Makefile

$ make
linking shared-object starruby.bundle

$ sudo make install
Password:
/usr/bin/install -c -m 0755 starruby.bundle /Library/Ruby/Site/2.0.0/universal-darwin13
installing default starruby libraries

どうやら、インストールできてしまった感じ!

サンプルの起動

  • 果たして、ちゃんと動くのか?
  • rsdlコマンドで起動してみる。
    • Star Ruby環境を利用する時は、rubyコマンドの代わりに、rsdlコマンドを使って起動するらしい。
$ cd samples
$ rsdl helloworld.rb

問題なく、動いている感じ!

requireの問題

  • しかし、もうちょっと本格的なサンプル falling_blocks.rb を起動しようとするとエラーが...。
$ rsdl falling_blocks.rb
/Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- falling_blocks/model (LoadError)
	from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from falling_blocks.rb:2:in `
'
  • カレントディレクトリをrequireする場合は、先頭に「./」を付加しておけばOKらしい。
  • この方法でRuby 1.8 から 2.0の最新バージョンまで、問題なく動作するようだ。
  • というわけで、requireの箇所を探して、「./」を追記してみようと思ったのだが...
$ grep -n require falling_blocks.rb falling_blocks/*
falling_blocks.rb:1:require "starruby"
falling_blocks.rb:2:require "falling_blocks/model"
falling_blocks.rb:3:require "falling_blocks/controller"
falling_blocks.rb:4:require "falling_blocks/view"
falling_blocks/model.rb:1:require "falling_blocks/piece"
falling_blocks/model.rb:2:require "falling_blocks/field"
  • 結構、修正箇所が多い...。いちいち修正するの面倒になって来た。
  • 今後、自分がrequireを書く時は「./」を付加することを心掛けるとして、
  • 過去のRubyコードを実行する時に、都度修正するのは面倒くさ過ぎる。
  • そう思って、rubyコマンドのヘルプを眺めると、-Iオプションを発見!
  • -Iオプションは、指定したロードパスを追加してくれるらしい。
  • それは、rsdlコマンドにもちゃんと備わっていた。ならば、問題解決。
  • 「-I.」オプションを付加すれば、コード修正なしで実行できるのだ!
$ rsdl -I. falling_blocks.rb


問題なく、サンプルのテトリスが起動した!