rcov 0.5.0.1-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/BLURB +117 -0
- data/CHANGES +75 -0
- data/LEGAL +36 -0
- data/LICENSE +56 -0
- data/README.API +42 -0
- data/README.en +128 -0
- data/README.rake +62 -0
- data/README.rant +68 -0
- data/Rakefile +161 -0
- data/Rantfile +75 -0
- data/THANKS +29 -0
- data/bin/rcov +1839 -0
- data/ext/rcovrt/extconf.rb +3 -0
- data/ext/rcovrt/rcov.c +404 -0
- data/lib/rcov.rb +909 -0
- data/lib/rcov/lowlevel.rb +139 -0
- data/lib/rcov/rant.rb +85 -0
- data/lib/rcov/rcovtask.rb +156 -0
- data/lib/rcov/version.rb +13 -0
- data/lib/rcovrt.so +0 -0
- data/mingw-rbconfig.rb +174 -0
- data/setup.rb +1585 -0
- data/test/sample_01.rb +7 -0
- data/test/sample_02.rb +5 -0
- data/test/sample_03.rb +20 -0
- data/test/test_CallSiteAnalyzer.rb +172 -0
- data/test/test_CodeCoverageAnalyzer.rb +183 -0
- data/test/test_FileStatistics.rb +403 -0
- data/test/turn_off_rcovrt.rb +4 -0
- metadata +79 -0
| @@ -0,0 +1,139 @@ | |
| 1 | 
            +
            # rcov Copyright (c) 2004-2006 Mauricio Fernandez <mfp@acm.org>
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # See LEGAL and LICENSE for licensing information.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require 'rcov/version'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module Rcov
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              # RCOV__ performs the low-level tracing of the execution, gathering code
         | 
| 10 | 
            +
              # coverage information in the process. The C core made available through the
         | 
| 11 | 
            +
              # rcovrt extension will be used if possible. Otherwise the functionality
         | 
| 12 | 
            +
              # will be emulated using set_trace_func, but this is very expensive and
         | 
| 13 | 
            +
              # will fail if other libraries (e.g. breakpoint) change the trace_func.
         | 
| 14 | 
            +
              #
         | 
| 15 | 
            +
              # Do not use this module; it is very low-level and subject to frequent
         | 
| 16 | 
            +
              # changes. Rcov::CodeCoverageAnalyzer offers a much more convenient and
         | 
| 17 | 
            +
              # stable interface.
         | 
| 18 | 
            +
            module RCOV__
         | 
| 19 | 
            +
              COVER = {}
         | 
| 20 | 
            +
              CALLSITES = {}
         | 
| 21 | 
            +
              DEFSITES = {}
         | 
| 22 | 
            +
              pure_ruby_impl_needed = true
         | 
| 23 | 
            +
              unless defined? $rcov_do_not_use_rcovrt 
         | 
| 24 | 
            +
                begin
         | 
| 25 | 
            +
                  require 'rcovrt'
         | 
| 26 | 
            +
                  abi = [0,0,0]
         | 
| 27 | 
            +
                  begin
         | 
| 28 | 
            +
                    abi = RCOV__.ABI
         | 
| 29 | 
            +
                    raise if abi[0] != RCOVRT_ABI[0] || abi[1] < RCOVRT_ABI[1]
         | 
| 30 | 
            +
                    pure_ruby_impl_needed = false
         | 
| 31 | 
            +
                  rescue
         | 
| 32 | 
            +
                    $stderr.puts <<-EOF
         | 
| 33 | 
            +
            The rcovrt extension I found was built for a different version of rcov.
         | 
| 34 | 
            +
            The required ABI is:              #{RCOVRT_ABI.join(".")}
         | 
| 35 | 
            +
            Your current rcovrt extension is: #{abi.join(".")}
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            Please delete rcovrt.{so,bundle,dll,...} and install the required one.
         | 
| 38 | 
            +
                    EOF
         | 
| 39 | 
            +
                    raise LoadError
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                rescue LoadError
         | 
| 42 | 
            +
                  $stderr.puts <<-EOF
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            Since the rcovrt extension couldn't be loaded, rcov will run in pure-Ruby
         | 
| 45 | 
            +
            mode, which is about two orders of magnitude slower.
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            If you're on win32, you can find a pre-built extension (usable with recent
         | 
| 48 | 
            +
            One Click Installer and mswin32 builds) at http://eigenclass.org/hiki.rb?rcov .
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  EOF
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              if pure_ruby_impl_needed
         | 
| 55 | 
            +
                methods = %w[install_coverage_hook remove_coverage_hook reset_coverage 
         | 
| 56 | 
            +
                             install_callsite_hook remove_callsite_hook reset_callsite 
         | 
| 57 | 
            +
                             generate_coverage_info generate_callsite_info]
         | 
| 58 | 
            +
                sklass = class << self; self end
         | 
| 59 | 
            +
                (methods & sklass.instance_methods).each do |meth|
         | 
| 60 | 
            +
                  sklass.class_eval{ remove_method meth }
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
                
         | 
| 63 | 
            +
                @coverage_hook_activated = @callsite_hook_activated = false
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                def self.install_coverage_hook # :nodoc:
         | 
| 66 | 
            +
                  install_common_hook
         | 
| 67 | 
            +
                  @coverage_hook_activated = true
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
                
         | 
| 70 | 
            +
                def self.install_callsite_hook # :nodoc:
         | 
| 71 | 
            +
                  install_common_hook
         | 
| 72 | 
            +
                  @callsite_hook_activated = true
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
                
         | 
| 75 | 
            +
                def self.install_common_hook # :nodoc:
         | 
| 76 | 
            +
                  set_trace_func lambda {|event, file, line, id, binding, klass|
         | 
| 77 | 
            +
                    next unless SCRIPT_LINES__.has_key? file
         | 
| 78 | 
            +
                    case event
         | 
| 79 | 
            +
                    when 'call'
         | 
| 80 | 
            +
                      if @callsite_hook_activated
         | 
| 81 | 
            +
                        receiver = eval("self", binding)
         | 
| 82 | 
            +
                        klass = class << klass; self end unless klass === receiver
         | 
| 83 | 
            +
                        begin
         | 
| 84 | 
            +
                          DEFSITES[[klass.to_s, id.to_s]] = [file, line]
         | 
| 85 | 
            +
                        rescue Exception
         | 
| 86 | 
            +
                        end
         | 
| 87 | 
            +
                        caller_arr = caller[1,1]
         | 
| 88 | 
            +
                        begin
         | 
| 89 | 
            +
                          hash = CALLSITES[[klass.to_s, id.to_s]] ||= {}
         | 
| 90 | 
            +
                          hash[caller_arr] ||= 0
         | 
| 91 | 
            +
                          hash[caller_arr] += 1
         | 
| 92 | 
            +
                          #puts "#{event} #{file} #{line} #{klass.inspect} " +
         | 
| 93 | 
            +
                          #     "#{klass.object_id} #{id} #{eval('self', binding)}"
         | 
| 94 | 
            +
                        rescue Exception
         | 
| 95 | 
            +
                        end
         | 
| 96 | 
            +
                      end
         | 
| 97 | 
            +
                    when 'c-call', 'c-return', 'class'
         | 
| 98 | 
            +
                      return
         | 
| 99 | 
            +
                    end
         | 
| 100 | 
            +
                    if @coverage_hook_activated
         | 
| 101 | 
            +
                      COVER[file] ||= Array.new(SCRIPT_LINES__[file].size, 0)
         | 
| 102 | 
            +
                      COVER[file][line - 1] ||= 0
         | 
| 103 | 
            +
                      COVER[file][line - 1] += 1
         | 
| 104 | 
            +
                    end
         | 
| 105 | 
            +
                  }
         | 
| 106 | 
            +
                end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                def self.remove_coverage_hook # :nodoc:
         | 
| 109 | 
            +
                  @coverage_hook_activated = false
         | 
| 110 | 
            +
                  set_trace_func(nil) if !@callsite_hook_activated
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
                
         | 
| 113 | 
            +
                def self.remove_callsite_hook # :nodoc:
         | 
| 114 | 
            +
                  @callsite_hook_activated = false
         | 
| 115 | 
            +
                  set_trace_func(nil) if !@coverage_hook_activated
         | 
| 116 | 
            +
                end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                def self.reset_coverage # :nodoc:
         | 
| 119 | 
            +
                  COVER.replace({})
         | 
| 120 | 
            +
                end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                def self.reset_callsite # :nodoc:
         | 
| 123 | 
            +
                  CALLSITES.replace({})
         | 
| 124 | 
            +
                  DEFSITES.replace({})
         | 
| 125 | 
            +
                end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                def self.generate_coverage_info # :nodoc:
         | 
| 128 | 
            +
                  Marshal.load(Marshal.dump(COVER))
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                def self.generate_callsite_info # :nodoc:
         | 
| 132 | 
            +
                  [CALLSITES, DEFSITES]
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
              end
         | 
| 135 | 
            +
            end # RCOV__
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            end # Rcov
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            # vi: set sw=2:
         | 
    
        data/lib/rcov/rant.rb
    ADDED
    
    | @@ -0,0 +1,85 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require 'rant/rantlib'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Rant # :nodoc:
         | 
| 5 | 
            +
              class Generators::Rcov
         | 
| 6 | 
            +
                def self.rant_gen(app, ch, args, &block)
         | 
| 7 | 
            +
                  if !args || args.empty?
         | 
| 8 | 
            +
                    self.new(app, ch, &block)
         | 
| 9 | 
            +
                  elsif args.size == 1
         | 
| 10 | 
            +
                    name, pre = app.normalize_task_arg(args.first, ch)
         | 
| 11 | 
            +
                    self.new(app, ch, name, pre, &block)
         | 
| 12 | 
            +
                  else
         | 
| 13 | 
            +
                    app.abort_at(ch,
         | 
| 14 | 
            +
                                 "Rcov takes only one additional argument, " +
         | 
| 15 | 
            +
                                 "which should be like one given to the `task' command.")
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                attr_accessor :verbose
         | 
| 20 | 
            +
                attr_accessor :libs
         | 
| 21 | 
            +
                attr_accessor :test_dirs
         | 
| 22 | 
            +
                attr_accessor :pattern
         | 
| 23 | 
            +
                attr_accessor :test_files
         | 
| 24 | 
            +
                attr_accessor :rcov_opts
         | 
| 25 | 
            +
                # Directory where to put the generated XHTML reports
         | 
| 26 | 
            +
                attr_accessor :output_dir
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def initialize(app, cinf, name = :rcov, prerequisites = [], &block)
         | 
| 29 | 
            +
                  @rac = app
         | 
| 30 | 
            +
                  @name = name
         | 
| 31 | 
            +
                  @pre = prerequisites
         | 
| 32 | 
            +
                  #@block = block
         | 
| 33 | 
            +
                  @verbose = nil
         | 
| 34 | 
            +
                  cf = cinf[:file]
         | 
| 35 | 
            +
                  @libs = []
         | 
| 36 | 
            +
                  libdir = File.join(File.dirname(File.expand_path(cf)), 'lib')
         | 
| 37 | 
            +
                  @libs << libdir if test(?d, libdir)
         | 
| 38 | 
            +
                  @rcov_opts = ["--text-report"]
         | 
| 39 | 
            +
                  @test_dirs = []
         | 
| 40 | 
            +
                  @pattern = nil
         | 
| 41 | 
            +
                  @test_files = nil
         | 
| 42 | 
            +
                  yield self if block_given?
         | 
| 43 | 
            +
                  @pattern = "test*.rb" if @pattern.nil? && @test_files.nil?
         | 
| 44 | 
            +
                  @output_dir ||= "coverage"
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  @pre ||= []
         | 
| 47 | 
            +
                  # define the task
         | 
| 48 | 
            +
                  app.task(:__caller__ => cinf, @name => @pre) { |t|
         | 
| 49 | 
            +
                    args = []
         | 
| 50 | 
            +
                    if @libs && !@libs.empty?
         | 
| 51 | 
            +
                      args << "-I#{@libs.join File::PATH_SEPARATOR}"
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
                    if rcov_path = ENV['RCOVPATH'] 
         | 
| 54 | 
            +
                      args << rcov_path
         | 
| 55 | 
            +
                    else
         | 
| 56 | 
            +
                      args << "-S" << "rcov"
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
                    args.concat rcov_opts
         | 
| 59 | 
            +
                    args << "-o" << @output_dir
         | 
| 60 | 
            +
                    if test(?d, "test")
         | 
| 61 | 
            +
                      @test_dirs << "test" 
         | 
| 62 | 
            +
                    elsif test(?d, "tests")
         | 
| 63 | 
            +
                      @test_dirs << "tests"
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
                    args.concat filelist
         | 
| 66 | 
            +
                    app.context.sys.ruby args
         | 
| 67 | 
            +
                  }
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
                
         | 
| 70 | 
            +
                def filelist
         | 
| 71 | 
            +
                  return @rac.sys[@rac.var['TEST']] if @rac.var['TEST']
         | 
| 72 | 
            +
                  filelist = @test_files || []
         | 
| 73 | 
            +
                  if filelist.empty?
         | 
| 74 | 
            +
                    if @test_dirs && !@test_dirs.empty?
         | 
| 75 | 
            +
                      @test_dirs.each { |dir|
         | 
| 76 | 
            +
                        filelist.concat(@rac.sys[File.join(dir, @pattern)])
         | 
| 77 | 
            +
                      }
         | 
| 78 | 
            +
                    else
         | 
| 79 | 
            +
                      filelist.concat(@rac.sys[@pattern]) if @pattern
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
                  filelist
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
              end	# class Generators::RubyTest
         | 
| 85 | 
            +
            end	# module Rant
         | 
| @@ -0,0 +1,156 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Define a task library for performing code coverage analysis of unit tests
         | 
| 4 | 
            +
            # using rcov.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require 'rake'
         | 
| 7 | 
            +
            require 'rake/tasklib'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module Rcov
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              # Create a task that runs a set of tests through rcov, generating code
         | 
| 12 | 
            +
              # coverage reports.
         | 
| 13 | 
            +
              #
         | 
| 14 | 
            +
              # Example:
         | 
| 15 | 
            +
              #   
         | 
| 16 | 
            +
              #   require 'rcov/rcovtask'
         | 
| 17 | 
            +
              #   
         | 
| 18 | 
            +
              #   Rcov::RcovTask.new do |t|
         | 
| 19 | 
            +
              #     t.libs << "test"
         | 
| 20 | 
            +
              #     t.test_files = FileList['test/test*.rb']
         | 
| 21 | 
            +
              #     t.verbose = true
         | 
| 22 | 
            +
              #   end
         | 
| 23 | 
            +
              #
         | 
| 24 | 
            +
              # If rake is invoked with a "TEST=filename" command line option,
         | 
| 25 | 
            +
              # then the list of test files will be overridden to include only the
         | 
| 26 | 
            +
              # filename specified on the command line.  This provides an easy way
         | 
| 27 | 
            +
              # to run just one test.
         | 
| 28 | 
            +
              #
         | 
| 29 | 
            +
              # If rake is invoked with a "RCOVOPTS=options" command line option,
         | 
| 30 | 
            +
              # then the given options are passed to rcov.
         | 
| 31 | 
            +
              #
         | 
| 32 | 
            +
              # If rake is invoked with a "RCOVPATH=path/to/rcov" command line option,
         | 
| 33 | 
            +
              # then the given rcov executable will be used; otherwise the one in your
         | 
| 34 | 
            +
              # PATH will be used.
         | 
| 35 | 
            +
              #
         | 
| 36 | 
            +
              # Examples:
         | 
| 37 | 
            +
              #
         | 
| 38 | 
            +
              #   rake rcov                           # run tests normally
         | 
| 39 | 
            +
              #   rake rcov TEST=just_one_file.rb     # run just one test file.
         | 
| 40 | 
            +
              #   rake rcov RCOVOPTS="-p"             # run in profile mode
         | 
| 41 | 
            +
              #   rake rcov RCOVOPTS="-T"             # generate text report
         | 
| 42 | 
            +
              #
         | 
| 43 | 
            +
              class RcovTask < Rake::TaskLib
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                # Name of test task. (default is :test)
         | 
| 46 | 
            +
                attr_accessor :name
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                # List of directories to added to $LOAD_PATH before running the
         | 
| 49 | 
            +
                # tests. (default is 'lib')
         | 
| 50 | 
            +
                attr_accessor :libs
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                # True if verbose test output desired. (default is false)
         | 
| 53 | 
            +
                attr_accessor :verbose
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                # Request that the tests be run with the warning flag set.
         | 
| 56 | 
            +
                # E.g. warning=true implies "ruby -w" used to run the tests.
         | 
| 57 | 
            +
                attr_accessor :warning
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                # Glob pattern to match test files. (default is 'test/test*.rb')
         | 
| 60 | 
            +
                attr_accessor :pattern
         | 
| 61 | 
            +
                
         | 
| 62 | 
            +
                # Array of commandline options to pass to ruby when running the rcov loader.
         | 
| 63 | 
            +
                attr_accessor :ruby_opts
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                # Array of commandline options to pass to rcov. An explicit
         | 
| 66 | 
            +
                # RCOVOPTS=opts on the command line will override this. (default
         | 
| 67 | 
            +
                # is <tt>["--text-report"]</tt>)
         | 
| 68 | 
            +
                attr_accessor :rcov_opts
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                # Output directory for the XHTML report.
         | 
| 71 | 
            +
                attr_accessor :output_dir
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                # Explicitly define the list of test files to be included in a
         | 
| 74 | 
            +
                # test.  +list+ is expected to be an array of file names (a
         | 
| 75 | 
            +
                # FileList is acceptable).  If both +pattern+ and +test_files+ are
         | 
| 76 | 
            +
                # used, then the list of test files is the union of the two.
         | 
| 77 | 
            +
                def test_files=(list)
         | 
| 78 | 
            +
                  @test_files = list
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                # Create a testing task.
         | 
| 82 | 
            +
                def initialize(name=:rcov)
         | 
| 83 | 
            +
                  @name = name
         | 
| 84 | 
            +
                  @libs = ["lib"]
         | 
| 85 | 
            +
                  @pattern = nil
         | 
| 86 | 
            +
                  @test_files = nil
         | 
| 87 | 
            +
                  @verbose = false
         | 
| 88 | 
            +
                  @warning = false
         | 
| 89 | 
            +
                  @rcov_opts = ["--text-report"]
         | 
| 90 | 
            +
                  @ruby_opts = []
         | 
| 91 | 
            +
                  @output_dir = "coverage"
         | 
| 92 | 
            +
                  yield self if block_given?
         | 
| 93 | 
            +
                  @pattern = 'test/test*.rb' if @pattern.nil? && @test_files.nil?
         | 
| 94 | 
            +
                  define
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                # Create the tasks defined by this task lib.
         | 
| 98 | 
            +
                def define
         | 
| 99 | 
            +
                  lib_path = @libs.join(File::PATH_SEPARATOR)
         | 
| 100 | 
            +
                  actual_name = Hash === name ? name.keys.first : name
         | 
| 101 | 
            +
                  unless Rake.application.last_comment
         | 
| 102 | 
            +
                    desc "Analyze code coverage with tests" + 
         | 
| 103 | 
            +
                      (@name==:rcov ? "" : " for #{actual_name}")
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
                  task @name do
         | 
| 106 | 
            +
            	run_code = ''
         | 
| 107 | 
            +
            	RakeFileUtils.verbose(@verbose) do
         | 
| 108 | 
            +
            	  run_code =
         | 
| 109 | 
            +
            	    case rcov_path
         | 
| 110 | 
            +
            	    when nil, ''
         | 
| 111 | 
            +
                          "-S rcov"
         | 
| 112 | 
            +
                        else %!"#{rcov_path}"!
         | 
| 113 | 
            +
            	    end
         | 
| 114 | 
            +
                      ruby_opts = @ruby_opts.clone
         | 
| 115 | 
            +
                      ruby_opts.unshift run_code
         | 
| 116 | 
            +
                      ruby_opts.unshift( "-I#{lib_path}" )
         | 
| 117 | 
            +
            	  ruby_opts.unshift( "-w" ) if @warning
         | 
| 118 | 
            +
            	  ruby ruby_opts.join(" ") + " " + option_list +
         | 
| 119 | 
            +
                        %[ -o "#{@output_dir}" ] +
         | 
| 120 | 
            +
            	    file_list.collect { |fn| %["#{fn}"] }.join(' ')
         | 
| 121 | 
            +
            	end
         | 
| 122 | 
            +
                  end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                  desc "Remove rcov products for #{actual_name}"
         | 
| 125 | 
            +
                  task paste("clobber_", actual_name) do
         | 
| 126 | 
            +
            	rm_r @output_dir rescue nil
         | 
| 127 | 
            +
                  end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                  clobber_task = paste("clobber_", actual_name)
         | 
| 130 | 
            +
                  task :clobber => [clobber_task]
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  task actual_name => clobber_task
         | 
| 133 | 
            +
                  self
         | 
| 134 | 
            +
                end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                def rcov_path # :nodoc:
         | 
| 137 | 
            +
                  ENV['RCOVPATH']
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                def option_list # :nodoc:
         | 
| 141 | 
            +
                  ENV['RCOVOPTS'] || @rcov_opts.join(" ") || ""
         | 
| 142 | 
            +
                end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                def file_list # :nodoc:
         | 
| 145 | 
            +
                  if ENV['TEST']
         | 
| 146 | 
            +
            	FileList[ ENV['TEST'] ]
         | 
| 147 | 
            +
                  else
         | 
| 148 | 
            +
            	result = []
         | 
| 149 | 
            +
            	result += @test_files.to_a if @test_files
         | 
| 150 | 
            +
            	result += FileList[ @pattern ].to_a if @pattern
         | 
| 151 | 
            +
            	FileList[result]
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
              end
         | 
| 155 | 
            +
            end
         | 
| 156 | 
            +
             | 
    
        data/lib/rcov/version.rb
    ADDED
    
    | @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            # rcov Copyright (c) 2004-2006 Mauricio Fernandez <mfp@acm.org>
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # See LEGAL and LICENSE for licensing information.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Rcov
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            VERSION = "0.5.0"
         | 
| 8 | 
            +
            RELEASE_DATE = "2006-05-30"
         | 
| 9 | 
            +
            RCOVRT_ABI = [1,0,0]
         | 
| 10 | 
            +
            UPSTREAM_URL = "http://eigenclass.org/hiki.rb?rcov"
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
            # vi: set sw=2:
         | 
    
        data/lib/rcovrt.so
    ADDED
    
    | Binary file | 
    
        data/mingw-rbconfig.rb
    ADDED
    
    | @@ -0,0 +1,174 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            # This rbconfig.rb corresponds to a Ruby installation for win32 cross-compiled
         | 
| 3 | 
            +
            # with mingw under i686-linux. It can be used to cross-compile extensions for
         | 
| 4 | 
            +
            # win32 using said toolchain.
         | 
| 5 | 
            +
            # 
         | 
| 6 | 
            +
            # This file assumes that a cross-compiled mingw32 build (compatible with the
         | 
| 7 | 
            +
            # mswin32 builds) is installed under $HOME/ruby-mingw32.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module Config
         | 
| 10 | 
            +
              RUBY_VERSION == "1.8.4" or
         | 
| 11 | 
            +
                raise "ruby lib version (1.8.4) doesn't match executable version (#{RUBY_VERSION})"
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/1.8/i386-mingw32")
         | 
| 14 | 
            +
              DESTDIR = '' unless defined? DESTDIR
         | 
| 15 | 
            +
              CONFIG = {}
         | 
| 16 | 
            +
              CONFIG["DESTDIR"] = DESTDIR
         | 
| 17 | 
            +
              CONFIG["INSTALL"] = "/usr/bin/install -c"
         | 
| 18 | 
            +
              CONFIG["prefix"] = (TOPDIR || DESTDIR + "#{ENV["HOME"]}/ruby-mingw32")
         | 
| 19 | 
            +
              CONFIG["EXEEXT"] = ".exe"
         | 
| 20 | 
            +
              CONFIG["ruby_install_name"] = "ruby"
         | 
| 21 | 
            +
              CONFIG["RUBY_INSTALL_NAME"] = "ruby"
         | 
| 22 | 
            +
              CONFIG["RUBY_SO_NAME"] = "msvcrt-ruby18"
         | 
| 23 | 
            +
              CONFIG["SHELL"] = "/bin/sh"
         | 
| 24 | 
            +
              CONFIG["PATH_SEPARATOR"] = ":"
         | 
| 25 | 
            +
              CONFIG["PACKAGE_NAME"] = ""
         | 
| 26 | 
            +
              CONFIG["PACKAGE_TARNAME"] = ""
         | 
| 27 | 
            +
              CONFIG["PACKAGE_VERSION"] = ""
         | 
| 28 | 
            +
              CONFIG["PACKAGE_STRING"] = ""
         | 
| 29 | 
            +
              CONFIG["PACKAGE_BUGREPORT"] = ""
         | 
| 30 | 
            +
              CONFIG["exec_prefix"] = "$(prefix)"
         | 
| 31 | 
            +
              CONFIG["bindir"] = "$(exec_prefix)/bin"
         | 
| 32 | 
            +
              CONFIG["sbindir"] = "$(exec_prefix)/sbin"
         | 
| 33 | 
            +
              CONFIG["libexecdir"] = "$(exec_prefix)/libexec"
         | 
| 34 | 
            +
              CONFIG["datadir"] = "$(prefix)/share"
         | 
| 35 | 
            +
              CONFIG["sysconfdir"] = "$(prefix)/etc"
         | 
| 36 | 
            +
              CONFIG["sharedstatedir"] = "$(prefix)/com"
         | 
| 37 | 
            +
              CONFIG["localstatedir"] = "$(prefix)/var"
         | 
| 38 | 
            +
              CONFIG["libdir"] = "$(exec_prefix)/lib"
         | 
| 39 | 
            +
              CONFIG["includedir"] = "$(prefix)/include"
         | 
| 40 | 
            +
              CONFIG["oldincludedir"] = "/usr/include"
         | 
| 41 | 
            +
              CONFIG["infodir"] = "$(prefix)/info"
         | 
| 42 | 
            +
              CONFIG["mandir"] = "$(prefix)/man"
         | 
| 43 | 
            +
              CONFIG["build_alias"] = "i686-linux"
         | 
| 44 | 
            +
              CONFIG["host_alias"] = "i586-mingw32msvc"
         | 
| 45 | 
            +
              CONFIG["target_alias"] = "i386-mingw32"
         | 
| 46 | 
            +
              CONFIG["ECHO_C"] = ""
         | 
| 47 | 
            +
              CONFIG["ECHO_N"] = "-n"
         | 
| 48 | 
            +
              CONFIG["ECHO_T"] = ""
         | 
| 49 | 
            +
              CONFIG["LIBS"] = "-lwsock32 "
         | 
| 50 | 
            +
              CONFIG["MAJOR"] = "1"
         | 
| 51 | 
            +
              CONFIG["MINOR"] = "8"
         | 
| 52 | 
            +
              CONFIG["TEENY"] = "4"
         | 
| 53 | 
            +
              CONFIG["build"] = "i686-pc-linux"
         | 
| 54 | 
            +
              CONFIG["build_cpu"] = "i686"
         | 
| 55 | 
            +
              CONFIG["build_vendor"] = "pc"
         | 
| 56 | 
            +
              CONFIG["build_os"] = "linux"
         | 
| 57 | 
            +
              CONFIG["host"] = "i586-pc-mingw32msvc"
         | 
| 58 | 
            +
              CONFIG["host_cpu"] = "i586"
         | 
| 59 | 
            +
              CONFIG["host_vendor"] = "pc"
         | 
| 60 | 
            +
              CONFIG["host_os"] = "mingw32msvc"
         | 
| 61 | 
            +
              CONFIG["target"] = "i386-pc-mingw32"
         | 
| 62 | 
            +
              CONFIG["target_cpu"] = "i386"
         | 
| 63 | 
            +
              CONFIG["target_vendor"] = "pc"
         | 
| 64 | 
            +
              CONFIG["target_os"] = "mingw32"
         | 
| 65 | 
            +
              CONFIG["CC"] = "i586-mingw32msvc-gcc"
         | 
| 66 | 
            +
              CONFIG["CFLAGS"] = "-g -O2 "
         | 
| 67 | 
            +
              CONFIG["LDFLAGS"] = ""
         | 
| 68 | 
            +
              CONFIG["CPPFLAGS"] = ""
         | 
| 69 | 
            +
              CONFIG["OBJEXT"] = "o"
         | 
| 70 | 
            +
              CONFIG["CPP"] = "i586-mingw32msvc-gcc -E"
         | 
| 71 | 
            +
              CONFIG["EGREP"] = "grep -E"
         | 
| 72 | 
            +
              CONFIG["GNU_LD"] = "yes"
         | 
| 73 | 
            +
              CONFIG["CPPOUTFILE"] = "-o conftest.i"
         | 
| 74 | 
            +
              CONFIG["OUTFLAG"] = "-o "
         | 
| 75 | 
            +
              CONFIG["YACC"] = "bison -y"
         | 
| 76 | 
            +
              CONFIG["RANLIB"] = "i586-mingw32msvc-ranlib"
         | 
| 77 | 
            +
              CONFIG["AR"] = "i586-mingw32msvc-ar"
         | 
| 78 | 
            +
              CONFIG["NM"] = "i586-mingw32msvc-nm"
         | 
| 79 | 
            +
              CONFIG["WINDRES"] = "i586-mingw32msvc-windres"
         | 
| 80 | 
            +
              CONFIG["DLLWRAP"] = "i586-mingw32msvc-dllwrap"
         | 
| 81 | 
            +
              CONFIG["OBJDUMP"] = "i586-mingw32msvc-objdump"
         | 
| 82 | 
            +
              CONFIG["LN_S"] = "ln -s"
         | 
| 83 | 
            +
              CONFIG["SET_MAKE"] = ""
         | 
| 84 | 
            +
              CONFIG["INSTALL_PROGRAM"] = "$(INSTALL)"
         | 
| 85 | 
            +
              CONFIG["INSTALL_SCRIPT"] = "$(INSTALL)"
         | 
| 86 | 
            +
              CONFIG["INSTALL_DATA"] = "$(INSTALL) -m 644"
         | 
| 87 | 
            +
              CONFIG["RM"] = "rm -f"
         | 
| 88 | 
            +
              CONFIG["CP"] = "cp"
         | 
| 89 | 
            +
              CONFIG["MAKEDIRS"] = "mkdir -p"
         | 
| 90 | 
            +
              CONFIG["LIBOBJS"] = " fileblocks$(U).o crypt$(U).o flock$(U).o acosh$(U).o win32$(U).o"
         | 
| 91 | 
            +
              CONFIG["ALLOCA"] = ""
         | 
| 92 | 
            +
              CONFIG["DLDFLAGS"] = " -Wl,--enable-auto-import,--export-all"
         | 
| 93 | 
            +
              CONFIG["ARCH_FLAG"] = ""
         | 
| 94 | 
            +
              CONFIG["STATIC"] = ""
         | 
| 95 | 
            +
              CONFIG["CCDLFLAGS"] = ""
         | 
| 96 | 
            +
              CONFIG["LDSHARED"] = "i586-mingw32msvc-gcc -shared -s"
         | 
| 97 | 
            +
              CONFIG["DLEXT"] = "so"
         | 
| 98 | 
            +
              CONFIG["DLEXT2"] = "dll"
         | 
| 99 | 
            +
              CONFIG["LIBEXT"] = "a"
         | 
| 100 | 
            +
              CONFIG["LINK_SO"] = ""
         | 
| 101 | 
            +
              CONFIG["LIBPATHFLAG"] = " -L\"%s\""
         | 
| 102 | 
            +
              CONFIG["RPATHFLAG"] = ""
         | 
| 103 | 
            +
              CONFIG["LIBPATHENV"] = ""
         | 
| 104 | 
            +
              CONFIG["TRY_LINK"] = ""
         | 
| 105 | 
            +
              CONFIG["STRIP"] = "strip"
         | 
| 106 | 
            +
              CONFIG["EXTSTATIC"] = ""
         | 
| 107 | 
            +
              CONFIG["setup"] = "Setup"
         | 
| 108 | 
            +
              CONFIG["MINIRUBY"] = "ruby -rfake"
         | 
| 109 | 
            +
              CONFIG["PREP"] = "fake.rb"
         | 
| 110 | 
            +
              CONFIG["RUNRUBY"] = "$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`"
         | 
| 111 | 
            +
              CONFIG["EXTOUT"] = ".ext"
         | 
| 112 | 
            +
              CONFIG["ARCHFILE"] = ""
         | 
| 113 | 
            +
              CONFIG["RDOCTARGET"] = ""
         | 
| 114 | 
            +
              CONFIG["XCFLAGS"] = " -DRUBY_EXPORT"
         | 
| 115 | 
            +
              CONFIG["XLDFLAGS"] = " -Wl,--stack,0x02000000 -L."
         | 
| 116 | 
            +
              CONFIG["LIBRUBY_LDSHARED"] = "i586-mingw32msvc-gcc -shared -s"
         | 
| 117 | 
            +
              CONFIG["LIBRUBY_DLDFLAGS"] = " -Wl,--enable-auto-import,--export-all -Wl,--out-implib=$(LIBRUBY)"
         | 
| 118 | 
            +
              CONFIG["rubyw_install_name"] = "rubyw"
         | 
| 119 | 
            +
              CONFIG["RUBYW_INSTALL_NAME"] = "rubyw"
         | 
| 120 | 
            +
              CONFIG["LIBRUBY_A"] = "lib$(RUBY_SO_NAME)-static.a"
         | 
| 121 | 
            +
              CONFIG["LIBRUBY_SO"] = "$(RUBY_SO_NAME).dll"
         | 
| 122 | 
            +
              CONFIG["LIBRUBY_ALIASES"] = ""
         | 
| 123 | 
            +
              CONFIG["LIBRUBY"] = "lib$(LIBRUBY_SO).a"
         | 
| 124 | 
            +
              CONFIG["LIBRUBYARG"] = "$(LIBRUBYARG_SHARED)"
         | 
| 125 | 
            +
              CONFIG["LIBRUBYARG_STATIC"] = "-l$(RUBY_SO_NAME)-static"
         | 
| 126 | 
            +
              CONFIG["LIBRUBYARG_SHARED"] = "-l$(RUBY_SO_NAME)"
         | 
| 127 | 
            +
              CONFIG["SOLIBS"] = "$(LIBS)"
         | 
| 128 | 
            +
              CONFIG["DLDLIBS"] = ""
         | 
| 129 | 
            +
              CONFIG["ENABLE_SHARED"] = "yes"
         | 
| 130 | 
            +
              CONFIG["MAINLIBS"] = ""
         | 
| 131 | 
            +
              CONFIG["COMMON_LIBS"] = "m"
         | 
| 132 | 
            +
              CONFIG["COMMON_MACROS"] = ""
         | 
| 133 | 
            +
              CONFIG["COMMON_HEADERS"] = "windows.h winsock.h"
         | 
| 134 | 
            +
              CONFIG["EXPORT_PREFIX"] = ""
         | 
| 135 | 
            +
              CONFIG["MINIOBJS"] = "dmydln.o"
         | 
| 136 | 
            +
              CONFIG["MAKEFILES"] = "Makefile GNUmakefile"
         | 
| 137 | 
            +
              CONFIG["arch"] = "i386-mingw32"
         | 
| 138 | 
            +
              CONFIG["sitearch"] = "i386-msvcrt"
         | 
| 139 | 
            +
              CONFIG["sitedir"] = "$(prefix)/lib/ruby/site_ruby"
         | 
| 140 | 
            +
              CONFIG["configure_args"] = "'--host=i586-mingw32msvc' '--target=i386-mingw32' '--build=i686-linux' '--prefix=#{ENV["HOME"]}/ruby-mingw32' 'build_alias=i686-linux' 'host_alias=i586-mingw32msvc' 'target_alias=i386-mingw32'"
         | 
| 141 | 
            +
              CONFIG["NROFF"] = "/usr/bin/nroff"
         | 
| 142 | 
            +
              CONFIG["MANTYPE"] = "doc"
         | 
| 143 | 
            +
              CONFIG["LTLIBOBJS"] = " fileblocks$(U).lo crypt$(U).lo flock$(U).lo acosh$(U).lo win32$(U).lo"
         | 
| 144 | 
            +
              CONFIG["ruby_version"] = "$(MAJOR).$(MINOR)"
         | 
| 145 | 
            +
              CONFIG["rubylibdir"] = "$(libdir)/ruby/$(ruby_version)"
         | 
| 146 | 
            +
              CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
         | 
| 147 | 
            +
              CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
         | 
| 148 | 
            +
              CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
         | 
| 149 | 
            +
              CONFIG["topdir"] = File.dirname(__FILE__)
         | 
| 150 | 
            +
              MAKEFILE_CONFIG = {}
         | 
| 151 | 
            +
              CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
         | 
| 152 | 
            +
              def Config::expand(val, config = CONFIG)
         | 
| 153 | 
            +
                val.gsub!(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) do |var|
         | 
| 154 | 
            +
                  if !(v = $1 || $2)
         | 
| 155 | 
            +
            	'$'
         | 
| 156 | 
            +
                  elsif key = config[v = v[/\A[^:]+(?=(?::(.*?)=(.*))?\z)/]]
         | 
| 157 | 
            +
            	pat, sub = $1, $2
         | 
| 158 | 
            +
            	config[v] = false
         | 
| 159 | 
            +
            	Config::expand(key, config)
         | 
| 160 | 
            +
            	config[v] = key
         | 
| 161 | 
            +
            	key = key.gsub(/#{Regexp.quote(pat)}(?=\s|\z)/n) {sub} if pat
         | 
| 162 | 
            +
            	key
         | 
| 163 | 
            +
                  else
         | 
| 164 | 
            +
            	var
         | 
| 165 | 
            +
                  end
         | 
| 166 | 
            +
                end
         | 
| 167 | 
            +
                val
         | 
| 168 | 
            +
              end
         | 
| 169 | 
            +
              CONFIG.each_value do |val|
         | 
| 170 | 
            +
                Config::expand(val)
         | 
| 171 | 
            +
              end
         | 
| 172 | 
            +
            end
         | 
| 173 | 
            +
            RbConfig = Config # compatibility for ruby-1.9
         | 
| 174 | 
            +
            CROSS_COMPILING = nil unless defined? CROSS_COMPILING
         |