Issue #3330 has been updated by mame (Yusuke Endoh).

Status changed from Assigned to Rejected

#3333 ????????????????????????????????????(??????????????????????)

-- 
Yusuke Endoh <mame / tsg.ne.jp>
----------------------------------------
Feature #3330: mkmf (find|have)_cxx_header
https://bugs.ruby-lang.org/issues/3330#change-33235

Author: metanest (Makoto Kishimoto)
Status: Rejected
Priority: Low
Assignee: nobu (Nobuyoshi Nakada)
Category: 
Target version: 


=begin
 ??????????ruby-list??????????????????????????????
 
 [ruby-list:47092] ????????話???????????????????????????????????????????????????????
 mkmf ??? C++ ????????????????????????????????追????????????????????????
 
 Index: configure.in
 ===================================================================
 --- configure.in	(revision 27940)
 +++ configure.in	(working copy)
 @@ -243,6 +243,7 @@
  fi
  AC_PROG_CC
  AC_PROG_CXX
 +AC_PROG_CXXCPP
  AC_PROG_GCC_TRADITIONAL
  AC_SUBST(GCC)
  if test "$GCC" = yes; then
 Index: lib/mkmf.rb
 ===================================================================
 --- lib/mkmf.rb	(revision 27940)
 +++ lib/mkmf.rb	(working copy)
 @@ -408,6 +408,14 @@
  		   conf)
  end
  
 +def cxxcpp_command(outfile, opt="")
 +  conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote,
 +                                'arch_hdrdir' => "#$arch_hdrdir",
 +                                'top_srcdir' => $top_srcdir.quote)
 +  RbConfig::expand("$(CXXCPP) #$INCFLAGS #$CPPFLAGS #$CXXFLAGS #{opt} #{CONFTEST_C} #{outfile}",
 +		   conf)
 +end
 +
  def libpathflag(libpath=$DEFLIBPATH|$LIBPATH)
    libpath.map{|x|
      case x
 @@ -454,8 +462,15 @@
    rm_f "conftest*"
  end
  
 +def try_cxxcpp(src, opt="", &b)
 +  try_do(src, cxxcpp_command(CPPOUTFILE, opt), &b)
 +ensure
 +  rm_f "conftest*"
 +end
 +
  class Object
    alias_method :try_header, (config_string('try_header') || :try_cpp)
 +  alias_method :try_cxx_header, (config_string('try_cxx_header') || :try_cxxcpp)
  end
  
  def cpp_include(header)
 @@ -840,6 +855,24 @@
    end
  end
  
 +# Returns whether or not the given C plus plus +header+ file can be found on
 +# your system. If found, a macro is passed as a preprocessor constant to the
 +# compiler using the header file name, in uppercase, prepended with 'HAVE_'.
 +#
 +# For example, if have_header('foo.h') returned true, then the HAVE_FOO_H
 +# preprocessor macro would be passed to the compiler.
 +#
 +def have_cxx_header(header, preheaders = nil, &b)
 +  checking_for header do
 +    if try_cxx_header(cpp_include(preheaders)+cpp_include(header), &b)
 +      $defs.push(format("-DHAVE_%s", header.tr_cpp))
 +      true
 +    else
 +      false
 +    end
 +  end
 +end
 +
  # Instructs mkmf to search for the given +header+ in any of the +paths+
  # provided, and returns whether or not it was found in those paths.
  #
 @@ -867,6 +900,33 @@
    end
  end
  
 +# Instructs mkmf to search for the given C plus plus +header+ in any of the
 +# +paths+ provided, and returns whether or not it was found in those paths.
 +#
 +# If the header is found then the path it was found on is added to the list
 +# of included directories that are sent to the compiler (via the -I switch).
 +#
 +def find_cxx_header(header, *paths)
 +  message = checking_message(header, paths)
 +  header = cpp_include(header)
 +  checking_for message do
 +    if try_cxx_header(header)
 +      true
 +    else
 +      found = false
 +      paths.each do |dir|
 +        opt = "-I#{dir}".quote
 +        if try_cxx_header(header, opt)
 +          $INCFLAGS << " " << opt
 +          found = true
 +          break
 +        end
 +      end
 +      found
 +    end
 +  end
 +end
 +
  # Returns whether or not the struct of type +type+ contains +member+.  If
  # it does not, or the struct type can't be found, then false is returned.  You
  # may optionally specify additional +headers+ in which to look for the struct
=end



-- 
http://bugs.ruby-lang.org/