トップ «前の日記(2024-04-20) 最新 次の日記(2024-04-27)» 編集

日々の破片

著作一覧

2024-04-24

_ 2024年版WindowsでRuby 3.2のタールボールビルド方法

・sedとbisonが必須。

GnuWin32だとインストーラ付きだとbisonのバージョンが古い(新しいのも探せばある)ので、Chocolateyを使う。

choco install sed

choco install winflexbison3

それぞれ妙なところにインストールされるのでPATHを通す。

set PATH=c:\programdata\chocolatey\lib\sed\tools;c:\programdata\chocolatey\lib\sed\tools\winflexbison3\tools;%PATH%

bison.exeはwin_bison.exeという名前になっているので、リネームしておく。(おれはcopyで元のexeはそのままにした)

・必須ライブラリ

GitHubのmasterブランチから(まだタールボールに入っていないので)vcpkg.jsonをタールボール展開ディレクトリにコピーする。vcpkgは事前にインストールしておく。(@hsbt GJ!)

vcpkg --triplet x64-windows install

DLLをロード可能にしたりする。

set PATH=(rubyのルート)\vcpkg_installed\x64-windows\bin;%PATH%

set INCLUDE=(rubyのルート)\vcpkg_installed\x64-windows\include;%INCLUDE%

set LIB=(rubyのルート)\vcpkg_installed\x64-windows\include;%LIB%

cl.exeなどはVisual Studio 2022 Communityをインストールして、x64 Native Tools Command Prompt for VS 2022などを開けばOK。

3.2.3は上述の方法でnmakeできたが、3.3.0は失敗する(どうもRubyのライブラリの読み込みに失敗するみたい(c:/Users/〜/ruby-3.3.0/tool/lrama/lib/lrama/counterexamples.rb:1:in `require': cannot load such file -- set (LoadError))だがとりあえず放置中。RUBYLIBとかセットしてもだめなので良くわからん)

もっとも3.2.3もnmake installでcannot load such file -- fileutilsとなるから結局は同じことになる。クリーンインストールはできないのかな。

追記)しょうがないので、binとlib\ruby\3.2.0を作って、.ext\commonやら.libやらをツリーを維持してコピー。rbconfig.rbはタールボール展開ルートにあるのでそれをコピーしてフェイクなインストール済みRubyを作ってnmake installして完了。(以前は、Rubyが存在しない環境でもbisonかbyaccあたりがあればインストールまでできたと思うのだが、gemに委譲した関係かな?

_ Emacsのshellモードでirb

3.3.0になってさらに何か変わったらしく、3.2.0のときの.irbrc

IRB.conf[:USE_SINGLELINE] = true

としてもプロンプトが1文字エコーバックする都度だらだら出て来るので全然使い物にならなくて、しょうがないから3.2.xで過ごすしか、となっていたのだが、そうは言ってもやはり3.3.0にアップデートしたい。

しょうがないので、irbのソースを眺めて、エコーバックを行うのは、InputMethodというクラス群で、StdioInputMethodなら余分なことはしないということがわかった。

で、trueに設定するとReadlineInputMethodをrequire 'readline'してロードできなければRelineを使うというところまでわかった。

だったら、true以外の真に設定すれば良い。

というわけで、

IRB.conf[:USE_SINGLELINE] = 0

で解決。

しかし、なぜ3.2.xでは問題ないのだろうか? と不思議になって調べると、3.2.xはreadline.soがあって、これを利用するReadlineInputMethodはEmacsフレンドリーなのだが、3.3.0はreadline.soを作らないのでReadlineInputMethodがRelineを使うのだが、これがアンチEmacsフレンドリーなのだった。GNU Emacsのshellモード内ではGNU Readline互換ではないということか。(が、Gemでインストールする気にはならないのでStdioInputMethodで問題なし)

基本、Emacsの中でしか入力はしないからReadlineが無くてもまったく問題ないのだが、たまにシェルの中で使うときはirb -fで.irbrcの読み込みをスキップさせてRelineを使う。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|

ジェズイットを見習え