x64-mswin64版Ruby 2.0.0-preview1をVisual Studio 2012 for Desktopでビルドした
前回 x64-mswin64版Ruby 1.9.3をビルドした - 単なる日記@はてな に懲りず、今回もx64-mswin64版Rubyをビルドしましたのでメモします。記事の内容も前回に沿った形にします。今回はわりと楽でした。
環境はこんな感じ:
- Windows 7 SP1
- Visual Studio 2012 Express for Desktop
使用するソフトウェアはこんな感じ:
- libiconv-1.11 (artonさんのASRのページから入手)
- libxml2-2.9.0
- libxslt-1.1.26
- openssl-1.0.1c
- readline-4.3-2 (artonさんのASRのページから入手)
- yaml-0.1.4 (libyaml)
- zlib-1.2.5 (artonさんのASRのページから入手)
目標:
資料:
- artonさんのRuby環境構築講座Windows編(Ruby環境構築講座 Windows編 - 達人出版会で買えるよ)
- その他ググッた結果。
Visual Studio 2012 Express for Desktop
前回使用したVisual Studio 2010 Expressは64bitの開発環境を用意するのが大変でしたが、今回のVisual Studio 2012 Express for Desktopは噂によると最初から64bitの開発環境が用意されているらしく(かつWindows SDKなどを後から入れる必要もないらしい)、実際何もせずに済んだのでたいへん助かりました。
関連ライブラリのインストール
libiconv、readline、zlibはRuby環境構築講座Windows編の記述通りに進めました。
libyamlはプラットフォームにx64を加えてからビルドしました。SDKは勝手に最新のものを使うようになっていましたのでそのまま。
OpenSSLはVC-WIN64Aでビルドしましたが、nasmでのアセンブル中にエラーが出まくるため、Ruby環境構築講座Windows編の記述通りのms\do_nasm.batではなくms\do_win64a.batを使いました。
libxml2とlibxsltはのちほどNokogiriをインストールするために必要なもの。win32と同じビルド方法が使えましたが、libxml2はヘッダファイルのインストール先が微妙に変わったため、libxsltのビルド時にヘッダファイルの位置を指定しました。
Rubyのインストール
前もってよしだむさんがRedmineへ報告されたバグ報告からパッチをもらって当てます。よしだむさんに感謝。
- Bug #7332: mswin64でminiruby.exeがSEGV - Ruby trunk - Ruby Issue Tracking System
- Backport #7333: VS2012でリンクエラー - Backport193 - Ruby Issue Tracking System
前回同様、都合によりRuby環境構築講座Windows編での方法と異なりインストール先のbinをPATHに加えずに進めたため、configureに--with-opt-dirを指定して関連ライブラリの検出を行えるようにしました。ちなみに--prefixで指定するパスはバックスラッシュ(半角円マーク)区切りですが、--with-opt-dirで指定するパスはスラッシュ区切りにしないと上手くいかないことが過去にありましたので、前回に引き続き今回もそうしました。
もちろん --platform=x64-mswin64 を忘れずに。
ちなみに前回はコマンドプロンプトで手打ちしててよく間違えてましたけど、今回はビルド用バッチファイルを用意しました。
build.bat
@ECHO OFF CALL %~dp0build-env.bat SET LOGFILE=%~dp0build.log COPY NUL %LOGFILE% ECHO libiconv ECHO ***** libiconv ***** >>%LOGFILE% PUSHD libiconv-1.11.1 %NMAKE% -f makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD >>%LOGFILE% 2>&1 %NMAKE% PREFIX=%RUBY_PREFIX% -f makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD install 2>&1 >>%LOGFILE% 2>&1 POPD ECHO readline ECHO ***** readline ***** >>%LOGFILE% PUSHD readline-4.3-2\win32 %NMAKE% >>%LOGFILE% 2>&1 %NMAKE% prefix=%RUBY_PREFIX% install >>%LOGFILE% 2>&1 POPD ECHO zlib ECHO ***** zlib ***** >>%LOGFILE% PUSHD zlib-1.2.5 %NMAKE% -f win32\Makefile.msc >>%LOGFILE% 2>&1 COPY *.dll %RUBY_PREFIX%\bin >>%LOGFILE% 2>&1 COPY *.lib %RUBY_PREFIX%\lib >>%LOGFILE% 2>&1 COPY zlib.h %RUBY_PREFIX%\include 2>&1 >>%LOGFILE% 2>&1 COPY zconf.h %RUBY_PREFIX%\include 2>&1 >>%LOGFILE% 2>&1 POPD ECHO openssl ECHO ***** openssl ***** >>%LOGFILE% PUSHD openssl-1.0.1c perl Configure VC-WIN64A --prefix=%RUBY_PREFIX% >>%LOGFILE% 2>&1 CALL ms\do_win64a.bat >>%LOGFILE% 2>&1 %NMAKE% -f ms\ntdll.mak >>%LOGFILE% 2>&1 %NMAKE% -f ms\ntdll.mak install >>%LOGFILE% 2>&1 POPD ECHO libyaml ECHO ***** libyaml ***** >>%LOGFILE% PUSHD yaml-0.1.4 COPY win32\vs2008\x64\Release\yaml.dll %RUBY_PREFIX%\bin >>%LOGFILE% 2>&1 COPY win32\vs2008\x64\Release\yaml.lib %RUBY_PREFIX%\lib >>%LOGFILE% 2>&1 COPY include\yaml.h %RUBY_PREFIX%\include >>%LOGFILE% 2>&1 POPD ECHO libxml2 ECHO ***** libxml2 **** >>%LOGFILE% PUSHD libxml2-2.9.0\win32 cscript configure.js prefix=%RUBY_PREFIX% >>%LOGFILE% 2>&1 %NMAKE% -f Makefile.msvc >>%LOGFILE% 2>&1 %NMAKE% -f Makefile.msvc install >>%LOGFILE% 2>&1 POPD ECHO libxslt ECHO ***** libxslt **** >>%LOGFILE% PUSHD libxslt-1.1.27\win32 cscript configure.js prefix=%RUBY_PREFIX% include=%RUBY_PREFIX%\include\libxml2 >>%LOGFILE% 2>&1 %NMAKE% >>%LOGFILE% 2>&1 %NMAKE% install >>%LOGFILE% 2>&1 POPD ECHO ruby ECHO ***** ruby ***** >>%LOGFILE% PUSHD %RUBY_VER% PUSHD . CALL win32\configure.bat --prefix=%RUBY_PREFIX% --target=x64-mswin64 --disable-win95 --with-out-ext=tk --with-opt-dir=%RUBY_PREFIX_SLASH% >>%LOGFILE% 2>&1 POPD %NMAKE% >>%LOGFILE% 2>&1 %NMAKE% install >>%LOGFILE% 2>&1 POPD ECHO bat ECHO ***** bat ***** >>%LOGFILE% COPY ruby_console.bat %RUBY_PREFIX% >>%LOGFILE% 2>&1 PAUSE
build-env.bat
CALL "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64 REM SET RUBY_VER=ruby-1.9.3-p327 SET RUBY_VER=ruby-2.0.0-preview1 SET RUBY_PREFIX=D:\private\tools\%RUBY_VER% SET RUBY_PREFIX_SLASH=D:/private/tools/%RUBY_VER% SET NMAKE=nmake /nologo PATH %PATH%;%RUBY_PREFIX%\bin
ruby console的なものを用意する
前回はバッチファイルを2つ用意しましたが、よくよく考えるとバッチファイルは一つだけでも大丈夫でした。
@ECHO OFF SET PATH=%~dp0bin;%PATH% %ComSpec% /k "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86_amd64
Nokogiriのインストール
gem install nokogiri
でスムーズにインストールできました。楽ちんだわあ。
2012-10-30
今日は半日くらい外向きの文章を書いては消し、書いては消ししてた。
C++でmain()より先に実行される処理をライブラリ化したい - QA@IT
ひとつは上記リンク先で、プログラミングのお悩み相談。起きている問題と、本当に解決したい問題が別なのでややこしい。ただ、どちらにしろ解決したい問題ではある。
もうひとつは仕事で某所へ質問を書いた。ただ、これが最初の文を書いている内、自分の書いた内容に疑問を持って検証したらそれ自体には問題がなく、代わりに別の問題が起きたのでそれの質問を書いている内に…みたいなことがいくつか連続して、最終的にはコンパクトな質問になった。
よく頭で悩んでいることを文章に起こしてみると矛盾が見つかったり解決方法が浮かび上がったりすることがあって、今回も同様だった。ただ一番の問題は、悩んでばかりで仕事が進んでいないことなんだがw いや笑い事ではないか。
「iMac 1TB Seagate ハードドライブ交換プログラム」についてAppleへ問い合わせた
交換/リペアエクステンションプログラム - Apple サポート
Appleから上記プログラムのお知らせが届いた。会社のiMacがそのプログラムの対象となるらしいが、実は会社のiMacのHDDを今年6月に交換したばかり。4ヶ月くらいでまた交換ってのもどうかと思ったり、上記リンク先に返金も受け付けてくれそうなことが書いてあったので、ひとまずAppleサポートに連絡してみた。
電話に出たサポートの担当者から聞いた感じでは、とりあえず交換するか、とりあえず返金の手続きをすすめるくらいしかできることがなく、手元の交換済みHDDが大丈夫なものなのかどうかとい細かい情報はまだ持っていないようだった。
こちらとしては現状普通に動いてるし、サポートからは来年春頃までプログラムが継続されるっぽく*1、その頃にはマズいハードの詳細もつかめるんじゃないかみたいな雰囲気だったので、また後日改めて連絡するってことにした。
*1:と、口頭では聞いたのだが、実際にはわからない。
自宅の居間のテレビを買い換えた
自宅の居間に置いてある液晶テレビ(ソニー KDL-23A10)が不調のため、母からの希望でテレビを買い換えた。
当初は同じソニーの26インチのものにしようとしたが若干お高めだったので、店頭でシャープ製のものに決めた。ただし、26インチのテレビが軒並み品切れで、同じシャープの32インチのもの(シャープ LC-32V7)にした。後日自宅のテレビを引き取ってもらうべくリサイクルの手続きもしておいた。
とりあえずテレビを配置、BDデッキとCATVのSTBからの入力をテレビで確認した。画面が大きくなって母もご満悦の様子。二人して何回も画面のでかさを確認しあったりとか。
自宅で留守番の間、テレビのDNLAプレイヤー機能を使ってnasneに保存された番組を見てた。でかい画面で氷菓 #21を視聴しながら僕もご満悦。なんかすげー便利な世の中になったものだなあ。
シャープ 32V型 液晶 テレビ AQUOS LC-32V7-B ハイビジョン 2012年モデル
- 出版社/メーカー: シャープ
- 発売日: 2012/02/10
- メディア: エレクトロニクス
- 購入: 2人 クリック: 6回
- この商品を含むブログを見る
nasne (ナスネ) (CECH-ZNR1J)【メーカー生産終了】
- 出版社/メーカー: ソニー・コンピュータエンタテインメント
- 発売日: 2012/08/30
- メディア: Video Game
- 購入: 7人 クリック: 513回
- この商品を含むブログ (99件) を見る
++age;
日付が変わってしまいましたが、昨日42歳になりました。去年や一昨年に比べてあまり感慨もなく誕生日を迎えましたが、まあこういう穏やかな誕生日もいいんじゃないでしょうか。ちょうど仕事の方も落ち着き始めてるので、昨日は平日でありながらわりとのんびりとした一日を過ごせました。
仕事では去年の誕生日以降からするとPSPが3本、DSが1本、iPhoneのお手伝いが1本と、発売タイトル数からするとわりと働いた気がします(笑)。ただ仕事の遅さというか集中力の無さがひどくて、しかもそれがあとになって響いてしまって会社に泊まって作業することが多くなりました。色々言い訳はあるんですが結果を出さんと意味が無いので、まあ今後は頑張りますということで勘弁。
プライベートの方は正直ほとんど記憶に無いです。多分Twitterなどに書き残したものを読んだり、こんなことあったよねなどと話しかけられないと思い出せない状態です。ああ、直近の大きな話題としてはMacBook Pro with Retina Display(SSDが512GBの方)を買いました。
なんか厄年(本厄)らしいので、ひっそりと暮らしていきたいと思います。そんなこんなで、今後ともよろしくおねがいします。
x64-mswin64版Ruby 1.9.3をビルドした
2012-07-03追記: NokogiriのGitHubのURLが変更されたことへの追従。https://github.com/tenderlove/nokogiri → https://github.com/sparklemotion/nokogiri
以前から何度も玉砕している、x64-mswin64版Ruby 1.9.x(今回は1.9.3-p125)のビルドに成功したので、やったことをメモっておく。
環境はこんな感じ:
使用するソフトウェアはこんな感じ:
- libiconv-1.11 (artonさんのASRのページから入手)
- libxml2-2.7.8
- libxslt-1.1.26
- openssl-1.0.0g
- readline-4.3-2 (artonさんのASRのページから入手)
- yaml-0.1.4 (libyaml)
- zlib-1.2.5 (artonさんのASRのページから入手)
目標:
資料:
- artonさんのRuby環境構築講座Windows編 (Ruby環境構築講座 Windows編 - 達人出版会で買えるよ)
- その他ググッた結果。
Visual C++ 2010 Express
正直64bitの開発環境を用意するところが一番時間がかかった。
などを踏まえてインストールしていったら最後のCompiler Updateができない(Windows SDKを見つけられない)とかいわれてVCのインストールからやり直したりした。
以下ライブラリやRubyのビルドの際は、vcvars32.batやvsvars32.batに相当するもの(C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd)を実行することで64bit開発環境のための設定を行えた。
関連ライブラリのインストール
libiconv、readline、zlibはRuby環境構築講座Windows編の記述通りに進めた。
libyamlはプラットフォームにx64を加えて、かつWindows SDK 7.1を使用するように設定を変更した上でビルドした。
- How to: Configure Visual C++ Projects to Target 64-Bit, x64 Platforms | Microsoft Docs
- Visual C++ 2010 Expressで64bitコンパイル - torutkのブログ
OpenSSLはVC-WIN64Aでビルドした。
libxml2とlibxsltはのちほどNokogiriをインストールするために必要なもの。win32と同じビルド方法が使えた。
Rubyのインストール
都合によりRuby環境構築講座Windows編での方法と異なりインストール先のbinをPATHに加えずに進めたため、configureに--with-opt-dirを指定して関連ライブラリの検出を行えるようにした。ちなみに--prefixで指定するパスはバックスラッシュ(半角円マーク)区切りだが、--with-opt-dirで指定するパスはスラッシュ区切りにしないと上手くいかないことが過去にあったので、今回もそうした。
また、--platform=x64-mswin64を付けた(これを付けずに何度かビルドして泣きそうになった)。http://yanmo.info/?p=85
> win32\configure.bat --prefix=D:\private\tools\ruby-1.9.3-p125 --target=x64-mswin64 --with-opt-dir=D:/private/tools/ruby-1.9.3-p125
あとはwin32と同様にコンパイルとインストールを行えば良い。
ruby console的なものを用意する
インストールしたRubyのbinをPATHに追加して、かつVC 64bitの設定も行ったあとDOS窓を開きっぱなしにするため、二段構えのBATファイルを用意する。
REM ruby_console.bat @ECHO OFF CMD /k %~dp0\ruby_console_start.bat
REM ruby_console_start.bat @ECHO OFF PATH=%~dp0bin;%PATH% "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd"
Rubyのインストール先のフォルダにこの2つのBATファイルを置いて、一つ目のBATファイルを実行する。
Nokogiriのインストール
いくつかの理由によりnative buildが失敗するので、修正したgemファイルを作成してからgem installした。修正内容はこの記事を書く前にpull requestしておいたら、この記事を書いている最中にすでに取り込まれててビビった。Fix to build for x64-mswin64 by iwadon · Pull Request #629 · sparklemotion/nokogiri · GitHub
Ninjaのテストにgtest 1.6.0以降を使う
NinjaはテストのためにGoogle C++ Testing Framework(以下gtest)が使われているが、当初はシステムにインストールされたgtestをテストプログラム(ninja_test)のビルドに利用されていた。しかしgtestの最新版である1.6.0以降はシステムへのインストールできなくなり、gtestを使う各プロジェクト毎にビルドする形になった。その理由はgtestのFAQにて説明されている。
Why is it not recommended to install a pre-compiled copy of Google Test (for example, into /usr/local)?
僕が使っている環境(Mac OS X + Homebrew)でもgtest 1.5.0を使用できるが、gtest 1.6.0とうっかり混ざるとコンパイルエラーになり、かつ今自分がgtest 1.5.0とgtest 1.6.0のどちらを利用しているのか判別つかないことが多々あり、自分の環境ではgtest 1.6.0で統一しようと考えた。
そこでNinjaでもgtest 1.6.0を使うことになるが、2012-01-06現在のNinjaではconfigure.pyからgtestを展開したディレクトリを指定するオプションが用意されているため、そのオプションを利用する。
% ./configure.py --help Usage: configure.py [options] Options: -h, --help show this help message and exit --platform=PLATFORM target platform (linux/freebsd/mingw/windows) --host=HOST host platform (linux/freebsd/mingw/windows) --debug enable debugging flags --profile=TYPE enable profiling (gmon/pprof) --with-gtest=PATH use gtest unpacked in directory PATH --with-python=EXE use EXE as the Python interpreter % ./configure.py --with-gtest=./gtest-1.6.0 % ./ninja ninja_test
これでninja_testが出来上がる。