rmagick 5.5.0 → 6.0.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/.devcontainer/ImageMagick6/devcontainer.json +1 -1
- data/.devcontainer/devcontainer.json +1 -1
- data/.github/workflows/ci.yml +27 -32
- data/.rubocop.yml +36 -9
- data/.rubocop_todo.yml +363 -189
- data/CHANGELOG.md +34 -0
- data/Gemfile +9 -15
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/before_install_linux.sh +1 -11
- data/before_install_osx.sh +5 -7
- data/ext/RMagick/extconf.rb +35 -63
- data/ext/RMagick/rmagick.h +4 -11
- data/ext/RMagick/rmdraw.cpp +0 -10
- data/ext/RMagick/rmimage.cpp +21 -50
- data/ext/RMagick/rmmain.cpp +12 -27
- data/ext/RMagick/rmpixel.cpp +2 -2
- data/ext/RMagick/rmutil.cpp +27 -18
- data/lib/rmagick/version.rb +3 -3
- data/lib/rmagick.rb +1 -1
- data/lib/rmagick_internal.rb +45 -39
- data/lib/rvg/container.rb +3 -3
- data/lib/rvg/embellishable.rb +1 -1
- data/lib/rvg/misc.rb +9 -9
- data/lib/rvg/rvg.rb +4 -6
- data/lib/rvg/stylable.rb +2 -2
- data/lib/rvg/units.rb +1 -0
- data/rmagick.gemspec +1 -2
- data/sig/rmagick/_image_common_methods.rbs +0 -2
- data/sig/rmagick/enum.rbs +6 -0
- data/sig/rmagick/image.rbs +2 -0
- data/sig/rmagick/image_list.rbs +2 -0
- metadata +10 -10
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,40 @@
|
|
3
3
|
All notable changes to this project are documented in this file.
|
4
4
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
5
5
|
|
6
|
+
## RMagick 6.0.0
|
7
|
+
|
8
|
+
Improvements
|
9
|
+
|
10
|
+
- Improve compatibility of Image#pixel_color value for ImageMagick 6 and 7 (#1591)
|
11
|
+
- Add missing constants (#1580)
|
12
|
+
- Loosen ImageMagick version check between compiled and runtime (#1526)
|
13
|
+
|
14
|
+
Bug Fixes
|
15
|
+
|
16
|
+
- Transform image according to Info#colorspace (#1594)
|
17
|
+
- Sync Image::Info attributes to image object (#1593)
|
18
|
+
- Fix install error on Windows MINGW environment (#1588)
|
19
|
+
- Fix header checks in order to use aligned_malloc expectedly (#1579)
|
20
|
+
|
21
|
+
Breaking Changes
|
22
|
+
|
23
|
+
- Change method that returns a color name to return a hex string (#1592)
|
24
|
+
- The following methods return RGBA hex string as color name. The hex string length is according to color depth.
|
25
|
+
- `Image#background_color`
|
26
|
+
- `Image#border_color`
|
27
|
+
- `Image#colormap`
|
28
|
+
- `Image#matte_color`
|
29
|
+
- `Image#transparent_color`
|
30
|
+
- `Info#background_color`
|
31
|
+
- `Info#border_color`
|
32
|
+
- `Info#matte_color`
|
33
|
+
- `Info#transparent_color`
|
34
|
+
- Change default value of argument
|
35
|
+
- The hex argument of `Pixel#to_color` has `true` by default.
|
36
|
+
- Drop ruby-mswin environment support on Windows (#1587)
|
37
|
+
- Drop Ruby 2.x support (#1540)
|
38
|
+
- Drop ImageMagick 6.7 support (#1539)
|
39
|
+
|
6
40
|
## RMagick 5.5.0
|
7
41
|
|
8
42
|
Improvements
|
data/Gemfile
CHANGED
@@ -4,21 +4,15 @@ source 'https://rubygems.org'
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
gem 'pry', '~> 0.14'
|
7
|
-
gem 'rake-compiler', '~> 1.
|
8
|
-
gem 'rspec', '~> 3.
|
7
|
+
gem 'rake-compiler', '~> 1.2'
|
8
|
+
gem 'rspec', '~> 3.13'
|
9
9
|
gem 'rspec_junit_formatter', '~> 0.6.0'
|
10
|
-
gem 'simplecov', '~> 0.
|
11
|
-
gem 'yard', '~> 0.9.
|
10
|
+
gem 'simplecov', '~> 0.22.0'
|
11
|
+
gem 'yard', '~> 0.9.36'
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
gem 'rubocop-performance', '~> 1.5.2'
|
17
|
-
end
|
13
|
+
gem 'rubocop', '~> 1.63'
|
14
|
+
gem 'rubocop-performance', '~> 1.21'
|
15
|
+
gem 'rubocop-rspec', '~> 2.29'
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
gem 'rbs', '~> 3.4'
|
22
|
-
|
23
|
-
gem 'steep', '~> 1.6'
|
24
|
-
end
|
17
|
+
gem 'rbs', '~> 3.4'
|
18
|
+
gem 'steep', '~> 1.6'
|
data/README.md
CHANGED
@@ -42,14 +42,14 @@ These prerequisites are required for the latest version of RMagick.
|
|
42
42
|
- RMagick 5.4.0 or later requires a C++ compiler.
|
43
43
|
|
44
44
|
**Ruby**
|
45
|
-
- Version
|
45
|
+
- Version 3.0 or later.
|
46
46
|
|
47
47
|
You can get Ruby from <https://www.ruby-lang.org>.
|
48
48
|
|
49
49
|
Ruby must be able to build C-Extensions (e.g. MRI, Rubinius, not JRuby)
|
50
50
|
|
51
51
|
**ImageMagick**
|
52
|
-
- Version 6.
|
52
|
+
- Version 6.8.9 or later (6.x.x).
|
53
53
|
- Version 7.0.8 or later (7.x.x). Require RMagick 4.1.0 or later.
|
54
54
|
|
55
55
|
You can get ImageMagick from <https://imagemagick.org>.
|
@@ -138,7 +138,7 @@ gem install rmagick
|
|
138
138
|
### Versioning
|
139
139
|
|
140
140
|
RMagick is versioned according to Semantic Versioning. For stable version
|
141
|
-
compatible with Ruby
|
141
|
+
compatible with Ruby 3.0+, use `~> 3.0`. Versions >= 6 work on Ruby >= 3.x
|
142
142
|
only.
|
143
143
|
|
144
144
|
Using RMagick
|
data/Rakefile
CHANGED
data/before_install_linux.sh
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
set -euox pipefail
|
4
4
|
|
5
|
-
gem install bundler -v 2.3.26 # Bundler 2.4.x has dropped support for Ruby 2.3
|
6
|
-
|
7
5
|
if [ -v STYLE_CHECKS ]; then
|
8
6
|
set +ux
|
9
7
|
exit 0
|
@@ -15,22 +13,14 @@ if [ ! -v IMAGEMAGICK_VERSION ]; then
|
|
15
13
|
exit 1
|
16
14
|
fi
|
17
15
|
|
18
|
-
sudo apt-get clean
|
19
|
-
sudo apt-get update
|
20
|
-
|
21
16
|
# remove all existing imagemagick related packages
|
22
17
|
sudo apt-get autoremove -y imagemagick* libmagick* --purge
|
23
18
|
|
24
19
|
# install build tools, ImageMagick delegates
|
25
20
|
sudo apt-get install -y build-essential libx11-dev libxext-dev zlib1g-dev \
|
26
|
-
liblcms2-dev libpng-dev libjpeg-dev libfreetype6-dev
|
21
|
+
liblcms2-dev libpng-dev libjpeg-dev libfreetype6-dev \
|
27
22
|
libtiff5-dev libwebp-dev liblqr-1-0-dev vim gsfonts ghostscript
|
28
23
|
|
29
|
-
if [ ! -d /usr/include/freetype ]; then
|
30
|
-
# If `/usr/include/freetype` is not existed, ImageMagick 6.7 configuration fails about Freetype.
|
31
|
-
sudo ln -sf /usr/include/freetype2 /usr/include/freetype
|
32
|
-
fi
|
33
|
-
|
34
24
|
project_dir=$(pwd)
|
35
25
|
build_dir="${project_dir}/build-ImageMagick/ImageMagick-${IMAGEMAGICK_VERSION}"
|
36
26
|
if [ -v CONFIGURE_OPTIONS ]; then
|
data/before_install_osx.sh
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
set -euox pipefail
|
4
4
|
|
5
|
-
gem install bundler -v 2.3.26 # Bundler 2.4.x has dropped support for Ruby 2.3
|
6
|
-
|
7
5
|
if [ -v STYLE_CHECKS ]; then
|
8
6
|
set +ux
|
9
7
|
exit 0
|
@@ -17,10 +15,10 @@ fi
|
|
17
15
|
|
18
16
|
export HOMEBREW_NO_AUTO_UPDATE=true
|
19
17
|
brew uninstall --force imagemagick imagemagick@6
|
20
|
-
brew install wget ghostscript freetype jpeg little-cms2 openexr libomp libpng libtiff liblqr
|
18
|
+
brew install wget ghostscript freetype libtool jpeg little-cms2 openexr libomp libpng libtiff liblqr zlib webp zstd
|
21
19
|
|
22
|
-
export LDFLAGS="-L$(brew --prefix
|
23
|
-
export CPPFLAGS="-I$(brew --prefix
|
20
|
+
export LDFLAGS="-L$(brew --prefix jpeg)/lib -L$(brew --prefix little-cms2)/lib -L$(brew --prefix openexr)/lib -L$(brew --prefix libomp)/lib -L$(brew --prefix libpng)/lib -L$(brew --prefix libtiff)/lib -L$(brew --prefix liblqr)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix webp)/lib -L$(brew --prefix zstd)/lib"
|
21
|
+
export CPPFLAGS="-I$(brew --prefix jpeg)/include -I$(brew --prefix openexr)/include/OpenEXR -I$(brew --prefix libtiff)/include -I$(brew --prefix zlib)/include -I$(brew --prefix zstd)/include -I$(brew --prefix glib)/include/glib-2.0 -I$(brew --prefix glib)/lib/glib-2.0/include"
|
24
22
|
|
25
23
|
project_dir=$(pwd)
|
26
24
|
build_dir="${project_dir}/build-ImageMagick/ImageMagick-${IMAGEMAGICK_VERSION}"
|
@@ -43,7 +41,7 @@ build_imagemagick() {
|
|
43
41
|
fi
|
44
42
|
|
45
43
|
cd "${build_dir}"
|
46
|
-
./configure --prefix=/usr/local "${options}" --without-raw
|
44
|
+
./configure --prefix=/usr/local "${options}" --without-raw
|
47
45
|
make -j
|
48
46
|
}
|
49
47
|
|
@@ -52,7 +50,7 @@ if [ ! -d "${build_dir}" ]; then
|
|
52
50
|
fi
|
53
51
|
|
54
52
|
cd "${build_dir}"
|
55
|
-
make install -j
|
53
|
+
sudo make install -j
|
56
54
|
cd "${project_dir}"
|
57
55
|
|
58
56
|
set +ux
|
data/ext/RMagick/extconf.rb
CHANGED
@@ -4,21 +4,12 @@ require 'rubygems'
|
|
4
4
|
require 'mkmf'
|
5
5
|
require 'pkg-config'
|
6
6
|
|
7
|
-
module MakeMakefile
|
8
|
-
# Use the C++ compiler to retrieve the information needed to create a Makefile for mswin environment.
|
9
|
-
remove_const(:CONFTEST_C)
|
10
|
-
CONFTEST_C = "#{CONFTEST}.cpp"
|
11
|
-
end
|
12
|
-
|
13
7
|
module RMagick
|
14
8
|
class Extconf
|
15
9
|
require 'rmagick/version'
|
16
10
|
RMAGICK_VERS = ::Magick::VERSION
|
17
11
|
MIN_RUBY_VERS = ::Magick::MIN_RUBY_VERSION
|
18
12
|
|
19
|
-
# ImageMagick 6.7 package
|
20
|
-
IM6_7_PACKAGES = ['ImageMagick'].freeze
|
21
|
-
|
22
13
|
# ImageMagick 6.8+ packages
|
23
14
|
IM6_PACKAGES = %w[
|
24
15
|
ImageMagick-6.Q64HDRI
|
@@ -48,6 +39,8 @@ module RMagick
|
|
48
39
|
def initialize
|
49
40
|
@stdout = $stdout.dup
|
50
41
|
|
42
|
+
exit_failure("No longer support MSWIN environment.") if RUBY_PLATFORM.include?('mswin')
|
43
|
+
|
51
44
|
setup_pkg_config_path
|
52
45
|
assert_can_compile!
|
53
46
|
configure_compile_options
|
@@ -55,7 +48,7 @@ module RMagick
|
|
55
48
|
end
|
56
49
|
|
57
50
|
def setup_pkg_config_path
|
58
|
-
return if RUBY_PLATFORM
|
51
|
+
return if RUBY_PLATFORM.include?('mingw')
|
59
52
|
|
60
53
|
if find_executable('brew')
|
61
54
|
append_pkg_config_path("#{`brew --prefix imagemagick`.strip}/lib/pkgconfig")
|
@@ -93,11 +86,25 @@ module RMagick
|
|
93
86
|
else
|
94
87
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find magick/MagickCore.h."
|
95
88
|
end
|
89
|
+
|
90
|
+
if have_header('malloc.h')
|
91
|
+
headers << 'malloc.h'
|
92
|
+
elsif have_header('malloc/malloc.h')
|
93
|
+
headers << 'malloc/malloc.h'
|
94
|
+
end
|
96
95
|
end
|
97
96
|
|
98
97
|
def configure_compile_options
|
99
98
|
# Magick-config is not available on Windows
|
100
|
-
if RUBY_PLATFORM
|
99
|
+
if RUBY_PLATFORM.include?('mingw') # mingw
|
100
|
+
|
101
|
+
dir_paths = search_paths_for_windows
|
102
|
+
$CPPFLAGS += %( -I"#{dir_paths[:include]}")
|
103
|
+
$CPPFLAGS += ' -x c++ -std=c++11 -Wno-register'
|
104
|
+
$LDFLAGS += %( -L"#{dir_paths[:root]}" -lucrt)
|
105
|
+
$LDFLAGS += (im_version_at_least?('7.0.0') ? ' -lCORE_RL_MagickCore_' : ' -lCORE_RL_magick_')
|
106
|
+
|
107
|
+
else
|
101
108
|
|
102
109
|
check_multiple_imagemagick_versions
|
103
110
|
check_partial_imagemagick_versions
|
@@ -119,31 +126,9 @@ module RMagick
|
|
119
126
|
$LDFLAGS = "#{original_ldflags} #{ldflags}"
|
120
127
|
end
|
121
128
|
|
122
|
-
configure_archflags_for_osx($magick_package) if RUBY_PLATFORM
|
123
|
-
|
124
|
-
elsif RUBY_PLATFORM =~ /mingw/ # mingw
|
125
|
-
|
126
|
-
dir_paths = search_paths_for_library_for_windows
|
127
|
-
$CPPFLAGS += %( -I"#{dir_paths[:include]}")
|
128
|
-
$CPPFLAGS += ' -x c++ -std=c++11 -Wno-register'
|
129
|
-
$LDFLAGS += %( -L"#{dir_paths[:lib]}")
|
130
|
-
$LDFLAGS << ' -lucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
131
|
-
|
132
|
-
have_library(im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_' : 'CORE_RL_magick_')
|
129
|
+
configure_archflags_for_osx($magick_package) if RUBY_PLATFORM.include?('darwin') # osx
|
133
130
|
|
134
|
-
else # mswin
|
135
|
-
|
136
|
-
dir_paths = search_paths_for_library_for_windows
|
137
|
-
$CPPFLAGS << %( -I"#{dir_paths[:include]}")
|
138
|
-
$LDFLAGS << %( -libpath:"#{dir_paths[:lib]}")
|
139
|
-
$LDFLAGS << ' -libpath:ucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
140
|
-
|
141
|
-
$LOCAL_LIBS += ' ' + (im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
|
142
|
-
|
143
|
-
$CPPFLAGS += ' /std:c++11'
|
144
131
|
end
|
145
|
-
ruby_version = RUBY_VERSION.split('.')
|
146
|
-
$CPPFLAGS += " -DRUBY_VERSION_MAJOR=#{ruby_version[0]} -DRUBY_VERSION_MINOR=#{ruby_version[1]}"
|
147
132
|
$CPPFLAGS += ' $(optflags) $(debugflags)'
|
148
133
|
end
|
149
134
|
|
@@ -181,11 +166,6 @@ module RMagick
|
|
181
166
|
def determine_imagemagick_package
|
182
167
|
packages = [installed_im7_packages, installed_im6_packages].flatten
|
183
168
|
|
184
|
-
if packages.empty?
|
185
|
-
# ImageMagick 6.7 does not have package file like ImageMagick-6.Q16.pc
|
186
|
-
packages = detect_imagemagick_packages(IM6_7_PACKAGES)
|
187
|
-
end
|
188
|
-
|
189
169
|
if packages.empty?
|
190
170
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find ImageMagick with pkg-config\n"
|
191
171
|
end
|
@@ -269,10 +249,10 @@ module RMagick
|
|
269
249
|
# issue #169
|
270
250
|
# set ARCHFLAGS appropriately for OSX
|
271
251
|
def configure_archflags_for_osx(magick_package)
|
272
|
-
return unless PKGConfig.libs_only_L(magick_package)
|
252
|
+
return unless PKGConfig.libs_only_L(magick_package) =~ %r{-L(.+)/lib}
|
273
253
|
|
274
254
|
imagemagick_dir = Regexp.last_match(1)
|
275
|
-
command = Dir.glob(File.join(imagemagick_dir, "bin/*")).
|
255
|
+
command = Dir.glob(File.join(imagemagick_dir, "bin/*")).find { |file| File.executable? file }
|
276
256
|
fileinfo = `file #{command}`
|
277
257
|
|
278
258
|
# default ARCHFLAGS
|
@@ -286,28 +266,27 @@ module RMagick
|
|
286
266
|
$ARCH_FLAG = archflags.join(' ') unless archflags.empty?
|
287
267
|
end
|
288
268
|
|
289
|
-
def
|
269
|
+
def search_paths_for_windows
|
290
270
|
msg = 'searching PATH for the ImageMagick library...'
|
291
271
|
Logging.message msg
|
292
272
|
message msg + "\n"
|
293
273
|
|
294
|
-
|
274
|
+
found = false
|
295
275
|
dir_paths = {}
|
296
276
|
|
297
277
|
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
298
278
|
paths.each do |dir|
|
299
|
-
|
300
|
-
|
301
|
-
next unless File.exist?(lib_file)
|
279
|
+
dll = File.join(dir, im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.dll' : 'CORE_RL_magick_.dll')
|
280
|
+
next unless File.exist?(dll)
|
302
281
|
|
303
282
|
dir_paths[:include] = File.join(dir, 'include')
|
304
|
-
dir_paths[:
|
283
|
+
dir_paths[:root] = dir
|
305
284
|
|
306
|
-
|
285
|
+
found = true
|
307
286
|
break
|
308
287
|
end
|
309
288
|
|
310
|
-
return dir_paths if
|
289
|
+
return dir_paths if found
|
311
290
|
|
312
291
|
exit_failure <<~END_MINGW
|
313
292
|
Can't install RMagick #{RMAGICK_VERS}.
|
@@ -322,7 +301,7 @@ module RMagick
|
|
322
301
|
assert_has_dev_libs!
|
323
302
|
|
324
303
|
# Check for compiler. Extract first word so ENV['CXX'] can be a program name with arguments.
|
325
|
-
cxx = (ENV['CXX'] || RbConfig::CONFIG['CXX'] || 'g++').split
|
304
|
+
cxx = (ENV['CXX'] || RbConfig::CONFIG['CXX'] || 'g++').split.first
|
326
305
|
exit_failure "No C++ compiler found in ${ENV['PATH']}. See mkmf.log for details." unless find_executable(cxx)
|
327
306
|
end
|
328
307
|
|
@@ -341,17 +320,17 @@ module RMagick
|
|
341
320
|
Check the mkmf.log file for more detailed information.
|
342
321
|
END_FAILURE
|
343
322
|
|
344
|
-
if RUBY_PLATFORM
|
323
|
+
if RUBY_PLATFORM.include?('mingw')
|
324
|
+
`#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
|
325
|
+
$magick_version = Regexp.last_match(1)
|
326
|
+
exit_failure failure_message unless $magick_version
|
327
|
+
else
|
345
328
|
unless PKGConfig.libs('MagickCore')[/\bl\s*(MagickCore|Magick)6?\b/]
|
346
329
|
exit_failure failure_message
|
347
330
|
end
|
348
331
|
|
349
332
|
$magick_package = determine_imagemagick_package
|
350
333
|
$magick_version = PKGConfig.modversion($magick_package)[/^(\d+\.\d+\.\d+)/]
|
351
|
-
else
|
352
|
-
`#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
|
353
|
-
$magick_version = Regexp.last_match(1)
|
354
|
-
exit_failure failure_message unless $magick_version
|
355
334
|
end
|
356
335
|
|
357
336
|
# Ensure minimum ImageMagick version
|
@@ -365,8 +344,6 @@ module RMagick
|
|
365
344
|
|
366
345
|
def create_header_file
|
367
346
|
ruby_api = [
|
368
|
-
'rb_gc_adjust_memory_usage', # Ruby 2.4.0
|
369
|
-
'rb_gc_mark_movable', # Ruby 2.7.0
|
370
347
|
'rb_io_path' # Ruby 3.2.0
|
371
348
|
]
|
372
349
|
memory_api = %w[
|
@@ -386,15 +363,10 @@ module RMagick
|
|
386
363
|
have_func(func, headers)
|
387
364
|
end
|
388
365
|
|
389
|
-
unless have_header('malloc.h')
|
390
|
-
have_header('malloc/malloc.h')
|
391
|
-
end
|
392
|
-
|
393
366
|
# Miscellaneous constants
|
394
367
|
$defs.push("-DRUBY_VERSION_STRING=\"ruby #{RUBY_VERSION}\"")
|
395
368
|
$defs.push("-DRMAGICK_VERSION_STRING=\"RMagick #{RMAGICK_VERS}\"")
|
396
369
|
|
397
|
-
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9=1') if im_version_at_least?('6.8.9')
|
398
370
|
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0=1') if im_version_at_least?('6.9.0')
|
399
371
|
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_10=1') if im_version_at_least?('6.9.10')
|
400
372
|
$defs.push('-DIMAGEMAGICK_7=1') if im_version_at_least?('7.0.0')
|
@@ -415,7 +387,7 @@ module RMagick
|
|
415
387
|
end
|
416
388
|
|
417
389
|
def create_compile_flags_txt
|
418
|
-
cppflags = $CPPFLAGS.split
|
390
|
+
cppflags = $CPPFLAGS.split
|
419
391
|
include_flags = cppflags.select { |flag| flag.start_with?('-I') }
|
420
392
|
define_flags = cppflags.select { |flag| flag.start_with?('-D') } + $defs
|
421
393
|
|
data/ext/RMagick/rmagick.h
CHANGED
@@ -310,10 +310,8 @@ typedef enum _QuantumExpressionOperator
|
|
310
310
|
AbsQuantumOperator, /**< abs */
|
311
311
|
ExponentialQuantumOperator, /**< exponential */
|
312
312
|
MedianQuantumOperator, /**< median */
|
313
|
-
SumQuantumOperator /**< sum */
|
314
|
-
|
315
|
-
, RootMeanSquareQuantumOperator /** root mean square */
|
316
|
-
#endif
|
313
|
+
SumQuantumOperator, /**< sum */
|
314
|
+
RootMeanSquareQuantumOperator /** root mean square */
|
317
315
|
} QuantumExpressionOperator ;
|
318
316
|
|
319
317
|
|
@@ -1227,13 +1225,8 @@ MagickExport void UnityAddKernelInfo(KernelInfo *kernel, const double scale);
|
|
1227
1225
|
MagickExport void ScaleKernelInfo(KernelInfo *kernel, const double scaling_factor, const GeometryFlags normalize_flags);
|
1228
1226
|
#endif
|
1229
1227
|
|
1230
|
-
#
|
1231
|
-
|
1232
|
-
#define RESCUE_EXCEPTION_HANDLER_FUNC(func) (VALUE (*)(ANYARGS))(func)
|
1233
|
-
#else
|
1234
|
-
#define RESCUE_FUNC(func) (VALUE(*)(VALUE))(func)
|
1235
|
-
#define RESCUE_EXCEPTION_HANDLER_FUNC(func) (VALUE(*)(VALUE, VALUE))(func)
|
1236
|
-
#endif
|
1228
|
+
#define RESCUE_FUNC(func) (VALUE(*)(VALUE))(func)
|
1229
|
+
#define RESCUE_EXCEPTION_HANDLER_FUNC(func) (VALUE(*)(VALUE, VALUE))(func)
|
1237
1230
|
|
1238
1231
|
} // extern "C"
|
1239
1232
|
|
data/ext/RMagick/rmdraw.cpp
CHANGED
@@ -13,9 +13,7 @@
|
|
13
13
|
#include "rmagick.h"
|
14
14
|
#include "float.h"
|
15
15
|
|
16
|
-
#ifdef HAVE_RB_GC_MARK_MOVABLE
|
17
16
|
static void Draw_compact(void *drawptr);
|
18
|
-
#endif
|
19
17
|
static void Draw_mark(void *);
|
20
18
|
static void Draw_destroy(void *);
|
21
19
|
static size_t Draw_memsize(const void *);
|
@@ -28,9 +26,7 @@ const rb_data_type_t rm_draw_data_type = {
|
|
28
26
|
Draw_mark,
|
29
27
|
Draw_destroy,
|
30
28
|
Draw_memsize,
|
31
|
-
#ifdef HAVE_RB_GC_MARK_MOVABLE
|
32
29
|
Draw_compact,
|
33
|
-
#endif
|
34
30
|
},
|
35
31
|
0, 0,
|
36
32
|
RUBY_TYPED_FROZEN_SHAREABLE,
|
@@ -1277,7 +1273,6 @@ Draw_primitive(VALUE self, VALUE primitive)
|
|
1277
1273
|
return self;
|
1278
1274
|
}
|
1279
1275
|
|
1280
|
-
#ifdef HAVE_RB_GC_MARK_MOVABLE
|
1281
1276
|
/**
|
1282
1277
|
* Compact the objects.
|
1283
1278
|
*
|
@@ -1295,7 +1290,6 @@ Draw_compact(void *drawptr)
|
|
1295
1290
|
draw->primitives = rb_gc_location(draw->primitives);
|
1296
1291
|
}
|
1297
1292
|
}
|
1298
|
-
#endif
|
1299
1293
|
|
1300
1294
|
/**
|
1301
1295
|
* Mark referenced objects.
|
@@ -1311,11 +1305,7 @@ Draw_mark(void *drawptr)
|
|
1311
1305
|
|
1312
1306
|
if (draw->primitives != (VALUE)0)
|
1313
1307
|
{
|
1314
|
-
#ifdef HAVE_RB_GC_MARK_MOVABLE
|
1315
1308
|
rb_gc_mark_movable(draw->primitives);
|
1316
|
-
#else
|
1317
|
-
rb_gc_mark(draw->primitives);
|
1318
|
-
#endif
|
1319
1309
|
}
|
1320
1310
|
}
|
1321
1311
|
|
data/ext/RMagick/rmimage.cpp
CHANGED
@@ -288,17 +288,11 @@ DEFINE_GVL_STUB2(WriteImage, const ImageInfo *, Image *);
|
|
288
288
|
DEFINE_GVL_STUB4(GetImageChannelEntropy, const Image *, const ChannelType, double *, ExceptionInfo *);
|
289
289
|
#endif
|
290
290
|
|
291
|
-
#if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
292
291
|
DEFINE_GVL_STUB3(RotationalBlurImage, const Image *, const double, ExceptionInfo *);
|
293
|
-
#else
|
294
|
-
DEFINE_GVL_STUB3(RadialBlurImage, const Image *, const double, ExceptionInfo *);
|
295
|
-
#endif
|
296
292
|
|
297
293
|
#if defined(IMAGEMAGICK_7)
|
298
|
-
#elif defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
299
|
-
DEFINE_GVL_STUB4(RotationalBlurImageChannel, const Image *, const ChannelType, const double, ExceptionInfo *);
|
300
294
|
#else
|
301
|
-
DEFINE_GVL_STUB4(
|
295
|
+
DEFINE_GVL_STUB4(RotationalBlurImageChannel, const Image *, const ChannelType, const double, ExceptionInfo *);
|
302
296
|
#endif
|
303
297
|
|
304
298
|
/**
|
@@ -2327,6 +2321,7 @@ Image_capture(int argc, VALUE *argv, VALUE self ATTRIBUTE_UNUSED)
|
|
2327
2321
|
rm_ensure_result(new_image);
|
2328
2322
|
|
2329
2323
|
rm_set_user_artifact(new_image, image_info);
|
2324
|
+
rm_sync_image_options(new_image, image_info);
|
2330
2325
|
|
2331
2326
|
RB_GC_GUARD(info_obj);
|
2332
2327
|
|
@@ -7307,6 +7302,7 @@ Image_from_blob(VALUE klass ATTRIBUTE_UNUSED, VALUE blob_arg)
|
|
7307
7302
|
|
7308
7303
|
rm_ensure_result(images);
|
7309
7304
|
rm_set_user_artifact(images, info);
|
7305
|
+
rm_sync_image_options(images, info);
|
7310
7306
|
|
7311
7307
|
RB_GC_GUARD(info_obj);
|
7312
7308
|
|
@@ -7963,26 +7959,7 @@ Image_gray_q(VALUE self)
|
|
7963
7959
|
#if defined(HAVE_SETIMAGEGRAY)
|
7964
7960
|
return has_attribute(self, (MagickBooleanType (*)(const Image *, ExceptionInfo *))SetImageGray);
|
7965
7961
|
#else
|
7966
|
-
#if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
7967
7962
|
return has_attribute(self, IsGrayImage);
|
7968
|
-
#else
|
7969
|
-
// For ImageMagick 6.7
|
7970
|
-
Image *image;
|
7971
|
-
ColorspaceType colorspace;
|
7972
|
-
VALUE ret;
|
7973
|
-
|
7974
|
-
image = rm_check_destroyed(self);
|
7975
|
-
colorspace = image->colorspace;
|
7976
|
-
if (image->colorspace == sRGBColorspace || image->colorspace == TransparentColorspace) {
|
7977
|
-
// Workaround
|
7978
|
-
// If image colorspace has non-RGBColorspace, IsGrayImage() always return false.
|
7979
|
-
image->colorspace = RGBColorspace;
|
7980
|
-
}
|
7981
|
-
|
7982
|
-
ret = has_attribute(self, IsGrayImage);
|
7983
|
-
image->colorspace = colorspace;
|
7984
|
-
return ret;
|
7985
|
-
#endif
|
7986
7963
|
#endif
|
7987
7964
|
}
|
7988
7965
|
|
@@ -9931,6 +9908,8 @@ Image_initialize(int argc, VALUE *argv, VALUE self)
|
|
9931
9908
|
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageExtent), &args);
|
9932
9909
|
#endif
|
9933
9910
|
|
9911
|
+
rm_sync_image_options(image, info);
|
9912
|
+
|
9934
9913
|
// If the caller did not supply a fill argument, call SetImageBackgroundColor
|
9935
9914
|
// to fill the image using the background color. The background color can
|
9936
9915
|
// be set by specifying it when creating the Info parm block.
|
@@ -10671,11 +10650,11 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10671
10650
|
DestroyExceptionInfo(exception);
|
10672
10651
|
|
10673
10652
|
#if defined(IMAGEMAGICK_7)
|
10674
|
-
old_color.red = GetPixelRed(image, old_pixel);
|
10675
|
-
old_color.green = GetPixelGreen(image, old_pixel);
|
10676
|
-
old_color.blue = GetPixelBlue(image, old_pixel);
|
10677
|
-
old_color.alpha = GetPixelAlpha(image, old_pixel);
|
10678
|
-
old_color.black = GetPixelBlack(image, old_pixel);
|
10653
|
+
old_color.red = GetPixelRed(image, old_pixel) + 0.5;
|
10654
|
+
old_color.green = GetPixelGreen(image, old_pixel) + 0.5;
|
10655
|
+
old_color.blue = GetPixelBlue(image, old_pixel) + 0.5;
|
10656
|
+
old_color.alpha = GetPixelAlpha(image, old_pixel) + 0.5;
|
10657
|
+
old_color.black = GetPixelBlack(image, old_pixel) + 0.5;
|
10679
10658
|
return Pixel_from_PixelPacket(&old_color);
|
10680
10659
|
#else
|
10681
10660
|
old_color = *old_pixel;
|
@@ -10750,11 +10729,11 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10750
10729
|
if (pixel)
|
10751
10730
|
{
|
10752
10731
|
#if defined(IMAGEMAGICK_7)
|
10753
|
-
old_color.red = GetPixelRed(image, pixel);
|
10754
|
-
old_color.green = GetPixelGreen(image, pixel);
|
10755
|
-
old_color.blue = GetPixelBlue(image, pixel);
|
10756
|
-
old_color.alpha = GetPixelAlpha(image, pixel);
|
10757
|
-
old_color.black = GetPixelBlack(image, pixel);
|
10732
|
+
old_color.red = GetPixelRed(image, pixel) + 0.5;
|
10733
|
+
old_color.green = GetPixelGreen(image, pixel) + 0.5;
|
10734
|
+
old_color.blue = GetPixelBlue(image, pixel) + 0.5;
|
10735
|
+
old_color.alpha = GetPixelAlpha(image, pixel) + 0.5;
|
10736
|
+
old_color.black = GetPixelBlack(image, pixel) + 0.5;
|
10758
10737
|
|
10759
10738
|
SetPixelRed(image, new_color.red, pixel);
|
10760
10739
|
SetPixelGreen(image, new_color.green, pixel);
|
@@ -11185,11 +11164,9 @@ Image_quantum_operator(int argc, VALUE *argv, VALUE self)
|
|
11185
11164
|
case SumQuantumOperator:
|
11186
11165
|
qop = SumEvaluateOperator;
|
11187
11166
|
break;
|
11188
|
-
#if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
11189
11167
|
case RootMeanSquareQuantumOperator:
|
11190
11168
|
qop = RootMeanSquareEvaluateOperator;
|
11191
11169
|
break;
|
11192
|
-
#endif
|
11193
11170
|
}
|
11194
11171
|
|
11195
11172
|
exception = AcquireExceptionInfo();
|
@@ -11307,15 +11284,9 @@ Image_radial_blur(VALUE self, VALUE angle_obj)
|
|
11307
11284
|
image = rm_check_destroyed(self);
|
11308
11285
|
exception = AcquireExceptionInfo();
|
11309
11286
|
|
11310
|
-
#if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
11311
11287
|
GVL_STRUCT_TYPE(RotationalBlurImage) args = { image, angle, exception };
|
11312
11288
|
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotationalBlurImage), &args);
|
11313
11289
|
new_image = reinterpret_cast<decltype(new_image)>(ret);
|
11314
|
-
#else
|
11315
|
-
GVL_STRUCT_TYPE(RadialBlurImage) args = { image, angle, exception };
|
11316
|
-
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RadialBlurImage), &args);
|
11317
|
-
new_image = reinterpret_cast<decltype(new_image)>(ret);
|
11318
|
-
#endif
|
11319
11290
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11320
11291
|
DestroyExceptionInfo(exception);
|
11321
11292
|
|
@@ -11366,12 +11337,9 @@ Image_radial_blur_channel(int argc, VALUE *argv, VALUE self)
|
|
11366
11337
|
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotationalBlurImage), &args);
|
11367
11338
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
11368
11339
|
END_CHANNEL_MASK(image);
|
11369
|
-
#
|
11340
|
+
#else
|
11370
11341
|
GVL_STRUCT_TYPE(RotationalBlurImageChannel) args = { image, channels, angle, exception };
|
11371
11342
|
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotationalBlurImageChannel), &args);
|
11372
|
-
#else
|
11373
|
-
GVL_STRUCT_TYPE(RadialBlurImageChannel) args = { image, channels, angle, exception };
|
11374
|
-
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RadialBlurImageChannel), &args);
|
11375
11343
|
#endif
|
11376
11344
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11377
11345
|
DestroyExceptionInfo(exception);
|
@@ -11630,9 +11598,11 @@ rd_image(VALUE klass ATTRIBUTE_UNUSED, VALUE file, gvl_function_t fp)
|
|
11630
11598
|
#endif
|
11631
11599
|
|
11632
11600
|
rm_check_exception(exception, images, DestroyOnError);
|
11633
|
-
rm_set_user_artifact(images, info);
|
11634
11601
|
DestroyExceptionInfo(exception);
|
11635
11602
|
|
11603
|
+
rm_set_user_artifact(images, info);
|
11604
|
+
rm_sync_image_options(images, info);
|
11605
|
+
|
11636
11606
|
RB_GC_GUARD(info_obj);
|
11637
11607
|
|
11638
11608
|
return array_from_images(images);
|
@@ -11774,9 +11744,10 @@ Image_read_inline(VALUE self ATTRIBUTE_UNUSED, VALUE content)
|
|
11774
11744
|
magick_free((void *)blob);
|
11775
11745
|
|
11776
11746
|
rm_check_exception(exception, images, DestroyOnError);
|
11777
|
-
|
11778
11747
|
DestroyExceptionInfo(exception);
|
11748
|
+
|
11779
11749
|
rm_set_user_artifact(images, info);
|
11750
|
+
rm_sync_image_options(images, info);
|
11780
11751
|
|
11781
11752
|
RB_GC_GUARD(info_obj);
|
11782
11753
|
|