[ruby-core:102245] [Ruby master Bug#17578] mkmf experimental C++ Support
From:
shyouhei@...
Date:
2021-01-26 00:23:30 UTC
List:
ruby-core #102245
Issue #17578 has been updated by shyouhei (Shyouhei Urabe).
Assignee set to nobu (Nobuyoshi Nakada)
Status changed from Open to Assigned
Description updated
I guess recent commit:4b6fd8329b46701414aba2eeca10013cf66ec513 has something to do with it. @cfis Can you try the current master? If that fixes your situation I guess we need to backport.
The canonical usage of `MakeMakefile['C++']` is not clear to me either... We need @nobu's document.
----------------------------------------
Bug #17578: mkmf experimental C++ Support
https://bugs.ruby-lang.org/issues/17578#change-90092
* Author: cfis (Charlie Savage)
* Status: Assigned
* Priority: Normal
* Assignee: nobu (Nobuyoshi Nakada)
* ruby -v: ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x64-mingw32]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
I've been working on the Rice gem (https://github.com/jasonroelofs/rice) that wraps C++ code for use in Ruby.
I noticed that some c++ support was added to mkmf for Ruby 2.7. However, if I try to use it find a header it fails to work. For example:
```ruby
find_header('rice.hpp')
```
The reason is the conftest uses gcc -E instead of g++ -E. To fix that requires overlading the cpp_command to support C++.
This the fix I have put in that works:
```ruby
MakeMakefile['C++'].module_eval do
def cpp_command(outfile, opt="")
conf = cc_config(opt)
if $universal and (arch_flag = conf['ARCH_FLAG']) and !arch_flag.empty?
conf['ARCH_FLAG'] = arch_flag.gsub(/(?:\G|\s)-arch\s+\S+/, '')
end
RbConfig::expand("$(CXX) -E #$INCFLAGS #$CPPFLAGS #$CFLAGS #{opt} #{CONFTEST_CXX} #{outfile}",
conf)
end
end
```
The two changes over the default method are:
$(CC) -> $(CXX) -E
#{CONFTEST_c} -> #{CONFTEST_cxx}
Could this change be merged in? I can provide a patch file if you would like.
Last, it wasn't obvious to me how to activate the C++ support in mkfm. I ended up doing this:
``` ruby
include MakeMakefile['C++']
```
Is that correct?
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>