ruby-changes:46702
From: mame <ko1@a...>
Date: Sat, 20 May 2017 22:00:55 +0900 (JST)
Subject: [ruby-changes:46702] mame:r58817 (trunk): Add coverage measurement mode by using gcov
mame 2017-05-20 22:00:41 +0900 (Sat, 20 May 2017) New Revision: 58817 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58817 Log: Add coverage measurement mode by using gcov This experimental feature is only for Ruby-core team, not for casual users. Usage: `./configure --enable-gcov && make && make exam && make gcov` Added files: trunk/tool/run-gcov.rb Modified files: trunk/.gitignore trunk/Makefile.in trunk/configure.in Index: tool/run-gcov.rb =================================================================== --- tool/run-gcov.rb (nonexistent) +++ tool/run-gcov.rb (revision 58817) @@ -0,0 +1,52 @@ https://github.com/ruby/ruby/blob/trunk/tool/run-gcov.rb#L1 +#!ruby +require "pathname" +require "open3" + +Pathname.glob("**/*.gcda").sort.each do |gcda| + if gcda.fnmatch("ext/*") + cwd, gcda = gcda.split.map {|s| s.to_s } + objdir = "." + else + cwd, objdir, gcda = ".", gcda.dirname.to_s, gcda.to_s + end + puts "$ gcov -lpbc -o #{ objdir } #{ gcda }" + out, err, _status = Open3.capture3("gcov", "-lpbc", "-o", objdir, gcda, chdir: cwd) + puts out + puts err + + # a black list of source files that contains wrong #line directives + if err !~ %r( + \A( + Cannot\ open\ source\ file\ ( + defs/keywords + |zonetab\.list + |enc/jis/props\.kwd + |parser\.c + |parser\.rl + )\n + )*\z + )x + raise "Unexpected gcov output" + end + + if out !~ %r( + \A( + File\ .*\nLines\ executed:.*\n + ( + Branches\ executed:.*\n + Taken\ at\ least\ once:.*\n + | + No\ branches\n + )? + ( + Calls\ executed:.*\n + | + No\ calls\n + )? + Creating\ .*\n + \n + )+\z + )x + raise "Unexpected gcov output" + end +end Index: Makefile.in =================================================================== --- Makefile.in (revision 58816) +++ Makefile.in (revision 58817) @@ -479,6 +479,9 @@ update-download:: update-config_files https://github.com/ruby/ruby/blob/trunk/Makefile.in#L479 after-update:: prereq +gcov: + $(Q) $(BASERUBY) $(srcdir)/tool/run-gcov.rb + update-doclie: $(Q) $(srcdir)/tool/git-refresh -C $(srcdir)/coverage $(Q1:0=-q) \ --branch $(DOCLIE_GIT_REF) \ Index: configure.in =================================================================== --- configure.in (revision 58816) +++ configure.in (revision 58817) @@ -4063,6 +4063,14 @@ AC_SUBST(DTRACE_REBUILD) https://github.com/ruby/ruby/blob/trunk/configure.in#L4063 AC_SUBST(DTRACE_OPT) AC_SUBST(LIBRUBY_A_OBJS) +AC_ARG_ENABLE(gcov, + AS_HELP_STRING([--enable-gcov], [enable coverage measurement by gcov]), + [gcov=yes]) +if test x"$gcov" = xyes; then + CFLAGS="$CFLAGS -coverage" + LDFLAGS="$LDFLAGS -coverage" +fi + RUBY_SETJMP_TYPE } { # build section Index: .gitignore =================================================================== --- .gitignore (revision 58816) +++ .gitignore (revision 58817) @@ -36,6 +36,9 @@ cygruby*.def https://github.com/ruby/ruby/blob/trunk/.gitignore#L36 extconf.h y.output y.tab.c +*.gcda +*.gcno +*.gcov # / /*-fake.rb -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/