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.
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.0'
8
- gem 'rspec', '~> 3.8'
7
+ gem 'rake-compiler', '~> 1.2'
8
+ gem 'rspec', '~> 3.13'
9
9
  gem 'rspec_junit_formatter', '~> 0.6.0'
10
- gem 'simplecov', '~> 0.16.1'
11
- gem 'yard', '~> 0.9.24'
10
+ gem 'simplecov', '~> 0.22.0'
11
+ gem 'yard', '~> 0.9.36'
12
12
 
13
- if RUBY_PLATFORM !~ /mswin|mingw/
14
- gem 'rubocop', '~> 0.81.0'
15
- gem 'rubocop-rspec', '~> 1.38.1'
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
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
20
- # For CI
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 2.3 or later.
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.7.7 or later (6.x.x).
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:\Ruby27-x64\msys64\usr\bin;C:\Ruby27-x64\msys64\mingw64\bin;%PATH%`)
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 and libraries for C and C++` in an installer for RMagick.
111
- <img width="50%" src="https://user-images.githubusercontent.com/199156/77183472-b72cbd00-6b11-11ea-8b9a-247bc1f9d8b1.png" />
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 1.8+, use `~> 2.0`. Versions >= 3 work on Ruby >= 2.x
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
- desc "Open an irb session preloaded with this library"
7
- task :console do
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
- STDOUT.puts "Tagged #{version_tag}."
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!(/0\.0\.0/, Magick::VERSION)
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|
@@ -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 libxml2-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
@@ -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 libtool zlib webp
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 libxml2)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix glib)/lib -L$(brew --prefix openexr)/lib"
23
- export CPPFLAGS="-I$(brew --prefix libxml2)/include -I$(brew --prefix zlib)/include -I$(brew --prefix glib)/include/glib-2.0 -I$(brew --prefix glib)/lib/glib-2.0/include -I$(brew --prefix openexr)/include/OpenEXR"
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 --prefix=/usr/local "${options}" --without-raw --without-jxl --without-openjp2
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
@@ -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 =~ /mswin|mingw/
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 !~ /mswin|mingw/
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 =~ /darwin/ # osx
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
- ruby_version = RUBY_VERSION.split('.')
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).match(%r{-L(.+)/lib})
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/*")).select { |file| File.executable? file }.first
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 search_paths_for_library_for_windows
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
- found_lib = false
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
- lib = File.join(dir, 'lib')
300
- lib_file = File.join(lib, im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
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[:lib] = lib
285
+ dir_paths[:root] = dir
305
286
 
306
- found_lib = true
287
+ found = true
307
288
  break
308
289
  end
309
290
 
310
- return dir_paths if found_lib
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(' ').first
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 !~ /mswin|mingw/
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
 
@@ -273,8 +273,8 @@ typedef struct
273
273
 
274
274
  //! Quantum expression adapter.
275
275
  /**
276
- * Both ImageMagick and GraphicsMagick define an enum type for quantum-level
277
- * expressions, but they're different types. The QuantumExpressionOperator
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
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
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
- #if (RUBY_VERSION_MAJOR == 2 && RUBY_VERSION_MINOR < 7)
1231
- #define RESCUE_FUNC(func) (VALUE (*)(ANYARGS))(func)
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
 
@@ -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