rmagick 2.13.2 → 4.2.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.codeclimate.yml +63 -0
- data/.editorconfig +17 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +107 -0
- data/.gitignore +25 -0
- data/.rspec +2 -0
- data/.rubocop.yml +37 -0
- data/.rubocop_todo.yml +449 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +1277 -0
- data/CODE_OF_CONDUCT.md +128 -0
- data/CONTRIBUTING.md +81 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +324 -0
- data/Rakefile +190 -0
- data/before_install_linux.sh +69 -0
- data/before_install_osx.sh +57 -0
- data/deprecated/RMagick.rb +6 -0
- data/ext/RMagick/extconf.rb +334 -333
- data/ext/RMagick/rmagick.c +129 -127
- data/ext/RMagick/rmagick.h +221 -320
- data/ext/RMagick/rmdraw.c +458 -767
- data/ext/RMagick/rmenum.c +305 -752
- data/ext/RMagick/rmfill.c +231 -199
- data/ext/RMagick/rmilist.c +437 -478
- data/ext/RMagick/rmimage.c +6130 -5342
- data/ext/RMagick/rminfo.c +695 -833
- data/ext/RMagick/rmkinfo.c +198 -0
- data/ext/RMagick/rmmain.c +752 -506
- data/ext/RMagick/rmmontage.c +94 -152
- data/ext/RMagick/rmpixel.c +619 -425
- data/ext/RMagick/rmstruct.c +206 -309
- data/ext/RMagick/rmutil.c +514 -344
- data/lib/rmagick/version.rb +5 -0
- data/lib/rmagick.rb +1 -0
- data/lib/rmagick_internal.rb +1922 -0
- data/lib/rvg/clippath.rb +35 -39
- data/lib/rvg/container.rb +123 -124
- data/lib/rvg/deep_equal.rb +45 -49
- data/lib/rvg/describable.rb +41 -47
- data/lib/rvg/embellishable.rb +380 -411
- data/lib/rvg/misc.rb +691 -711
- data/lib/rvg/paint.rb +43 -47
- data/lib/rvg/pathdata.rb +119 -125
- data/lib/rvg/rvg.rb +214 -213
- data/lib/rvg/stretchable.rb +153 -162
- data/lib/rvg/stylable.rb +111 -117
- data/lib/rvg/text.rb +169 -180
- data/lib/rvg/transformable.rb +121 -127
- data/lib/rvg/units.rb +58 -61
- data/rmagick.gemspec +36 -16
- metadata +188 -365
- data/ChangeLog +0 -773
- data/Doxyfile +0 -1514
- data/README-Mac-OSX.txt +0 -1
- data/README.html +0 -10
- data/build_tarball.rake +0 -215
- data/doc/comtasks.html +0 -287
- data/doc/constants.html +0 -1581
- data/doc/css/doc.css +0 -299
- data/doc/css/popup.css +0 -34
- data/doc/css/ref.css +0 -67
- data/doc/draw.html +0 -3269
- data/doc/ex/InitialCoords.rb +0 -23
- data/doc/ex/NewCoordSys.rb +0 -32
- data/doc/ex/OrigCoordSys.rb +0 -18
- data/doc/ex/PreserveAspectRatio.rb +0 -205
- data/doc/ex/RotateScale.rb +0 -37
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -16
- data/doc/ex/Use02.rb +0 -21
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -33
- data/doc/ex/adaptive_threshold.rb +0 -10
- data/doc/ex/add_noise.rb +0 -17
- data/doc/ex/affine.rb +0 -48
- data/doc/ex/affine_transform.rb +0 -20
- data/doc/ex/arc.rb +0 -49
- data/doc/ex/arcpath.rb +0 -33
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -61
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -18
- data/doc/ex/bilevel_channel.rb +0 -9
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -44
- data/doc/ex/cbezier1.rb +0 -42
- data/doc/ex/cbezier2.rb +0 -42
- data/doc/ex/cbezier3.rb +0 -42
- data/doc/ex/cbezier4.rb +0 -43
- data/doc/ex/cbezier5.rb +0 -43
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -26
- data/doc/ex/charcoal.rb +0 -12
- data/doc/ex/chop.rb +0 -29
- data/doc/ex/circle.rb +0 -33
- data/doc/ex/circle01.rb +0 -17
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -60
- data/doc/ex/color_fill_to_border.rb +0 -29
- data/doc/ex/color_floodfill.rb +0 -28
- data/doc/ex/color_histogram.rb +0 -48
- data/doc/ex/color_reset.rb +0 -11
- data/doc/ex/colorize.rb +0 -16
- data/doc/ex/colors.rb +0 -64
- data/doc/ex/compose_mask.rb +0 -23
- data/doc/ex/composite.rb +0 -135
- data/doc/ex/composite_layers.rb +0 -53
- data/doc/ex/composite_tiled.rb +0 -23
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -46
- data/doc/ex/cubic01.rb +0 -45
- data/doc/ex/cubic02.rb +0 -94
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -13
- data/doc/ex/drawcomp.rb +0 -42
- data/doc/ex/drop_shadow.rb +0 -60
- data/doc/ex/edge.rb +0 -11
- data/doc/ex/ellipse.rb +0 -45
- data/doc/ex/ellipse01.rb +0 -22
- data/doc/ex/emboss.rb +0 -11
- data/doc/ex/enhance.rb +0 -28
- data/doc/ex/equalize.rb +0 -11
- data/doc/ex/evenodd.rb +0 -43
- data/doc/ex/fill_pattern.rb +0 -26
- data/doc/ex/flatten_images.rb +0 -36
- data/doc/ex/flip.rb +0 -11
- data/doc/ex/flop.rb +0 -11
- data/doc/ex/font_styles.rb +0 -34
- data/doc/ex/fonts.rb +0 -20
- data/doc/ex/frame.rb +0 -12
- data/doc/ex/gaussian_blur.rb +0 -11
- data/doc/ex/get_multiline_type_metrics.rb +0 -42
- data/doc/ex/get_pixels.rb +0 -48
- data/doc/ex/get_type_metrics.rb +0 -146
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -46
- data/doc/ex/gravity.rb +0 -79
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -46
- data/doc/ex/images/Apple.miff +0 -0
- data/doc/ex/images/Ballerina.jpg +0 -0
- data/doc/ex/images/Ballerina3.jpg +0 -0
- data/doc/ex/images/Button_0.gif +0 -0
- data/doc/ex/images/Button_1.gif +0 -0
- data/doc/ex/images/Button_2.gif +0 -0
- data/doc/ex/images/Button_3.gif +0 -0
- data/doc/ex/images/Button_4.gif +0 -0
- data/doc/ex/images/Button_5.gif +0 -0
- data/doc/ex/images/Button_6.gif +0 -0
- data/doc/ex/images/Button_7.gif +0 -0
- data/doc/ex/images/Button_8.gif +0 -0
- data/doc/ex/images/Button_9.gif +0 -0
- data/doc/ex/images/Button_A.gif +0 -0
- data/doc/ex/images/Button_B.gif +0 -0
- data/doc/ex/images/Button_C.gif +0 -0
- data/doc/ex/images/Button_D.gif +0 -0
- data/doc/ex/images/Button_E.gif +0 -0
- data/doc/ex/images/Button_F.gif +0 -0
- data/doc/ex/images/Button_G.gif +0 -0
- data/doc/ex/images/Button_H.gif +0 -0
- data/doc/ex/images/Button_I.gif +0 -0
- data/doc/ex/images/Button_J.gif +0 -0
- data/doc/ex/images/Button_K.gif +0 -0
- data/doc/ex/images/Button_L.gif +0 -0
- data/doc/ex/images/Button_M.gif +0 -0
- data/doc/ex/images/Button_N.gif +0 -0
- data/doc/ex/images/Button_O.gif +0 -0
- data/doc/ex/images/Button_P.gif +0 -0
- data/doc/ex/images/Button_Q.gif +0 -0
- data/doc/ex/images/Button_R.gif +0 -0
- data/doc/ex/images/Button_S.gif +0 -0
- data/doc/ex/images/Button_T.gif +0 -0
- data/doc/ex/images/Button_U.gif +0 -0
- data/doc/ex/images/Button_V.gif +0 -0
- data/doc/ex/images/Button_W.gif +0 -0
- data/doc/ex/images/Button_X.gif +0 -0
- data/doc/ex/images/Button_Y.gif +0 -0
- data/doc/ex/images/Button_Z.gif +0 -0
- data/doc/ex/images/Cheetah.jpg +0 -0
- data/doc/ex/images/Coffee.wmf +0 -0
- data/doc/ex/images/Flower_Hat.jpg +0 -0
- data/doc/ex/images/Gold_Statue.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
- data/doc/ex/images/Leaf.miff +0 -0
- data/doc/ex/images/No.wmf +0 -0
- data/doc/ex/images/Polynesia.jpg +0 -0
- data/doc/ex/images/Red_Rocks.jpg +0 -0
- data/doc/ex/images/Rocks_On_Beach.miff +0 -0
- data/doc/ex/images/Shorts.jpg +0 -0
- data/doc/ex/images/Snake.wmf +0 -0
- data/doc/ex/images/Violin.jpg +0 -0
- data/doc/ex/images/Yellow_Rose.miff +0 -0
- data/doc/ex/images/big-duck.gif +0 -0
- data/doc/ex/images/duck.gif +0 -0
- data/doc/ex/images/duck0.gif +0 -0
- data/doc/ex/images/duck1.gif +0 -0
- data/doc/ex/images/duck10.gif +0 -0
- data/doc/ex/images/duck11.gif +0 -0
- data/doc/ex/images/duck12.gif +0 -0
- data/doc/ex/images/duck13.gif +0 -0
- data/doc/ex/images/duck14.gif +0 -0
- data/doc/ex/images/duck15.gif +0 -0
- data/doc/ex/images/duck2.gif +0 -0
- data/doc/ex/images/duck3.gif +0 -0
- data/doc/ex/images/duck4.gif +0 -0
- data/doc/ex/images/duck5.gif +0 -0
- data/doc/ex/images/duck6.gif +0 -0
- data/doc/ex/images/duck7.gif +0 -0
- data/doc/ex/images/duck8.gif +0 -0
- data/doc/ex/images/duck9.gif +0 -0
- data/doc/ex/images/graydient230x6.gif +0 -0
- data/doc/ex/images/logo400x83.gif +0 -0
- data/doc/ex/images/model.miff +0 -0
- data/doc/ex/images/notimplemented.gif +0 -0
- data/doc/ex/images/smile.miff +0 -0
- data/doc/ex/images/spin.gif +0 -0
- data/doc/ex/implode.rb +0 -34
- data/doc/ex/level.rb +0 -11
- data/doc/ex/level_colors.rb +0 -11
- data/doc/ex/line.rb +0 -42
- data/doc/ex/line01.rb +0 -23
- data/doc/ex/mask.rb +0 -36
- data/doc/ex/matte_fill_to_border.rb +0 -40
- data/doc/ex/matte_floodfill.rb +0 -33
- data/doc/ex/matte_replace.rb +0 -40
- data/doc/ex/median_filter.rb +0 -28
- data/doc/ex/modulate.rb +0 -11
- data/doc/ex/mono.rb +0 -23
- data/doc/ex/morph.rb +0 -26
- data/doc/ex/mosaic.rb +0 -35
- data/doc/ex/motion_blur.rb +0 -11
- data/doc/ex/negate.rb +0 -11
- data/doc/ex/negate_channel.rb +0 -9
- data/doc/ex/nested_rvg.rb +0 -21
- data/doc/ex/nonzero.rb +0 -43
- data/doc/ex/normalize.rb +0 -11
- data/doc/ex/oil_paint.rb +0 -11
- data/doc/ex/opacity.rb +0 -37
- data/doc/ex/ordered_dither.rb +0 -11
- data/doc/ex/path.rb +0 -64
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -28
- data/doc/ex/polygon.rb +0 -24
- data/doc/ex/polygon01.rb +0 -23
- data/doc/ex/polyline.rb +0 -23
- data/doc/ex/polyline01.rb +0 -23
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -9
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -36
- data/doc/ex/quantize-m.rb +0 -25
- data/doc/ex/radial_blur.rb +0 -9
- data/doc/ex/raise.rb +0 -8
- data/doc/ex/random_threshold_channel.rb +0 -13
- data/doc/ex/rect01.rb +0 -15
- data/doc/ex/rect02.rb +0 -22
- data/doc/ex/rectangle.rb +0 -35
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -12
- data/doc/ex/remap_images.rb +0 -21
- data/doc/ex/resize_to_fill.rb +0 -10
- data/doc/ex/resize_to_fit.rb +0 -10
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -45
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -34
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -14
- data/doc/ex/rvg_linecap.rb +0 -43
- data/doc/ex/rvg_linejoin.rb +0 -41
- data/doc/ex/rvg_opacity.rb +0 -19
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -12
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -8
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -31
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -18
- data/doc/ex/skewx.rb +0 -52
- data/doc/ex/skewy.rb +0 -47
- data/doc/ex/smile.rb +0 -125
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -55
- data/doc/ex/splice.rb +0 -9
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -55
- data/doc/ex/stroke_dasharray.rb +0 -43
- data/doc/ex/stroke_fill.rb +0 -11
- data/doc/ex/stroke_linecap.rb +0 -44
- data/doc/ex/stroke_linejoin.rb +0 -48
- data/doc/ex/stroke_width.rb +0 -49
- data/doc/ex/swirl.rb +0 -17
- data/doc/ex/text.rb +0 -37
- data/doc/ex/text01.rb +0 -17
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -38
- data/doc/ex/text_styles.rb +0 -21
- data/doc/ex/text_undercolor.rb +0 -28
- data/doc/ex/texture_fill_to_border.rb +0 -34
- data/doc/ex/texture_floodfill.rb +0 -32
- data/doc/ex/texturefill.rb +0 -25
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -14
- data/doc/ex/translate.rb +0 -39
- data/doc/ex/transparent.rb +0 -38
- data/doc/ex/transpose.rb +0 -9
- data/doc/ex/transverse.rb +0 -9
- data/doc/ex/tref01.rb +0 -25
- data/doc/ex/triangle01.rb +0 -16
- data/doc/ex/trim.rb +0 -24
- data/doc/ex/tspan01.rb +0 -18
- data/doc/ex/tspan02.rb +0 -19
- data/doc/ex/tspan03.rb +0 -21
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -35
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -28
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -59
- data/doc/ex/writing_mode01.rb +0 -27
- data/doc/ex/writing_mode02.rb +0 -26
- data/doc/ilist.html +0 -2056
- data/doc/image1.html +0 -4680
- data/doc/image2.html +0 -3665
- data/doc/image3.html +0 -4522
- data/doc/imageattrs.html +0 -1638
- data/doc/imusage.html +0 -514
- data/doc/index.html +0 -416
- data/doc/info.html +0 -1499
- data/doc/magick.html +0 -565
- data/doc/optequiv.html +0 -2435
- data/doc/rvg.html +0 -975
- data/doc/rvgclip.html +0 -248
- data/doc/rvggroup.html +0 -305
- data/doc/rvgimage.html +0 -289
- data/doc/rvgpattern.html +0 -475
- data/doc/rvgshape.html +0 -406
- data/doc/rvgstyle.html +0 -270
- data/doc/rvgtext.html +0 -465
- data/doc/rvgtspan.html +0 -238
- data/doc/rvgtut.html +0 -530
- data/doc/rvguse.html +0 -145
- data/doc/rvgxform.html +0 -294
- data/doc/scripts/doc.js +0 -22
- data/doc/scripts/stripeTables.js +0 -23
- data/doc/struct.html +0 -1339
- data/doc/usage.html +0 -1621
- data/examples/constitute.rb +0 -7
- data/examples/crop_with_gravity.rb +0 -46
- data/examples/demo.rb +0 -324
- data/examples/describe.rb +0 -44
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -325
- data/examples/identify.rb +0 -187
- data/examples/image_opacity.rb +0 -29
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -38
- data/examples/rotating_text.rb +0 -45
- data/examples/spinner.rb +0 -50
- data/examples/thumbnail.rb +0 -65
- data/examples/vignette.rb +0 -79
- data/ext/RMagick/MANIFEST +0 -358
- data/lib/RMagick.rb +0 -1962
- data/metaconfig +0 -7
- data/post-clean.rb +0 -12
- data/post-install.rb +0 -50
- data/post-setup.rb +0 -254
- data/setup.rb +0 -1585
- data/uninstall.rb +0 -76
data/ext/RMagick/extconf.rb
CHANGED
@@ -1,403 +1,404 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
$defs.push(format("-DHAVE_ENUM_%s", value.upcase))
|
22
|
-
true
|
23
|
-
else
|
24
|
-
false
|
1
|
+
lib_dir = File.expand_path('../../lib', File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
3
|
+
require 'rubygems'
|
4
|
+
require 'mkmf'
|
5
|
+
|
6
|
+
module RMagick
|
7
|
+
class Extconf
|
8
|
+
require 'rmagick/version'
|
9
|
+
RMAGICK_VERS = ::Magick::VERSION
|
10
|
+
MIN_RUBY_VERS = ::Magick::MIN_RUBY_VERSION
|
11
|
+
|
12
|
+
attr_reader :headers
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@stdout = $stdout.dup
|
16
|
+
|
17
|
+
setup_pkg_config_path
|
18
|
+
assert_can_compile!
|
19
|
+
configure_compile_options
|
20
|
+
configure_headers
|
25
21
|
end
|
26
|
-
end
|
27
|
-
end
|
28
22
|
|
23
|
+
def setup_pkg_config_path
|
24
|
+
return if RUBY_PLATFORM =~ /mswin|mingw/
|
29
25
|
|
26
|
+
if find_executable('brew')
|
27
|
+
pkg_config_path = "#{`brew --prefix imagemagick@6`.strip}/lib/pkgconfig"
|
28
|
+
elsif find_executable('pacman')
|
29
|
+
pkg_config_path = '/usr/lib/imagemagick6/pkgconfig'
|
30
|
+
else
|
31
|
+
return
|
32
|
+
end
|
30
33
|
|
34
|
+
pkg_config_paths = ENV['PKG_CONFIG_PATH'].to_s.split(':')
|
35
|
+
if File.exist?(pkg_config_path) && !pkg_config_paths.include?(pkg_config_path)
|
36
|
+
ENV['PKG_CONFIG_PATH'] = [ENV['PKG_CONFIG_PATH'], pkg_config_path].compact.join(':')
|
37
|
+
end
|
38
|
+
end
|
31
39
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
40
|
+
def configured_compile_options
|
41
|
+
{
|
42
|
+
magick_version: $magick_version,
|
43
|
+
local_libs: $LOCAL_LIBS,
|
44
|
+
cflags: $CFLAGS,
|
45
|
+
cppflags: $CPPFLAGS,
|
46
|
+
ldflags: $LDFLAGS,
|
47
|
+
defs: $defs,
|
48
|
+
config_h: $config_h
|
49
|
+
}
|
50
|
+
end
|
38
51
|
|
52
|
+
def configure_headers
|
53
|
+
@headers = %w[assert.h ctype.h stdio.h stdlib.h math.h time.h sys/types.h]
|
39
54
|
|
55
|
+
if have_header('MagickCore/MagickCore.h')
|
56
|
+
headers << 'MagickCore/MagickCore.h'
|
57
|
+
elsif have_header('magick/MagickCore.h')
|
58
|
+
headers << 'magick/MagickCore.h'
|
59
|
+
else
|
60
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find magick/MagickCore.h."
|
61
|
+
end
|
62
|
+
end
|
40
63
|
|
64
|
+
def configure_compile_options
|
65
|
+
# Magick-config is not available on Windows
|
66
|
+
if RUBY_PLATFORM !~ /mswin|mingw/
|
41
67
|
|
42
|
-
|
43
|
-
|
44
|
-
message msg+"\n"
|
45
|
-
exit(1)
|
46
|
-
end
|
68
|
+
check_multiple_imagemagick_versions
|
69
|
+
check_partial_imagemagick_versions
|
47
70
|
|
71
|
+
# Save flags
|
72
|
+
$CFLAGS = "#{ENV['CFLAGS']} " + `pkg-config --cflags #{$magick_package}`.chomp
|
73
|
+
$CPPFLAGS = "#{ENV['CPPFLAGS']} " + `pkg-config --cflags #{$magick_package}`.chomp
|
74
|
+
$LDFLAGS = "#{ENV['LDFLAGS']} " + `pkg-config --libs #{$magick_package}`.chomp
|
75
|
+
$LOCAL_LIBS = "#{ENV['LIBS']} " + `pkg-config --libs #{$magick_package}`.chomp
|
48
76
|
|
77
|
+
configure_archflags_for_osx($magick_package) if RUBY_PLATFORM =~ /darwin/ # osx
|
49
78
|
|
79
|
+
elsif RUBY_PLATFORM =~ /mingw/ # mingw
|
50
80
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
path.each do |dir|
|
56
|
-
file = File.join(dir, "Magick-config")
|
57
|
-
if File.executable? file
|
58
|
-
vers = `#{file} --version`.chomp.strip
|
59
|
-
prefix = `#{file} --prefix`.chomp.strip
|
60
|
-
versions << [vers, prefix, dir]
|
61
|
-
end
|
62
|
-
end
|
63
|
-
versions.uniq!
|
64
|
-
if versions.size > 1
|
65
|
-
msg = "\nWarning: Found more than one ImageMagick installation. This could cause problems at runtime.\n"
|
66
|
-
versions.each do |vers, prefix, dir|
|
67
|
-
msg << " #{dir}/Magick-config reports version #{vers} is installed in #{prefix}\n"
|
68
|
-
end
|
69
|
-
msg << "Using #{versions[0][0]} from #{versions[0][1]}.\n\n"
|
70
|
-
Logging::message msg
|
71
|
-
message msg
|
72
|
-
end
|
73
|
-
end
|
81
|
+
dir_paths = search_paths_for_library_for_windows
|
82
|
+
$CPPFLAGS = %(-I"#{dir_paths[:include]}")
|
83
|
+
$LDFLAGS = %(-L"#{dir_paths[:lib]}")
|
84
|
+
$LDFLAGS << ' -lucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
74
85
|
|
86
|
+
have_library(im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_' : 'CORE_RL_magick_')
|
75
87
|
|
76
|
-
#
|
77
|
-
# ImageMagick in the prefix /usr (some libraries, no includes, and no
|
78
|
-
# binaries). This causes problems when /usr/lib is in the path (e.g., using
|
79
|
-
# the default Ruby installation).
|
80
|
-
def check_partial_imagemagick_versions()
|
81
|
-
prefix = config_string("prefix")
|
82
|
-
matches = [
|
83
|
-
prefix+"/lib/lib?agick*",
|
84
|
-
prefix+"/include/ImageMagick",
|
85
|
-
prefix+"/bin/Magick-config",
|
86
|
-
].map do |file_glob|
|
87
|
-
Dir.glob(file_glob)
|
88
|
-
end
|
89
|
-
matches.delete_if { |arr| arr.empty? }
|
90
|
-
if 0 < matches.length and matches.length < 3
|
91
|
-
msg = "\nWarning: Found a partial ImageMagick installation. Your operating system likely has some built-in ImageMagick libraries but not all of ImageMagick. This will most likely cause problems at both compile and runtime.\nFound partial installation at: "+prefix+"\n"
|
92
|
-
Logging::message msg
|
93
|
-
message msg
|
94
|
-
end
|
95
|
-
end
|
88
|
+
else # mswin
|
96
89
|
|
90
|
+
dir_paths = search_paths_for_library_for_windows
|
91
|
+
$CPPFLAGS << %( -I"#{dir_paths[:include]}")
|
92
|
+
$LDFLAGS << %( -libpath:"#{dir_paths[:lib]}")
|
93
|
+
$LDFLAGS << ' -libpath:ucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
97
94
|
|
95
|
+
$LOCAL_LIBS = im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib'
|
98
96
|
|
99
|
-
|
100
|
-
abort <<END_MSWIN
|
101
|
-
+----------------------------------------------------------------------------+
|
102
|
-
| This rmagick gem is for use only on Linux, BSD, OS X, and similar systems |
|
103
|
-
| that have a gnu or similar toolchain installed. The rmagick-win32 gem is a |
|
104
|
-
| pre-compiled version of RMagick bundled with ImageMagick for use on |
|
105
|
-
| Microsoft Windows systems. The rmagick-win32 gem is available on RubyForge.|
|
106
|
-
| See http://rmagick.rubyforge.org/install-faq.html for more information. |
|
107
|
-
+----------------------------------------------------------------------------+
|
108
|
-
END_MSWIN
|
109
|
-
end
|
110
|
-
|
111
|
-
|
97
|
+
end
|
112
98
|
|
99
|
+
$CFLAGS << (have_macro('__GNUC__') ? ' -std=gnu99' : ' -std=c99')
|
100
|
+
end
|
113
101
|
|
114
|
-
|
115
|
-
|
116
|
-
version >= MIN_RUBY_VERS_NO
|
117
|
-
end
|
118
|
-
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n"
|
119
|
-
end
|
102
|
+
def exit_failure(msg)
|
103
|
+
msg = "ERROR: #{msg}"
|
120
104
|
|
105
|
+
Logging.message msg
|
121
106
|
|
107
|
+
@stdout.puts "\n\n"
|
108
|
+
if ENV['NO_COLOR']
|
109
|
+
@stdout.puts msg
|
110
|
+
else
|
111
|
+
@stdout.print "\e[31m\e[1m#{msg}\e[0m"
|
112
|
+
end
|
113
|
+
@stdout.puts "\n\n"
|
114
|
+
@stdout.flush
|
122
115
|
|
116
|
+
exit(1)
|
117
|
+
end
|
123
118
|
|
124
|
-
|
125
|
-
|
119
|
+
def determine_imagemagick_package
|
120
|
+
packages = `pkg-config --list-all`.scan(/(ImageMagick\-[\.A-Z0-9]+) .*/).flatten
|
126
121
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
exit_failure "No C compiler found in ${ENV['PATH']}. See mkmf.log for details."
|
132
|
-
end
|
122
|
+
# For ancient version of ImageMagick 6 we need a different regex
|
123
|
+
if packages.empty?
|
124
|
+
packages = `pkg-config --list-all`.scan(/(ImageMagick) .*/).flatten
|
125
|
+
end
|
133
126
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
end
|
127
|
+
if packages.empty?
|
128
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find ImageMagick with pkg-config\n"
|
129
|
+
end
|
138
130
|
|
139
|
-
|
140
|
-
|
131
|
+
if packages.length > 1
|
132
|
+
|
133
|
+
im7_packages = packages.grep(/\AImageMagick-7/)
|
134
|
+
|
135
|
+
if im7_packages.any?
|
136
|
+
checking_for('forced use of ImageMagick 6') do
|
137
|
+
if ENV['USE_IMAGEMAGICK_6']
|
138
|
+
packages -= im7_packages
|
139
|
+
true
|
140
|
+
else
|
141
|
+
packages = im7_packages
|
142
|
+
false
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
141
147
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
end
|
148
|
+
if packages.length > 1
|
149
|
+
package_lines = packages.map { |package| " - #{package}" }.join("\n")
|
150
|
+
msg = "\nWarning: Found more than one ImageMagick installation. This could cause problems at runtime.\n#{package_lines}\n\n"
|
151
|
+
Logging.message msg
|
152
|
+
message msg
|
153
|
+
end
|
149
154
|
|
155
|
+
packages.first
|
156
|
+
end
|
150
157
|
|
158
|
+
# Seems like lots of people have multiple versions of ImageMagick installed.
|
159
|
+
def check_multiple_imagemagick_versions
|
160
|
+
versions = []
|
161
|
+
path = ENV['PATH'].split(File::PATH_SEPARATOR)
|
162
|
+
path.each do |dir|
|
163
|
+
file = File.join(dir, 'Magick-config')
|
164
|
+
next unless File.executable? file
|
165
|
+
|
166
|
+
vers = `#{file} --version`.chomp.strip
|
167
|
+
prefix = `#{file} --prefix`.chomp.strip
|
168
|
+
versions << [vers, prefix, dir]
|
169
|
+
end
|
170
|
+
versions.uniq!
|
171
|
+
return unless versions.size > 1
|
151
172
|
|
173
|
+
msg = "\nWarning: Found more than one ImageMagick installation. This could cause problems at runtime.\n"
|
174
|
+
versions.each do |vers, prefix, dir|
|
175
|
+
msg << " #{dir}/Magick-config reports version #{vers} is installed in #{prefix}\n"
|
176
|
+
end
|
177
|
+
msg << "Using #{versions[0][0]} from #{versions[0][1]}.\n\n"
|
178
|
+
Logging.message msg
|
179
|
+
message msg
|
180
|
+
end
|
152
181
|
|
153
|
-
|
182
|
+
# Ubuntu (maybe other systems) comes with a partial installation of
|
183
|
+
# ImageMagick in the prefix /usr (some libraries, no includes, and no
|
184
|
+
# binaries). This causes problems when /usr/lib is in the path (e.g., using
|
185
|
+
# the default Ruby installation).
|
186
|
+
def check_partial_imagemagick_versions
|
187
|
+
prefix = config_string('prefix') || ''
|
188
|
+
matches = [
|
189
|
+
prefix + '/lib/lib?agick*',
|
190
|
+
prefix + '/include/ImageMagick',
|
191
|
+
prefix + '/bin/Magick-config'
|
192
|
+
].map do |file_glob|
|
193
|
+
Dir.glob(file_glob)
|
194
|
+
end
|
195
|
+
matches.delete_if(&:empty?)
|
196
|
+
return unless !matches.empty? && matches.length < 3
|
154
197
|
|
155
|
-
|
156
|
-
unless checking_for("HDRI disabled version of ImageMagick") do
|
157
|
-
not (`Magick-config --version`["HDRI"])
|
158
|
-
end
|
159
|
-
exit_failure "\nCan't install RMagick #{RMAGICK_VERS}."+
|
160
|
-
"\nRMagick does not work when ImageMagick is configured for High Dynamic Range Images."+
|
161
|
-
"\nDon't use the --enable-hdri option when configuring ImageMagick.\n"
|
162
|
-
end
|
198
|
+
msg = <<~MESSAGE
|
163
199
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
200
|
+
Warning: Found a partial ImageMagick installation. Your operating
|
201
|
+
system likely has some built-in ImageMagick libraries but not all of
|
202
|
+
ImageMagick. This will most likely cause problems at both compile and
|
203
|
+
runtime.
|
204
|
+
Found partial installation at: #{prefix}
|
169
205
|
|
170
|
-
|
206
|
+
MESSAGE
|
171
207
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
$LOCAL_LIBS = '-lCORE_RL_magick_ -lX11'
|
208
|
+
Logging.message msg
|
209
|
+
message msg
|
210
|
+
end
|
176
211
|
|
177
|
-
|
212
|
+
# issue #169
|
213
|
+
# set ARCHFLAGS appropriately for OSX
|
214
|
+
def configure_archflags_for_osx(magick_package)
|
215
|
+
return unless `pkg-config #{magick_package} --libs-only-L`.match(%r{-L(.+)/lib})
|
178
216
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
$CFLAGS = "-W3"
|
183
|
-
$CPPFLAGS = %Q{-I"C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Include" -I"C:\\Program Files\\ImageMagick-#{$magick_version}-Q8\\include"}
|
184
|
-
# The /link option is required by the Makefile but causes warnings in the mkmf.log file.
|
185
|
-
$LDFLAGS = %Q{/link /LIBPATH:"C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Lib" /LIBPATH:"C:\\Program Files\\ImageMagick-#{$magick_version}-Q8\\lib" /LIBPATH:"C:\\ruby\\lib"}
|
186
|
-
$LOCAL_LIBS = 'CORE_RL_magick_.lib X11.lib'
|
217
|
+
imagemagick_dir = Regexp.last_match(1)
|
218
|
+
command = Dir.glob(File.join(imagemagick_dir, "bin/*")).select { |file| File.executable? file }.first
|
219
|
+
fileinfo = `file #{command}`
|
187
220
|
|
188
|
-
|
221
|
+
# default ARCHFLAGS
|
222
|
+
archs = $ARCH_FLAG.scan(/-arch\s+(\S+)/).flatten
|
189
223
|
|
224
|
+
archflags = []
|
225
|
+
archs.each do |arch|
|
226
|
+
archflags << "-arch #{arch}" if fileinfo.include?(arch)
|
227
|
+
end
|
190
228
|
|
229
|
+
$ARCH_FLAG = archflags.join(' ') unless archflags.empty?
|
230
|
+
end
|
191
231
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
232
|
+
def search_paths_for_library_for_windows
|
233
|
+
msg = 'searching PATH for the ImageMagick library...'
|
234
|
+
Logging.message msg
|
235
|
+
message msg + "\n"
|
196
236
|
|
237
|
+
found_lib = false
|
238
|
+
dir_paths = {}
|
197
239
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
240
|
+
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
241
|
+
paths.each do |dir|
|
242
|
+
lib = File.join(dir, 'lib')
|
243
|
+
lib_file = File.join(lib, im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
|
244
|
+
next unless File.exist?(lib_file)
|
203
245
|
|
246
|
+
dir_paths[:include] = File.join(dir, 'include')
|
247
|
+
dir_paths[:lib] = lib
|
204
248
|
|
249
|
+
found_lib = true
|
250
|
+
break
|
251
|
+
end
|
205
252
|
|
206
|
-
|
253
|
+
return dir_paths if found_lib
|
207
254
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
255
|
+
exit_failure <<~END_MINGW
|
256
|
+
Can't install RMagick #{RMAGICK_VERS}.
|
257
|
+
Can't find the ImageMagick library.
|
258
|
+
Retry with '--with-opt-dir' option.
|
259
|
+
Usage: gem install rmagick -- '--with-opt-dir=\"[path to ImageMagick]\"'
|
260
|
+
e.g.
|
261
|
+
gem install rmagick -- '--with-opt-dir=\"C:\Program Files\ImageMagick-6.9.1-Q16\"'
|
262
|
+
END_MINGW
|
263
|
+
end
|
214
264
|
|
265
|
+
def assert_can_compile!
|
266
|
+
assert_minimum_ruby_version!
|
267
|
+
assert_has_dev_libs!
|
215
268
|
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
"AutoGammaImageChannel", # 6.5.5-1
|
221
|
-
"AutoLevelImageChannel", # 6.5.5-1
|
222
|
-
"BlueShiftImage", # 6.5.4-3
|
223
|
-
"ConstituteComponentTerminus", # 6.5.7-9
|
224
|
-
"DeskewImage", # 6.4.2-5
|
225
|
-
"EncipherImage", # 6.3.8-6
|
226
|
-
"EqualizeImageChannel", # 6.3.6-9
|
227
|
-
"FloodfillPaintImage", # 6.3.7
|
228
|
-
"FunctionImageChannel", # 6.4.8-8
|
229
|
-
"GetAuthenticIndexQueue", # 6.4.5-6
|
230
|
-
"GetAuthenticPixels", # 6.4.5-6
|
231
|
-
"GetImageAlphaChannel", # 6.3.9-2
|
232
|
-
"GetVirtualPixels", # 6.4.5-6
|
233
|
-
"LevelImageColors", # 6.4.2
|
234
|
-
"LevelColorsImageChannel", # 6.5.6-4
|
235
|
-
"LevelizeImageChannel", # 6.4.2
|
236
|
-
"LiquidRescaleImage", # 6.3.8-2
|
237
|
-
"MagickLibAddendum", # 6.5.9-1
|
238
|
-
"OpaquePaintImageChannel", # 6.3.7-10
|
239
|
-
"QueueAuthenticPixels", # 6.4.5-6
|
240
|
-
"RemapImage", # 6.4.4-0
|
241
|
-
"RemoveImageArtifact", # 6.3.6
|
242
|
-
"SelectiveBlurImageChannel", # 6.5.0-3
|
243
|
-
"SetImageAlphaChannel", # 6.3.6-9
|
244
|
-
"SetImageArtifact", # 6.3.6
|
245
|
-
"SetMagickMemoryMethods", # 6.4.1
|
246
|
-
"SparseColorImage", # 6.3.6-?
|
247
|
-
"SyncAuthenticPixels", # 6.4.5-6
|
248
|
-
"TransformImageColorspace", # 6.5.1
|
249
|
-
"TransparentPaintImage", # 6.3.7-10
|
250
|
-
"TransparentPaintImageChroma" # 6.4.5-6
|
251
|
-
].each do |func|
|
252
|
-
have_func(func, headers)
|
253
|
-
end
|
269
|
+
# Check for compiler. Extract first word so ENV['CC'] can be a program name with arguments.
|
270
|
+
cc = (ENV['CC'] || RbConfig::CONFIG['CC'] || 'gcc').split(' ').first
|
271
|
+
exit_failure "No C compiler found in ${ENV['PATH']}. See mkmf.log for details." unless find_executable(cc)
|
272
|
+
end
|
254
273
|
|
274
|
+
def assert_minimum_ruby_version!
|
275
|
+
supported = checking_for("Ruby version >= #{MIN_RUBY_VERS}") do
|
276
|
+
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(MIN_RUBY_VERS)
|
277
|
+
end
|
255
278
|
|
279
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n" unless supported
|
280
|
+
end
|
256
281
|
|
282
|
+
def assert_has_dev_libs!
|
283
|
+
failure_message = <<~END_FAILURE
|
284
|
+
Can't install RMagick #{RMAGICK_VERS}.
|
285
|
+
Can't find the ImageMagick library or one of the dependent libraries.
|
286
|
+
Check the mkmf.log file for more detailed information.
|
287
|
+
END_FAILURE
|
288
|
+
|
289
|
+
if RUBY_PLATFORM !~ /mswin|mingw/
|
290
|
+
unless find_executable('pkg-config')
|
291
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find pkg-config in #{ENV['PATH']}\n"
|
292
|
+
end
|
293
|
+
|
294
|
+
unless `pkg-config --libs MagickCore`[/\bl\s*(MagickCore|Magick)6?\b/]
|
295
|
+
exit_failure failure_message
|
296
|
+
end
|
297
|
+
|
298
|
+
$magick_package = determine_imagemagick_package
|
299
|
+
$magick_version = `pkg-config #{$magick_package} --modversion`[/^(\d+\.\d+\.\d+)/]
|
300
|
+
else
|
301
|
+
`#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
|
302
|
+
$magick_version = Regexp.last_match(1)
|
303
|
+
exit_failure failure_message unless $magick_version
|
304
|
+
end
|
257
305
|
|
258
|
-
|
259
|
-
|
260
|
-
#{
|
261
|
-
#{
|
262
|
-
/*top*/
|
263
|
-
int main() {
|
264
|
-
MagickBooleanType okay;
|
265
|
-
Image *image;
|
266
|
-
MagickPixelPacket *color;
|
267
|
-
char *name;
|
268
|
-
ExceptionInfo *exception;
|
269
|
-
okay = QueryMagickColorname(image, color, SVGCompliance, name, exception);
|
270
|
-
return 0;
|
271
|
-
}
|
272
|
-
SRC
|
273
|
-
$defs.push("-DHAVE_NEW_QUERYMAGICKCOLORNAME")
|
274
|
-
true
|
275
|
-
else
|
276
|
-
false
|
277
|
-
end
|
278
|
-
end
|
306
|
+
# Ensure minimum ImageMagick version
|
307
|
+
# Check minimum ImageMagick version if possible
|
308
|
+
checking_for("outdated ImageMagick version (<= #{Magick::MIN_IM_VERSION})") do
|
309
|
+
Logging.message("Detected ImageMagick version: #{$magick_version}\n")
|
279
310
|
|
311
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. You must have ImageMagick #{Magick::MIN_IM_VERSION} or later.\n" if Gem::Version.new($magick_version) < Gem::Version.new(Magick::MIN_IM_VERSION)
|
312
|
+
end
|
313
|
+
end
|
280
314
|
|
315
|
+
def create_header_file
|
316
|
+
ruby_api = [
|
317
|
+
'rb_gc_adjust_memory_usage' # Ruby 2.4.0
|
318
|
+
]
|
319
|
+
memory_api = %w[
|
320
|
+
posix_memalign
|
321
|
+
malloc_usable_size
|
322
|
+
malloc_size
|
323
|
+
_aligned_msize
|
324
|
+
]
|
325
|
+
imagemagick_api = [
|
326
|
+
'GetImageChannelEntropy', # 6.9.0-0
|
327
|
+
'SetImageGray', # 6.9.1-10
|
328
|
+
'SetMagickAlignedMemoryMethods' # 7.0.9-0
|
329
|
+
]
|
330
|
+
|
331
|
+
check_api = ruby_api + memory_api + imagemagick_api
|
332
|
+
check_api.each do |func|
|
333
|
+
have_func(func, headers)
|
334
|
+
end
|
281
335
|
|
336
|
+
unless have_header('malloc.h')
|
337
|
+
have_header('malloc/malloc.h')
|
338
|
+
end
|
282
339
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
have_struct_member("DrawInfo", "interword_spacing", headers) # 6.4.8-0
|
287
|
-
have_type("DitherMethod", headers) # 6.4.2
|
288
|
-
have_type("MagickFunction", headers) # 6.4.8-8
|
289
|
-
have_type("ImageLayerMethod", headers) # 6.3.6 replaces MagickLayerMethod
|
290
|
-
have_type("long double", headers)
|
291
|
-
#have_type("unsigned long long", headers)
|
292
|
-
#have_type("uint64_t", headers)
|
293
|
-
#have_type("__int64", headers)
|
294
|
-
#have_type("uintmax_t", headers)
|
295
|
-
#check_sizeof("unsigned long", headers)
|
296
|
-
#check_sizeof("Image *", headers)
|
297
|
-
|
298
|
-
|
299
|
-
have_enum_values("AlphaChannelType", ["CopyAlphaChannel", # 6.4.3-7
|
300
|
-
"BackgroundAlphaChannel"], headers) # 6.5.2-5
|
301
|
-
have_enum_values("CompositeOperator", ["BlurCompositeOp", # 6.5.3-7
|
302
|
-
"DistortCompositeOp", # 6.5.3-10
|
303
|
-
"LinearBurnCompositeOp", # 6.5.4-3
|
304
|
-
"LinearDodgeCompositeOp", # 6.5.4-3
|
305
|
-
"MathematicsCompositeOp", # 6.5.4-3
|
306
|
-
"PegtopLightCompositeOp", # 6.5.4-3
|
307
|
-
"PinLightCompositeOp", # 6.5.4-3
|
308
|
-
"VividLightCompositeOp"], headers) # 6.5.4-3
|
309
|
-
have_enum_values("CompressionType", ["DXT1Compression", # 6.3.9-3
|
310
|
-
"DXT3Compression", # 6.3.9-3
|
311
|
-
"DXT5Compression", # 6.3.9-3
|
312
|
-
"ZipSCompression", # 6.5.5-4
|
313
|
-
"PizCompression", # 6.5.5-4
|
314
|
-
"Pxr24Compression", # 6.5.5-4
|
315
|
-
"B44Compression", # 6.5.5-4
|
316
|
-
"B44ACompression"], headers) # 6.5.5-4
|
317
|
-
|
318
|
-
have_enum_values("DistortImageMethod", ["BarrelDistortion", # 6.4.2-5
|
319
|
-
"BarrelInverseDistortion", # 6.4.3-8
|
320
|
-
"BilinearForwardDistortion", # 6.5.1-2
|
321
|
-
"BilinearReverseDistortion", # 6.5.1-2
|
322
|
-
"DePolarDistortion", # 6.4.2-6
|
323
|
-
"PolarDistortion", # 6.4.2-6
|
324
|
-
"PolynomialDistortion", # 6.4.2-4
|
325
|
-
"ShepardsDistortion"], headers) # 6.4.2-4
|
326
|
-
have_enum_value("DitherMethod", "NoDitherMethod", headers) # 6.4.3
|
327
|
-
have_enum_values("FilterTypes", ["KaiserFilter", # 6.3.6
|
328
|
-
"WelshFilter", # 6.3.6-4
|
329
|
-
"ParzenFilter", # 6.3.6-4
|
330
|
-
"LagrangeFilter", # 6.3.7-2
|
331
|
-
"BohmanFilter", # 6.3.7-2
|
332
|
-
"BartlettFilter", # 6.3.7-2
|
333
|
-
"SentinelFilter"], headers) # 6.3.7-2
|
334
|
-
have_enum_values("MagickEvaluateOperator", ["PowEvaluateOperator", # 6.4.1-9
|
335
|
-
"LogEvaluateOperator", # 6.4.2
|
336
|
-
"ThresholdEvaluateOperator", # 6.4.3
|
337
|
-
"ThresholdBlackEvaluateOperator", # 6.4.3
|
338
|
-
"ThresholdWhiteEvaluateOperator", # 6.4.3
|
339
|
-
"GaussianNoiseEvaluateOperator", # 6.4.3
|
340
|
-
"ImpulseNoiseEvaluateOperator", # 6.4.3
|
341
|
-
"LaplacianNoiseEvaluateOperator", # 6.4.3
|
342
|
-
"MultiplicativeNoiseEvaluateOperator", # 6.4.3
|
343
|
-
"PoissonNoiseEvaluateOperator", # 6.4.3
|
344
|
-
"UniformNoiseEvaluateOperator", # 6.4.3
|
345
|
-
"CosineEvaluateOperator", # 6.4.8-5
|
346
|
-
"SineEvaluateOperator", # 6.4.8-5
|
347
|
-
"AddModulusEvaluateOperator"], # 6.4.8-5
|
348
|
-
headers)
|
349
|
-
have_enum_values("MagickFunction", ["ArcsinFunction", # 6.5.2-8
|
350
|
-
"ArctanFunction", # 6.5.2-8
|
351
|
-
"PolynomialFunction", # 6.4.8-8
|
352
|
-
"SinusoidFunction"], headers) # 6.4.8-8
|
353
|
-
have_enum_values("ImageLayerMethod", ["FlattenLayer", # 6.3.6-2
|
354
|
-
"MergeLayer", # 6.3.6
|
355
|
-
"MosaicLayer", # 6.3.6-2
|
356
|
-
"TrimBoundsLayer" ], headers) # 6.4.3-8
|
357
|
-
have_enum_values("VirtualPixelMethod", ["HorizontalTileVirtualPixelMethod", # 6.4.2-6
|
358
|
-
"VerticalTileVirtualPixelMethod", # 6.4.2-6
|
359
|
-
"HorizontalTileEdgeVirtualPixelMethod", # 6.5.0-1
|
360
|
-
"VerticalTileEdgeVirtualPixelMethod", # 6.5.0-1
|
361
|
-
"CheckerTileVirtualPixelMethod"], # 6.5.0-1
|
362
|
-
headers)
|
363
|
-
|
364
|
-
|
365
|
-
# Now test Ruby 1.9.0 features.
|
366
|
-
headers = ["ruby.h"]
|
367
|
-
if have_header("ruby/io.h")
|
368
|
-
headers << "ruby/io.h"
|
369
|
-
else
|
370
|
-
headers << "rubyio.h"
|
371
|
-
end
|
340
|
+
# Miscellaneous constants
|
341
|
+
$defs.push("-DRUBY_VERSION_STRING=\"ruby #{RUBY_VERSION}\"")
|
342
|
+
$defs.push("-DRMAGICK_VERSION_STRING=\"RMagick #{RMAGICK_VERS}\"")
|
372
343
|
|
373
|
-
|
344
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9=1') if im_version_at_least?('6.8.9')
|
345
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0=1') if im_version_at_least?('6.9.0')
|
346
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_10=1') if im_version_at_least?('6.9.10')
|
347
|
+
$defs.push('-DIMAGEMAGICK_7=1') if im_version_at_least?('7.0.0')
|
348
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_8=1') if im_version_at_least?('7.0.8')
|
349
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_10=1') if im_version_at_least?('7.0.10')
|
374
350
|
|
375
|
-
|
376
|
-
|
377
|
-
$defs.push("-DRMAGICK_VERSION_STRING=\"RMagick #{RMAGICK_VERS}\"")
|
351
|
+
create_header
|
352
|
+
end
|
378
353
|
|
379
|
-
|
380
|
-
|
381
|
-
#
|
382
|
-
|
354
|
+
def create_makefile_file
|
355
|
+
create_header_file
|
356
|
+
# Prior to 1.8.5 mkmf duplicated the symbols on the command line and in the
|
357
|
+
# extconf.h header. Suppress that behavior by removing the symbol array.
|
358
|
+
$defs = []
|
383
359
|
|
384
|
-
# Force re-compilation if the generated Makefile changed.
|
385
|
-
$config_h =
|
360
|
+
# Force re-compilation if the generated Makefile changed.
|
361
|
+
$config_h = 'Makefile'
|
386
362
|
|
387
|
-
create_makefile(
|
363
|
+
create_makefile('RMagick2')
|
364
|
+
print_summary
|
365
|
+
end
|
388
366
|
|
367
|
+
def magick_command
|
368
|
+
@magick_command ||= if find_executable('magick')
|
369
|
+
'magick'
|
370
|
+
elsif find_executable('identify')
|
371
|
+
'identify'
|
372
|
+
else
|
373
|
+
raise NotImplementedError, "no executable found for ImageMagick"
|
374
|
+
end
|
375
|
+
end
|
389
376
|
|
390
|
-
|
377
|
+
def im_version_at_least?(version)
|
378
|
+
Gem::Version.new($magick_version) >= Gem::Version.new(version)
|
379
|
+
end
|
391
380
|
|
381
|
+
def print_summary
|
382
|
+
summary = <<~"END_SUMMARY"
|
383
|
+
#{'=' * 70}
|
384
|
+
#{Time.now.strftime('%a %d %b %y %T')}
|
385
|
+
This installation of RMagick #{RMAGICK_VERS} is configured for
|
386
|
+
Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM}) and ImageMagick #{$magick_version}
|
387
|
+
#{'=' * 70}
|
392
388
|
|
393
|
-
#{"=" * 70}
|
394
|
-
#{DateTime.now.strftime("%a %d%b%y %T")}
|
395
|
-
This installation of RMagick #{RMAGICK_VERS} is configured for
|
396
|
-
Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM}) and ImageMagick #{$magick_version}
|
397
|
-
#{"=" * 70}
|
398
389
|
|
390
|
+
END_SUMMARY
|
399
391
|
|
400
|
-
|
392
|
+
Logging.message summary
|
393
|
+
message summary
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end
|
401
397
|
|
402
|
-
|
403
|
-
|
398
|
+
extconf = RMagick::Extconf.new
|
399
|
+
at_exit do
|
400
|
+
msg = "Configured compile options: #{extconf.configured_compile_options}"
|
401
|
+
Logging.message msg
|
402
|
+
message msg + "\n"
|
403
|
+
end
|
404
|
+
extconf.create_makefile_file
|