def METHOD_NAME(self):
    if not self.env.RUBY:
        self.fatal('ruby detection is required first')
    if not self.env.CC_NAME and not self.env.CXX_NAME:
        self.fatal('load a c/c++ compiler first')
    version = tuple(map(int, self.env.RUBY_VERSION.split(".")))
    def read_out(cmd):
        return Utils.to_list(self.cmd_and_log(self.env.RUBY + ['-rrbconfig', '-e', cmd]))
    def read_config(key):
        return read_out('puts RbConfig::CONFIG[%r]' % key)
    cpppath = archdir = read_config('archdir')
    if version >= (1, 9, 0):
        ruby_hdrdir = read_config('rubyhdrdir')
        cpppath += ruby_hdrdir
        if version >= (2, 0, 0):
            cpppath += read_config('rubyarchhdrdir')
        cpppath += [os.path.join(ruby_hdrdir[0], read_config('arch')[0])]
    self.check(header_name='ruby.h', includes=cpppath, errmsg='could not find ruby header file', link_header_test=False)
    self.env.LIBPATH_RUBYEXT = read_config('libdir')
    self.env.LIBPATH_RUBYEXT += archdir
    self.env.INCLUDES_RUBYEXT = cpppath
    self.env.CFLAGS_RUBYEXT = read_config('CCDLFLAGS')
    self.env.rubyext_PATTERN = '%s.' + read_config('DLEXT')[0]
    flags = read_config('LDSHARED')
    while flags and flags[0][0] != '-':
        flags = flags[1:]
    if len(flags) > 1 and flags[1] == "ppc":
        flags = flags[2:]
    self.env.LINKFLAGS_RUBYEXT = flags
    self.env.LINKFLAGS_RUBYEXT += read_config('LIBS')
    self.env.LINKFLAGS_RUBYEXT += read_config('LIBRUBYARG_SHARED')
    if Options.options.rubyarchdir:
        self.env.ARCHDIR_RUBY = Options.options.rubyarchdir
    else:
        self.env.ARCHDIR_RUBY = read_config('sitearchdir')[0]
    if Options.options.rubylibdir:
        self.env.LIBDIR_RUBY = Options.options.rubylibdir
    else:
        self.env.LIBDIR_RUBY = read_config('sitelibdir')[0]