著作一覧 |
・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に委譲した関係かな?
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を使う。
ジェズイットを見習え |