summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-15 02:57:36 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-15 02:57:36 +0000
commitb794a2bd8c40526c000abde831e372744c3fa3e0 (patch)
treedd27ab02b75a3dd312beaa08b20a974ffc05d6b5
parentca6a75cd38c97774b2c58a3d305dd5e1c9055772 (diff)
* 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
-rw-r--r--ChangeLog11
-rw-r--r--configure.in10
-rw-r--r--lib/mkmf.rb17
-rw-r--r--test/mkmf/base.rb38
-rw-r--r--test/mkmf/test_find_executable.rb16
-rw-r--r--test/mkmf/test_flags.rb35
6 files changed, 103 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index d67d742ff5..6bcd3c3acd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/configure.in b/configure.in
index 3f0a46375d..5e14df6aa5 100644
--- a/configure.in
+++ b/configure.in
@@ -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=*], [
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index 1a1db54e7f..cc9f918958 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -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
diff --git a/test/mkmf/base.rb b/test/mkmf/base.rb
index d4cf80376f..a9d3aec338 100644
--- a/test/mkmf/base.rb
+++ b/test/mkmf/base.rb
@@ -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)
diff --git a/test/mkmf/test_find_executable.rb b/test/mkmf/test_find_executable.rb
index 132330bf7c..5ccec880fd 100644
--- a/test/mkmf/test_find_executable.rb
+++ b/test/mkmf/test_find_executable.rb
@@ -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
diff --git a/test/mkmf/test_flags.rb b/test/mkmf/test_flags.rb
new file mode 100644
index 0000000000..3bb278071a
--- /dev/null
+++ b/test/mkmf/test_flags.rb
@@ -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