Project

General

Profile

Bug #16896

Updated by hsbt (Hiroshi SHIBATA) 3 months 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>' 
 ```

Back