Bug #12199
closedAbout msys2 path conversion measures in make test-all
Description
ruby 2.3以降、make test-allの際のテスト除外の指定に正規表現リテラルを
用いるようになったと思います。
これにより、Windowsでのmsys, msys2を用いたbuild環境でmake test-allを実行した場合、
--name=!/memory_leak/ → --name=!c:/msys64/memory_leak/のようにpath変換が行われてしまい、
意図した除外が行われません。
現時点のtrunkでは全て除外され、テスト件数0になります。
# Running tests:
Finished tests in 7.813343s, 0.0000 tests/s, 0.0000 assertions/s.
0 tests, 0 assertions, 0 failures, 0 errors, 0 skips
対策を2案考えました。1ができれば最良です。
1."/"を含めない方式で正規表現を指定するようにする
ex:
--name=/pattern/ → --name=pattern
--name=!/pattern/ → --name-not=pattern
-x /pattern/ → -x pattern
2.オプションとそのパラメータをひとくくりに認識できるようにする
こちらは、1の修正がNGな場合、msys2だけで回避する次善の策になります。
msysは対応できません。
補足:RubyInstallerのbuild環境は、msys2に移行する動きはありますが、まだmsysです。
既に仕組みはあるので、uncommon.mk の記述方法を変えます。
ex:
--name=/pattern/ → --name=/pattern/ (変更なし)
--name=!/pattern/ → --name=!/pattern/ (変更なし)
-x /pattern/ → --exclude=/pattern/
説明:
msys2では、環境変数 MSYS2_ARG_CONV_EXCL="pattern1;pattern2"のように
設定することでマッチする引数のパス変換を抑制できるようになっています。
繰り返しになりますが、変数名からわかるようにmsysは対応していません。
これを make test-all の時にだけ設定します。
-x /pattern/ の指定方法だと、
MSYS2_ARG_CONV_EXCL="/pattern/"
としなければならず、指定するオプションのパラメータが変わると、
設定する値も変える必要があります。
--exclude=/pattern/ の指定方法だと、
MSYS2_ARG_CONV_EXCL="--exclude="
とすれば、指定するオプションのパラメータによりません。
Files