Bug #16896
Updated by hsbt (Hiroshi SHIBATA) almost 4 years ago
Right they are public, and since mkmf.rb does `include MakeMakefile` it defines a lot of public methods on all objects. ``` $ ruby -e 'a=1.public_methods; require "mkmf"; b=1.public_methods; puts (b-a).sort' append_cflags append_cppflags append_ldflags append_library arg_config cc_command cc_config check_signedness check_sizeof checking_for checking_message configuration conftest_source convertible_int cpp_command cpp_include create_header create_makefile create_tmpsrc depend_rules dir_config dummy_makefile each_compile_rules egrep_cpp enable_config find_executable find_executable0 find_header find_library find_type have_const have_devel? have_framework have_func have_header have_library have_macro have_struct_member have_type have_typeof? have_var init_mkmf install_dirs install_files install_rb libpath_env libpathflag link_command link_config log_src macro_defined? map_dir merge_libs message mkintpath mkmf_failed modified? pkg_config relative_from scalar_ptr_type? scalar_type? split_libs timestamp_file try_cflags try_compile try_const try_constant try_cpp try_cppflags try_do try_func try_header try_ldflags try_link try_link0 try_run try_signedness try_static_assert try_type try_var typedef_expr what_type? winsep with_cflags with_config with_cppflags with_destdir with_ldflags with_werror xpopen xsystem ``` Since I expect all those methods are called without a receiver, I think they could be private. Thoughts? The current situation makes extconf.rb brittle to method name conflicts. One real bug caused by this is FFI doesn't work when mkmf is required (filed as https://github.com/ffi/ffi/issues/776 ): https://github.com/ffi/ffi/issues/776): ``` $ ruby -rmkmf -rffi -e 'module A; class A < FFI::Struct; layout :a, :int; end; end' |& cat /home/eregon/.rubies/ruby-2.7.1/lib/ruby/2.7.0/mkmf.rb:1270:in `find_type': wrong number of arguments (given 1, expected 2+) (ArgumentError) from /home/eregon/.rubies/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/ffi-1.12.2/lib/ffi/struct.rb:271:in `find_type' from /home/eregon/.rubies/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/ffi-1.12.2/lib/ffi/struct.rb:265:in `find_field_type' from /home/eregon/.rubies/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/ffi-1.12.2/lib/ffi/struct.rb:305:in `array_layout' from /home/eregon/.rubies/ruby-2.7.1/lib/ruby/gems/2.7.0/gems/ffi-1.12.2/lib/ffi/struct.rb:217:in `layout' from -e:1:in `<class:A>' from -e:1:in `<module:A>' from -e:1:in `<main>' ```