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 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
@@ -1,3 +1,4 @@
1
+ require 'hooks'
1
2
  require 'rbind/logger.rb'
2
3
  require 'rbind/core/rbase.rb'
3
4
  require 'rbind/core/rdata_type.rb'
@@ -51,12 +51,12 @@ module Rbind
51
51
 
52
52
  def split_name(name)
53
53
  name = normalize(name)
54
- # check for template
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
@@ -1,5 +1,3 @@
1
- require 'hooks'
2
-
3
1
  module Rbind
4
2
  class RNamespace< RDataType
5
3
  include Hooks
@@ -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 ||= add_type(RClass.new(RBase.normalize(name)))
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)} /Extern\n"
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)} /Extern\n"
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
@@ -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
- "#{normalize_type_name(t.full_name)}::#{normalize_method_name(ops.first.name)}(#{(value)})"
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
- "#{normalize_type_name(t.full_name)}.new(#{(value)})"
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
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rbind'
3
- s.version = '0.0.21'
4
- s.date = '2013-08-21'
3
+ s.version = '0.0.22'
4
+ s.date = '2013-10-29'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ['Alexander Duda']
7
7
  s.email = ['Alexander.Duda@dfki.de']
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
- prerelease:
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
- date: 2013-08-21 00:00:00 Z
14
- dependencies:
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
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
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
- requirement: &id002 !ruby/object:Gem::Requirement
30
- none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
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
- version_requirements: *id002
37
- description: Rbind is developed to automatically generate ruby bindings for OpenCV but is not tight to this library.This gem is still under heavy development and the API might change in the future.
38
- email:
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
- none: false
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- version: "0"
134
- required_rubygems_version: !ruby/object:Gem::Requirement
135
- none: false
136
- requirements:
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: 1.8.23
143
+ rubygems_version: 2.0.3
144
144
  signing_key:
145
- specification_version: 3
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: