Project

General

Profile

Actions

Bug #12199

closed

About msys2 path conversion measures in make test-all

Added by moritat (Tsuyoshi Morita) almost 9 years ago. Updated over 8 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0dev (2016-03-16) [i386-mingw32]
[ruby-dev:49525]

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

GNUmakefile.in.patch (848 Bytes) GNUmakefile.in.patch moritat (Tsuyoshi Morita), 03/22/2016 03:53 PM
Makefile_test (186 Bytes) Makefile_test moritat (Tsuyoshi Morita), 03/22/2016 03:53 PM
Actions #1

Updated by nobu (Nobuyoshi Nakada) almost 9 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) almost 9 years ago

対応ありがとうございました。

確認したところ、期待の動作にならなかったのでデバッグしました。
パッチを添付します。

次の1~3、(および4)の修正実施により、期待通りにパス変換が抑制されることを、
MSYS2 installer環境と、RubyInstallerのmsys2化版で確認しました。

  1. $() が必要でした。"$MSYS2_ARG_CONV_EXCL"は、"SYS2_ARG_CONV_EXCL"と評価されていました。
  2. 1.を直すと循環参照のエラーが出たので、_PARAM を付けました。
  3. 右辺を""とするのも、パス変換されたままとなりNGでした。
  4. --excludes-dir はDIRECTORY指定で正規表現でないので、パス変換はされた方が良いと思います。

よろしくお願いします。

Updated by shyouhei (Shyouhei Urabe) almost 9 years ago

  • Status changed from Closed to Open
Actions #4

Updated by nobu (Nobuyoshi Nakada) almost 9 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0