コードカバレッジの出力ファイル名


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/11/19 1:48
SHOO  管理人   投稿数: 658
D言語のコードカバレッジの出力ファイルは、 std.cover に setDestDir などあるにもかかわらず、これを使用してもなぜか出力先を設定することはできません。
さらに、 a.xxx と b.xxx モジュールなど、パッケージ名は違うがモジュール名はおなじ、という場合などに対応することができません。

理由としては、どうやらランタイムライブラリ内の cover.d の

FILE* flst = fopen( (addExt( baseName( c.filename ), "lst\0" )).ptr, "wb" );

とかがおかしいようです。((TangoもPhobosもほとんど同じ実装。))
baseNameでファイルの拡張子と親ディレクトリのパスを抜いたものに、".lst"を追加して、実行時のカレントディレクトリでオープンしています。
本来ならばここに、 dstpath((setDestDirで設定したパスが保存されている)) とかが追加されたり、パッケージ名を考慮したりしなければいけないはず…

応急処置的に、baseName関数を以下のようにすることで解決します。たぶん。((Tangoでは以下のようになりますが、D2だと若干変わると思います))

#code(d){{{
char[] baseName( char[] name, char[] ext = null )
{
auto i = name.length;
auto ret = name.dup;
version( Windows )
{
const DELIMITER = '\\';
}
else version( Posix )
{
const DELIMITER = '/';
}
for( ; i > 0; --i )
{
if( ret[i - 1] == ':' || ret[i - 1] == '\\' || ret[i - 1] == '/' )
ret[i - 1] = '.';
}
return (dstpath ? dstpath ~ DELIMITER : "") ~ chomp( ret[i .. $], ext ? ext : "" );
}
}}}

ちょっとこれからTangoの公式に投げてきます。
Phobosの方はコンパイルの仕方がよくわからなかったので…
Tangoが直ったらPhobosの方も直るかな。
投票数:91 平均点:4.84
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/11/19 2:27
SHOO  管理人   投稿数: 658
http://www.dsource.org/projects/tango/ticket/1788

ヒドイ英語ですが投稿してきました。
ちなみに、

>Added support for -cov option under DMD. Please note that until a package area can be created for compiler-specific functionality, there is no import module for the user-accessible portion of this feature. Therefore, the following functions have been defined, and must currently be declared by the user before they are called:
> extern (C) void dmd_coverSourcePath( char[] pathname );
> extern (C) void dmd_coverDestPath( char[] pathname );
> extern (C) void dmd_coverSetMerge( bool flag );
>This closes issue #98.

超訳:packageの分別はコンパイラの機能として提供されなきゃ無理っぽい
とあるので今後どうなるのかはちょっとわかりませんね…
投票数:116 平均点:4.57
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu