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
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- Status changed from Open to Closed
Applied in changeset r54211.
suppress msys2 pathname conversion
- common.mk (TEST_EXCLUDES, EXCLUDE_TESTFRAMEWORK): use full spell
long option. - cygwin/GNUmakefile.in (MSYS2_ARG_CONV_EXCL): suppress path name
conversions by msys2. [ruby-dev:49525] [Bug #12199]
Updated by moritat (Tsuyoshi Morita) over 8 years ago
- File GNUmakefile.in.patch GNUmakefile.in.patch added
- File Makefile_test Makefile_test added
対応ありがとうございました。
確認したところ、期待の動作にならなかったのでデバッグしました。
パッチを添付します。
次の1~3、(および4)の修正実施により、期待通りにパス変換が抑制されることを、
MSYS2 installer環境と、RubyInstallerのmsys2化版で確認しました。
- $() が必要でした。"$MSYS2_ARG_CONV_EXCL"は、"SYS2_ARG_CONV_EXCL"と評価されていました。
- 1.を直すと循環参照のエラーが出たので、_PARAM を付けました。
- 右辺を""とするのも、パス変換されたままとなりNGでした。
- --excludes-dir はDIRECTORY指定で正規表現でないので、パス変換はされた方が良いと思います。
よろしくお願いします。
Updated by shyouhei (Shyouhei Urabe) over 8 years ago
- Status changed from Closed to Open
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- Status changed from Open to Closed
Applied in changeset r54233.
GNUmakefile.in: fix MSYS2_ARG_CONV_EXCL
- cygwin/GNUmakefile.in (MSYS2_ARG_CONV_EXCL_PARAM):
- add missing parentheses and remove double quotes.
- rename to get rid of recursive references.
- as --excludes-dir option is for a path name, its argument
should be converted.
[ruby-dev:49526] [Bug #12199]
Updated by usa (Usaku NAKAMURA) over 8 years ago
- Backport changed from 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED
Updated by naruse (Yui NARUSE) over 8 years ago
- Backport changed from 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED to 2.1: DONTNEED, 2.2: DONTNEED, 2.3: DONE
ruby_2_3 r54627 merged revision(s) 54086,54211,54233.