* configure.in (warnflags): add -Werror=implicit-function-declaration

if available.
* lib/mkmf.rb (init_mkmf): ignore warnings in mkmf tests.
* test/mkmf/base.rb (setup, teardown): restore config values.
* test/mkmf/test_flags.rb: split from test_find_executable.rb.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2011-01-15 02:57:36 +00:00
Родитель ca6a75cd38
Коммит b794a2bd8c
6 изменённых файлов: 103 добавлений и 24 удалений

Просмотреть файл

@ -1,3 +1,14 @@
Sat Jan 15 11:57:30 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (warnflags): add -Werror=implicit-function-declaration
if available.
* lib/mkmf.rb (init_mkmf): ignore warnings in mkmf tests.
* test/mkmf/base.rb (setup, teardown): restore config values.
* test/mkmf/test_flags.rb: split from test_find_executable.rb.
Sat Jan 15 10:04:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ruby.c (process_options): autoload rubygems.

Просмотреть файл

@ -450,8 +450,14 @@ if test "$GCC:${warnflags+set}:no" = yes::no; then
-Werror=pointer-arith \
-Werror=write-strings \
-Werror=declaration-after-statement \
-Werror=shorten-64-to-32; do
test "$particular_werror_flags" = yes || wflag=`echo x$wflag | sed 's/^x-Werror=/-W/'`
-Werror=shorten-64-to-32 \
-Werror-implicit-function-declaration \
; do
if test "$particular_werror_flags" = yes; then
wflag=`echo x$wflag | sed 's/^x-Werror-/-Werror=/;s/^x//'`
else
wflag=`echo x$wflag | sed 's/^x-Werror=/-W/;s/^x//'`
fi
ok=no
RUBY_TRY_CFLAGS($wflag, [warnflags="${warnflags+$warnflags }$wflag" ok=yes])
AS_CASE([$ok:$wflag], [no:-Werror=*], [

Просмотреть файл

@ -1658,10 +1658,6 @@ VPATH = #{vpath.join(CONFIG['PATH_SEPARATOR'])}
end
possible_command = (proc {|s| s if /top_srcdir/ !~ s} unless $extmk)
extconf_h = $extconf_h ? "-DRUBY_EXTCONF_H=\\\"$(RUBY_EXTCONF_H)\\\" " : $defs.join(" ") << " "
if warnflags = CONFIG['warnflags'] and CONFIG['GCC'] == 'yes' and !$extmk
# turn warnings into errors only for bundled extensions.
warnflags = warnflags.gsub(/(\A|\s)-Werror=/, '\1-W')
end
mk << %{
CC = #{CONFIG['CC']}
CXX = #{CONFIG['CXX']}
@ -1676,7 +1672,7 @@ RUBY_EXTCONF_H = #{$extconf_h}
cflags = #{CONFIG['cflags']}
optflags = #{CONFIG['optflags']}
debugflags = #{CONFIG['debugflags']}
warnflags = #{warnflags}
warnflags = #{$warnflags}
CFLAGS = #{$static ? '' : CONFIG['CCDLFLAGS']} #$CFLAGS #$ARCH_FLAG
INCFLAGS = -I. #$INCFLAGS
DEFS = #{CONFIG['DEFS']}
@ -2107,12 +2103,21 @@ end
# :stopdoc:
def init_mkmf(config = CONFIG)
def init_mkmf(config = CONFIG, rbconfig = RbConfig::CONFIG)
$makefile_created = false
$arg_config = []
$enable_shared = config['ENABLE_SHARED'] == 'yes'
$defs = []
$extconf_h = nil
if $warnflags = CONFIG['warnflags'] and CONFIG['GCC'] == 'yes'
# turn warnings into errors only for bundled extensions.
config['warnflags'] = $warnflags.gsub(/(\A|\s)-Werror[-=]/, '\1-W')
RbConfig.expand(rbconfig['warnflags'] = config['warnflags'].dup)
config.each do |key, val|
RbConfig.expand(rbconfig[key] = val.dup) if /warnflags/ =~ val
end
$warnflags = config['warnflags'] unless $extmk
end
$CFLAGS = with_config("cflags", arg_config("CFLAGS", config["CFLAGS"])).dup
$ARCH_FLAG = with_config("arch_flag", arg_config("ARCH_FLAG", config["ARCH_FLAG"])).dup
$CPPFLAGS = with_config("cppflags", arg_config("CPPFLAGS", config["CPPFLAGS"])).dup

Просмотреть файл

@ -58,15 +58,53 @@ class TestMkmf < Test::Unit::TestCase
end
def setup
@rbconfig = rbconfig0 = RbConfig::CONFIG
@mkconfig = mkconfig0 = RbConfig::MAKEFILE_CONFIG
rbconfig = {
"hdrdir" => $hdrdir,
"srcdir" => $srcdir,
"topdir" => $topdir,
}
mkconfig = {
"hdrdir" => "$(top_srcdir)/include",
"srcdir" => "$(top_srcdir)/ext/#{$mdir}",
"topdir" => $topdir,
}
rbconfig0.each_pair {|key, val| rbconfig[key] ||= val.dup}
mkconfig0.each_pair {|key, val| mkconfig[key] ||= val.dup}
RbConfig.module_eval {
remove_const(:CONFIG)
const_set(:CONFIG, rbconfig)
remove_const(:MAKEFILE_CONFIG)
const_set(:MAKEFILE_CONFIG, mkconfig)
}
Object.class_eval {
remove_const(:CONFIG)
const_set(:CONFIG, mkconfig)
}
@tmpdir = Dir.mktmpdir
@curdir = Dir.pwd
@mkmfobj = Object.new
@stdout = Capture.new
Dir.chdir(@tmpdir)
@quiet, Logging.quiet = Logging.quiet, true
init_mkmf
$INCFLAGS[0, 0] = "-I. "
end
def teardown
rbconfig0 = @rbconfig
mkconfig0 = @mkconfig
RbConfig.module_eval {
remove_const(:CONFIG)
const_set(:CONFIG, rbconfig0)
remove_const(:MAKEFILE_CONFIG)
const_set(:MAKEFILE_CONFIG, mkconfig0)
}
Object.class_eval {
remove_const(:CONFIG)
const_set(:CONFIG, mkconfig0)
}
Logging.quiet = @quiet
Logging.log_close
Dir.chdir(@curdir)

Просмотреть файл

@ -2,22 +2,6 @@ require_relative 'base'
class TestMkmf
class TestFindExecutable < TestMkmf
def test_valid_warnflags
val = $extmk
begin
makefile = mkmf do
$extmk = false
self.class::CONFIG['warnflags'] = "-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"
self.class::CONFIG['GCC'] = 'yes'
configuration '.'
end
generated_flags = makefile.grep(/warnflags/).first[/^warnflags = .*$/]
assert_equal "warnflags = -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32", generated_flags
ensure
$extmk = val
end
end
def test_find_executable
bug2669 = '[ruby-core:27912]'
path, ENV["PATH"] = ENV["PATH"], path

35
test/mkmf/test_flags.rb Normal file
Просмотреть файл

@ -0,0 +1,35 @@
require_relative 'base'
class TestMkmf
class TestFlags < 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 -Wimplicit-function-declaration
", generated_flags
ensure
$warnflags = warnflags
$extmk = val
end
end
end