[ruby-list:50288] Ruby Windows環境でのビルドについて

From: Hikaru Seki <seki.p.hikaru@...>
Date: 2016-03-20 20:57:07 UTC
List: ruby-list #50288
関です。

artonさんの"Ruby環境構築講座Windows編"を参考に、ruby-2.3.0
のビルドにトライしてみたのですが、既に既知かなと思いつつ、
気になった点以下に報告します。

環境
  OS: Windows 10 Pro(バージョン1511(OSビルド10586.165)(32bit)
  bison: bison (GNU Bison) 2.4.1
  m4:m4 (GNU M4) 1.4.13
  sed: GNU sed version 4.1.5 with Oniguruma (ver. 2.5.0)
  gperf:GNU gperf 3.0.1
  ビルドツール 
    Visual Studio Express 2013 for Windows Desktop(以下VS2013)
    Visual Studio Express 2012 for Windows Desktop(以下VS2012)
  ビルド対象 : Ruby-2.3.0
  
* VS2013でlibiconv-1.11.1のビルドに失敗する。
  VS2013環境でlibiconv-1.11.1をビルドするとwindows\stdbool.hで
  エラーが発生します。
  
  |progreloc.c
  |..\windows\stdbool.h(35) : error C2628: '<unnamed-enum-false>' の後に 
'bool' を続けて記述できません(セミコロン ';' で区切ってあるか確認してく
ださい)。
  |NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 
12.0\VC\BIN\cl.EXE"' : リターン コード '0x2'
  |Stop.
  |NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 
12.0\VC\BIN\nmake.exe"' : リターン コード '0x2'
  |Stop.

   以下の行を削除するとビルドはPASSするようになります。

   libiconv-1.11.1\windows\stdbool.h
   | 33 #ifndef __cplusplus
   | 34 # if !0
   | 35 typedef enum { false = 0, true = 1 } _Bool; <-この行を削除
   | 36 # endif
   | 37 #else
   | 38 typedef bool _Bool;
   | 39 #endif
   | 40 #define bool _Bool

  どうやらVS2013ではC99対応を行ったようですが、それが原因のようです。
  言語仕様を設定するオプションなどはないのか探してみましたが、どうやら
  なさそうです。

  https://social.msdn.microsoft.com/Forums/vstudio/en-US/deb47ce3-92f7-4f7e-919d-a829bf409a9d/c89-in-visual-studio-2013?forum=visualstudiogeneral

  言語ツールなればこそ、後方互換性を残しておくべきかと思うのですが、
  winなら許されるのかな...。
  ということで、以降はビルドツールはVS2012のものを使用する事にしました。

* RubyのビルドでV=1を設定するとビルドに失敗する。
 nmake V=1を実行するとビルドに失敗します。V=1がなければ問題無く
  ビルドできます。

    |         nmake -f enc.mk V="1"  RUBY=".\miniruby.exe -I./lib -I. " 
MINIRUBY=".\miniruby.exe -I./lib -I. "  -l enc
    |        C:\WINDOWS\system32\cmd.exe /E:ON /C .\win32\makedirs.bat 
"enc"
    |'$n' は、内部コマンドまたは外部コマンド、
    |操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    |NMAKE : fatal error U1077: '$n' : リターン コード '0x1'
    |Stop.
    |NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual 
Studio 11.0\VC\BIN\nmake.EXE"' : リターン コード '0x2'
    |Stop.

  enc.mk等一部のmakefileでのV=1の対処がうまくいっていないようです。

   enc.mk
   | 1 V = 0
   | 2 Q1 = $(V:1=)
   | 3 Q = $(Q1:0=@)
   | 4 n=$(NULLCMD)
   | 5 ECHO1 = $(V:1=@$n)
   | ~~~~~~~~~~~~~~~~~~~~~
   | 6 ECHO = $(ECHO1:0=@echo)


* bisonが動かない

  ruby-2.3.0のソースパッケージ自体は正常にビルドできたのですが、
  試しにhttp://svn.ruby-lang.org/repos/ruby/branches/ruby_2_3から
  チェックアウトしたものをビルドしてみたところ、bisonでエラーが発生
  しました。

    | pack.c
    | generating parse.c
    | C:\Users\hikaru\bin\bison.EXE: m4: Invalid argument
    | NMAKE : fatal error U1077: 'C:\Users\hikaru\bin\bison.EXE' : リ
ターン コード '0x1'
    | Stop.

  解決方法を探したところ、以下のページにありました。
    http://venublog.com/2010/02/07/changing-mysql-parser-code-on-windows-build-breaks-due-to-bison/
  m4.exeをrubyソースフォルダ直下にコピーすると動作するようになり
  ました。bison 2.4のバグ?

以上、幾つかひっかかりましたが、ビルド環境はできたので暫く遊んで
みようと思います。

最後に
artonさんの"Ruby環境構築講座Windows編"はとても丁寧に書かれてますね。
これがなかったらここまでたどり着けなかったと思います。大変感謝です。

winで環境つくのはなかなか大変だ...。

ながくなってすいません。
以上、よろしくお願いします。
-- 
関  光
Seki Hikaru
seki.p.hikaru@ae.auone-net.jp

In This Thread