[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]