Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Visual C++ 10でif_rubyを有効にしたVimをビルドする

$
0
0

Visual C++ 10でif_rubyを有効にしたVimをビルドする

概要

Windows で Ruby を使う場合、おそらくRubyInstallerで提供されているバイナリを使うのが最も一般的でしょう。(他には、ActiveScriptRubyもありますが。)

Windows 版の Vim で if_ruby を有効にしてビルドする場合、通常は Ruby のバイナリをビルドするのに使った物と同じコンパイラを使う必要があります。RubyInstaller で提供されているバイナリは、MinGW-w64でビルドされているため、それを使うには通常は Vim も MinGW(-w64) を使ってビルドする必要があります。

ここでは、VC10 を使って Vim をビルドしつつ、if_ruby で RubyInstaller のバイナリを使えるようにするための方法を説明します。(ただし、保証された方法ではありません。)

Ruby の DLL ファイル名とインクルードディレクトリ名

Ruby をビルドすると、コンパイラと Ruby のバージョンに応じて、DLL ファイル名やインクルードファイルのディレクトリ名などが変わります。このため、Ruby とアプリをビルドする際のコンパイラが異なると、アプリのビルドが通りません。

RubyInstaller 2.1.4 の場合を例に説明します。

DLL ファイル

Ruby の DLL ファイルは、以下のディレクトリに格納されています。

C:\Ruby21\
    + bin\
        + msvcrt-ruby210.dll

DLL のファイル名のうち、msvcrtは、ランタイムライブラリの名前を示しています。MinGW では msvcrtですが、VC10 では msvcr10です。

210は Ruby の API バージョンを示しています。(Ruby 2.1.4 の API バージョンは、2.1.0 です。)

なお、64bit 版の場合は、頭に x64-がつき、x64-msvcrt-ruby210.dllなどのファイル名になります。

インクルードファイル

インクルードファイルは、以下のディレクトリに格納されています。

C:\Ruby21\
    + include\
        + ruby-2.1.0\
            + i386-mingw32\
            |   + ruby\
            |       + config.h
            + ruby\
            |   + ruby.h, etc.
            + ruby.h

2.1.0は Ruby の API バージョンを示しています。

i386-mingw32はプラットフォームを示しています。VC10 32bit の場合は、i386-mswin32_100になり、VC10 64bit の場合は、x64-mswin64_100になります。末尾の 100は VC のバージョンを示しています。

config.hは、コンパイラに依存した設定が書かれたヘッダファイルで、MinGW と VC10 では内容が異なります。

これらの名前を無理やり合わせた上で、適切な config.hを用意することで、アプリを VC10 でビルドしても、MinGW でビルドした Ruby のバイナリを組み込んで使うことが出来るようになります。前述の通り、これは保証された方法ではないことに注意してください。

ビルド手順

まずは、VisualStudio10を使ってのビルド方法を読んで、通常のビルド方法を把握しておいてください。

Ruby

VC10 用の config.hを用意するため、Ruby を途中までビルドします。

まずは、Ruby のソースコードを取得します。(C:\workでの作業を想定)

> cd \work
> git clone https://github.com/ruby/ruby.git
> cd ruby
> git fetch --tags

普通に git clonegit pullでコードを取得した場合、タグが一部しか取得できないようで、全てのタグを取得するには git fetch --tagsを使う必要があります。

次に、目的のバージョンのコードをチェックアウトします。

> git checkout v2_0_0_594  (Ruby 2.0.0-p594 の場合)
> git checkout v2_1_4      (Ruby 2.1.4 の場合)

VC10 のコマンドプロンプトを開き、以下の2つのコマンドを実行します。

> win32\configure
> nmake .config.h.time
Creating config.h
.ext\include\i386-mswin32_100\ruby\config.h updated

これで、VC10 用の config.h.ext\include\<プラットフォーム>\ruby\に作成されます。(Ruby 本体のビルドは不要です。)

Vim

次は Vim のビルドです。Vim のソースコードディレクトリに移動(例: cd \work\vim\src)し、以下のコマンドを実行してください。(行末の ^は、行の連結。)

32bit の場合:

> nmake -f Make_mvc.mak ^
    RUBY=c:\work\ruby DYNAMIC_RUBY=yes RUBY_VER=21 RUBY_VER_LONG=2.1.0 ^
    RUBY_INSTALL_NAME=msvcrt-ruby$(RUBY_API_VER) RUBY_PLATFORM=i386-mswin32_100 ^
    RUBY_INC="/I $(RUBY)\include /I $(RUBY)\.ext\include\$(RUBY_PLATFORM)" ^
    WINVER=0x0500

64bit の場合:

> nmake -f Make_mvc.mak ^
    RUBY=c:\work\ruby DYNAMIC_RUBY=yes RUBY_VER=21 RUBY_VER_LONG=2.1.0 ^
    RUBY_INSTALL_NAME=x64-msvcrt-ruby$(RUBY_API_VER) RUBY_PLATFORM=x64-mswin64_100 ^
    RUBY_INC="/I $(RUBY)\include /I $(RUBY)\.ext\include\$(RUBY_PLATFORM)" ^
    WINVER=0x0500

ここで使われているオプションは次の通りです。

  • RUBY: Ruby のディレクトリ。上記で取得した Ruby のソースコードのディレクトリを指定する。
  • DYNAMIC_RUBY: ダイナミックリンクにするかどうか。通常は yesを指定する。
  • RUBY_VER: Ruby バージョン。ドットを省いて、先頭の2桁を指定する。
  • RUBY_LONG_VER: Ruby API バージョン。ドット付きで指定する。
  • RUBY_API_VER: Ruby API バージョン。ドットを省いた形式。RUBY_LONG_VERの値を元に自動的に設定されるため、手動での設定は不要。
  • RUBY_INSTALL_NAME: DLL のベースファイル名に相当。RubyInstaller の DLL 名に合わせて指定する。
  • RUBY_PLATFORM: Ruby のプラットフォーム名。RubyInstaller のプラットフォーム名ではなく、VC10 のプラットフォーム名を指定する。
  • RUBY_INC: Ruby のヘッダファイルのディレクトリ。RubyInstaller のディレクトリではなく、上記で取得した Ruby のソースコードの中のディレクトリを指定する。
  • WINVER: これを 0x0500以上の値に設定しないと、Ruby 2.1.0 以降では iphlpapi.hでコンパイルエラーになる。

Ruby 以外のオプションは、上記のサイトを参考に適宜追加してください。

動作確認

> path C:\Ruby21\bin;%path%     (Ruby の DLL に PATH を通す)
> gvim                          (ビルドした Vim を起動)
:ver                            (+ruby/dyn が含まれていることを確認)
:ruby print RUBY_VERSION        (Ruby のバージョンを表示)
2.1.4

参考情報

Ruby のバージョンと API バージョン

Ruby VersionRuby API Version
1.9.1 - 1.9.31.9.1
2.0.02.0.0
2.1.X2.1.0

Ruby のインストール名とプラットフォーム名

CompilerRUBY_INSTALL_NAMERUBY_PLATFORM
MinGW 32bitmsvcrt-rubyXXXi386-mingw32
MinGW 64bitx64-msvcrt-rubyXXXx64-mingw32
VC10 32bitmsvcr100-rubyXXXi386-mswin32_100
VC10 64bitx64-msvcr100-rubyXXXx64-mswin64_100

XXX は、ドット省略形式の Ruby API バージョン。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>