[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>

13 messages 2000/10/02

[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>

OK, here is what I think I know.

14 messages 2000/10/11

[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>

18 messages 2000/10/11
[#5427] RE: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — OZAWA -Crouton- Sakuro <crouton@...> 2000/10/11

At Thu, 12 Oct 2000 03:49:46 +0900,

[#5429] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...> 2000/10/11

Thanks for the input.

[#5432] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Yasushi Shoji <yashi@...> 2000/10/11

At Thu, 12 Oct 2000 04:53:41 +0900,

[#5516] Re: Some newbye question — ts <decoux@...>

>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:

80 messages 2000/10/13
[#5531] Re: Some newbye question — matz@... (Yukihiro Matsumoto) 2000/10/14

Hi,

[#5544] Re: Some newbye question — Davide Marchignoli <marchign@...> 2000/10/15

On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:

[#5576] Re: local variables (nested, in-block, parameters, etc.) — Dave Thomas <Dave@...> 2000/10/16

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#5617] Re: local variables (nested, in-block, parameters, etc.) — "Brian F. Feldman" <green@...> 2000/10/16

Dave Thomas <Dave@thomases.com> wrote:

[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>

There has been discussion on this list/group from time to time about

16 messages 2000/10/20
[#5712] Re: Dynamic languages, SWOT ? — Charles Hixson <charleshixsn@...> 2000/10/20

Hugh Sasse Staff Elec Eng wrote:

[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>

Hello fellow rubyists,

21 messages 2000/10/26

[ruby-talk:5289] [PATCH] version test using require

From: hipster <hipster@...4all.nl>
Date: 2000-10-04 19:33:43 UTC
List: ruby-talk #5289
The following patch allows testing for a minimal Ruby version using the
`require' statement, like

#!/usr/bin/ruby
require "1.6"
require "thread"
...

If and only if the require param matches /^\d+(\.\d+)*$/ it's a version
test. If the test fails a short message is displayed containing the
required Ruby version, and Ruby exits. The test follows all library loading
attempts, so if a `1.6.rb' library is present, that gets loaded and no
testing is done.

pro:
- simple, intuitive syntax. No need for `if RUBY_VERSION' constructs
- has the perl nature ;)

con:
- overloading require might violate the PoLS(tm)

It's my first shot at hacking ruby internals, so if I picked the wrong rb_*
calls feel free to correct them. The patch is against 1.6.1.

regards,
Michel


--- eval.c.orig	Wed Sep 27 05:43:12 2000
+++ eval.c	Wed Oct  4 21:02:46 2000
@@ -16,6 +16,7 @@
 #include "node.h"
 #include "env.h"
 #include "rubysig.h"
+#include "version.h"
 
 #include <stdio.h>
 #include <setjmp.h>
@@ -5107,7 +5108,7 @@
 rb_f_require(obj, fname)
     VALUE obj, fname;
 {
-    char *ext, *file, *feature, *buf; /* OK */
+    char *ext, *file, *feature, *buf, *version; /* OK */
     volatile VALUE load;
     int state;
     volatile int safe = ruby_safe_level;
@@ -5182,6 +5183,24 @@
 	goto load_dyna;
     }
 #endif
+
+    /* check for Ruby version */
+    version = "^\\d+(\\.\\d+)*$";
+    if(rb_reg_match(rb_reg_new(version, strlen(version), 0),
+        rb_str_new2(RSTRING(fname)->ptr)) != Qnil)
+    {
+        if(rb_str_cmp(rb_str_new2(RUBY_VERSION),
+            rb_str_new2(RSTRING(fname)->ptr)) < 0)
+        {
+            fprintf(stderr,
+                "Ruby %s or later is required to run this script.\n",
+                RSTRING(fname)->ptr);
+            rb_exit(1);
+        }
+        else
+            return Qtrue;
+    }
+
     rb_raise(rb_eLoadError, "No such file to load -- %s",
 	     RSTRING(fname)->ptr);
 

In This Thread

Prev Next