summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-22 18:39:39 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-22 18:42:49 +0900
commita93d0a4e62c50a53ccdc3b2bc114f75a25bfc40f (patch)
tree439d1c39a76327599906c60084b1bba94c9ffd18 /ext
parentf9d20a1bf157885975aacffdcb22f2b210f1258d (diff)
Check -1 arity for C++
Diffstat (limited to 'ext')
-rw-r--r--ext/-test-/cxxanyargs/depend8
-rw-r--r--ext/-test-/cxxanyargs/extconf.rb7
-rw-r--r--ext/-test-/cxxanyargs/failurem1.cpp13
3 files changed, 23 insertions, 5 deletions
diff --git a/ext/-test-/cxxanyargs/depend b/ext/-test-/cxxanyargs/depend
index ad8260a55f..02113b6c26 100644
--- a/ext/-test-/cxxanyargs/depend
+++ b/ext/-test-/cxxanyargs/depend
@@ -1,11 +1,13 @@
-$(TARGET_SO) $(STATIC_LIB): failure.failed
+$(TARGET_SO) $(STATIC_LIB): $(FAILURES:.cpp=.failed)
-failure.failed: failure.cpp cxxanyargs.o
+.SUFFIXES: .failed
+
+.cpp.failed:
$(Q)$(RUBY) -rfileutils \
-e "t = ARGV.shift" \
-e "err = IO.popen(ARGV, err:[:child, :out], &:read)" \
-e "abort err unless /rb_define_method/ =~ err" \
- -e "FileUtils.touch(t)" $@ $(MAKE) failure.o
+ -e "File.write(t, err)" $@ $(MAKE) $(*F).o
# AUTOGENERATED DEPENDENCIES START
cxxanyargs.o: $(RUBY_EXTCONF_H)
diff --git a/ext/-test-/cxxanyargs/extconf.rb b/ext/-test-/cxxanyargs/extconf.rb
index b3f45477ad..d2a740b989 100644
--- a/ext/-test-/cxxanyargs/extconf.rb
+++ b/ext/-test-/cxxanyargs/extconf.rb
@@ -23,6 +23,9 @@ end
if ok
$srcs = %w[cxxanyargs.cpp]
- $cleanfiles << "failure.failed"
- create_makefile("-test-/cxxanyargs")
+ 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"
+ end
end
diff --git a/ext/-test-/cxxanyargs/failurem1.cpp b/ext/-test-/cxxanyargs/failurem1.cpp
new file mode 100644
index 0000000000..e58a0f4e0d
--- /dev/null
+++ b/ext/-test-/cxxanyargs/failurem1.cpp
@@ -0,0 +1,13 @@
+#include <ruby/ruby.h>
+
+static VALUE
+func_argm1(int argc, VALUE *argv, VALUE self)
+{
+ return argc > 0 ? argv[0] : Qnil;
+}
+
+extern "C" void
+Init_failure(void)
+{
+ rb_define_method(rb_cObject, "argm1", func_argm1, 0);
+}