From c2a6295ec04a191c689d22254ac1ad5d665e27ad Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 12 Jul 2020 00:09:04 +0900 Subject: [PATCH] Make the mkmf methods private in the global [Bug #16896] --- lib/mkmf.rb | 7 ++++++- test/mkmf/test_mkmf.rb | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/mkmf/test_mkmf.rb diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 3abf168d20..383579eb71 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -2822,7 +2822,12 @@ realclean: distclean end end -include MakeMakefile +# MakeMakefile::Global = # +m = Module.new { + include(MakeMakefile) + private(*MakeMakefile.public_instance_methods(false)) +} +include m if not $extmk and /\A(extconf|makefile).rb\z/ =~ File.basename($0) END {mkmf_failed($0)} diff --git a/test/mkmf/test_mkmf.rb b/test/mkmf/test_mkmf.rb new file mode 100644 index 0000000000..adb86eca8d --- /dev/null +++ b/test/mkmf/test_mkmf.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: false +require 'test/unit' +require 'mkmf' + +class TestMkmf < Test::Unit::TestCase + class TestGlobal < TestMkmf + main = TOPLEVEL_BINDING.receiver + MakeMakefile.public_instance_methods(false).each do |m| + define_method(:"test_global_#{m}") do + assert_respond_to(main, [m, true]) + assert_not_respond_to(main, [m, false]) + end + end + end +end