rbind 0.0.21 → 0.0.22
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.
- checksums.yaml +7 -0
- data/lib/rbind/core.rb +1 -0
- data/lib/rbind/core/rbase.rb +5 -5
- data/lib/rbind/core/rnamespace.rb +0 -2
- data/lib/rbind/default_parser.rb +8 -3
- data/lib/rbind/generator_extern.rb +25 -2
- data/lib/rbind/generator_ruby.rb +19 -2
- data/lib/rbind/rbind.rb +1 -0
- data/manifest.xml +12 -0
- data/rbind.gemspec +2 -2
- metadata +47 -49
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c1d454d9b534689a66f1be06bc64fe72b14b8721
|
4
|
+
data.tar.gz: 546e600622265fda135f5bba965b4566693ae207
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cb922be3df7b1180cf0a8ee5672884e918dde3db4755f7f115228887acc08af46626aae629994f254d668bd51e4dd1417e28ee79c03023a513b9ec7c8a46367f
|
7
|
+
data.tar.gz: e338f1e479038179af4316d48cce047d5a62638410a334d4da844cac3179dd8be9d6c26095b75af623ddba025a3d821fb7452cecaa7844d452dc3d6bd94834ce
|
data/lib/rbind/core.rb
CHANGED
data/lib/rbind/core/rbase.rb
CHANGED
@@ -51,12 +51,12 @@ module Rbind
|
|
51
51
|
|
52
52
|
def split_name(name)
|
53
53
|
name = normalize(name)
|
54
|
-
|
55
|
-
if(name =~/([\w:]*)(<.*)$/)
|
56
|
-
result = split_name($1)
|
57
|
-
[result[0],result[1]+$2]
|
58
|
-
elsif(name =~/(.*)::(.*)$/)
|
54
|
+
if(name =~/(.*>)::(.*)$/)
|
59
55
|
[$1,$2]
|
56
|
+
elsif(name =~ /^([\w\d]*)::(.*)/)
|
57
|
+
b,n = split_name($2)
|
58
|
+
b = b ? "::#{b}" : ""
|
59
|
+
[$1+b,n]
|
60
60
|
else
|
61
61
|
[nil,name]
|
62
62
|
end
|
data/lib/rbind/default_parser.rb
CHANGED
@@ -138,13 +138,18 @@ module Rbind
|
|
138
138
|
type(names.join("::"),false) if !names.empty?
|
139
139
|
end
|
140
140
|
# auto add parent class
|
141
|
-
t ||=
|
141
|
+
t ||= begin
|
142
|
+
t = add_type(RClass.new(RBase.normalize(name)))
|
143
|
+
t.extern_package_name = @extern_package_name
|
144
|
+
t
|
145
|
+
end
|
142
146
|
end
|
143
147
|
end
|
144
148
|
flags = if flags
|
145
149
|
normalize_flags(line_number,flags.gsub(" ","").split("/").compact,:Simple)
|
146
150
|
end
|
147
151
|
t = RClass.new(name,*parent_classes)
|
152
|
+
t.extern_package_name = @extern_package_name
|
148
153
|
t = if t2 = type(t.full_name,false)
|
149
154
|
if !t2.is_a?(RClass) || (!t2.parent_classes.empty? && t2.parent_classes != t.parent_classes)
|
150
155
|
raise "Cannot add class #{t.full_name}. A different type #{t2} is already registered"
|
@@ -152,7 +157,7 @@ module Rbind
|
|
152
157
|
t.parent_classes.each do |p|
|
153
158
|
t2.add_parent p
|
154
159
|
end
|
155
|
-
t2
|
160
|
+
t2.extern_package_name = t.extern_package_name
|
156
161
|
end
|
157
162
|
else
|
158
163
|
t.name = t.name.gsub(">>","> >")
|
@@ -165,7 +170,6 @@ module Rbind
|
|
165
170
|
t.add_attribute(a)
|
166
171
|
line_counter += 1
|
167
172
|
end
|
168
|
-
t.extern_package_name = @extern_package_name
|
169
173
|
[t,line_counter]
|
170
174
|
rescue RuntimeError => e
|
171
175
|
raise "input line #{line_number}: #{e}"
|
@@ -251,6 +255,7 @@ module Rbind
|
|
251
255
|
op
|
252
256
|
end
|
253
257
|
type(op.namespace,true).add_operation(op)
|
258
|
+
op.extern_package_name = @extern_package_name
|
254
259
|
[op,line_counter]
|
255
260
|
end
|
256
261
|
|
@@ -11,6 +11,10 @@ module Rbind
|
|
11
11
|
name.gsub('::','.').gsub(" ","")
|
12
12
|
end
|
13
13
|
|
14
|
+
def self.normalize_operation_name(name)
|
15
|
+
name.gsub('::','.').gsub(" ","")
|
16
|
+
end
|
17
|
+
|
14
18
|
def initialize(root)
|
15
19
|
@root = root
|
16
20
|
end
|
@@ -23,15 +27,34 @@ module Rbind
|
|
23
27
|
file_extern = File.new(File.join(path,"extern.rbind"),"w")
|
24
28
|
file_config = File.new(File.join(path,"config.rbind"),"w")
|
25
29
|
|
30
|
+
#write all types so they get parsed first
|
26
31
|
@root.each_type do |t|
|
27
32
|
if t.is_a? RClass
|
28
|
-
file_extern.write "class #{GeneratorExtern.normalize_type_name(t.full_name)}
|
33
|
+
file_extern.write "class #{GeneratorExtern.normalize_type_name(t.full_name)}\n"
|
29
34
|
end
|
30
35
|
end
|
31
36
|
|
37
|
+
# write all consts
|
32
38
|
@root.each_const do |c|
|
33
|
-
file_extern.write "const #{GeneratorExtern.normalize_type_name(c.full_name)}
|
39
|
+
file_extern.write "const #{GeneratorExtern.normalize_type_name(c.full_name)}\n"
|
34
40
|
end
|
41
|
+
|
42
|
+
#write all operations
|
43
|
+
@root.each_type do |t|
|
44
|
+
if t.is_a? RClass
|
45
|
+
t.each_operation do |op|
|
46
|
+
r = if op.return_type
|
47
|
+
GeneratorExtern.normalize_type_name(op.return_type.full_name)
|
48
|
+
end
|
49
|
+
file_extern.write "#{GeneratorExtern.normalize_operation_name(op.full_name)} #{r}\n"
|
50
|
+
op.parameters.each do |p|
|
51
|
+
file_extern.write " #{GeneratorExtern.normalize_type_name(p.type.full_name)} #{p.name}"\
|
52
|
+
"#{" #{p.default_value}" if p.default_value}#{" /O" unless p.const?}\n"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
35
58
|
file_extern.write("\n")
|
36
59
|
file_config.write Config.new(ruby_module_name,file_prefix).to_yaml
|
37
60
|
end
|
data/lib/rbind/generator_ruby.rb
CHANGED
@@ -5,6 +5,9 @@ require 'open-uri'
|
|
5
5
|
|
6
6
|
module Rbind
|
7
7
|
class GeneratorRuby
|
8
|
+
include Hooks
|
9
|
+
define_hook :on_normalize_default_value
|
10
|
+
|
8
11
|
class << self
|
9
12
|
attr_accessor :ruby_default_value_map
|
10
13
|
attr_accessor :on_normalize_type_name
|
@@ -49,6 +52,12 @@ module Rbind
|
|
49
52
|
|
50
53
|
def self.normalize_default_value(parameter)
|
51
54
|
return nil unless parameter.default_value
|
55
|
+
if self.callbacks_for_hook(:on_normalize_default_value)
|
56
|
+
results = self.run_hook(:on_normalize_default_value,parameter)
|
57
|
+
results.compact!
|
58
|
+
return results.first unless results.empty?
|
59
|
+
end
|
60
|
+
|
52
61
|
val = if parameter.type.basic_type? || parameter.type.ptr?
|
53
62
|
if ruby_default_value_map.has_key?(parameter.default_value)
|
54
63
|
ruby_default_value_map[parameter.default_value]
|
@@ -79,13 +88,21 @@ module Rbind
|
|
79
88
|
end
|
80
89
|
s = if ops && !ops.empty?
|
81
90
|
if t
|
82
|
-
|
91
|
+
if t.extern_package_name
|
92
|
+
"::#{t.extern_package_name}::#{normalize_type_name(t.full_name)}::#{normalize_method_name(ops.first.name)}(#{(value)})"
|
93
|
+
else
|
94
|
+
"#{normalize_type_name(t.full_name)}::#{normalize_method_name(ops.first.name)}(#{(value)})"
|
95
|
+
end
|
83
96
|
else
|
84
97
|
"#{normalize_method_name(ops.first.name)}(#{(value)})"
|
85
98
|
end
|
86
99
|
elsif t
|
87
100
|
t = t.to_ptr if parameter.type.ptr?
|
88
|
-
|
101
|
+
if t.extern_package_name
|
102
|
+
"::#{t.extern_package_name}::#{normalize_type_name(t.full_name)}.new(#{(value)})"
|
103
|
+
else
|
104
|
+
"#{normalize_type_name(t.full_name)}.new(#{(value)})"
|
105
|
+
end
|
89
106
|
end
|
90
107
|
else
|
91
108
|
parameter.default_value
|
data/lib/rbind/rbind.rb
CHANGED
@@ -94,6 +94,7 @@ module Rbind
|
|
94
94
|
config = YAML.load(File.open(File.join(pkg,"config.rbind")).read)
|
95
95
|
path = File.join(pkg,"extern.rbind")
|
96
96
|
::Rbind.log.info "parsing extern rbind pkg file #{path}"
|
97
|
+
raise "no module name found" if !config.ruby_module_name || config.ruby_module_name.empty?
|
97
98
|
local_parser.parse(File.open(path).read,config.ruby_module_name)
|
98
99
|
end
|
99
100
|
@gems.each do |gem|
|
data/manifest.xml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
<package>
|
2
|
+
<description brief="ruby ffi binding generator">
|
3
|
+
|
4
|
+
</description>
|
5
|
+
<author>Alexander Duda/Alexander.Duda@dfki.de</author>
|
6
|
+
<license></license>
|
7
|
+
<url>http://</url>
|
8
|
+
<logo>http://</logo>
|
9
|
+
|
10
|
+
<depend package="hooks" />
|
11
|
+
<depend package="ffi" />
|
12
|
+
</package>
|
data/rbind.gemspec
CHANGED
metadata
CHANGED
@@ -1,49 +1,52 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbind
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.0.21
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.22
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Alexander Duda
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
16
14
|
name: hooks
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
23
19
|
version: 0.3.1
|
24
20
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: ffi
|
28
21
|
prerelease: false
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.3.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ffi
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
34
33
|
version: 1.9.0
|
35
34
|
type: :runtime
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.9.0
|
41
|
+
description: Rbind is developed to automatically generate ruby bindings for OpenCV
|
42
|
+
but is not tight to this library.This gem is still under heavy development and the
|
43
|
+
API might change in the future.
|
44
|
+
email:
|
39
45
|
- Alexander.Duda@dfki.de
|
40
46
|
executables: []
|
41
|
-
|
42
47
|
extensions: []
|
43
|
-
|
44
48
|
extra_rdoc_files: []
|
45
|
-
|
46
|
-
files:
|
49
|
+
files:
|
47
50
|
- README.md
|
48
51
|
- lib/rbind.rb
|
49
52
|
- lib/rbind/clang/clang.rb
|
@@ -104,6 +107,7 @@ files:
|
|
104
107
|
- lib/rbind/typelib.rb
|
105
108
|
- lib/rbind/types/std_string.rb
|
106
109
|
- lib/rbind/types/std_vector.rb
|
110
|
+
- manifest.xml
|
107
111
|
- rbind.gemspec
|
108
112
|
- test/headers/cfunctions.h
|
109
113
|
- test/headers/classes.hpp
|
@@ -119,31 +123,25 @@ files:
|
|
119
123
|
- test/test_rparameter.rb
|
120
124
|
homepage: http://github.com/D-Alex/rbind
|
121
125
|
licenses: []
|
122
|
-
|
126
|
+
metadata: {}
|
123
127
|
post_install_message:
|
124
128
|
rdoc_options: []
|
125
|
-
|
126
|
-
require_paths:
|
129
|
+
require_paths:
|
127
130
|
- lib
|
128
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
- - ">="
|
138
|
-
- !ruby/object:Gem::Version
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - '>='
|
139
|
+
- !ruby/object:Gem::Version
|
139
140
|
version: 1.3.6
|
140
141
|
requirements: []
|
141
|
-
|
142
142
|
rubyforge_project:
|
143
|
-
rubygems_version:
|
143
|
+
rubygems_version: 2.0.3
|
144
144
|
signing_key:
|
145
|
-
specification_version:
|
145
|
+
specification_version: 4
|
146
146
|
summary: Library for genereating automated ffi-bindings for c/c++ libraries
|
147
147
|
test_files: []
|
148
|
-
|
149
|
-
has_rdoc:
|