summaryrefslogtreecommitdiff
path: root/tool/gen_ruby_tapset.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/gen_ruby_tapset.rb')
-rwxr-xr-xtool/gen_ruby_tapset.rb105
1 files changed, 105 insertions, 0 deletions
diff --git a/tool/gen_ruby_tapset.rb b/tool/gen_ruby_tapset.rb
new file mode 100755
index 0000000000..c34fb88611
--- /dev/null
+++ b/tool/gen_ruby_tapset.rb
@@ -0,0 +1,105 @@
+#!/usr/bin/ruby
+# -*- coding: us-ascii -*-
+# usage: ./ruby gen_ruby_tapset.rb --ruby-path=/path/to/ruby probes.d > output
+
+require "optparse"
+
+def set_argument (argname, nth)
+ # remove C style type info
+ argname.gsub!(/.+ (.+)/, '\1') # e.g. char *hoge -> *hoge
+ argname.gsub!(/^\*/, '') # e.g. *filename -> filename
+
+ "#{argname} = $arg#{nth}"
+end
+
+ruby_path = "/usr/local/ruby"
+
+opts = OptionParser.new
+opts.on("--ruby-path=PATH"){|v| ruby_path = v}
+opts.parse!(ARGV)
+
+text = ARGF.read
+
+# remove preprocessor directives
+text.gsub!(/^#.*$/, '')
+
+# remove provider name
+text.gsub!(/^provider ruby \{/, "")
+text.gsub!(/^\};/, "")
+
+# probename()
+text.gsub!(/probe (.+)\( *\);/) {
+ probe_name = $1
+ probe = <<-End
+ probe #{probe_name} = process("ruby").provider("ruby").mark("#{probe_name}")
+ {
+ }
+ End
+}
+
+# probename(arg1)
+text.gsub!(/ *probe (.+)\(([^,)]+)\);/) {
+ probe_name = $1
+ arg1 = $2
+
+ probe = <<-End
+ probe #{probe_name} = process("ruby").provider("ruby").mark("#{probe_name}")
+ {
+ #{set_argument(arg1, 1)}
+ }
+ End
+}
+
+# probename(arg1, arg2)
+text.gsub!(/ *probe (.+)\(([^,)]+),([^,)]+)\);/) {
+ probe_name = $1
+ arg1 = $2
+ arg2 = $3
+
+ probe = <<-End
+ probe #{probe_name} = process("#{ruby_path}").provider("ruby").mark("#{probe_name}")
+ {
+ #{set_argument(arg1, 1)}
+ #{set_argument(arg2, 2)}
+ }
+ End
+}
+
+# probename(arg1, arg2, arg3)
+text.gsub!(/ *probe (.+)\(([^,)]+),([^,)]+),([^,)]+)\);/) {
+ probe_name = $1
+ arg1 = $2
+ arg2 = $3
+ arg3 = $4
+
+ probe = <<-End
+ probe #{probe_name} = process("#{ruby_path}").provider("ruby").mark("#{probe_name}")
+ {
+ #{set_argument(arg1, 1)}
+ #{set_argument(arg2, 2)}
+ #{set_argument(arg3, 3)}
+ }
+ End
+}
+
+# probename(arg1, arg2, arg3, arg4)
+text.gsub!(/ *probe (.+)\(([^,)]+),([^,)]+),([^,)]+),([^,)]+)\);/) {
+ probe_name = $1
+ arg1 = $2
+ arg2 = $3
+ arg3 = $4
+ arg4 = $5
+
+ probe = <<-End
+ probe #{probe_name} = process("#{ruby_path}").provider("ruby").mark("#{probe_name}")
+ {
+ #{set_argument(arg1, 1)}
+ #{set_argument(arg2, 2)}
+ #{set_argument(arg3, 3)}
+ #{set_argument(arg4, 4)}
+ }
+ End
+}
+
+print text
+