gir_ffi 0.16.0 → 0.17.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.
- checksums.yaml +4 -4
- data/Changelog.md +17 -0
- data/README.md +20 -14
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib/main_loop.rb +2 -2
- data/lib/ffi-glib/variant.rb +2 -2
- data/lib/ffi-gobject/object.rb +8 -8
- data/lib/ffi-gobject/value.rb +1 -1
- data/lib/ffi-gobject_introspection/i_registered_type_info.rb +1 -1
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi/array_element_convertor.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/constructor_builder.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/method_template.rb +2 -2
- data/lib/gir_ffi/builders/pointer_value_convertor.rb +1 -1
- data/lib/gir_ffi/builders/user_defined_builder.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +22 -12
- data/lib/gir_ffi/in_pointer.rb +2 -2
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -1
- data/lib/gir_ffi/method_stubber.rb +1 -1
- data/lib/gir_ffi/module_base.rb +2 -2
- data/lib/gir_ffi/type_map.rb +1 -1
- data/lib/gir_ffi/version.rb +1 -1
- metadata +22 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d9166ab1e26f13ddc3aa9c5695fb67d4530491f56c01d1e78ad7648f5ea8583
|
4
|
+
data.tar.gz: 5a2e96556fcd892f0cd143c51a21df6c18475950a166c90a994b38a33777281e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9252568631fc6355af2ee913e73fd363ccf04714c9702d93c6fc26119180046f4345232c66d47a93dcc872024f6a855a1d268b3eff23b49f18fd136d9ef5ef4
|
7
|
+
data.tar.gz: e289ed1d545a09f5bb2d67a91101fd6cd7510a1a69e721f07f85fd82a352f4922316a3cf92b67a57216e8e203ec5f3232d60e7634e4c9509e6a65819f42a0dcb
|
data/Changelog.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.17.0 / 2023-12-31
|
4
|
+
|
5
|
+
* Support Ruby 3.0 and up, dropping support for Ruby 2.7 ([#356] by [mvz])
|
6
|
+
|
7
|
+
[#356]: https://github.com/mvz/gir_ffi/pull/356
|
8
|
+
|
9
|
+
## 0.16.1 / 2023-10-07
|
10
|
+
|
11
|
+
* Support Ruby 3.2 ([#331] by [mvz])
|
12
|
+
* Require at least ffi 1.16.3 to avoid 'Can't modify frozen Hash' error ([#350]
|
13
|
+
by [mvz])
|
14
|
+
|
15
|
+
[mvz]: https://github.com/mvz
|
16
|
+
|
17
|
+
[#331]: https://github.com/mvz/gir_ffi/pull/331
|
18
|
+
[#350]: https://github.com/mvz/gir_ffi/pull/350
|
19
|
+
|
3
20
|
## 0.16.0 / 2022-05-21
|
4
21
|
|
5
22
|
* Support Ruby 3.1
|
data/README.md
CHANGED
@@ -23,35 +23,41 @@ Ruby bindings for GNOME using the GObject Introspection Repository.
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
|
26
|
+
```ruby
|
27
|
+
require 'gir_ffi'
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
# Set up the namespace you wish to use
|
30
|
+
GirFFI.setup :Gio
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
# Create an object
|
33
|
+
inet_address = Gio::InetAddress.new_from_string "127.0.0.1"
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
# Call some methods on the object
|
36
|
+
inet_address.is_loopback # => true
|
37
|
+
inet_address.is_multicast # => false
|
37
38
|
|
38
|
-
|
39
|
-
|
39
|
+
# Call a function in the namespace
|
40
|
+
Gio.dbus_is_name "foo" # => false
|
41
|
+
```
|
40
42
|
|
41
43
|
See the [documentation](docs/Documentation.md) for more usage information.
|
42
44
|
|
43
45
|
## Examples
|
44
46
|
|
45
47
|
Have a look in the `examples/` directory for some simple examples. More
|
46
|
-
examples can be found in
|
48
|
+
examples can be found in the repositories for
|
49
|
+
[`gir_ffi-gtk`](https://github.com/mvz/gir_ffi-gtk) and
|
50
|
+
[`gir_ffi-gst`](https://github.com/mvz/gir_ffi-gst/).
|
47
51
|
|
48
52
|
## Install
|
49
53
|
|
50
|
-
|
54
|
+
```bash
|
55
|
+
gem install gir_ffi
|
56
|
+
```
|
51
57
|
|
52
58
|
## Requirements
|
53
59
|
|
54
|
-
GirFFI is supported on CRuby 2.
|
60
|
+
GirFFI is supported on CRuby 2.7, 3.0 and 3.1.
|
55
61
|
|
56
62
|
You will also need gobject-introspection installed with some
|
57
63
|
introspection data.
|
@@ -104,7 +110,7 @@ The following people have contributed to GirFFI over the years:
|
|
104
110
|
|
105
111
|
## License
|
106
112
|
|
107
|
-
Copyright © 2009–
|
113
|
+
Copyright © 2009–2022 [Matijs van Zuijlen](http://www.matijs.net)
|
108
114
|
|
109
115
|
GirFFI is free software, distributed under the terms of the GNU Lesser
|
110
116
|
General Public License, version 2.1 or later. See the file COPYING.LIB for
|
data/lib/ffi-glib/array.rb
CHANGED
data/lib/ffi-glib/main_loop.rb
CHANGED
data/lib/ffi-glib/variant.rb
CHANGED
@@ -11,8 +11,8 @@ module GLib
|
|
11
11
|
get_string_without_override.first
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
alias_method :get_string_without_override, :get_string
|
15
|
+
alias_method :get_string, :get_string_with_override
|
16
16
|
|
17
17
|
# Initializing method used in constructors. For Variant the constructing
|
18
18
|
# functions all return floating references, so this is need to take full
|
data/lib/ffi-gobject/object.rb
CHANGED
@@ -11,9 +11,9 @@ module GObject
|
|
11
11
|
[:size_t, :uint32, :pointer, :pointer],
|
12
12
|
:pointer)
|
13
13
|
|
14
|
-
def self.new_with_properties(
|
14
|
+
def self.new_with_properties(...)
|
15
15
|
obj = allocate
|
16
|
-
obj.__send__
|
16
|
+
obj.__send__(:initialize_with_properties, ...)
|
17
17
|
obj
|
18
18
|
end
|
19
19
|
|
@@ -33,17 +33,17 @@ module GObject
|
|
33
33
|
store_pointer ptr
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
alias_method :old_initialze, :initialize
|
37
|
+
alias_method :initialize, :initialize_with_properties
|
38
38
|
remove_method :old_initialze
|
39
39
|
|
40
|
-
def self.new(
|
40
|
+
def self.new(...)
|
41
41
|
obj = allocate
|
42
|
-
obj.__send__
|
42
|
+
obj.__send__(:initialize, ...)
|
43
43
|
obj
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
alias_method :base_initialize, :initialize
|
47
47
|
|
48
48
|
private :base_initialize
|
49
49
|
|
@@ -82,7 +82,7 @@ module GObject
|
|
82
82
|
setup_instance_method! "get_property"
|
83
83
|
setup_instance_method! "set_property"
|
84
84
|
setup_instance_method! "is_floating"
|
85
|
-
|
85
|
+
alias_method :floating?, :is_floating
|
86
86
|
|
87
87
|
private
|
88
88
|
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -258,7 +258,7 @@ module GObjectIntrospection
|
|
258
258
|
|
259
259
|
# Union type representing an argument value
|
260
260
|
class GIArgument < FFI::Union
|
261
|
-
signed_size_t = "int#{FFI.type_size(:size_t) * 8}"
|
261
|
+
signed_size_t = :"int#{FFI.type_size(:size_t) * 8}"
|
262
262
|
|
263
263
|
layout :v_boolean, :int,
|
264
264
|
:v_int8, :int8,
|
@@ -39,7 +39,7 @@ module GirFFI
|
|
39
39
|
if param_names.size == 1
|
40
40
|
["#{param_names.first} = param_values.first.get_value_plain"]
|
41
41
|
else
|
42
|
-
["#{param_names.join(
|
42
|
+
["#{param_names.join(", ")} = param_values.map(&:get_value_plain)"]
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -19,7 +19,7 @@ module GirFFI
|
|
19
19
|
|
20
20
|
def method_definition
|
21
21
|
code = +"def #{qualified_method_name}"
|
22
|
-
code << "(#{method_arguments.join(
|
22
|
+
code << "(#{method_arguments.join(", ")})" if method_arguments.any?
|
23
23
|
method_lines.each { |line| code << "\n #{line}" }
|
24
24
|
code << "\nend\n"
|
25
25
|
end
|
@@ -27,7 +27,7 @@ module GirFFI
|
|
27
27
|
private
|
28
28
|
|
29
29
|
def qualified_method_name
|
30
|
-
"#{@builder.singleton_method? ?
|
30
|
+
"#{@builder.singleton_method? ? "self." : ""}#{@builder.method_name}"
|
31
31
|
end
|
32
32
|
|
33
33
|
def method_arguments
|
@@ -23,7 +23,7 @@ module GirFFI
|
|
23
23
|
when Module
|
24
24
|
args = [value_exp, ptr_exp]
|
25
25
|
args << offset unless offset == 0
|
26
|
-
"#{ffi_type_spec}.copy_value_to_pointer(#{args.join(
|
26
|
+
"#{ffi_type_spec}.copy_value_to_pointer(#{args.join(", ")})"
|
27
27
|
when Symbol
|
28
28
|
"#{ptr_exp}.put_#{ffi_type_spec} #{offset}, #{value_exp}"
|
29
29
|
end
|
@@ -128,7 +128,7 @@ module GirFFI
|
|
128
128
|
|
129
129
|
def property_setter_func
|
130
130
|
setter = proc do |object, _property_id, value, pspec|
|
131
|
-
object.send("#{pspec.accessor_name}=", value.get_value)
|
131
|
+
object.send(:"#{pspec.accessor_name}=", value.get_value)
|
132
132
|
end
|
133
133
|
GObject::ObjectSetPropertyFunc.from setter
|
134
134
|
end
|
@@ -4,6 +4,25 @@ module GirFFI
|
|
4
4
|
module FFIExt
|
5
5
|
# Extensions to FFI::Pointer
|
6
6
|
module Pointer
|
7
|
+
def self.prepended(base)
|
8
|
+
base.class_eval do
|
9
|
+
size_t_getter =
|
10
|
+
case (size = FFI.type_size(:size_t))
|
11
|
+
when 4
|
12
|
+
:get_uint32
|
13
|
+
when 8
|
14
|
+
:get_uint64
|
15
|
+
else
|
16
|
+
raise NotImplementedError,
|
17
|
+
"Don't know how to handle size_t types of size #{size}"
|
18
|
+
end
|
19
|
+
|
20
|
+
alias_method :get_size_t, size_t_getter
|
21
|
+
|
22
|
+
alias_method :get_gtype, :get_size_t
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
7
26
|
def to_ptr
|
8
27
|
self
|
9
28
|
end
|
@@ -23,16 +42,7 @@ module GirFFI
|
|
23
42
|
end
|
24
43
|
end
|
25
44
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
size_t_getter = case FFI.type_size(:size_t)
|
30
|
-
when 4
|
31
|
-
:get_uint32
|
32
|
-
when 8
|
33
|
-
:get_uint64
|
34
|
-
end
|
35
|
-
|
36
|
-
alias_method :get_size_t, size_t_getter
|
37
|
-
alias_method :get_gtype, :get_size_t
|
45
|
+
# @api private
|
46
|
+
class FFI::Pointer # rubocop:disable Style/ClassAndModuleChildren
|
47
|
+
prepend GirFFI::FFIExt::Pointer
|
38
48
|
end
|
data/lib/gir_ffi/in_pointer.rb
CHANGED
@@ -57,7 +57,7 @@ module GirFFI
|
|
57
57
|
ffi_type = TypeMap.type_specification_to_ffi_type type
|
58
58
|
FFI::MemoryPointer.new(ffi_type).tap do |block|
|
59
59
|
block.autorelease = false
|
60
|
-
block.send "put_#{ffi_type}", 0, value
|
60
|
+
block.send :"put_#{ffi_type}", 0, value
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -137,7 +137,7 @@ module GirFFI
|
|
137
137
|
type_size = FFI.type_size(ffi_type)
|
138
138
|
FFI::MemoryPointer.new(type_size * (ary.length + 1)).tap do |block|
|
139
139
|
block.autorelease = false
|
140
|
-
block.send "put_array_of_#{ffi_type}", 0, ary
|
140
|
+
block.send :"put_array_of_#{ffi_type}", 0, ary
|
141
141
|
end
|
142
142
|
end
|
143
143
|
end
|
data/lib/gir_ffi/module_base.rb
CHANGED
@@ -7,11 +7,11 @@ module GirFFI
|
|
7
7
|
module ModuleBase
|
8
8
|
include MethodSetup
|
9
9
|
|
10
|
-
def method_missing(method,
|
10
|
+
def method_missing(method, ...)
|
11
11
|
result = setup_method method.to_s
|
12
12
|
return super unless result
|
13
13
|
|
14
|
-
send
|
14
|
+
send(method, ...)
|
15
15
|
end
|
16
16
|
|
17
17
|
def respond_to_missing?(method, *)
|
data/lib/gir_ffi/type_map.rb
CHANGED
data/lib/gir_ffi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gir_ffi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matijs van Zuijlen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.16'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.16.3
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
29
|
+
version: '1.16'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.16.3
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: ffi-bit_masks
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,70 +154,70 @@ dependencies:
|
|
148
154
|
requirements:
|
149
155
|
- - "~>"
|
150
156
|
- !ruby/object:Gem::Version
|
151
|
-
version: '1.
|
157
|
+
version: '1.59'
|
152
158
|
type: :development
|
153
159
|
prerelease: false
|
154
160
|
version_requirements: !ruby/object:Gem::Requirement
|
155
161
|
requirements:
|
156
162
|
- - "~>"
|
157
163
|
- !ruby/object:Gem::Version
|
158
|
-
version: '1.
|
164
|
+
version: '1.59'
|
159
165
|
- !ruby/object:Gem::Dependency
|
160
166
|
name: rubocop-minitest
|
161
167
|
requirement: !ruby/object:Gem::Requirement
|
162
168
|
requirements:
|
163
169
|
- - "~>"
|
164
170
|
- !ruby/object:Gem::Version
|
165
|
-
version: 0.
|
171
|
+
version: 0.34.1
|
166
172
|
type: :development
|
167
173
|
prerelease: false
|
168
174
|
version_requirements: !ruby/object:Gem::Requirement
|
169
175
|
requirements:
|
170
176
|
- - "~>"
|
171
177
|
- !ruby/object:Gem::Version
|
172
|
-
version: 0.
|
178
|
+
version: 0.34.1
|
173
179
|
- !ruby/object:Gem::Dependency
|
174
180
|
name: rubocop-packaging
|
175
181
|
requirement: !ruby/object:Gem::Requirement
|
176
182
|
requirements:
|
177
183
|
- - "~>"
|
178
184
|
- !ruby/object:Gem::Version
|
179
|
-
version: 0.5.
|
185
|
+
version: 0.5.2
|
180
186
|
type: :development
|
181
187
|
prerelease: false
|
182
188
|
version_requirements: !ruby/object:Gem::Requirement
|
183
189
|
requirements:
|
184
190
|
- - "~>"
|
185
191
|
- !ruby/object:Gem::Version
|
186
|
-
version: 0.5.
|
192
|
+
version: 0.5.2
|
187
193
|
- !ruby/object:Gem::Dependency
|
188
194
|
name: rubocop-performance
|
189
195
|
requirement: !ruby/object:Gem::Requirement
|
190
196
|
requirements:
|
191
197
|
- - "~>"
|
192
198
|
- !ruby/object:Gem::Version
|
193
|
-
version: '1.
|
199
|
+
version: '1.20'
|
194
200
|
type: :development
|
195
201
|
prerelease: false
|
196
202
|
version_requirements: !ruby/object:Gem::Requirement
|
197
203
|
requirements:
|
198
204
|
- - "~>"
|
199
205
|
- !ruby/object:Gem::Version
|
200
|
-
version: '1.
|
206
|
+
version: '1.20'
|
201
207
|
- !ruby/object:Gem::Dependency
|
202
208
|
name: simplecov
|
203
209
|
requirement: !ruby/object:Gem::Requirement
|
204
210
|
requirements:
|
205
211
|
- - "~>"
|
206
212
|
- !ruby/object:Gem::Version
|
207
|
-
version: 0.
|
213
|
+
version: 0.22.0
|
208
214
|
type: :development
|
209
215
|
prerelease: false
|
210
216
|
version_requirements: !ruby/object:Gem::Requirement
|
211
217
|
requirements:
|
212
218
|
- - "~>"
|
213
219
|
- !ruby/object:Gem::Version
|
214
|
-
version: 0.
|
220
|
+
version: 0.22.0
|
215
221
|
description: |
|
216
222
|
GirFFI creates bindings for GObject-based libraries at runtime based on introspection
|
217
223
|
data provided by the GObject Introspection Repository (GIR) system. Bindings are created
|
@@ -427,14 +433,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
427
433
|
requirements:
|
428
434
|
- - ">="
|
429
435
|
- !ruby/object:Gem::Version
|
430
|
-
version:
|
436
|
+
version: 3.0.0
|
431
437
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
432
438
|
requirements:
|
433
439
|
- - ">="
|
434
440
|
- !ruby/object:Gem::Version
|
435
441
|
version: '0'
|
436
442
|
requirements: []
|
437
|
-
rubygems_version: 3.3
|
443
|
+
rubygems_version: 3.5.3
|
438
444
|
signing_key:
|
439
445
|
specification_version: 4
|
440
446
|
summary: FFI-based GObject binding using the GObject Introspection Repository
|