# How to use “configure” and “make” commands for Ruby¶ ↑

This is for developers of Ruby. If you are a user of Ruby, please see README.md.

## In-place build¶ ↑

    $ ./autogen.sh
    $ ./configure --prefix=$PWD/local
    $ make
    $ make install
    $ ./local/bin/ruby -e 'puts "Hello"'
    Hello

## Out-of-place build¶ ↑

    $ ./autogen.sh
    $ mkdir ../ruby-build
    $ cd ../ruby-build
    $ ../ruby-src/configure --prefix=$PWD/local
    $ make
    $ make install
    $ ./local/bin/ruby -e 'puts "Hello"'
    Hello

## How to run the whole test suite¶ ↑

    $ make check

It runs (about) three test suites:

- `make test` (a test suite for the interpreter core)

- `make test-all` (for all builtin classes and libraries)

- `make test-spec` (a conformance test suite for Ruby implementations)

- `make test-bundler` (a test suite for the bundler examples)

## How to run the test suite with log¶ ↑

    $ make test OPTS=-v

    $ make test-all TESTS=-v

    $ make test-spec MSPECOPT=-Vfs

## How to run a part of the test suite¶ ↑

### Runs a directory¶ ↑

    $ make test-all TESTS=test/rubygems
    $ make test-all TESTS=rubygems

### Runs a file¶ ↑

    $ make test-all TESTS=test/ruby/test_foo.rb
    $ make test-all TESTS=ruby/foo

### Runs a test whose name includes test_bar¶ ↑

    $ make test-all TESTS="test/ruby/test_foo.rb -n /test_bar/"

### Runs a file or directory with GNU make¶ ↑

    $ make test/ruby/test_foo.rb
    $ make test/ruby/test_foo.rb TESTOPTS="-n /test_bar/"

### Runs a ruby-spec directory¶ ↑

    $ make test-spec MSPECOPT=spec/ruby/core/foo

### Runs a ruby-spec file¶ ↑

    $ make test-spec MSPECOPT=spec/ruby/core/foo/bar_spec.rb

### Runs a ruby-spec file or directory with GNU make¶ ↑

    $ make spec/ruby/core/foo/bar_spec.rb

### Runs a bundler spec file¶ ↑

    $ make test-bundler BUNDLER_SPECS=commands/exec_spec.rb:58

## How to measure coverage of C and Ruby code¶ ↑

You need to be able to use gcc (gcov) and lcov visualizer.

    $ ./autogen.sh
    $ ./configure --enable-gcov
    $ make
    $ make update-coverage
    $ rm -f test-coverage.dat
    $ make test-all COVERAGE=true
    $ make lcov
    $ open lcov-out/index.html

If you need only C code coverage, you can remove `COVERAGE=true` from the above process. You can also use `gcov` command directly to get per-file coverage.

If you need only Ruby code coverage, you can remove `--enable-gcov`. Note that `test-coverage.dat` accumulates all runs of `make test-all`. Make sure that you remove the file if you want to measure one test run.

You can see the coverage result of CI: rubyci.org/coverage

## How to benchmark¶ ↑

see github.com/ruby/ruby/tree/master/benchmark#make-benchmark