rmagick 2.16.0 → 5.1.0
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 +5 -5
- data/.codeclimate.yml +63 -0
- data/.devcontainer/Dockerfile +14 -0
- data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
- data/.devcontainer/devcontainer.json +11 -0
- data/.devcontainer/setup-repo.sh +10 -0
- data/.devcontainer/setup-user.sh +45 -0
- data/.editorconfig +3 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +79 -0
- data/.gitignore +5 -1
- data/.rspec +1 -0
- data/.rubocop.yml +37 -340
- data/.rubocop_todo.yml +448 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +435 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +37 -6
- data/Gemfile +0 -6
- data/README.md +317 -0
- data/Rakefile +37 -35
- data/before_install_linux.sh +65 -28
- data/before_install_osx.sh +58 -2
- data/ext/RMagick/extconf.rb +286 -393
- data/ext/RMagick/rmagick.c +106 -111
- data/ext/RMagick/rmagick.h +235 -331
- data/ext/RMagick/rmagick_gvl.h +224 -0
- data/ext/RMagick/rmdraw.c +484 -842
- data/ext/RMagick/rmenum.c +316 -755
- data/ext/RMagick/rmfill.c +281 -191
- data/ext/RMagick/rmilist.c +450 -455
- data/ext/RMagick/rmimage.c +6247 -5289
- data/ext/RMagick/rminfo.c +721 -894
- data/ext/RMagick/rmkinfo.c +228 -0
- data/ext/RMagick/rmmain.c +727 -519
- data/ext/RMagick/rmmontage.c +127 -172
- data/ext/RMagick/rmpixel.c +638 -431
- data/ext/RMagick/rmstruct.c +102 -282
- data/ext/RMagick/rmutil.c +450 -363
- data/lib/rmagick/version.rb +5 -4
- data/lib/rmagick.rb +2 -0
- data/lib/rmagick_internal.rb +349 -413
- data/lib/rvg/clippath.rb +3 -4
- data/lib/rvg/container.rb +30 -22
- data/lib/rvg/deep_equal.rb +11 -11
- data/lib/rvg/describable.rb +2 -2
- data/lib/rvg/embellishable.rb +63 -68
- data/lib/rvg/misc.rb +136 -139
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +7 -8
- data/lib/rvg/rvg.rb +47 -46
- data/lib/rvg/stretchable.rb +22 -28
- data/lib/rvg/stylable.rb +12 -10
- data/lib/rvg/text.rb +169 -165
- data/lib/rvg/transformable.rb +17 -16
- data/lib/rvg/units.rb +5 -5
- data/rmagick.gemspec +16 -39
- metadata +118 -395
- data/.hound.yml +0 -2
- data/.simplecov +0 -27
- data/.travis.yml +0 -74
- data/Doxyfile +0 -1514
- data/README.textile +0 -251
- data/deprecated/RMagick.rb +0 -6
- data/doc/.cvsignore +0 -1
- 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 -3272
- data/doc/ex/InitialCoords.rb +0 -22
- data/doc/ex/NewCoordSys.rb +0 -30
- data/doc/ex/OrigCoordSys.rb +0 -16
- data/doc/ex/PreserveAspectRatio.rb +0 -204
- data/doc/ex/RotateScale.rb +0 -36
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -15
- data/doc/ex/Use02.rb +0 -20
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -31
- data/doc/ex/adaptive_threshold.rb +0 -9
- data/doc/ex/add_noise.rb +0 -16
- 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 -32
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -59
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -17
- data/doc/ex/bilevel_channel.rb +0 -8
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -42
- data/doc/ex/cbezier1.rb +0 -41
- data/doc/ex/cbezier2.rb +0 -41
- data/doc/ex/cbezier3.rb +0 -41
- data/doc/ex/cbezier4.rb +0 -42
- data/doc/ex/cbezier5.rb +0 -42
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -25
- 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 -16
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -57
- 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 -47
- 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 -22
- data/doc/ex/composite.rb +0 -133
- data/doc/ex/composite_layers.rb +0 -53
- data/doc/ex/composite_tiled.rb +0 -21
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -42
- data/doc/ex/cubic01.rb +0 -43
- data/doc/ex/cubic02.rb +0 -91
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -12
- 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 -21
- 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 -42
- data/doc/ex/fill_pattern.rb +0 -23
- 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 -32
- 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 -41
- data/doc/ex/get_pixels.rb +0 -47
- data/doc/ex/get_type_metrics.rb +0 -141
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -80
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -44
- 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/image_with_profile.jpg +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 -41
- data/doc/ex/line01.rb +0 -21
- data/doc/ex/mask.rb +0 -35
- data/doc/ex/matte_fill_to_border.rb +0 -39
- data/doc/ex/matte_floodfill.rb +0 -32
- data/doc/ex/matte_replace.rb +0 -39
- 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 -25
- 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 -42
- 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 -63
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -27
- data/doc/ex/polygon.rb +0 -23
- data/doc/ex/polygon01.rb +0 -21
- data/doc/ex/polyline.rb +0 -22
- data/doc/ex/polyline01.rb +0 -21
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -8
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -34
- 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 -14
- data/doc/ex/rect02.rb +0 -20
- data/doc/ex/rectangle.rb +0 -34
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -11
- data/doc/ex/remap_images.rb +0 -19
- data/doc/ex/resize_to_fill.rb +0 -8
- data/doc/ex/resize_to_fit.rb +0 -8
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -44
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -33
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -12
- data/doc/ex/rvg_linecap.rb +0 -42
- data/doc/ex/rvg_linejoin.rb +0 -40
- data/doc/ex/rvg_opacity.rb +0 -18
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -11
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -7
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -30
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -17
- data/doc/ex/skewx.rb +0 -51
- 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 -54
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -55
- data/doc/ex/stroke_dasharray.rb +0 -42
- data/doc/ex/stroke_fill.rb +0 -10
- 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 -16
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -37
- data/doc/ex/text_styles.rb +0 -19
- 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 -24
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -13
- 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 -24
- data/doc/ex/triangle01.rb +0 -15
- data/doc/ex/trim.rb +0 -23
- data/doc/ex/tspan01.rb +0 -17
- data/doc/ex/tspan02.rb +0 -17
- data/doc/ex/tspan03.rb +0 -19
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -33
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -27
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -58
- data/doc/ex/writing_mode01.rb +0 -26
- 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 -42
- data/examples/demo.rb +0 -324
- data/examples/describe.rb +0 -43
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -321
- data/examples/identify.rb +0 -185
- 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 -44
- data/examples/spinner.rb +0 -49
- data/examples/thumbnail.rb +0 -64
- data/examples/vignette.rb +0 -78
- data/spec/rmagick/ImageList1_spec.rb +0 -24
- data/spec/rmagick/draw_spec.rb +0 -156
- data/spec/rmagick/image/blue_shift_spec.rb +0 -16
- data/spec/rmagick/image/composite_spec.rb +0 -140
- data/spec/rmagick/image/constitute_spec.rb +0 -15
- data/spec/rmagick/image/dispatch_spec.rb +0 -18
- data/spec/rmagick/image/from_blob_spec.rb +0 -14
- data/spec/rmagick/image/ping_spec.rb +0 -14
- data/spec/rmagick/image/properties_spec.rb +0 -29
- data/spec/spec_helper.rb +0 -4
- data/test/Image1.rb +0 -565
- data/test/Image2.rb +0 -1304
- data/test/Image3.rb +0 -1030
- data/test/ImageList1.rb +0 -806
- data/test/ImageList2.rb +0 -385
- data/test/Image_attributes.rb +0 -697
- data/test/Import_Export.rb +0 -121
- data/test/Info.rb +0 -345
- data/test/Magick.rb +0 -321
- data/test/Pixel.rb +0 -116
- data/test/Preview.rb +0 -57
- data/test/cmyk.icm +0 -0
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -38
- data/test/tmpnam_test.rb +0 -50
- data/wercker.yml +0 -10
data/ext/RMagick/extconf.rb
CHANGED
@@ -2,47 +2,89 @@ lib_dir = File.expand_path('../../lib', File.dirname(__FILE__))
|
|
2
2
|
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
3
3
|
require 'rubygems'
|
4
4
|
require 'mkmf'
|
5
|
-
require '
|
5
|
+
require 'pkg-config'
|
6
6
|
|
7
7
|
module RMagick
|
8
8
|
class Extconf
|
9
9
|
require 'rmagick/version'
|
10
10
|
RMAGICK_VERS = ::Magick::VERSION
|
11
11
|
MIN_RUBY_VERS = ::Magick::MIN_RUBY_VERSION
|
12
|
-
|
12
|
+
|
13
|
+
# ImageMagick 6.7 package
|
14
|
+
IM6_7_PACKAGES = ['ImageMagick'].freeze
|
15
|
+
|
16
|
+
# ImageMagick 6.8+ packages
|
17
|
+
IM6_PACKAGES = %w[
|
18
|
+
ImageMagick-6.Q64HDRI
|
19
|
+
ImageMagick-6.Q32HDRI
|
20
|
+
ImageMagick-6.Q16HDRI
|
21
|
+
ImageMagick-6.Q8HDRI
|
22
|
+
ImageMagick-6.Q64
|
23
|
+
ImageMagick-6.Q32
|
24
|
+
ImageMagick-6.Q16
|
25
|
+
ImageMagick-6.Q8
|
26
|
+
].freeze
|
27
|
+
|
28
|
+
# ImageMagick 7 packages
|
29
|
+
IM7_PACKAGES = %w[
|
30
|
+
ImageMagick-7.Q64HDRI
|
31
|
+
ImageMagick-7.Q32HDRI
|
32
|
+
ImageMagick-7.Q16HDRI
|
33
|
+
ImageMagick-7.Q8HDRI
|
34
|
+
ImageMagick-7.Q64
|
35
|
+
ImageMagick-7.Q32
|
36
|
+
ImageMagick-7.Q16
|
37
|
+
ImageMagick-7.Q8
|
38
|
+
].freeze
|
13
39
|
|
14
40
|
attr_reader :headers
|
41
|
+
|
15
42
|
def initialize
|
16
|
-
|
43
|
+
@stdout = $stdout.dup
|
44
|
+
|
45
|
+
setup_pkg_config_path
|
17
46
|
assert_can_compile!
|
47
|
+
configure_compile_options
|
18
48
|
configure_headers
|
19
49
|
end
|
20
50
|
|
51
|
+
def setup_pkg_config_path
|
52
|
+
return if RUBY_PLATFORM =~ /mswin|mingw/
|
53
|
+
|
54
|
+
if find_executable('brew')
|
55
|
+
pkg_config_path = "#{`brew --prefix imagemagick@6`.strip}/lib/pkgconfig"
|
56
|
+
elsif find_executable('pacman')
|
57
|
+
pkg_config_path = '/usr/lib/imagemagick6/pkgconfig'
|
58
|
+
else
|
59
|
+
return
|
60
|
+
end
|
61
|
+
|
62
|
+
pkg_config_paths = ENV['PKG_CONFIG_PATH'].to_s.split(':')
|
63
|
+
if File.exist?(pkg_config_path) && !pkg_config_paths.include?(pkg_config_path)
|
64
|
+
ENV['PKG_CONFIG_PATH'] = [ENV['PKG_CONFIG_PATH'], pkg_config_path].compact.join(':')
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
21
68
|
def configured_compile_options
|
22
69
|
{
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:cppflags => $CPPFLAGS,
|
30
|
-
:ldflags => $LDFLAGS,
|
31
|
-
:defs => $defs,
|
32
|
-
:config_h => $config_h,
|
70
|
+
magick_version: $magick_version,
|
71
|
+
local_libs: $LOCAL_LIBS,
|
72
|
+
cppflags: $CPPFLAGS,
|
73
|
+
ldflags: $LDFLAGS,
|
74
|
+
defs: $defs,
|
75
|
+
config_h: $config_h
|
33
76
|
}
|
34
77
|
end
|
35
78
|
|
36
79
|
def configure_headers
|
37
|
-
|
38
|
-
@headers = %w{assert.h ctype.h stdio.h stdlib.h math.h time.h}
|
39
|
-
headers << 'stdint.h' if have_header('stdint.h') # defines uint64_t
|
40
|
-
headers << 'sys/types.h' if have_header('sys/types.h')
|
80
|
+
@headers = %w[assert.h ctype.h stdio.h stdlib.h math.h time.h sys/types.h]
|
41
81
|
|
42
|
-
if have_header('
|
43
|
-
headers << '
|
82
|
+
if have_header('MagickCore/MagickCore.h')
|
83
|
+
headers << 'MagickCore/MagickCore.h'
|
84
|
+
elsif have_header('magick/MagickCore.h')
|
85
|
+
headers << 'magick/MagickCore.h'
|
44
86
|
else
|
45
|
-
exit_failure "
|
87
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find magick/MagickCore.h."
|
46
88
|
end
|
47
89
|
end
|
48
90
|
|
@@ -50,159 +92,117 @@ module RMagick
|
|
50
92
|
# Magick-config is not available on Windows
|
51
93
|
if RUBY_PLATFORM !~ /mswin|mingw/
|
52
94
|
|
53
|
-
# Check for compiler. Extract first word so ENV['CC'] can be a program name with arguments.
|
54
|
-
config = defined?(RbConfig) ? ::RbConfig : ::Config
|
55
|
-
cc = (ENV['CC'] || config::CONFIG['CC'] || 'gcc').split(' ').first
|
56
|
-
unless find_executable(cc)
|
57
|
-
exit_failure "No C compiler found in ${ENV['PATH']}. See mkmf.log for details."
|
58
|
-
end
|
59
|
-
|
60
|
-
# ugly way to handle which config tool we're going to use...
|
61
|
-
$with_magick_wand = false
|
62
|
-
$magick_config = false
|
63
|
-
$pkg_config = false
|
64
|
-
|
65
|
-
# Check for Magick-config
|
66
|
-
if find_executable('Magick-config') && !has_graphicsmagick_libmagick_dev_compat?
|
67
|
-
$magick_config = true
|
68
|
-
$magick_version = `Magick-config --version`[/^(\d+\.\d+\.\d+)/]
|
69
|
-
elsif find_executable('pkg-config')
|
70
|
-
$pkg_config = true
|
71
|
-
$magick_version = `pkg-config MagickCore --modversion`[/^(\d+\.\d+\.\d+)/]
|
72
|
-
else
|
73
|
-
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find Magick-config or pkg-config in #{ENV['PATH']}\n"
|
74
|
-
end
|
75
|
-
|
76
95
|
check_multiple_imagemagick_versions
|
77
96
|
check_partial_imagemagick_versions
|
78
97
|
|
79
|
-
|
80
|
-
# Check minimum ImageMagick version if possible
|
81
|
-
checking_for("outdated ImageMagick version (<= #{Magick::MIN_IM_VERSION})") do
|
82
|
-
Logging.message("Detected ImageMagick version: #{$magick_version}\n")
|
98
|
+
original_ldflags = $LDFLAGS.dup
|
83
99
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
100
|
+
libdir = PKGConfig.libs_only_L($magick_package).chomp.sub('-L', '')
|
101
|
+
ldflags = "#{ENV['LDFLAGS']} " + PKGConfig.libs($magick_package).chomp
|
102
|
+
rpath = libdir.empty? ? '' : "-Wl,-rpath,#{libdir}"
|
88
103
|
|
89
|
-
#
|
90
|
-
#
|
91
|
-
|
92
|
-
|
93
|
-
if $with_magick_wand
|
94
|
-
Logging.message('Detected 6.9+ version, using MagickWand API')
|
95
|
-
else
|
96
|
-
Logging.message('Older version detected, using MagickCore API')
|
97
|
-
end
|
98
|
-
end
|
104
|
+
# Save flags
|
105
|
+
$CPPFLAGS += " #{ENV['CPPFLAGS']} " + PKGConfig.cflags($magick_package).chomp
|
106
|
+
$LOCAL_LIBS += " #{ENV['LIBS']} " + PKGConfig.libs($magick_package).chomp
|
107
|
+
$LDFLAGS += " #{ldflags} #{rpath}"
|
99
108
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
$CFLAGS = ENV['CFLAGS'].to_s + ' ' + `MagickWand-config --cflags`.chomp
|
105
|
-
$CPPFLAGS = ENV['CPPFLAGS'].to_s + ' ' + `MagickWand-config --cppflags`.chomp
|
106
|
-
$LDFLAGS = ENV['LDFLAGS'].to_s + ' ' + `MagickWand-config --ldflags`.chomp
|
107
|
-
$LOCAL_LIBS = ENV['LIBS'].to_s + ' ' + `MagickWand-config --libs`.chomp
|
108
|
-
end
|
109
|
+
unless try_link("int main() { }")
|
110
|
+
# if linker does not recognizes '-Wl,-rpath,somewhere' option, it revert to original option
|
111
|
+
$LDFLAGS = "#{original_ldflags} #{ldflags}"
|
112
|
+
end
|
109
113
|
|
110
|
-
|
111
|
-
# Save flags
|
112
|
-
$CFLAGS = ENV['CFLAGS'].to_s + ' ' + `pkg-config --cflags MagickWand`.chomp
|
113
|
-
$CPPFLAGS = ENV['CPPFLAGS'].to_s + ' ' + `pkg-config --cflags MagickWand`.chomp
|
114
|
-
$LDFLAGS = ENV['LDFLAGS'].to_s + ' ' + `pkg-config --libs MagickWand`.chomp
|
115
|
-
$LOCAL_LIBS = ENV['LIBS'].to_s + ' ' + `pkg-config --libs MagickWand`.chomp
|
116
|
-
end
|
117
|
-
else
|
118
|
-
if $magick_config
|
119
|
-
# Save flags
|
120
|
-
$CFLAGS = ENV['CFLAGS'].to_s + ' ' + `Magick-config --cflags`.chomp
|
121
|
-
$CPPFLAGS = ENV['CPPFLAGS'].to_s + ' ' + `Magick-config --cppflags`.chomp
|
122
|
-
$LDFLAGS = ENV['LDFLAGS'].to_s + ' ' + `Magick-config --ldflags`.chomp
|
123
|
-
$LOCAL_LIBS = ENV['LIBS'].to_s + ' ' + `Magick-config --libs`.chomp
|
124
|
-
end
|
114
|
+
configure_archflags_for_osx($magick_package) if RUBY_PLATFORM =~ /darwin/ # osx
|
125
115
|
|
126
|
-
|
127
|
-
# Save flags
|
128
|
-
$CFLAGS = ENV['CFLAGS'].to_s + ' ' + `pkg-config --cflags MagickCore`.chomp
|
129
|
-
$CPPFLAGS = ENV['CPPFLAGS'].to_s + ' ' + `pkg-config --cflags MagickCore`.chomp
|
130
|
-
$LDFLAGS = ENV['LDFLAGS'].to_s + ' ' + `pkg-config --libs MagickCore`.chomp
|
131
|
-
$LOCAL_LIBS = ENV['LIBS'].to_s + ' ' + `pkg-config --libs MagickCore`.chomp
|
132
|
-
end
|
133
|
-
end
|
116
|
+
elsif RUBY_PLATFORM =~ /mingw/ # mingw
|
134
117
|
|
135
|
-
|
136
|
-
|
137
|
-
|
118
|
+
dir_paths = search_paths_for_library_for_windows
|
119
|
+
$CPPFLAGS += %( -I"#{dir_paths[:include]}")
|
120
|
+
$LDFLAGS += %( -L"#{dir_paths[:lib]}")
|
121
|
+
$LDFLAGS << ' -lucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
138
122
|
|
139
|
-
|
123
|
+
have_library(im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_' : 'CORE_RL_magick_')
|
140
124
|
|
141
|
-
|
142
|
-
abort 'Unable to get ImageMagick version' unless $1
|
143
|
-
$magick_version = $1
|
144
|
-
unless have_library('CORE_RL_magick_')
|
145
|
-
search_paths_for_library_for_mingw
|
146
|
-
end
|
147
|
-
have_library('X11')
|
125
|
+
else # mswin
|
148
126
|
|
149
|
-
|
127
|
+
dir_paths = search_paths_for_library_for_windows
|
128
|
+
$CPPFLAGS << %( -I"#{dir_paths[:include]}")
|
129
|
+
$LDFLAGS << %( -libpath:"#{dir_paths[:lib]}")
|
130
|
+
$LDFLAGS << ' -libpath:ucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
150
131
|
|
151
|
-
|
152
|
-
abort 'Unable to get ImageMagick version' unless $1
|
153
|
-
$magick_version = $1
|
154
|
-
$CFLAGS = '-W3'
|
155
|
-
$CPPFLAGS = %Q{-I"C:\\Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Include" -I"C:\\Program Files\\ImageMagick-#{$magick_version}-Q8\\include"}
|
156
|
-
# The /link option is required by the Makefile but causes warnings in the mkmf.log file.
|
157
|
-
$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"}
|
158
|
-
$LOCAL_LIBS = 'CORE_RL_magick_.lib'
|
159
|
-
have_library('X11')
|
132
|
+
$LOCAL_LIBS += ' ' + (im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
|
160
133
|
|
161
134
|
end
|
135
|
+
|
136
|
+
$CPPFLAGS << if have_macro('__GNUC__')
|
137
|
+
' -std=gnu99 -Wno-void-pointer-to-int-cast -Wno-void-pointer-to-enum-cast -Wno-pointer-to-int-cast'
|
138
|
+
else
|
139
|
+
' -std=c99'
|
140
|
+
end
|
162
141
|
end
|
163
142
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
true
|
175
|
-
else
|
176
|
-
false
|
177
|
-
end
|
143
|
+
def exit_failure(msg)
|
144
|
+
msg = "ERROR: #{msg}"
|
145
|
+
|
146
|
+
Logging.message msg
|
147
|
+
|
148
|
+
@stdout.puts "\n\n"
|
149
|
+
if ENV['NO_COLOR']
|
150
|
+
@stdout.puts msg
|
151
|
+
else
|
152
|
+
@stdout.print "\e[31m\e[1m#{msg}\e[0m"
|
178
153
|
end
|
154
|
+
@stdout.puts "\n\n"
|
155
|
+
@stdout.flush
|
156
|
+
|
157
|
+
exit(1)
|
179
158
|
end
|
180
159
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
have_enum_value(enum, value, headers, &b)
|
160
|
+
def detect_imagemagick_packages(packages)
|
161
|
+
packages.select do |package|
|
162
|
+
PKGConfig.exist?(package)
|
185
163
|
end
|
186
164
|
end
|
187
165
|
|
188
|
-
def
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
166
|
+
def installed_im6_packages
|
167
|
+
@installed_im6_packages ||= detect_imagemagick_packages(IM6_PACKAGES)
|
168
|
+
end
|
169
|
+
|
170
|
+
def installed_im7_packages
|
171
|
+
@installed_im7_packages ||= detect_imagemagick_packages(IM7_PACKAGES)
|
172
|
+
end
|
173
|
+
|
174
|
+
def determine_imagemagick_package
|
175
|
+
packages = [installed_im7_packages, installed_im6_packages].flatten
|
176
|
+
|
177
|
+
if packages.empty?
|
178
|
+
# ImageMagick 6.7 does not have package file like ImageMagick-6.Q16.pc
|
179
|
+
packages = detect_imagemagick_packages(IM6_7_PACKAGES)
|
180
|
+
end
|
181
|
+
|
182
|
+
if packages.empty?
|
183
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find ImageMagick with pkg-config\n"
|
184
|
+
end
|
185
|
+
|
186
|
+
if installed_im6_packages.any? && installed_im7_packages.any?
|
187
|
+
checking_for('forced use of ImageMagick 6') do
|
188
|
+
if ENV['USE_IMAGEMAGICK_6']
|
189
|
+
packages = installed_im6_packages
|
190
|
+
true
|
191
|
+
else
|
192
|
+
packages = installed_im7_packages
|
193
|
+
false
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
if packages.length > 1
|
199
|
+
package_lines = packages.map { |package| " - #{package}" }.join("\n")
|
200
|
+
msg = "\nWarning: Found more than one ImageMagick installation. This could cause problems at runtime.\n#{package_lines}\n\n"
|
194
201
|
Logging.message msg
|
195
|
-
message msg
|
196
|
-
true
|
197
|
-
else
|
198
|
-
false
|
202
|
+
message msg
|
199
203
|
end
|
200
|
-
end
|
201
204
|
|
202
|
-
|
203
|
-
Logging.message msg
|
204
|
-
message msg+"\n"
|
205
|
-
exit(1)
|
205
|
+
packages.first
|
206
206
|
end
|
207
207
|
|
208
208
|
# Seems like lots of people have multiple versions of ImageMagick installed.
|
@@ -211,22 +211,22 @@ SRC
|
|
211
211
|
path = ENV['PATH'].split(File::PATH_SEPARATOR)
|
212
212
|
path.each do |dir|
|
213
213
|
file = File.join(dir, 'Magick-config')
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
214
|
+
next unless File.executable? file
|
215
|
+
|
216
|
+
vers = `#{file} --version`.chomp.strip
|
217
|
+
prefix = `#{file} --prefix`.chomp.strip
|
218
|
+
versions << [vers, prefix, dir]
|
219
219
|
end
|
220
220
|
versions.uniq!
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
msg << "Using #{versions[0][0]} from #{versions[0][1]}.\n\n"
|
227
|
-
Logging.message msg
|
228
|
-
message msg
|
221
|
+
return unless versions.size > 1
|
222
|
+
|
223
|
+
msg = "\nWarning: Found more than one ImageMagick installation. This could cause problems at runtime.\n"
|
224
|
+
versions.each do |vers, prefix, dir|
|
225
|
+
msg << " #{dir}/Magick-config reports version #{vers} is installed in #{prefix}\n"
|
229
226
|
end
|
227
|
+
msg << "Using #{versions[0][0]} from #{versions[0][1]}.\n\n"
|
228
|
+
Logging.message msg
|
229
|
+
message msg
|
230
230
|
end
|
231
231
|
|
232
232
|
# Ubuntu (maybe other systems) comes with a partial installation of
|
@@ -236,308 +236,201 @@ SRC
|
|
236
236
|
def check_partial_imagemagick_versions
|
237
237
|
prefix = config_string('prefix') || ''
|
238
238
|
matches = [
|
239
|
-
prefix+'/lib/lib?agick*',
|
240
|
-
prefix+'/include/ImageMagick',
|
241
|
-
prefix+'/bin/Magick-config'
|
239
|
+
prefix + '/lib/lib?agick*',
|
240
|
+
prefix + '/include/ImageMagick',
|
241
|
+
prefix + '/bin/Magick-config'
|
242
242
|
].map do |file_glob|
|
243
243
|
Dir.glob(file_glob)
|
244
244
|
end
|
245
|
-
matches.delete_if
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
245
|
+
matches.delete_if(&:empty?)
|
246
|
+
return unless !matches.empty? && matches.length < 3
|
247
|
+
|
248
|
+
msg = <<~MESSAGE
|
249
|
+
|
250
|
+
Warning: Found a partial ImageMagick installation. Your operating
|
251
|
+
system likely has some built-in ImageMagick libraries but not all of
|
252
|
+
ImageMagick. This will most likely cause problems at both compile and
|
253
|
+
runtime.
|
254
|
+
Found partial installation at: #{prefix}
|
255
|
+
|
256
|
+
MESSAGE
|
257
|
+
|
258
|
+
Logging.message msg
|
259
|
+
message msg
|
251
260
|
end
|
252
261
|
|
253
262
|
# issue #169
|
254
263
|
# set ARCHFLAGS appropriately for OSX
|
255
|
-
def
|
256
|
-
|
257
|
-
|
258
|
-
|
264
|
+
def configure_archflags_for_osx(magick_package)
|
265
|
+
return unless PKGConfig.libs_only_L(magick_package).match(%r{-L(.+)/lib})
|
266
|
+
|
267
|
+
imagemagick_dir = Regexp.last_match(1)
|
268
|
+
command = Dir.glob(File.join(imagemagick_dir, "bin/*")).select { |file| File.executable? file }.first
|
269
|
+
fileinfo = `file #{command}`
|
259
270
|
|
260
271
|
# default ARCHFLAGS
|
261
272
|
archs = $ARCH_FLAG.scan(/-arch\s+(\S+)/).flatten
|
262
273
|
|
274
|
+
archflags = []
|
263
275
|
archs.each do |arch|
|
264
|
-
if fileinfo.include?(arch)
|
265
|
-
archflags << "-arch #{arch}"
|
266
|
-
end
|
276
|
+
archflags << "-arch #{arch}" if fileinfo.include?(arch)
|
267
277
|
end
|
268
278
|
|
269
|
-
|
270
|
-
$ARCH_FLAG = archflags.join(' ')
|
271
|
-
end
|
279
|
+
$ARCH_FLAG = archflags.join(' ') unless archflags.empty?
|
272
280
|
end
|
273
281
|
|
274
|
-
def
|
282
|
+
def search_paths_for_library_for_windows
|
275
283
|
msg = 'searching PATH for the ImageMagick library...'
|
276
284
|
Logging.message msg
|
277
|
-
message msg+"\n"
|
285
|
+
message msg + "\n"
|
278
286
|
|
279
287
|
found_lib = false
|
288
|
+
dir_paths = {}
|
280
289
|
|
281
290
|
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
282
291
|
paths.each do |dir|
|
283
292
|
lib = File.join(dir, 'lib')
|
284
|
-
lib_file = File.join(lib, 'CORE_RL_magick_.lib')
|
285
|
-
|
286
|
-
$CPPFLAGS = %Q{-I"#{File.join(dir, 'include')}"}
|
287
|
-
$LDFLAGS = %Q{-L"#{lib}"}
|
288
|
-
found_lib = have_library('CORE_RL_magick_')
|
289
|
-
break if found_lib
|
290
|
-
end
|
291
|
-
end
|
293
|
+
lib_file = File.join(lib, im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
|
294
|
+
next unless File.exist?(lib_file)
|
292
295
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
Usage: gem install rmagick -- '--with-opt-dir=\"[path to ImageMagick]\"'
|
299
|
-
e.g.
|
300
|
-
gem install rmagick -- '--with-opt-dir=\"C:\Program Files\ImageMagick-6.9.1-Q16\"'
|
301
|
-
END_MINGW
|
296
|
+
dir_paths[:include] = File.join(dir, 'include')
|
297
|
+
dir_paths[:lib] = lib
|
298
|
+
|
299
|
+
found_lib = true
|
300
|
+
break
|
302
301
|
end
|
302
|
+
|
303
|
+
return dir_paths if found_lib
|
304
|
+
|
305
|
+
exit_failure <<~END_MINGW
|
306
|
+
Can't install RMagick #{RMAGICK_VERS}.
|
307
|
+
Can't find the ImageMagick library.
|
308
|
+
Retry with '--with-opt-dir' option.
|
309
|
+
Usage: gem install rmagick -- '--with-opt-dir=\"[path to ImageMagick]\"'
|
310
|
+
e.g.
|
311
|
+
gem install rmagick -- '--with-opt-dir=\"C:\\Program Files\\ImageMagick-6.9.1-Q16\"'
|
312
|
+
END_MINGW
|
303
313
|
end
|
304
314
|
|
305
315
|
def assert_can_compile!
|
306
|
-
assert_not_windows!
|
307
316
|
assert_minimum_ruby_version!
|
308
317
|
assert_has_dev_libs!
|
309
|
-
end
|
310
318
|
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
+----------------------------------------------------------------------------+
|
315
|
-
| This rmagick gem is for use only on Linux, BSD, OS X, and similar systems |
|
316
|
-
| that have a gnu or similar toolchain installed. The rmagick-win32 gem is a |
|
317
|
-
| pre-compiled version of RMagick bundled with ImageMagick for use on |
|
318
|
-
| Microsoft Windows systems. The rmagick-win32 gem is available on RubyForge.|
|
319
|
-
| See http://rmagick.rubyforge.org/install-faq.html for more information. |
|
320
|
-
+----------------------------------------------------------------------------+
|
321
|
-
END_MSWIN
|
322
|
-
end
|
319
|
+
# Check for compiler. Extract first word so ENV['CC'] can be a program name with arguments.
|
320
|
+
cc = (ENV['CC'] || RbConfig::CONFIG['CC'] || 'gcc').split(' ').first
|
321
|
+
exit_failure "No C compiler found in ${ENV['PATH']}. See mkmf.log for details." unless find_executable(cc)
|
323
322
|
end
|
324
323
|
|
325
324
|
def assert_minimum_ruby_version!
|
326
|
-
|
327
|
-
|
328
|
-
version >= MIN_RUBY_VERS_NO
|
329
|
-
end
|
330
|
-
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n"
|
325
|
+
supported = checking_for("Ruby version >= #{MIN_RUBY_VERS}") do
|
326
|
+
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(MIN_RUBY_VERS)
|
331
327
|
end
|
328
|
+
|
329
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n" unless supported
|
332
330
|
end
|
333
331
|
|
334
332
|
def assert_has_dev_libs!
|
335
|
-
|
333
|
+
failure_message = <<~END_FAILURE
|
334
|
+
Can't install RMagick #{RMAGICK_VERS}.
|
335
|
+
Can't find the ImageMagick library or one of the dependent libraries.
|
336
|
+
Check the mkmf.log file for more detailed information.
|
337
|
+
END_FAILURE
|
336
338
|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
else
|
341
|
-
exit_failure "Can't install RMagick #{RMAGICK_VERS}. " \
|
342
|
-
"Can't find the ImageMagick library or one of the dependent libraries. " \
|
343
|
-
"Check the mkmf.log file for more detailed information.\n"
|
339
|
+
if RUBY_PLATFORM !~ /mswin|mingw/
|
340
|
+
unless PKGConfig.libs('MagickCore')[/\bl\s*(MagickCore|Magick)6?\b/]
|
341
|
+
exit_failure failure_message
|
344
342
|
end
|
343
|
+
|
344
|
+
$magick_package = determine_imagemagick_package
|
345
|
+
$magick_version = PKGConfig.modversion($magick_package)[/^(\d+\.\d+\.\d+)/]
|
346
|
+
else
|
347
|
+
`#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
|
348
|
+
$magick_version = Regexp.last_match(1)
|
349
|
+
exit_failure failure_message unless $magick_version
|
350
|
+
end
|
351
|
+
|
352
|
+
# Ensure minimum ImageMagick version
|
353
|
+
# Check minimum ImageMagick version if possible
|
354
|
+
checking_for("outdated ImageMagick version (<= #{Magick::MIN_IM_VERSION})") do
|
355
|
+
Logging.message("Detected ImageMagick version: #{$magick_version}\n")
|
356
|
+
|
357
|
+
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)
|
345
358
|
end
|
346
359
|
end
|
347
360
|
|
348
361
|
def create_header_file
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
'GetAuthenticPixels', # 6.4.5-6
|
367
|
-
'GetImageAlphaChannel', # 6.3.9-2
|
368
|
-
'GetMagickFeatures', # 6.5.7-1
|
369
|
-
'GetVirtualPixels', # 6.4.5-6
|
370
|
-
'LevelImageColors', # 6.4.2
|
371
|
-
'LevelColorsImageChannel', # 6.5.6-4
|
372
|
-
'LevelizeImageChannel', # 6.4.2
|
373
|
-
'LiquidRescaleImage', # 6.3.8-2
|
374
|
-
'MagickLibAddendum', # 6.5.9-1
|
375
|
-
'OpaquePaintImageChannel', # 6.3.7-10
|
376
|
-
'QueueAuthenticPixels', # 6.4.5-6
|
377
|
-
'RemapImage', # 6.4.4-0
|
378
|
-
'RemapImages', # 6.4.4-0
|
379
|
-
'RemoveImageArtifact', # 6.3.6
|
380
|
-
'RotationalBlurImage', # 6.8.8-9
|
381
|
-
'RotationalBlurImageChannel', # 6.8.8-9
|
382
|
-
'SelectiveBlurImageChannel', # 6.5.0-3
|
383
|
-
'SetImageAlphaChannel', # 6.3.6-9
|
384
|
-
'SetImageArtifact', # 6.3.6
|
385
|
-
'SetMagickMemoryMethods', # 6.4.1
|
386
|
-
'SparseColorImage', # 6.3.6-?
|
387
|
-
'StatisticImage', # 6.6.8-6
|
388
|
-
'SyncAuthenticPixels', # 6.4.5-6
|
389
|
-
'TransformImageColorspace', # 6.5.1
|
390
|
-
'TransparentPaintImage', # 6.3.7-10
|
391
|
-
'TransparentPaintImageChroma' # 6.4.5-6
|
392
|
-
].each do |func|
|
362
|
+
ruby_api = [
|
363
|
+
'rb_gc_adjust_memory_usage' # Ruby 2.4.0
|
364
|
+
]
|
365
|
+
memory_api = %w[
|
366
|
+
posix_memalign
|
367
|
+
malloc_usable_size
|
368
|
+
malloc_size
|
369
|
+
_aligned_msize
|
370
|
+
]
|
371
|
+
imagemagick_api = [
|
372
|
+
'GetImageChannelEntropy', # 6.9.0-0
|
373
|
+
'SetImageGray', # 6.9.1-10
|
374
|
+
'SetMagickAlignedMemoryMethods' # 7.0.9-0
|
375
|
+
]
|
376
|
+
|
377
|
+
check_api = ruby_api + memory_api + imagemagick_api
|
378
|
+
check_api.each do |func|
|
393
379
|
have_func(func, headers)
|
394
380
|
end
|
395
381
|
|
396
|
-
|
397
|
-
|
398
|
-
#{COMMON_HEADERS}
|
399
|
-
#{cpp_include(headers)}
|
400
|
-
/*top*/
|
401
|
-
int main() {
|
402
|
-
MagickBooleanType okay;
|
403
|
-
Image *image;
|
404
|
-
MagickPixelPacket *color;
|
405
|
-
char *name;
|
406
|
-
ExceptionInfo *exception;
|
407
|
-
okay = QueryMagickColorname(image, color, SVGCompliance, name, exception);
|
408
|
-
return 0;
|
409
|
-
}
|
410
|
-
SRC
|
411
|
-
$defs.push('-DHAVE_NEW_QUERYMAGICKCOLORNAME')
|
412
|
-
true
|
413
|
-
else
|
414
|
-
false
|
415
|
-
end
|
416
|
-
end
|
417
|
-
|
418
|
-
have_struct_member('Image', 'type', headers) # ???
|
419
|
-
have_struct_member('DrawInfo', 'kerning', headers) # 6.4.7-8
|
420
|
-
have_struct_member('DrawInfo', 'interline_spacing', headers) # 6.5.5-8
|
421
|
-
have_struct_member('DrawInfo', 'interword_spacing', headers) # 6.4.8-0
|
422
|
-
have_type('DitherMethod', headers) # 6.4.2
|
423
|
-
have_type('MagickFunction', headers) # 6.4.8-8
|
424
|
-
have_type('ImageLayerMethod', headers) # 6.3.6 replaces MagickLayerMethod
|
425
|
-
have_type('long double', headers)
|
426
|
-
#have_type("unsigned long long", headers)
|
427
|
-
#have_type("uint64_t", headers)
|
428
|
-
#have_type("__int64", headers)
|
429
|
-
#have_type("uintmax_t", headers)
|
430
|
-
#check_sizeof("unsigned long", headers)
|
431
|
-
#check_sizeof("Image *", headers)
|
432
|
-
|
433
|
-
have_enum_values('AlphaChannelType', ['CopyAlphaChannel', # 6.4.3-7
|
434
|
-
'BackgroundAlphaChannel', # 6.5.2-5
|
435
|
-
'RemoveAlphaChannel'], headers) # 6.7.5-1
|
436
|
-
have_enum_values('CompositeOperator', ['BlurCompositeOp', # 6.5.3-7
|
437
|
-
'DistortCompositeOp', # 6.5.3-10
|
438
|
-
'LinearBurnCompositeOp', # 6.5.4-3
|
439
|
-
'LinearDodgeCompositeOp', # 6.5.4-3
|
440
|
-
'MathematicsCompositeOp', # 6.5.4-3
|
441
|
-
'PegtopLightCompositeOp', # 6.5.4-3
|
442
|
-
'PinLightCompositeOp', # 6.5.4-3
|
443
|
-
'VividLightCompositeOp'], headers) # 6.5.4-3
|
444
|
-
have_enum_values('CompressionType', ['DXT1Compression', # 6.3.9-3
|
445
|
-
'DXT3Compression', # 6.3.9-3
|
446
|
-
'DXT5Compression', # 6.3.9-3
|
447
|
-
'ZipSCompression', # 6.5.5-4
|
448
|
-
'PizCompression', # 6.5.5-4
|
449
|
-
'Pxr24Compression', # 6.5.5-4
|
450
|
-
'B44Compression', # 6.5.5-4
|
451
|
-
'B44ACompression'], headers) # 6.5.5-4
|
452
|
-
|
453
|
-
have_enum_values('DistortImageMethod', ['BarrelDistortion', # 6.4.2-5
|
454
|
-
'BarrelInverseDistortion', # 6.4.3-8
|
455
|
-
'BilinearForwardDistortion', # 6.5.1-2
|
456
|
-
'BilinearReverseDistortion', # 6.5.1-2
|
457
|
-
'DePolarDistortion', # 6.4.2-6
|
458
|
-
'PolarDistortion', # 6.4.2-6
|
459
|
-
'PolynomialDistortion', # 6.4.2-4
|
460
|
-
'ShepardsDistortion'], headers) # 6.4.2-4
|
461
|
-
have_enum_value('DitherMethod', 'NoDitherMethod', headers) # 6.4.3
|
462
|
-
have_enum_values('FilterTypes', ['KaiserFilter', # 6.3.6
|
463
|
-
'WelshFilter', # 6.3.6-4
|
464
|
-
'ParzenFilter', # 6.3.6-4
|
465
|
-
'LagrangeFilter', # 6.3.7-2
|
466
|
-
'BohmanFilter', # 6.3.7-2
|
467
|
-
'BartlettFilter', # 6.3.7-2
|
468
|
-
'SentinelFilter'], headers) # 6.3.7-2
|
469
|
-
have_enum_values('MagickEvaluateOperator', ['PowEvaluateOperator', # 6.4.1-9
|
470
|
-
'LogEvaluateOperator', # 6.4.2
|
471
|
-
'ThresholdEvaluateOperator', # 6.4.3
|
472
|
-
'ThresholdBlackEvaluateOperator', # 6.4.3
|
473
|
-
'ThresholdWhiteEvaluateOperator', # 6.4.3
|
474
|
-
'GaussianNoiseEvaluateOperator', # 6.4.3
|
475
|
-
'ImpulseNoiseEvaluateOperator', # 6.4.3
|
476
|
-
'LaplacianNoiseEvaluateOperator', # 6.4.3
|
477
|
-
'MultiplicativeNoiseEvaluateOperator', # 6.4.3
|
478
|
-
'PoissonNoiseEvaluateOperator', # 6.4.3
|
479
|
-
'UniformNoiseEvaluateOperator', # 6.4.3
|
480
|
-
'CosineEvaluateOperator', # 6.4.8-5
|
481
|
-
'SineEvaluateOperator', # 6.4.8-5
|
482
|
-
'AddModulusEvaluateOperator'], # 6.4.8-5
|
483
|
-
headers)
|
484
|
-
have_enum_values('MagickFunction', ['ArcsinFunction', # 6.5.2-8
|
485
|
-
'ArctanFunction', # 6.5.2-8
|
486
|
-
'PolynomialFunction', # 6.4.8-8
|
487
|
-
'SinusoidFunction'], headers) # 6.4.8-8
|
488
|
-
have_enum_values('ImageLayerMethod', ['FlattenLayer', # 6.3.6-2
|
489
|
-
'MergeLayer', # 6.3.6
|
490
|
-
'MosaicLayer', # 6.3.6-2
|
491
|
-
'TrimBoundsLayer' ], headers) # 6.4.3-8
|
492
|
-
have_enum_values('VirtualPixelMethod', ['HorizontalTileVirtualPixelMethod', # 6.4.2-6
|
493
|
-
'VerticalTileVirtualPixelMethod', # 6.4.2-6
|
494
|
-
'HorizontalTileEdgeVirtualPixelMethod', # 6.5.0-1
|
495
|
-
'VerticalTileEdgeVirtualPixelMethod', # 6.5.0-1
|
496
|
-
'CheckerTileVirtualPixelMethod'], # 6.5.0-1
|
497
|
-
headers)
|
498
|
-
|
499
|
-
# Now test Ruby 1.9.0 features.
|
500
|
-
headers = ['ruby.h']
|
501
|
-
if have_header('ruby/io.h')
|
502
|
-
headers << 'ruby/io.h'
|
503
|
-
else
|
504
|
-
headers << 'rubyio.h'
|
382
|
+
unless have_header('malloc.h')
|
383
|
+
have_header('malloc/malloc.h')
|
505
384
|
end
|
506
385
|
|
507
|
-
have_func('rb_frame_this_func', headers)
|
508
|
-
|
509
386
|
# Miscellaneous constants
|
510
387
|
$defs.push("-DRUBY_VERSION_STRING=\"ruby #{RUBY_VERSION}\"")
|
511
388
|
$defs.push("-DRMAGICK_VERSION_STRING=\"RMagick #{RMAGICK_VERS}\"")
|
512
389
|
|
390
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9=1') if im_version_at_least?('6.8.9')
|
391
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0=1') if im_version_at_least?('6.9.0')
|
392
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_10=1') if im_version_at_least?('6.9.10')
|
393
|
+
$defs.push('-DIMAGEMAGICK_7=1') if im_version_at_least?('7.0.0')
|
394
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_8=1') if im_version_at_least?('7.0.8')
|
395
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_10=1') if im_version_at_least?('7.0.10')
|
396
|
+
|
513
397
|
create_header
|
514
398
|
end
|
515
399
|
|
516
400
|
def create_makefile_file
|
517
401
|
create_header_file
|
518
|
-
# Prior to 1.8.5 mkmf duplicated the symbols on the command line and in the
|
519
|
-
# extconf.h header. Suppress that behavior by removing the symbol array.
|
520
|
-
$defs = []
|
521
402
|
|
522
403
|
# Force re-compilation if the generated Makefile changed.
|
523
|
-
$config_h = 'Makefile
|
404
|
+
$config_h = 'Makefile'
|
524
405
|
|
525
406
|
create_makefile('RMagick2')
|
526
407
|
print_summary
|
527
408
|
end
|
528
409
|
|
529
|
-
def
|
530
|
-
|
410
|
+
def magick_command
|
411
|
+
@magick_command ||= if find_executable('magick')
|
412
|
+
'magick'
|
413
|
+
elsif find_executable('identify')
|
414
|
+
'identify'
|
415
|
+
else
|
416
|
+
raise NotImplementedError, "no executable found for ImageMagick"
|
417
|
+
end
|
418
|
+
end
|
531
419
|
|
420
|
+
def im_version_at_least?(version)
|
421
|
+
Gem::Version.new($magick_version) >= Gem::Version.new(version)
|
422
|
+
end
|
532
423
|
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
#{
|
424
|
+
def print_summary
|
425
|
+
summary = <<~"END_SUMMARY"
|
426
|
+
#{'=' * 70}
|
427
|
+
#{Time.now.strftime('%a %d %b %y %T')}
|
428
|
+
This installation of RMagick #{RMAGICK_VERS} is configured for
|
429
|
+
Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM}) and ImageMagick #{$magick_version}
|
430
|
+
#{'=' * 70}
|
538
431
|
|
539
432
|
|
540
|
-
END_SUMMARY
|
433
|
+
END_SUMMARY
|
541
434
|
|
542
435
|
Logging.message summary
|
543
436
|
message summary
|
@@ -549,6 +442,6 @@ extconf = RMagick::Extconf.new
|
|
549
442
|
at_exit do
|
550
443
|
msg = "Configured compile options: #{extconf.configured_compile_options}"
|
551
444
|
Logging.message msg
|
552
|
-
message msg+"\n"
|
445
|
+
message msg + "\n"
|
553
446
|
end
|
554
447
|
extconf.create_makefile_file
|