From: Hikaru Seki Date: 2016-03-21T05:57:07+09:00 Subject: [ruby-list:50288] Ruby Windows環境でのビルドについて 関です。 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: '' の後に '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