mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 21:14:23 +02:00

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>
55 lines
1.6 KiB
Ruby
55 lines
1.6 KiB
Ruby
# frozen_string_literal: false
|
|
require_relative 'base'
|
|
|
|
class TestMkmfFlags < TestMkmf
|
|
def test_valid_warnflags
|
|
val = $extmk
|
|
warnflags = $warnflags
|
|
makefile = mkmf do
|
|
$extmk = false
|
|
self.class::CONFIG['warnflags'] = %w"-Wextra
|
|
-Wno-unused-parameter -Wno-parentheses -Wno-long-long
|
|
-Wno-missing-field-initializers -Werror=pointer-arith
|
|
-Werror=write-strings -Werror=declaration-after-statement
|
|
-Werror=shorten-64-to-32
|
|
-Werror-implicit-function-declaration
|
|
".join(' ')
|
|
self.class::CONFIG['GCC'] = 'yes'
|
|
init_mkmf(self.class::CONFIG)
|
|
configuration '.'
|
|
end
|
|
generated_flags = makefile.grep(/warnflags/).first[/^warnflags = (.*)$/, 1].split
|
|
|
|
assert_equal %w"
|
|
-Wextra -Wno-unused-parameter -Wno-parentheses
|
|
-Wno-long-long -Wno-missing-field-initializers -Wpointer-arith
|
|
-Wwrite-strings -Wdeclaration-after-statement
|
|
-Wshorten-64-to-32 -Werror-implicit-function-declaration
|
|
", generated_flags
|
|
|
|
ensure
|
|
$warnflags = warnflags
|
|
$extmk = val
|
|
end
|
|
|
|
def test_try_ldflag_invalid_opt
|
|
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(!try_cflags("nosuch.c"), TestMkmf::MKMFLOG)
|
|
assert(have_devel?, TestMkmf::MKMFLOG)
|
|
end;
|
|
end
|
|
|
|
def test_try_cppflag_invalid_opt
|
|
assert_separately([], [], <<-'end;') #do
|
|
assert(!try_cppflags("nosuch.c"), TestMkmf::MKMFLOG)
|
|
assert(have_devel?, TestMkmf::MKMFLOG)
|
|
end;
|
|
end
|
|
end
|