summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--template/fake.rb.in6
-rw-r--r--version.c7
2 files changed, 9 insertions, 4 deletions
diff --git a/template/fake.rb.in b/template/fake.rb.in
index 646a89f..fa7f1f7 100644
--- a/template/fake.rb.in
+++ b/template/fake.rb.in
@@ -8,8 +8,10 @@ end
if arg['i']
src = File.read(arg['i'])
arg['versions'] = version = {}
- src.scan(/rb_define_global_const\("(RUBY_\w+)",\s*(?:.*rb_\w*str_new\w*\s*\(\s*(\w+)|[\(\s]*\(\s*VALUE\s*\)\s*\((.+)\)\s*\)\s*<<\s?)/) do |n, s, i|
- version[n] = i ? i.gsub(/\s+/, '').to_i : src[/\b#{s}\[\]\s*=\s*((?:"(?:\\.|[^\"\\])*"\s*)*);/m, 1].gsub(/\A"|"\s*\z|" *"/, '').gsub(/\\(.)/, '\1')
+ File.read(File.join(arg['srcdir'], 'version.c')).
+ scan(/rb_define_global_const\("(RUBY_\w+)",[^;]*?\bMK(?:INT|STR)\(([^()]*)\)/m) do |n, v|
+ version[n] =
+ eval(src[/\bruby_#{v}(?:\[\])?\s*=\s*((?:"(?:\\.|[^\"\\])*"\s*)*(?=;)|[^{};]+)/m, 1].gsub(/#/, '\\#'))
end
end
%>baseruby="<%=arg['BASERUBY']%>"
diff --git a/version.c b/version.c
index 7297189..0aafa92 100644
--- a/version.c
+++ b/version.c
@@ -19,6 +19,7 @@
#define PRINT(type) puts(ruby_##type)
#define MKSTR(type) rb_obj_freeze(rb_usascii_str_new_static(ruby_##type, sizeof(ruby_##type)-1))
+#define MKINT(name) INT2FIX(ruby_##name)
const int ruby_api_version[] = {
RUBY_API_VERSION_MAJOR,
@@ -38,6 +39,8 @@ VALUE ruby_engine_name = Qnil;
void
Init_version(void)
{
+ enum {ruby_patchlevel = RUBY_PATCHLEVEL};
+ enum {ruby_revision = RUBY_REVISION};
VALUE version;
/*
* The running version of ruby
@@ -55,11 +58,11 @@ Init_version(void)
* The patchlevel for this ruby. If this is a development build of ruby
* the patchlevel will be -1
*/
- rb_define_global_const("RUBY_PATCHLEVEL", INT2FIX(RUBY_PATCHLEVEL));
+ rb_define_global_const("RUBY_PATCHLEVEL", MKINT(patchlevel));
/*
* The SVN revision for this ruby.
*/
- rb_define_global_const("RUBY_REVISION", INT2FIX(RUBY_REVISION));
+ rb_define_global_const("RUBY_REVISION", MKINT(revision));
/*
* The full ruby version string, like <tt>ruby -v</tt> prints'
*/