Matz は来なかったけど、いつものメンバーで最近の Ruby についておしゃべりをしていた。Windows PC のセットアップとゲームに忙しくてあまり追いかけてなかったけど ZJIT の proposal とかきていてざっくりとした解説を聞けて便利だった。
あとは Set を core クラスにするやつとか、CGI を消したい〜とかそういう話をしているうちに時間切れ。お疲れ様でした。
ssh で繋げるところまで辿り着いたので楽勝だろうと思いきや思いのほか大変だった。
まずは何はなくてもコンパイラということで Visual Studio を入れようと思い MS のサイトを見てみたら不具合でビルドできない 2022 しか提供されてない。まじかー、ということで調べてみたら 2022 のバージョンである 17 を 16 にした直リンクだと 2019/2017 をダウンロードできるということだったのでダウンロードできるうちに全部入れておいた。なおリンクはこちらです。
続いて scoop を入れてから、ビルドするために必要な git と ruby をインストール。前はなんか色々入れて大変だったと思うのだけど、vcpkg ができてから楽になったものだね。その後、DevDrive を作成して V ドライブにマウントしてから ruby を git clone してビルドしてみたら以下のようなエラーでビルドできない。
dmyext.obj dmyenc.obj
linking shared-library x64-vcruntime140-ruby350.dll
x64-vcruntime140-ruby350.def : error LNK2001: 外部シンボル "Avx2WmemEnabledWeakValue" は未解決です。
dummy.lib : fatal error LNK1120: 1 件の未解決の外部参照
なんだよこれーと調べてみても未解決なシンボルに関係する情報はほとんどなく、唯一の手がかりは Windows SDK のバージョンアップによって、上記シンボルが llvm で問題があった、ということだったので Ruby も同じ現象かな、と入れてある Windows SDK のバージョンをひたすらトリアージしていったら 10.0.26100 だとダメで 10.0.22261 だとビルドできるということだった。
https://bugs.ruby-lang.org/issues/21255
これ、以前の環境だと色々入れていてもビルドできた気がするんだけど今となっては何もわからない。あとこの症状が起きても dll はサイズ0で作成されて、ぱっと見はビルドできているように見せて ruby.exe
の実行時に 0xc0..20
エラーで落ちるという最悪な感じだった。
この調査の過程で VS でインストールするコンポーネントは 2017/2019/2022 全部を通して VC のコンパイラと 10.0.22261 のバージョンの Windows SDK 1つのみで良い、ということがわかったのは収穫だった。GUI は一切使わないので必要最小のものだけ入れてスッキリ。
これでやっとビルドができた、と思ったらテストが結構落ちて頭を抱える。主に prism の txt と比較するやつだったのと、差分を見ると改行が余計というものだったのでこれは git の autocrlf だなと思ったらビンゴだった。最初に git clone したものを消して git config --global core.autocrlf false
してから git clone
したら該当のテストは大丈夫だった。
で残りが以下の2つ。
1) Failure:
TestFileExhaustive#test_dirname [V:/github.com/ruby/ruby/test/ruby/test_file_exhaustive.rb:1282]:
<"V:/"> expected but was
<"C:/">.
2) Error:
TestDir#test_children_long_name:
Test::Unit::ProxyError: No such file or directory @ apply2files - C:/Users/hsbt/AppData/Local/Temp/rubytest.zxydnz/d20250408-35424-2b0o6e/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/c
V:/github.com/ruby/ruby/test/ruby/test_dir.rb:653:in 'File.unlink'
V:/github.com/ruby/ruby/test/ruby/test_dir.rb:653:in 'block in TestDir#test_children_long_name'
V:/github.com/ruby/ruby/lib/tmpdir.rb:105:in 'Dir.mktmpdir'
V:/github.com/ruby/ruby/test/ruby/test_dir.rb:646:in 'TestDir#test_children_long_name'
どっちもテストが微妙...という感じだったので、対応してない状態の時はスキップということでやり過ごすことにした。これでとりあえず以前と同様に 2017/2019 で nmake check
が全部通る環境が復活した。
数年にわたって色々入れたり設定している環境でビルドできます、だけだと気が付かないというか意外と必要な設定が多くて大変だった。一応忘れないように何処かには書いておこうと思う。
AI X1 Pro は下の画像のように前面にスピーカー out があってここに普通のケーブルを刺すと邪魔でしょうがないので L 字で隠すようにした。
だいぶスッキリして満足。