ruby-vips 2.2.0 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13cfcbea0e56ad3823bf1da4e035884d934253c729d74da5f54c77e87e949c5a
4
- data.tar.gz: ebd97fa16da17c0f932bccb49d21d5b1dcaa024e32ace5c3335f093b2043efea
3
+ metadata.gz: f57995edbbad929820ab97faae77cefac5596a6c4e440abfd86dc67a1a3ef6e3
4
+ data.tar.gz: 2cf84c9faced0678582b7858a1eac8c870e800bbf275c54427cf6f9564a76c13
5
5
  SHA512:
6
- metadata.gz: a7ff0c920fa2ccfe60e9b1762fce6efaa94413f5a68453156eaa7cad6a63cdbab3639ecc525c52cb11578684bc02e9868b7643ab4bc89a8f23905c7dae0b06c1
7
- data.tar.gz: c258fc41dca1d105aa4617bac9a3092a8ea3ce7a2bf41f0ad37aac1baa3ebcdce9a3353a4be014b9748e8e141ca15916b67f789cb1fab76c8a5647832aa2efd0
6
+ metadata.gz: 48a29e47be77eca5d376af0f52969b7cf051eced8467c10206ae7ab10d8e48a25482a9c4402116ceb5dbc6fbc034fcc6aa340324bd77330d191d8920af1efb8b
7
+ data.tar.gz: e3ee97a320b95e9d897cd79754e1db0124c32c2f751e170896e70deecf72bddefa21f1dfda5ea5966846dccbbc95544e5e4ecffc0ebeb0d9f429802c8c62a6a3
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -20,7 +20,7 @@ jobs:
20
20
 
21
21
  steps:
22
22
  - name: Checkout code
23
- uses: actions/checkout@v2
23
+ uses: actions/checkout@v4
24
24
 
25
25
  - name: Set up Ruby
26
26
  uses: ruby/setup-ruby@v1
@@ -38,9 +38,6 @@ jobs:
38
38
  matrix:
39
39
  os-version: [ 'ubuntu-20.04' ]
40
40
  ruby-version:
41
- - '2.0'
42
- - '2.1'
43
- - '2.2'
44
41
  - '2.3'
45
42
  - '2.4'
46
43
  - '2.5'
@@ -49,6 +46,7 @@ jobs:
49
46
  - '3.0'
50
47
  - '3.1'
51
48
  - '3.2'
49
+ - '3.3'
52
50
  - jruby
53
51
  fail-fast: true
54
52
 
@@ -56,7 +54,7 @@ jobs:
56
54
 
57
55
  steps:
58
56
  - name: Checkout code
59
- uses: actions/checkout@v3
57
+ uses: actions/checkout@v4
60
58
 
61
59
  - name: Set up Ruby
62
60
  uses: ruby/setup-ruby@v1
@@ -75,7 +73,7 @@ jobs:
75
73
  DEBIAN_FRONTEND: noninteractive
76
74
  run:
77
75
  # we only need the library
78
- sudo apt-get install --fix-missing -qq -o Acquire::Retries=3
76
+ sudo apt-get install --no-install-recommends --fix-missing -qq -o Acquire::Retries=3
79
77
  libvips
80
78
 
81
79
  - name: Run Tests
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## Version 2.2.2 (2024-07-17)
6
+
7
+ * fix compat with unified (semistatic) libvips binaries [kleisauke]
8
+
9
+ ## Version 2.2.1 (2024-02-21)
10
+
11
+ * add `Vips.block_untrusted` method to block all untrusted operations. Only for libvips >= 8.13. [Docs](https://www.libvips.org/API/current/libvips-vips.html#vips-block-untrusted-set). [#382](https://github.com/libvips/ruby-vips/pull/382) [aglushkov](https://github.com/aglushkov)
12
+ * add `Vips.block` method to block specific operation. Only for libvips >= 8.13. [Docs](https://www.libvips.org/API/current/VipsOperation.html#vips-operation-block-set). [#382](https://github.com/libvips/ruby-vips/pull/382) [aglushkov](https://github.com/aglushkov)
13
+ * `new_from_source` keeps a ref to the source object [taylorthurlow]
14
+ * some fixes to object references system
15
+
5
16
  ## Version 2.2.0 (2023-10-18)
6
17
 
7
18
  * add `draw_point!` [jcupitt]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.0
1
+ 2.2.2
data/lib/vips/image.rb CHANGED
@@ -458,7 +458,14 @@ module Vips
458
458
  loader = Vips.vips_foreign_find_load_source source
459
459
  raise Vips::Error if loader.nil?
460
460
 
461
- Vips::Operation.call loader, [source], opts, option_string
461
+ result = Vips::Operation.call loader, [source], opts, option_string
462
+
463
+ # keep a secret ref to the source object ... the libvips loader will
464
+ # keep a ref to the C source object, but we need the ruby wrapper object
465
+ # to stay alive too
466
+ result.references << source
467
+
468
+ result
462
469
  end
463
470
 
464
471
  def self.matrix_from_array width, height, array
@@ -49,10 +49,10 @@ module Vips
49
49
 
50
50
  def initialize name
51
51
  name = name.to_s if name.is_a? Symbol
52
- ptr = Vips.vips_interpolate_new name
53
- raise Vips::Error if ptr.nil?
52
+ pointer = Vips.vips_interpolate_new name
53
+ raise Vips::Error if pointer.nil?
54
54
 
55
- super ptr
55
+ super(pointer)
56
56
  end
57
57
  end
58
58
  end
@@ -58,7 +58,7 @@ module Vips
58
58
  # See also the comment on set_type! before changing this.
59
59
  pointer = copy_image.ptr
60
60
  ::GObject.g_object_ref pointer
61
- super pointer
61
+ super(pointer)
62
62
 
63
63
  # and save the copy ready for when we finish mutating
64
64
  @image = copy_image
data/lib/vips/object.rb CHANGED
@@ -9,9 +9,6 @@ require "ffi"
9
9
  module Vips
10
10
  private
11
11
 
12
- # debugging support
13
- attach_function :vips_object_print_all, [], :void
14
-
15
12
  # we must init these by hand, since they are usually made on first image
16
13
  # create
17
14
  attach_function :vips_band_format_get_type, [], :GType
@@ -337,6 +334,7 @@ module Vips
337
334
  ArgumentClassPtr.ptr, ArgumentInstancePtr.ptr],
338
335
  :int
339
336
 
337
+ # debugging support
340
338
  attach_function :vips_object_print_all, [], :void
341
339
 
342
340
  attach_function :vips_object_set_from_string, [:pointer, :string], :int
@@ -218,7 +218,7 @@ module Vips
218
218
  raise Vips::Error if value.null?
219
219
  end
220
220
 
221
- super value
221
+ super(value)
222
222
  end
223
223
 
224
224
  def build
@@ -283,7 +283,7 @@ module Vips
283
283
  value = value.map { |x| Operation.imageize match_image, x }
284
284
  end
285
285
 
286
- super name, value
286
+ super(name, value)
287
287
  end
288
288
 
289
289
  public
@@ -440,14 +440,12 @@ module Vips
440
440
  end
441
441
  end
442
442
 
443
- # collect a list of all input references here
444
- references = Set.new
443
+ # dedupe all input references here
444
+ deduped_references = Set.new
445
445
 
446
446
  add_reference = lambda do |x|
447
447
  if x.is_a?(Vips::Image)
448
- x.references.each do |i|
449
- references << i
450
- end
448
+ deduped_references.merge x.references
451
449
  end
452
450
  false
453
451
  end
@@ -482,20 +480,27 @@ module Vips
482
480
 
483
481
  op = op.build
484
482
 
483
+ # we need an array of references for output objects
484
+ references = deduped_references.to_a
485
+
485
486
  # attach all input refs to output x
486
487
  set_reference = lambda do |x|
488
+ # stop early if there are no refs to attach
489
+ return true if references == []
490
+
487
491
  if x.is_a? Vips::Image
488
- x.references += references
492
+ references.each { |i| x.references << i }
489
493
  end
494
+
490
495
  false
491
496
  end
492
497
 
493
498
  # get all required results
494
499
  result = []
495
500
  required_output.each do |details|
496
- value = details[:arg_name]
501
+ value = op.get(details[:arg_name])
497
502
  flat_find value, &set_reference
498
- result << op.get(value)
503
+ result << value
499
504
  end
500
505
 
501
506
  # fetch all optional ones
data/lib/vips/region.rb CHANGED
@@ -44,10 +44,10 @@ module Vips
44
44
  end
45
45
 
46
46
  def initialize(name)
47
- ptr = Vips.vips_region_new name
48
- raise Vips::Error if ptr.null?
47
+ pointer = Vips.vips_region_new name
48
+ raise Vips::Error if pointer.null?
49
49
 
50
- super ptr
50
+ super(pointer)
51
51
  end
52
52
 
53
53
  def width
@@ -47,7 +47,7 @@ module Vips
47
47
  pointer = Vips.vips_source_custom_new
48
48
  raise Vips::Error if pointer.null?
49
49
 
50
- super pointer
50
+ super(pointer)
51
51
  end
52
52
 
53
53
  # The block is executed to read data from the source. The interface is
@@ -47,7 +47,7 @@ module Vips
47
47
  pointer = Vips.vips_target_custom_new
48
48
  raise Vips::Error if pointer.null?
49
49
 
50
- super pointer
50
+ super(pointer)
51
51
  end
52
52
 
53
53
  # The block is executed to write data to the source. The interface is
data/lib/vips/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vips
2
- VERSION = "2.2.0"
2
+ VERSION = "2.2.2"
3
3
  end
data/lib/vips.rb CHANGED
@@ -33,6 +33,30 @@ def library_name(name, abi_number)
33
33
  end
34
34
  end
35
35
 
36
+ # we can sometimes get dependent libraries from libvips -- either the platform
37
+ # will open dependencies for us automatically, or the libvips binary has been
38
+ # built to includes all main dependencies (common on windows, can happen
39
+ # elsewhere)
40
+ #
41
+ # we must get glib functions from libvips if we can, since it will be the
42
+ # one that libvips itself is using, and they will share runtime types
43
+ module Vips
44
+ extend FFI::Library
45
+
46
+ ffi_lib library_name("vips", 42)
47
+
48
+ begin
49
+ attach_function :g_malloc, [:size_t], :pointer
50
+ @@is_unified = true
51
+ rescue FFI::NotFoundError
52
+ @@is_unified = false
53
+ end
54
+
55
+ def self.unified?
56
+ @@is_unified
57
+ end
58
+ end
59
+
36
60
  module GLib
37
61
  class << self
38
62
  attr_accessor :logger
@@ -42,7 +66,11 @@ module GLib
42
66
 
43
67
  extend FFI::Library
44
68
 
45
- ffi_lib library_name("glib-2.0", 0)
69
+ if Vips.unified?
70
+ ffi_lib library_name("vips", 42)
71
+ else
72
+ ffi_lib library_name("glib-2.0", 0)
73
+ end
46
74
 
47
75
  attach_function :g_malloc, [:size_t], :pointer
48
76
 
@@ -134,7 +162,11 @@ end
134
162
  module GObject
135
163
  extend FFI::Library
136
164
 
137
- ffi_lib library_name("gobject-2.0", 0)
165
+ if Vips.unified?
166
+ ffi_lib library_name("vips", 42)
167
+ else
168
+ ffi_lib library_name("gobject-2.0", 0)
169
+ end
138
170
 
139
171
  # we can't just use ulong, windows has different int sizing rules
140
172
  if FFI::Platform::ADDRESS_SIZE == 64
@@ -568,9 +600,7 @@ require "vips/gvalue"
568
600
  # {Image#median}.
569
601
 
570
602
  module Vips
571
- extend FFI::Library
572
-
573
- ffi_lib library_name("vips", 42)
603
+ # we've already opened the libvips library
574
604
 
575
605
  LOG_DOMAIN = "VIPS"
576
606
  GLib.set_log_domain LOG_DOMAIN
@@ -779,6 +809,31 @@ module Vips
779
809
  major > x || (major == x && minor >= y)
780
810
  end
781
811
 
812
+ if at_least_libvips?(8, 13)
813
+ attach_function :vips_block_untrusted_set, [:bool], :void
814
+ attach_function :vips_operation_block_set, %i[string bool], :void
815
+
816
+ # Block/unblock all untrusted operations from running.
817
+ # Use `vips -l` at the command-line to see the class hierarchy and which operations are marked as untrusted.
818
+ def self.block_untrusted(enabled)
819
+ vips_block_untrusted_set(enabled)
820
+ end
821
+
822
+ # Block/unblock all operations in the libvips class hierarchy at specified *operation_name* and below.
823
+ #
824
+ # For example this will block all loaders except JPEG
825
+ #
826
+ # Vips.block("VipsForeignLoad", true);
827
+ # Vips.block("VipsForeignLoadJpeg", false)
828
+ #
829
+ # Use `vips -l` at the command-line to see the class hierarchy.
830
+ # This call does nothing if the named operation is not found.
831
+ #
832
+ def self.block(operation_name, enabled)
833
+ vips_operation_block_set(operation_name, enabled)
834
+ end
835
+ end
836
+
782
837
  # Get a list of all supported file suffixes.
783
838
  #
784
839
  # @return [[String]] array of supported suffixes
data/ruby-vips.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.required_ruby_version = ">= 2.0.0"
37
37
 
38
38
  spec.add_runtime_dependency "ffi", ["~> 1.12"]
39
+ spec.add_runtime_dependency "logger"
39
40
 
40
41
  spec.add_development_dependency "rake", ["~> 12.0"]
41
42
  spec.add_development_dependency "rspec", ["~> 3.3"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-vips
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Cupitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-18 00:00:00.000000000 Z
11
+ date: 2024-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: logger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -113,6 +127,7 @@ extra_rdoc_files:
113
127
  - TODO
114
128
  files:
115
129
  - ".github/ISSUE_TEMPLATE/bug_report.md"
130
+ - ".github/dependabot.yml"
116
131
  - ".github/workflows/test.yml"
117
132
  - ".gitignore"
118
133
  - ".standard.yml"
@@ -205,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
220
  - !ruby/object:Gem::Version
206
221
  version: '0'
207
222
  requirements: []
208
- rubygems_version: 3.3.15
223
+ rubygems_version: 3.4.20
209
224
  signing_key:
210
225
  specification_version: 4
211
226
  summary: A fast image processing library with low memory needs