Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vaiorabbit/5ac5b08c93660f77f2a6 to your computer and use it in GitHub Desktop.
Save vaiorabbit/5ac5b08c93660f77f2a6 to your computer and use it in GitHub Desktop.
ローカルで最新のWindows版 ruby をつくる (RubyInstaller を使って)

[2014-05-17] Windows 7 で Ruby 2.1.2 がビルドできることを確認。

>ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [i386-mingw32]

ビルド環境

RubyIntaller のリポジトリを取得

> git pull https://github.com/oneclick/rubyinstaller.git

ビルド

作業前にいくつか設定の変更をしておく。

/rubyinstaller/config/ruby_installer.rb:

  • 'Ruby21 = OpenStruct.new(...):' という行付近にある 'configure_options' の内容を

        "CPPFLAGS='-DFD_SETSIZE=2048'"
    

    から

        "CPPFLAGS='-DFD_SETSIZE=2048 -DHAVE_STRUCT_TIMEZONE=1'"
    

    に変更。

  • Ruby/Tk は個人的に使わないので 'if ENV['NOTK'] then ... end':' 付近に

        Ruby21.dependencies.delete(pkg)
    

という行を追加。

  • コマンドプロンプトを開いて:

    > set NOTK=1
    > rake ruby21
    

rakeはビルド終了後一回途中で止まる→もう一回'rake ruby21'で最後まで走る

  • 結果:
    • /rubyinstaller/sandbox/ruby21_mingw に一式出来上がる ⇒ 好きなフォルダにコピーして終了
    • /rubyinstaller/sandbox/devkit にビルドに使った環境一式がある ⇒ 次の節へ

DevKitをパッケージ化しておく

これは拡張ライブラリのビルド用に使う。

> rake devkit 7Z=1

内容が

/rubyinstaller/pkg/DevKit-tdm-32-4.5.2-20140517-1657.7z

のようなパッケージにまとめられる。

DevKitの使い方

.7zの中身を

C:/Users/me/Programs/RubyInstaller-DevKit

と展開しておく

gem で拡張ライブラリを作るパッケージをインストールする前に、DevKitの場所を下記の手順で設定しておく:

(初回のみでOK)

> cd C:/Users/me/Programs/RubyInstaller-DevKit
> ruby dk.rb init

config.yml というファイルができあがるので内容を編集。rubyインタプリタへの絶対パスを記入する。c:/Users/me/Programs/ruby にあるなら config.yml の最後の行に

- c:/Users/me/Programs/ruby

と書けばOK.

(以下はパスを通す必要があるときに随時)

> cd C:/Users/me/Programs/RubyInstaller-DevKit
> devkitvars.bat

以上を済ませておくと 'gem install [パッケージ名]' のときに RubyInstaller-DevKit 以下のツールを使ってビルドが実行される。

64bit対応

64bit版をビルドしたいときは:

> rake ruby21 dkver=mingw64-64-4.7.2
> rake devkit 7Z=1 dkver=mingw64-64-4.7.2

(/rubyinstaller/rubyinstaller/config/compilers/mingw64.rb の内容を参照)

@luislavena
Copy link

@vaiorabbit you need to use mingw64-32-4.7.2 devkit to avoid the HAVE_STRUCT_TIMEZONE=1

rake ruby21 dkver=mingw64-32-4.7.2

@vaiorabbit
Copy link
Author

@luislavena thanks :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment