rmagick 5.5.0 → 6.0.1
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 +39 -9
- data/.rubocop_todo.yml +333 -194
- data/CHANGELOG.md +41 -0
- data/Gemfile +9 -15
- data/README.md +6 -6
- data/Rakefile +27 -12
- data/before_install_linux.sh +1 -11
- data/before_install_osx.sh +9 -7
- data/ext/RMagick/extconf.rb +38 -64
- data/ext/RMagick/rmagick.h +6 -13
- 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 +49 -46
- 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 +5 -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 +18 -15
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,47 @@
|
|
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.1
|
7
|
+
|
8
|
+
Bug Fixes
|
9
|
+
|
10
|
+
- Fix build error on FreeBSD (#1618)
|
11
|
+
- Fix build error with GCC 14 on Windows (#1616)
|
12
|
+
|
13
|
+
## RMagick 6.0.0
|
14
|
+
|
15
|
+
Improvements
|
16
|
+
|
17
|
+
- Improve compatibility of Image#pixel_color value for ImageMagick 6 and 7 (#1591)
|
18
|
+
- Add missing constants (#1580)
|
19
|
+
- Loosen ImageMagick version check between compiled and runtime (#1526)
|
20
|
+
|
21
|
+
Bug Fixes
|
22
|
+
|
23
|
+
- Transform image according to Info#colorspace (#1594)
|
24
|
+
- Sync Image::Info attributes to image object (#1593)
|
25
|
+
- Fix install error on Windows MINGW environment (#1588)
|
26
|
+
- Fix header checks in order to use aligned_malloc expectedly (#1579)
|
27
|
+
|
28
|
+
Breaking Changes
|
29
|
+
|
30
|
+
- Change method that returns a color name to return a hex string (#1592)
|
31
|
+
- The following methods return RGBA hex string as color name. The hex string length is according to color depth.
|
32
|
+
- `Image#background_color`
|
33
|
+
- `Image#border_color`
|
34
|
+
- `Image#colormap`
|
35
|
+
- `Image#matte_color`
|
36
|
+
- `Image#transparent_color`
|
37
|
+
- `Info#background_color`
|
38
|
+
- `Info#border_color`
|
39
|
+
- `Info#matte_color`
|
40
|
+
- `Info#transparent_color`
|
41
|
+
- Change default value of argument
|
42
|
+
- The hex argument of `Pixel#to_color` has `true` by default.
|
43
|
+
- Drop ruby-mswin environment support on Windows (#1587)
|
44
|
+
- Drop Ruby 2.x support (#1540)
|
45
|
+
- Drop ImageMagick 6.7 support (#1539)
|
46
|
+
|
6
47
|
## RMagick 5.5.0
|
7
48
|
|
8
49
|
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>.
|
@@ -105,10 +105,10 @@ brew install imagemagick@6
|
|
105
105
|
### Windows
|
106
106
|
1. Install latest Ruby+Devkit package which you can get from [RubyInstaller for Windows](https://rubyinstaller.org).
|
107
107
|
2. You might need to configure `PATH` environment variable to where the compiler is located.
|
108
|
-
(Ex: `set PATH=C:\
|
108
|
+
(Ex: `set PATH=C:\Ruby33-x64\bin;C:\Ruby33-x64\msys64\ucrt64\bin;%PATH%`)
|
109
109
|
3. Download `ImageMagick-7.XXXX-Q16-x64-dll.exe` (not, `ImageMagick-7.XXXX-Q16-x64-static.exe`) binary from [Windows Binary Release](https://imagemagick.org/script/download.php#windows), or you can download ImageMagick 6 from [Windows Binary Release](https://legacy.imagemagick.org/script/download.php#windows).
|
110
|
-
4. Install ImageMagick. You need to turn on checkboxes `Add application directory to your system path` and `Install development headers
|
111
|
-
<img width="
|
110
|
+
4. Install ImageMagick. You need to turn on checkboxes `Add application directory to your system path` and `Install development headers for C and C++` in an installer for RMagick.
|
111
|
+
<img width="75%" src="https://github.com/rmagick/rmagick/assets/199156/494e7963-cca5-4cb5-b28a-6c4d76adce5d" />
|
112
112
|
|
113
113
|
Installing RMagick
|
114
114
|
------------------
|
@@ -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
@@ -2,11 +2,9 @@ require 'simplecov'
|
|
2
2
|
require './lib/rmagick/version'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'English'
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
sh "irb -r ./ext/RMagick/extconf.rb -r ./lib/rmagick.rb"
|
9
|
-
end
|
5
|
+
require 'bundler/gem_tasks'
|
6
|
+
require 'rake/extensiontask'
|
7
|
+
require 'rspec/core/rake_task'
|
10
8
|
|
11
9
|
task :config do
|
12
10
|
def version
|
@@ -52,7 +50,7 @@ task push_and_tag: [:build] do
|
|
52
50
|
sh "gem push #{File.join(base, 'pkg', gem_name)}"
|
53
51
|
if $CHILD_STATUS.success?
|
54
52
|
sh "git tag -a -m \"Version #{version}\" #{version_tag}"
|
55
|
-
|
53
|
+
puts "Tagged #{version_tag}."
|
56
54
|
sh 'git push'
|
57
55
|
sh 'git push --tags'
|
58
56
|
else
|
@@ -60,6 +58,7 @@ task push_and_tag: [:build] do
|
|
60
58
|
end
|
61
59
|
end
|
62
60
|
|
61
|
+
Rake::Task["release"].clear # Remove `release` task in bundler/gem_tasks
|
63
62
|
desc 'Release'
|
64
63
|
task release: %i[assert_clean_repo push_and_tag]
|
65
64
|
|
@@ -71,7 +70,7 @@ namespace :website do
|
|
71
70
|
now = now.strftime('%m/%d/%y')
|
72
71
|
|
73
72
|
lines.each do |line|
|
74
|
-
line.gsub!(
|
73
|
+
line.gsub!("0.0.0", Magick::VERSION)
|
75
74
|
line.gsub!(%r{YY/MM/DD}, now)
|
76
75
|
end
|
77
76
|
lines
|
@@ -125,8 +124,8 @@ namespace :website do
|
|
125
124
|
end
|
126
125
|
end
|
127
126
|
|
128
|
-
desc 'Update RMagick website'
|
129
|
-
task :update do
|
127
|
+
desc 'Update RMagick website HTML files'
|
128
|
+
task :"update:html" do
|
130
129
|
unless File.exist?(PATH_TO_LOCAL_WEBSITE_REPOSITORY)
|
131
130
|
puts "Please clone the rmagick.github.io repository to #{PATH_TO_LOCAL_WEBSITE_REPOSITORY}"
|
132
131
|
exit 1
|
@@ -141,6 +140,25 @@ namespace :website do
|
|
141
140
|
file_to_html('doc/ex', file_name, PATH_TO_LOCAL_WEBSITE_REPOSITORY, "#{file_name}.html")
|
142
141
|
end
|
143
142
|
end
|
143
|
+
|
144
|
+
desc 'Update RMagick website image files'
|
145
|
+
task :"update:image" do
|
146
|
+
unless File.exist?(PATH_TO_LOCAL_WEBSITE_REPOSITORY)
|
147
|
+
puts "Please clone the rmagick.github.io repository to #{PATH_TO_LOCAL_WEBSITE_REPOSITORY}"
|
148
|
+
exit 1
|
149
|
+
end
|
150
|
+
|
151
|
+
Rake::Task['install'].invoke
|
152
|
+
|
153
|
+
FileUtils.rm_rf("#{PATH_TO_LOCAL_WEBSITE_REPOSITORY}/ex")
|
154
|
+
FileUtils.cp_r('doc/ex', PATH_TO_LOCAL_WEBSITE_REPOSITORY)
|
155
|
+
|
156
|
+
FileUtils.cd("#{PATH_TO_LOCAL_WEBSITE_REPOSITORY}/ex") do
|
157
|
+
Dir.glob('*.rb').each do |file|
|
158
|
+
sh "ruby #{file}"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
144
162
|
end
|
145
163
|
|
146
164
|
namespace :rbs do
|
@@ -153,9 +171,6 @@ namespace :rbs do
|
|
153
171
|
end
|
154
172
|
end
|
155
173
|
|
156
|
-
require 'bundler/gem_tasks'
|
157
|
-
require 'rake/extensiontask'
|
158
|
-
require 'rspec/core/rake_task'
|
159
174
|
RSpec::Core::RakeTask.new(:spec)
|
160
175
|
|
161
176
|
Rake::ExtensionTask.new('RMagick2') do |ext|
|
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 jpeg-xl 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 -I$(brew --prefix jpeg-xl)/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 jpeg-xl)/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,11 @@ build_imagemagick() {
|
|
43
41
|
fi
|
44
42
|
|
45
43
|
cd "${build_dir}"
|
46
|
-
./configure
|
44
|
+
./configure \
|
45
|
+
--prefix=/usr/local \
|
46
|
+
"${options}" \
|
47
|
+
--with-gs-font-dir=/opt/homebrew/share/ghostscript/fonts \
|
48
|
+
--without-raw
|
47
49
|
make -j
|
48
50
|
}
|
49
51
|
|
@@ -52,7 +54,7 @@ if [ ! -d "${build_dir}" ]; then
|
|
52
54
|
fi
|
53
55
|
|
54
56
|
cd "${build_dir}"
|
55
|
-
make install -j
|
57
|
+
sudo make install -j
|
56
58
|
cd "${project_dir}"
|
57
59
|
|
58
60
|
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
|
@@ -29,6 +20,7 @@ module RMagick
|
|
29
20
|
ImageMagick-6.Q32
|
30
21
|
ImageMagick-6.Q16
|
31
22
|
ImageMagick-6.Q8
|
23
|
+
ImageMagick-6
|
32
24
|
].freeze
|
33
25
|
|
34
26
|
# ImageMagick 7 packages
|
@@ -41,6 +33,7 @@ module RMagick
|
|
41
33
|
ImageMagick-7.Q32
|
42
34
|
ImageMagick-7.Q16
|
43
35
|
ImageMagick-7.Q8
|
36
|
+
ImageMagick-7
|
44
37
|
].freeze
|
45
38
|
|
46
39
|
attr_reader :headers
|
@@ -48,6 +41,8 @@ module RMagick
|
|
48
41
|
def initialize
|
49
42
|
@stdout = $stdout.dup
|
50
43
|
|
44
|
+
exit_failure("No longer support MSWIN environment.") if RUBY_PLATFORM.include?('mswin')
|
45
|
+
|
51
46
|
setup_pkg_config_path
|
52
47
|
assert_can_compile!
|
53
48
|
configure_compile_options
|
@@ -55,7 +50,7 @@ module RMagick
|
|
55
50
|
end
|
56
51
|
|
57
52
|
def setup_pkg_config_path
|
58
|
-
return if RUBY_PLATFORM
|
53
|
+
return if RUBY_PLATFORM.include?('mingw')
|
59
54
|
|
60
55
|
if find_executable('brew')
|
61
56
|
append_pkg_config_path("#{`brew --prefix imagemagick`.strip}/lib/pkgconfig")
|
@@ -93,11 +88,25 @@ module RMagick
|
|
93
88
|
else
|
94
89
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find magick/MagickCore.h."
|
95
90
|
end
|
91
|
+
|
92
|
+
if have_header('malloc.h')
|
93
|
+
headers << 'malloc.h'
|
94
|
+
elsif have_header('malloc/malloc.h')
|
95
|
+
headers << 'malloc/malloc.h'
|
96
|
+
end
|
96
97
|
end
|
97
98
|
|
98
99
|
def configure_compile_options
|
99
100
|
# Magick-config is not available on Windows
|
100
|
-
if RUBY_PLATFORM
|
101
|
+
if RUBY_PLATFORM.include?('mingw') # mingw
|
102
|
+
|
103
|
+
dir_paths = search_paths_for_windows
|
104
|
+
$CPPFLAGS += %( -I"#{dir_paths[:include]}")
|
105
|
+
$CPPFLAGS += ' -x c++ -std=c++11 -Wno-register'
|
106
|
+
$LDFLAGS += %( -L"#{dir_paths[:root]}" -lucrt)
|
107
|
+
$LDFLAGS += (im_version_at_least?('7.0.0') ? ' -lCORE_RL_MagickCore_' : ' -lCORE_RL_magick_')
|
108
|
+
|
109
|
+
else
|
101
110
|
|
102
111
|
check_multiple_imagemagick_versions
|
103
112
|
check_partial_imagemagick_versions
|
@@ -119,32 +128,10 @@ module RMagick
|
|
119
128
|
$LDFLAGS = "#{original_ldflags} #{ldflags}"
|
120
129
|
end
|
121
130
|
|
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_')
|
131
|
+
configure_archflags_for_osx($magick_package) if RUBY_PLATFORM.include?('darwin') # osx
|
133
132
|
|
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
133
|
end
|
145
|
-
|
146
|
-
$CPPFLAGS += " -DRUBY_VERSION_MAJOR=#{ruby_version[0]} -DRUBY_VERSION_MINOR=#{ruby_version[1]}"
|
147
|
-
$CPPFLAGS += ' $(optflags) $(debugflags)'
|
134
|
+
$CPPFLAGS += ' $(optflags) $(debugflags) -fomit-frame-pointer'
|
148
135
|
end
|
149
136
|
|
150
137
|
def exit_failure(msg)
|
@@ -181,11 +168,6 @@ module RMagick
|
|
181
168
|
def determine_imagemagick_package
|
182
169
|
packages = [installed_im7_packages, installed_im6_packages].flatten
|
183
170
|
|
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
171
|
if packages.empty?
|
190
172
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find ImageMagick with pkg-config\n"
|
191
173
|
end
|
@@ -269,10 +251,10 @@ module RMagick
|
|
269
251
|
# issue #169
|
270
252
|
# set ARCHFLAGS appropriately for OSX
|
271
253
|
def configure_archflags_for_osx(magick_package)
|
272
|
-
return unless PKGConfig.libs_only_L(magick_package)
|
254
|
+
return unless PKGConfig.libs_only_L(magick_package) =~ %r{-L(.+)/lib}
|
273
255
|
|
274
256
|
imagemagick_dir = Regexp.last_match(1)
|
275
|
-
command = Dir.glob(File.join(imagemagick_dir, "bin/*")).
|
257
|
+
command = Dir.glob(File.join(imagemagick_dir, "bin/*")).find { |file| File.executable? file }
|
276
258
|
fileinfo = `file #{command}`
|
277
259
|
|
278
260
|
# default ARCHFLAGS
|
@@ -286,28 +268,27 @@ module RMagick
|
|
286
268
|
$ARCH_FLAG = archflags.join(' ') unless archflags.empty?
|
287
269
|
end
|
288
270
|
|
289
|
-
def
|
271
|
+
def search_paths_for_windows
|
290
272
|
msg = 'searching PATH for the ImageMagick library...'
|
291
273
|
Logging.message msg
|
292
274
|
message msg + "\n"
|
293
275
|
|
294
|
-
|
276
|
+
found = false
|
295
277
|
dir_paths = {}
|
296
278
|
|
297
279
|
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
298
280
|
paths.each do |dir|
|
299
|
-
|
300
|
-
|
301
|
-
next unless File.exist?(lib_file)
|
281
|
+
dll = File.join(dir, im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.dll' : 'CORE_RL_magick_.dll')
|
282
|
+
next unless File.exist?(dll)
|
302
283
|
|
303
284
|
dir_paths[:include] = File.join(dir, 'include')
|
304
|
-
dir_paths[:
|
285
|
+
dir_paths[:root] = dir
|
305
286
|
|
306
|
-
|
287
|
+
found = true
|
307
288
|
break
|
308
289
|
end
|
309
290
|
|
310
|
-
return dir_paths if
|
291
|
+
return dir_paths if found
|
311
292
|
|
312
293
|
exit_failure <<~END_MINGW
|
313
294
|
Can't install RMagick #{RMAGICK_VERS}.
|
@@ -322,7 +303,7 @@ module RMagick
|
|
322
303
|
assert_has_dev_libs!
|
323
304
|
|
324
305
|
# 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
|
306
|
+
cxx = (ENV['CXX'] || RbConfig::CONFIG['CXX'] || 'g++').split.first
|
326
307
|
exit_failure "No C++ compiler found in ${ENV['PATH']}. See mkmf.log for details." unless find_executable(cxx)
|
327
308
|
end
|
328
309
|
|
@@ -341,17 +322,17 @@ module RMagick
|
|
341
322
|
Check the mkmf.log file for more detailed information.
|
342
323
|
END_FAILURE
|
343
324
|
|
344
|
-
if RUBY_PLATFORM
|
325
|
+
if RUBY_PLATFORM.include?('mingw')
|
326
|
+
`#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
|
327
|
+
$magick_version = Regexp.last_match(1)
|
328
|
+
exit_failure failure_message unless $magick_version
|
329
|
+
else
|
345
330
|
unless PKGConfig.libs('MagickCore')[/\bl\s*(MagickCore|Magick)6?\b/]
|
346
331
|
exit_failure failure_message
|
347
332
|
end
|
348
333
|
|
349
334
|
$magick_package = determine_imagemagick_package
|
350
335
|
$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
336
|
end
|
356
337
|
|
357
338
|
# Ensure minimum ImageMagick version
|
@@ -365,8 +346,6 @@ module RMagick
|
|
365
346
|
|
366
347
|
def create_header_file
|
367
348
|
ruby_api = [
|
368
|
-
'rb_gc_adjust_memory_usage', # Ruby 2.4.0
|
369
|
-
'rb_gc_mark_movable', # Ruby 2.7.0
|
370
349
|
'rb_io_path' # Ruby 3.2.0
|
371
350
|
]
|
372
351
|
memory_api = %w[
|
@@ -386,15 +365,10 @@ module RMagick
|
|
386
365
|
have_func(func, headers)
|
387
366
|
end
|
388
367
|
|
389
|
-
unless have_header('malloc.h')
|
390
|
-
have_header('malloc/malloc.h')
|
391
|
-
end
|
392
|
-
|
393
368
|
# Miscellaneous constants
|
394
369
|
$defs.push("-DRUBY_VERSION_STRING=\"ruby #{RUBY_VERSION}\"")
|
395
370
|
$defs.push("-DRMAGICK_VERSION_STRING=\"RMagick #{RMAGICK_VERS}\"")
|
396
371
|
|
397
|
-
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9=1') if im_version_at_least?('6.8.9')
|
398
372
|
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0=1') if im_version_at_least?('6.9.0')
|
399
373
|
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_10=1') if im_version_at_least?('6.9.10')
|
400
374
|
$defs.push('-DIMAGEMAGICK_7=1') if im_version_at_least?('7.0.0')
|
@@ -415,7 +389,7 @@ module RMagick
|
|
415
389
|
end
|
416
390
|
|
417
391
|
def create_compile_flags_txt
|
418
|
-
cppflags = $CPPFLAGS.split
|
392
|
+
cppflags = $CPPFLAGS.split
|
419
393
|
include_flags = cppflags.select { |flag| flag.start_with?('-I') }
|
420
394
|
define_flags = cppflags.select { |flag| flag.start_with?('-D') } + $defs
|
421
395
|
|
data/ext/RMagick/rmagick.h
CHANGED
@@ -273,8 +273,8 @@ typedef struct
|
|
273
273
|
|
274
274
|
//! Quantum expression adapter.
|
275
275
|
/**
|
276
|
-
*
|
277
|
-
*
|
276
|
+
* ImageMagick defines an enum type for quantum-level expressions,
|
277
|
+
* but they're different types. The QuantumExpressionOperator
|
278
278
|
* type is an adapter type that can be mapped to either one.
|
279
279
|
*/
|
280
280
|
typedef enum _QuantumExpressionOperator
|
@@ -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
|
|