RubyInline 3.9.0 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +3 -3
- data/History.txt +12 -0
- data/README.txt +18 -19
- data/Rakefile +3 -1
- data/example2.rb +2 -3
- data/lib/inline.rb +25 -20
- data/test/test_inline.rb +5 -5
- data/tutorial/example2.rb +6 -6
- metadata +14 -18
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
� 1��e����}ӺE'��%��-O�P�v"�,����'Z3�W�q�.y�~�.����-� Jg�6��U( ��p6p5h�6ek|���5M�����nNT�}G^���y�.��ٌ���
|
2
|
+
��b=�9$ %g�8�>)
|
3
|
+
r��(8d���ȕ(lv>w<+2M��~k�gtZ�:F����y)���6��%34�����&Ǿ-���;���y�4C��C��3�Nޏ�j�g�Q��{�P���|��
|
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
=== 3.10.0 / 2011-08-30
|
2
|
+
|
3
|
+
* 2 minor enhancements:
|
4
|
+
|
5
|
+
* Added engined/versioned subdir to .ruby_inline to help with multiple-ruby usage. (valodzka)
|
6
|
+
* Extended file/module naming to avoid hash collisions. (apohllo)
|
7
|
+
|
8
|
+
* 2 bug fixes:
|
9
|
+
|
10
|
+
* Fixed examples for 1.9 compatibility.
|
11
|
+
* Use RbConfig instead of Config. (apohllo)
|
12
|
+
|
1
13
|
=== 3.9.0 / 2011-02-18
|
2
14
|
|
3
15
|
* 1 minor enhancement:
|
data/README.txt
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
= Ruby Inline
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
* mailto:ryand-ruby@zenspider.com
|
3
|
+
rdoc :: http://docs.seattlerb.org/RubyInline/
|
4
|
+
home :: http://www.zenspider.com/ZSS/Products/RubyInline/
|
5
|
+
repo :: https://github.com/seattlerb/rubyinline
|
7
6
|
|
8
7
|
== DESCRIPTION:
|
9
8
|
|
@@ -33,14 +32,14 @@ See hoe for more details.
|
|
33
32
|
|
34
33
|
== FEATURES/PROBLEMS:
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
35
|
+
* Quick and easy inlining of your C or C++ code embedded in your ruby script.
|
36
|
+
* Extendable to work with other languages.
|
37
|
+
* Automatic conversion between ruby and C basic types
|
38
|
+
* char, unsigned, unsigned int, char *, int, long, unsigned long
|
39
|
+
* inline_c_raw exists for when the automatic conversion isn't sufficient.
|
40
|
+
* Only recompiles if the inlined code has changed.
|
41
|
+
* Pretends to be secure.
|
42
|
+
* Only requires standard ruby libraries, nothing extra to download.
|
44
43
|
|
45
44
|
== SYNOPSYS:
|
46
45
|
|
@@ -103,21 +102,21 @@ See hoe for more details.
|
|
103
102
|
|
104
103
|
== REQUIREMENTS:
|
105
104
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
105
|
+
* Ruby - 1.8.2 has been used on FreeBSD 4.6+ and MacOSX.
|
106
|
+
* POSIX compliant system (ie pretty much any UNIX, or Cygwin on MS platforms).
|
107
|
+
* A C/C++ compiler (the same one that compiled your ruby interpreter).
|
108
|
+
* test::unit for running tests ( http://testunit.talbott.ws/ ).
|
110
109
|
|
111
110
|
== INSTALL:
|
112
111
|
|
113
|
-
|
114
|
-
|
112
|
+
* make test (optional)
|
113
|
+
* make install
|
115
114
|
|
116
115
|
== LICENSE:
|
117
116
|
|
118
117
|
(The MIT License)
|
119
118
|
|
120
|
-
Copyright (c)
|
119
|
+
Copyright (c) Ryan Davis, seattle.rb
|
121
120
|
|
122
121
|
Permission is hereby granted, free of charge, to any person obtaining
|
123
122
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -7,6 +7,7 @@ Hoe.add_include_dirs "../../ZenTest/dev/lib"
|
|
7
7
|
Hoe.add_include_dirs "lib"
|
8
8
|
|
9
9
|
Hoe.plugin :seattlerb
|
10
|
+
Hoe.plugin :isolate
|
10
11
|
|
11
12
|
Hoe.spec "RubyInline" do
|
12
13
|
developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
|
@@ -14,7 +15,8 @@ Hoe.spec "RubyInline" do
|
|
14
15
|
clean_globs << File.expand_path("~/.ruby_inline")
|
15
16
|
spec_extras[:requirements] =
|
16
17
|
"A POSIX environment and a compiler for your language."
|
17
|
-
|
18
|
+
|
19
|
+
dependency "ZenTest", "~> 4.3" # for ZenTest mapping
|
18
20
|
end
|
19
21
|
|
20
22
|
task :test => :clean
|
data/example2.rb
CHANGED
@@ -14,10 +14,9 @@ class MyTest
|
|
14
14
|
builder.add_compile_flags %q(-x c++)
|
15
15
|
builder.add_link_flags %q(-lstdc++)
|
16
16
|
|
17
|
+
builder.include "<iostream>"
|
18
|
+
|
17
19
|
builder.c "
|
18
|
-
// stupid c++ comment
|
19
|
-
#include <iostream>
|
20
|
-
/* stupid c comment */
|
21
20
|
static
|
22
21
|
void
|
23
22
|
hello(int i) {
|
data/lib/inline.rb
CHANGED
@@ -65,7 +65,7 @@ class CompilationError < RuntimeError; end
|
|
65
65
|
# the current namespace.
|
66
66
|
|
67
67
|
module Inline
|
68
|
-
VERSION = '3.
|
68
|
+
VERSION = '3.10.0'
|
69
69
|
|
70
70
|
WINDOZE = /mswin|mingw/ =~ RUBY_PLATFORM
|
71
71
|
RUBINIUS = defined? RUBY_ENGINE
|
@@ -134,11 +134,14 @@ module Inline
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def self.directory
|
137
|
-
|
138
|
-
|
139
|
-
|
137
|
+
unless defined? @@directory then
|
138
|
+
version = "#{Gem.ruby_engine}-#{RbConfig::CONFIG['ruby_version']}"
|
139
|
+
|
140
|
+
@@directory = File.join(self.rootdir, ".ruby_inline", version)
|
140
141
|
end
|
141
|
-
|
142
|
+
|
143
|
+
Dir.assert_secure @@directory
|
144
|
+
|
142
145
|
@@directory
|
143
146
|
end
|
144
147
|
|
@@ -285,12 +288,14 @@ module Inline
|
|
285
288
|
delta = if result =~ /\A(static.*?\{)/m then
|
286
289
|
$1.split(/\n/).size
|
287
290
|
else
|
288
|
-
|
291
|
+
msg = "WAR\NING: Can't find signature in #{result.inspect}\n"
|
292
|
+
warn msg unless $TESTING
|
289
293
|
0
|
290
294
|
end
|
291
295
|
|
292
296
|
file, line = caller[1].split(/:/)
|
293
|
-
result = "# line #{line.to_i + delta} \"#{file}\"\n" + result unless
|
297
|
+
result = "# line #{line.to_i + delta} \"#{file}\"\n" + result unless
|
298
|
+
$DEBUG and not $TESTING
|
294
299
|
|
295
300
|
@src << result
|
296
301
|
@sig[function_name] = [arity,singleton,method_name]
|
@@ -365,14 +370,14 @@ module Inline
|
|
365
370
|
module_name = @mod.name.gsub('::','__')
|
366
371
|
md5 = Digest::MD5.new
|
367
372
|
@sig.keys.sort_by { |x| x.to_s }.each { |m| md5 << m.to_s }
|
368
|
-
@module_name = "Inline_#{module_name}_#{md5
|
373
|
+
@module_name = "Inline_#{module_name}_#{md5}"
|
369
374
|
end
|
370
375
|
@module_name
|
371
376
|
end
|
372
377
|
|
373
378
|
def so_name
|
374
379
|
unless defined? @so_name then
|
375
|
-
@so_name = "#{Inline.directory}/#{module_name}.#{
|
380
|
+
@so_name = "#{Inline.directory}/#{module_name}.#{RbConfig::CONFIG["DLEXT"]}"
|
376
381
|
end
|
377
382
|
@so_name
|
378
383
|
end
|
@@ -523,7 +528,7 @@ VALUE #{method}_equals(VALUE value) {
|
|
523
528
|
|
524
529
|
unless File.directory? Inline.directory then
|
525
530
|
warn "NOTE: creating #{Inline.directory} for RubyInline" if $DEBUG
|
526
|
-
|
531
|
+
FileUtils.mkdir_p Inline.directory, :mode => 0700
|
527
532
|
end
|
528
533
|
|
529
534
|
src_name = "#{Inline.directory}/#{module_name}.c"
|
@@ -548,7 +553,7 @@ VALUE #{method}_equals(VALUE value) {
|
|
548
553
|
if recompile then
|
549
554
|
|
550
555
|
hdrdir = %w(srcdir archdir rubyhdrdir).map { |name|
|
551
|
-
|
556
|
+
RbConfig::CONFIG[name]
|
552
557
|
}.find { |dir|
|
553
558
|
dir and File.exist? File.join(dir, "/ruby.h")
|
554
559
|
} or abort "ERROR: Can't find header dir for ruby. Exiting..."
|
@@ -562,15 +567,15 @@ VALUE #{method}_equals(VALUE value) {
|
|
562
567
|
nil
|
563
568
|
end
|
564
569
|
|
565
|
-
cmd = [
|
570
|
+
cmd = [ RbConfig::CONFIG['LDSHARED'],
|
566
571
|
flags,
|
567
|
-
|
568
|
-
|
569
|
-
|
572
|
+
RbConfig::CONFIG['DLDFLAGS'],
|
573
|
+
RbConfig::CONFIG['CCDLFLAGS'],
|
574
|
+
RbConfig::CONFIG['CFLAGS'],
|
570
575
|
'-I', hdrdir,
|
571
576
|
config_hdrdir,
|
572
|
-
'-I',
|
573
|
-
"-L#{
|
577
|
+
'-I', RbConfig::CONFIG['includedir'],
|
578
|
+
"-L#{RbConfig::CONFIG['libdir']}",
|
574
579
|
'-o', so_name.inspect,
|
575
580
|
File.expand_path(src_name).inspect,
|
576
581
|
libs,
|
@@ -592,7 +597,7 @@ VALUE #{method}_equals(VALUE value) {
|
|
592
597
|
|
593
598
|
# NOTE: manifest embedding is only required when using VC8 ruby
|
594
599
|
# build or compiler.
|
595
|
-
# Errors from this point should be ignored if
|
600
|
+
# Errors from this point should be ignored if RbConfig::CONFIG['arch']
|
596
601
|
# (RUBY_PLATFORM) matches 'i386-mswin32_80'
|
597
602
|
if WINDOZE and RUBY_PLATFORM =~ /_80$/ then
|
598
603
|
Dir.chdir Inline.directory do
|
@@ -621,9 +626,9 @@ VALUE #{method}_equals(VALUE value) {
|
|
621
626
|
# gawd windoze land sucks
|
622
627
|
case RUBY_PLATFORM
|
623
628
|
when /mswin32/ then
|
624
|
-
" -link /LIBPATH:\"#{
|
629
|
+
" -link /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no /EXPORT:Init_#{module_name}"
|
625
630
|
when /mingw32/ then
|
626
|
-
" -Wl,--enable-auto-import -L#{
|
631
|
+
" -Wl,--enable-auto-import -L#{RbConfig::CONFIG['libdir']} -lmsvcrt-ruby18"
|
627
632
|
when /i386-cygwin/ then
|
628
633
|
' -L/usr/local/lib -lruby.dll'
|
629
634
|
else
|
data/test/test_inline.rb
CHANGED
@@ -80,7 +80,8 @@ class TestInline < InlineTestCase
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def test_directory
|
83
|
-
|
83
|
+
version = "#{Gem.ruby_engine}-#{RbConfig::CONFIG['ruby_version']}"
|
84
|
+
inlinedir = File.join(@rootdir, ".ruby_inline", version)
|
84
85
|
assert_equal(inlinedir, Inline.directory)
|
85
86
|
end
|
86
87
|
|
@@ -412,8 +413,7 @@ static VALUE method_name_equals(VALUE self, VALUE _value) {
|
|
412
413
|
md5 << signature.to_s
|
413
414
|
end
|
414
415
|
|
415
|
-
assert_equal("Inline_TestInline__TestC_#{md5
|
416
|
-
@builder.module_name)
|
416
|
+
assert_equal("Inline_TestInline__TestC_#{md5}", @builder.module_name)
|
417
417
|
end
|
418
418
|
|
419
419
|
def test_module_name_0_methods
|
@@ -774,7 +774,7 @@ static VALUE my_method(VALUE self) {
|
|
774
774
|
#ifdef __cplusplus
|
775
775
|
extern \"C\" {
|
776
776
|
#endif#{windoze}
|
777
|
-
void
|
777
|
+
void Init_Inline_TestInline__TestC_eba5e5454322e22fe2310198ef14e43f() {
|
778
778
|
VALUE c = rb_cObject;
|
779
779
|
c = rb_const_get(c, rb_intern("TestInline"));
|
780
780
|
c = rb_const_get(c, rb_intern("TestC"));
|
@@ -1033,7 +1033,7 @@ class TestModule < InlineTestCase
|
|
1033
1033
|
"inline dir should have been created")
|
1034
1034
|
matches = Dir[File.join(Inline.directory, "Inline_TestModule_*.c")]
|
1035
1035
|
assert_equal(1, matches.length, "Source should have been created")
|
1036
|
-
library_file = matches.first.gsub(/\.c$/) { "." +
|
1036
|
+
library_file = matches.first.gsub(/\.c$/) { "." + RbConfig::CONFIG["DLEXT"] }
|
1037
1037
|
assert(test(?f, library_file),
|
1038
1038
|
"Library file should have been created")
|
1039
1039
|
end
|
data/tutorial/example2.rb
CHANGED
@@ -7,15 +7,15 @@ class Array
|
|
7
7
|
inline do |builder|
|
8
8
|
builder.c_raw "
|
9
9
|
static VALUE average(int argc, VALUE *argv, VALUE self) {
|
10
|
-
double result;
|
10
|
+
double result = 0;
|
11
11
|
long i, len;
|
12
|
-
VALUE *arr =
|
13
|
-
len =
|
14
|
-
|
12
|
+
VALUE *arr = RARRAY_PTR(self);
|
13
|
+
len = RARRAY_LEN(self);
|
14
|
+
|
15
15
|
for(i=0; i<len; i++) {
|
16
16
|
result += NUM2DBL(arr[i]);
|
17
17
|
}
|
18
|
-
|
18
|
+
|
19
19
|
return rb_float_new(result/(double)len);
|
20
20
|
}
|
21
21
|
"
|
@@ -70,7 +70,7 @@ $stderr.puts ""
|
|
70
70
|
|
71
71
|
# & time ruby ./example2.rb 5 100000
|
72
72
|
# .....
|
73
|
-
#
|
73
|
+
#
|
74
74
|
# real 0m1.403s
|
75
75
|
# user 0m1.120s
|
76
76
|
# sys 0m0.070s
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RubyInline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 47
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
|
-
-
|
8
|
+
- 10
|
9
9
|
- 0
|
10
|
-
version: 3.
|
10
|
+
version: 3.10.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Davis
|
@@ -36,8 +36,7 @@ cert_chain:
|
|
36
36
|
FBHgymkyj/AOSqKRIpXPhjC6
|
37
37
|
-----END CERTIFICATE-----
|
38
38
|
|
39
|
-
date: 2011-
|
40
|
-
default_executable:
|
39
|
+
date: 2011-08-31 00:00:00 Z
|
41
40
|
dependencies:
|
42
41
|
- !ruby/object:Gem::Dependency
|
43
42
|
name: ZenTest
|
@@ -60,14 +59,13 @@ dependencies:
|
|
60
59
|
requirement: &id002 !ruby/object:Gem::Requirement
|
61
60
|
none: false
|
62
61
|
requirements:
|
63
|
-
- -
|
62
|
+
- - ~>
|
64
63
|
- !ruby/object:Gem::Version
|
65
|
-
hash:
|
64
|
+
hash: 9
|
66
65
|
segments:
|
67
66
|
- 2
|
68
|
-
-
|
69
|
-
|
70
|
-
version: 2.0.2
|
67
|
+
- 5
|
68
|
+
version: "2.5"
|
71
69
|
type: :development
|
72
70
|
version_requirements: *id002
|
73
71
|
- !ruby/object:Gem::Dependency
|
@@ -76,14 +74,13 @@ dependencies:
|
|
76
74
|
requirement: &id003 !ruby/object:Gem::Requirement
|
77
75
|
none: false
|
78
76
|
requirements:
|
79
|
-
- -
|
77
|
+
- - ~>
|
80
78
|
- !ruby/object:Gem::Version
|
81
|
-
hash:
|
79
|
+
hash: 27
|
82
80
|
segments:
|
83
81
|
- 2
|
84
|
-
-
|
85
|
-
|
86
|
-
version: 2.9.1
|
82
|
+
- 12
|
83
|
+
version: "2.12"
|
87
84
|
type: :development
|
88
85
|
version_requirements: *id003
|
89
86
|
description: |-
|
@@ -119,8 +116,7 @@ files:
|
|
119
116
|
- tutorial/example1.rb
|
120
117
|
- tutorial/example2.rb
|
121
118
|
- .gemtest
|
122
|
-
|
123
|
-
homepage: http://rubyforge.org/projects/rubyinline/
|
119
|
+
homepage: http://www.zenspider.com/ZSS/Products/RubyInline/
|
124
120
|
licenses: []
|
125
121
|
|
126
122
|
post_install_message:
|
@@ -150,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
146
|
requirements:
|
151
147
|
- A POSIX environment and a compiler for your language.
|
152
148
|
rubyforge_project: rubyinline
|
153
|
-
rubygems_version: 1.
|
149
|
+
rubygems_version: 1.8.9
|
154
150
|
signing_key:
|
155
151
|
specification_version: 3
|
156
152
|
summary: Inline allows you to write foreign code within your ruby code
|
metadata.gz.sig
CHANGED
Binary file
|