[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