diff options
author | Jun Aruga <junaruga@users.noreply.github.com> | 2023-05-29 10:09:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-29 10:09:32 +0200 |
commit | 57459b83a9a52ab921094a1562fe3056df9a437a (patch) | |
tree | cfaa3343aa917a79430b2135280d7e929b5299f6 /test/mkmf | |
parent | d5ef373b1194bac64784ae316d125d7a2cf1988a (diff) | |
download | ruby-57459b83a9a52ab921094a1562fe3056df9a437a.tar.gz |
mkmf: Add the extra option `--with-verbose` to enable verbose mode. (#7863)
This commit is to add an extra option to enable verbose mode (V=1) in the
generated `Makefile` at runtime of the Ruby to print compiler command lines by
the commands below when building native extensions. It's possible to enable the
verbose mode by setting the environment variable `MAKEFLAGS="V=1"`[1]
implemented in GNU make. However, I wanted to make a consistent user-interface
not depending on the specific make's implementation.
```
$ ruby /path/to/extconf.rb -- --with-verbose
```
You can also add the extra option via rake-compiler gem.
```
$ rake compiler -- --with-verbose
```
If the extra option is not given, the value of the
`RbConfig::CONFIG["MKMF_VERBOSE"]` enabled by the configure option below is
used.
```
$ ./configure --enable-mkmf-verbose
```
For the unit tests, updated the following files.
* The `test/mkmf/test_configuration.rb` was created to test the cases with the
`configuration` method and this implementation.
* Updated the `TestMkmf#assert_separately` to set the extra
arguments in `test/mkmf/base.rb`. Updated tests using the `assert_separately`.
* Added tests for `MakeMakefile#with_config` in the `test/mkmf/test_config.rb`.
[1] https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html
Fixes [Bug #19695]
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Diffstat (limited to 'test/mkmf')
-rw-r--r-- | test/mkmf/base.rb | 7 | ||||
-rw-r--r-- | test/mkmf/test_config.rb | 29 | ||||
-rw-r--r-- | test/mkmf/test_configuration.rb | 39 | ||||
-rw-r--r-- | test/mkmf/test_flags.rb | 6 |
4 files changed, 69 insertions, 12 deletions
diff --git a/test/mkmf/base.rb b/test/mkmf/base.rb index ec42bca100..7df07c16a6 100644 --- a/test/mkmf/base.rb +++ b/test/mkmf/base.rb @@ -147,7 +147,10 @@ class TestMkmf < Test::Unit::TestCase include Base - def assert_separately(args, src, *rest, **options) - super(args + ["-r#{__FILE__}"], "extend TestMkmf::Base; setup\nEND{teardown}\n#{src}", *rest, **options) + def assert_separately(args, extra_args, src, *rest, **options) + super(args + ["-r#{__FILE__}"] + %w[- --] + extra_args, + "extend TestMkmf::Base; setup\nEND{teardown}\n#{src}", + *rest, + **options) end end diff --git a/test/mkmf/test_config.rb b/test/mkmf/test_config.rb index 93ebe3a4ea..7211c61d53 100644 --- a/test/mkmf/test_config.rb +++ b/test/mkmf/test_config.rb @@ -1,15 +1,30 @@ # frozen_string_literal: false -$extmk = true +require_relative 'base' -require 'test/unit' -require 'mkmf' - -class TestMkmfConfig < Test::Unit::TestCase +class TestMkmfConfig < TestMkmf def test_dir_config bug8074 = '[Bug #8074]' lib = RbConfig.expand(RbConfig::MAKEFILE_CONFIG["libdir"], "exec_prefix"=>"/test/foo") - assert_separately %w[-rmkmf - -- --with-foo-dir=/test/foo], %{ + assert_separately([], %w[--with-foo-dir=/test/foo], <<-"end;") assert_equal(%w[/test/foo/include #{lib}], dir_config("foo"), #{bug8074.dump}) - } + end; + end + + def test_with_config_with_arg_and_value + assert_separately([], %w[--with-foo=bar], <<-'end;') + assert_equal("bar", with_config("foo")) + end; + end + + def test_with_config_with_arg_and_no_value + assert_separately([], %w[--with-foo], <<-'end;') + assert_equal(true, with_config("foo")) + end; + end + + def test_with_config_without_arg + assert_separately([], %w[--without-foo], <<-'end;') + assert_equal(false, with_config("foo")) + end; end end diff --git a/test/mkmf/test_configuration.rb b/test/mkmf/test_configuration.rb new file mode 100644 index 0000000000..0261f78a01 --- /dev/null +++ b/test/mkmf/test_configuration.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: false +require_relative 'base' + +class TestMkmfConfiguration < TestMkmf + def test_verbose_with_rbconfig_verbose_disabled + makefile = mkmf do + self.class::CONFIG['MKMF_VERBOSE'] = "0" + init_mkmf(self.class::CONFIG) + configuration '.' + end + verbose = makefile.grep(/^V =/).first[/^V = (.)$/, 1] + + assert_equal "0", verbose + end + + def test_verbose_with_rbconfig_verbose_enabled + makefile = mkmf do + self.class::CONFIG['MKMF_VERBOSE'] = "1" + init_mkmf(self.class::CONFIG) + configuration '.' + end + verbose = makefile.grep(/^V =/).first[/^V = (.)$/, 1] + + assert_equal "1", verbose + end + + def test_verbose_with_arg + assert_separately([], %w[--with-verbose], <<-'end;') + makefile = mkmf do + self.class::CONFIG['MKMF_VERBOSE'] = "0" + init_mkmf(self.class::CONFIG) + configuration '.' + end + verbose = makefile.grep(/^V =/).first[/^V = (.)$/, 1] + + assert_equal "1", verbose + end; + end +end diff --git a/test/mkmf/test_flags.rb b/test/mkmf/test_flags.rb index aedf06b610..6fde46adec 100644 --- a/test/mkmf/test_flags.rb +++ b/test/mkmf/test_flags.rb @@ -33,21 +33,21 @@ class TestMkmfFlags < TestMkmf end def test_try_ldflag_invalid_opt - assert_separately([], <<-'end;') #do + assert_separately([], [], <<-'end;') #do assert(!try_ldflags("nosuch.c"), TestMkmf::MKMFLOG) assert(have_devel?, TestMkmf::MKMFLOG) end; end def test_try_cflag_invalid_opt - assert_separately([], <<-'end;', timeout: 30) #do + assert_separately([], [], <<-'end;', timeout: 30) #do assert(!try_cflags("nosuch.c"), TestMkmf::MKMFLOG) assert(have_devel?, TestMkmf::MKMFLOG) end; end def test_try_cppflag_invalid_opt - assert_separately([], <<-'end;') #do + assert_separately([], [], <<-'end;') #do assert(!try_cppflags("nosuch.c"), TestMkmf::MKMFLOG) assert(have_devel?, TestMkmf::MKMFLOG) end; |