1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/-test-/cxxanyargs/extconf.rb
卜部昌平 4e6bae47c8 ext/-test-/cxxanyargs: prevent have_devel check
The `cxx.try_compile` command in this file kicks `cxx.have_devel?`
internally, which recursively calls `cxx.try_link` with a different
source code.  We don't want that happen (the source code compiled in
this file must be the first one).  We need to fake the system.
2020-02-20 11:46:54 +09:00

42 lines
1.1 KiB
Ruby

# frozen_string_literal: false
cxx = MakeMakefile["C++"]
# #### have_devel hack ####
# cxx.try_compile tries to detect compilers, but the try_compile below is
# trying to detect a compiler in a different way. We need to prevent the
# default detection routine.
cxx.instance_variable_set(:'@have_devel', true)
ok = cxx.try_compile(<<~'begin', "") do |x|
#include "ruby/config.h"
namespace {
typedef int conftest1[SIZEOF_LONG == sizeof(long) ? 1 : -1];
typedef int conftest2[SIZEOF_VOIDP == sizeof(void*) ? 1 : -1];
}
int
main(int argc, const char** argv)
{
return !!argv[argc];
}
begin
# We are wiping ruby.h from the source because that header file is the
# subject we are going to test in this extension library.
x.sub! %<#include "ruby.h">, ''
end
cxx.instance_variable_set(:'@have_devel', ok)
if ok
$srcs = %w[cxxanyargs.cpp]
failures = Dir.glob($srcdir + "/failure*.cpp").map {|n| File.basename(n)}
$cleanfiles << "$(FAILURES:.cpp=.failed)"
create_makefile("-test-/cxxanyargs") do |mk|
mk << "FAILURES #{['=', failures].join(' ')}\n"
mk << ".IGNORE: $(FAILURES:.cpp=.o)\n" unless $mswin
mk
end
end