Project

General

Profile

Actions

Feature #3333

closed

mkmf (have|find)_cxx_header

Feature #3333: mkmf (have|find)_cxx_header

Added by nobu (Nobuyoshi Nakada) over 15 years ago. Updated almost 8 years ago.

Status:
Rejected
Target version:
[ruby-dev:41394]

Description

=begin
なかだです。

ruby-devに移動します。

At Fri, 21 May 2010 17:30:06 +0900,
KISHIMOTO, Makoto wrote in [ruby-list:47096]:

[ruby-list:47092] で振ってみた話題に関係して、なのですが(ツリーになりませんでしたが)、

redmine.ruby-lang.orgに登録されるのはruby-devかruby-coreだけです。

mkmf に C++ のヘッダをチェックする機能を追加するパッチです。

チェックするのはヘッダだけでいいんでしょうか。have_libraryや
find_library、have_func、have_typeなども全部have_cxx_…を追加す
るんでしょうか。また、mkmf.rbではObjective-Cのソースも探すように
なっていますが、こちらにも対応しようと思うとhave_objc_…などとど
んどん数が増えてしまうので、どちらかというと、lang: "C++"のよう
なオプション引数を追加するほうがいいのではないかという気がしてい
ます。

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
=end


Related issues 1 (1 open0 closed)

Updated by nahi (Hiroshi Nakamura) over 13 years ago Actions #1 [ruby-dev:45388]

  • Description updated (diff)

Imported from #3330

うっかり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 

Updated by nahi (Hiroshi Nakamura) over 13 years ago Actions #2 [ruby-dev:45389]

  • Assignee set to nobu (Nobuyoshi Nakada)

Updated by shyouhei (Shyouhei Urabe) over 13 years ago Actions #3

  • Status changed from Open to Assigned

Updated by mame (Yusuke Endoh) almost 13 years ago Actions #4 [ruby-dev:46556]

  • Target version set to 2.6

Updated by rogerdpack (Roger Pack) almost 12 years ago Actions #5 [ruby-dev:47916]

could I request an update on this please?

Updated by mame (Yusuke Endoh) almost 8 years ago Actions #6 [ruby-dev:50322]

  • Status changed from Assigned to Rejected

望み薄なので一旦閉じます。
今でも必要とお思いでしたら、議論を進める材料(lang: "C++" の方針でのパッチとか)を用意すると良いかも知れません。

Updated by mame (Yusuke Endoh) almost 8 years ago Actions #7

  • Related to Feature #4924: mkmf have_header fails with C++ headers added

Updated by mame (Yusuke Endoh) almost 8 years ago Actions #8

  • Related to deleted (Feature #4924: mkmf have_header fails with C++ headers)

Updated by mame (Yusuke Endoh) almost 8 years ago Actions #9

  • Has duplicate Feature #4924: mkmf have_header fails with C++ headers added
Actions

Also available in: PDF Atom