rmagick 4.0.0 → 5.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- 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 +138 -0
- data/.gitignore +5 -1
- data/.rspec +1 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +150 -297
- data/.yardopts +5 -0
- data/CHANGELOG.md +222 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +14 -10
- data/README.md +316 -0
- data/Rakefile +59 -93
- data/before_install_linux.sh +23 -29
- data/before_install_osx.sh +58 -2
- data/ext/RMagick/extconf.rb +191 -110
- data/ext/RMagick/rmagick.c +77 -104
- data/ext/RMagick/rmagick.h +138 -99
- data/ext/RMagick/rmagick_gvl.h +224 -0
- data/ext/RMagick/rmdraw.c +464 -526
- data/ext/RMagick/rmenum.c +132 -121
- data/ext/RMagick/rmfill.c +223 -83
- data/ext/RMagick/rmilist.c +360 -288
- data/ext/RMagick/rmimage.c +5550 -4318
- data/ext/RMagick/rminfo.c +637 -818
- data/ext/RMagick/rmkinfo.c +88 -92
- data/ext/RMagick/rmmain.c +462 -263
- data/ext/RMagick/rmmontage.c +105 -150
- data/ext/RMagick/rmpixel.c +554 -359
- data/ext/RMagick/rmstruct.c +81 -94
- data/ext/RMagick/rmutil.c +279 -270
- data/lib/rmagick/version.rb +3 -1
- data/lib/rmagick.rb +2 -0
- data/lib/rmagick_internal.rb +118 -104
- data/lib/rvg/clippath.rb +2 -1
- data/lib/rvg/container.rb +10 -5
- data/lib/rvg/describable.rb +1 -1
- data/lib/rvg/embellishable.rb +5 -4
- data/lib/rvg/misc.rb +15 -12
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +12 -11
- data/lib/rvg/rvg.rb +10 -6
- data/lib/rvg/stylable.rb +9 -7
- data/lib/rvg/text.rb +11 -6
- data/lib/rvg/transformable.rb +3 -2
- data/lib/rvg/units.rb +1 -1
- data/rmagick.gemspec +13 -12
- metadata +63 -419
- data/.appveyor.yml +0 -45
- data/.circleci/config.yml +0 -56
- data/.ruby-version +0 -1
- data/.simplecov +0 -27
- data/.travis.yml +0 -62
- data/Doxyfile +0 -1514
- data/README.textile +0 -259
- data/benchmarks/memory/README.md +0 -50
- data/benchmarks/memory/image_new.rb +0 -8
- data/benchmarks/memory/rmagick.gnuplot +0 -16
- 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 -52
- 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 -41
- 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 -16
- 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 -45
- data/doc/ex/get_type_metrics.rb +0 -142
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -78
- 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.png +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.png +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.png +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 -37
- 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 -26
- 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 -126
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -55
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -54
- 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 -570
- 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 -43
- data/examples/demo.rb +0 -323
- data/examples/describe.rb +0 -41
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -312
- data/examples/identify.rb +0 -174
- data/examples/image_opacity.rb +0 -28
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -37
- data/examples/rotating_text.rb +0 -45
- 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 -155
- data/spec/rmagick/image/blue_shift_spec.rb +0 -14
- data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
- data/spec/rmagick/image/composite_spec.rb +0 -72
- data/spec/rmagick/image/constitute_spec.rb +0 -13
- data/spec/rmagick/image/dispatch_spec.rb +0 -16
- data/spec/rmagick/image/from_blob_spec.rb +0 -12
- data/spec/rmagick/image/ping_spec.rb +0 -12
- data/spec/rmagick/image/properties_spec.rb +0 -27
- data/spec/rmagick/image/read_spec.rb +0 -28
- data/spec/spec_helper.rb +0 -10
- data/spec/support/issue_200/app.rb +0 -8
- data/test/Draw.rb +0 -351
- data/test/Enum.rb +0 -228
- data/test/Fill.rb +0 -93
- data/test/Image1.rb +0 -606
- data/test/Image2.rb +0 -1408
- data/test/Image3.rb +0 -1086
- data/test/ImageList1.rb +0 -858
- data/test/ImageList2.rb +0 -375
- data/test/Image_attributes.rb +0 -635
- data/test/Import_Export.rb +0 -111
- data/test/Info.rb +0 -436
- data/test/KernelInfo.rb +0 -59
- data/test/Magick.rb +0 -311
- data/test/Pixel.rb +0 -259
- data/test/PolaroidOptions.rb +0 -23
- data/test/Preview.rb +0 -26
- data/test/Struct.rb +0 -45
- data/test/appearance/Montage.rb +0 -26
- data/test/appearance/appearance_assertion.rb +0 -13
- data/test/appearance/expected/montage_border_color.jpg +0 -0
- data/test/cmyk.icm +0 -0
- data/test/lib/internal/Draw.rb +0 -811
- data/test/lib/internal/Geometry.rb +0 -98
- data/test/lib/internal/Magick.rb +0 -40
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -49
- data/test/tmpnam_test.rb +0 -50
data/ext/RMagick/extconf.rb
CHANGED
@@ -2,7 +2,7 @@ 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
|
@@ -10,18 +10,47 @@ module RMagick
|
|
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
|
39
|
+
|
13
40
|
attr_reader :headers
|
14
41
|
|
15
42
|
def initialize
|
16
43
|
@stdout = $stdout.dup
|
17
44
|
|
18
45
|
setup_pkg_config_path
|
19
|
-
configure_compile_options
|
20
46
|
assert_can_compile!
|
47
|
+
configure_compile_options
|
21
48
|
configure_headers
|
22
49
|
end
|
23
50
|
|
24
51
|
def setup_pkg_config_path
|
52
|
+
return if RUBY_PLATFORM =~ /mswin|mingw/
|
53
|
+
|
25
54
|
if find_executable('brew')
|
26
55
|
pkg_config_path = "#{`brew --prefix imagemagick@6`.strip}/lib/pkgconfig"
|
27
56
|
elsif find_executable('pacman')
|
@@ -40,7 +69,6 @@ module RMagick
|
|
40
69
|
{
|
41
70
|
magick_version: $magick_version,
|
42
71
|
local_libs: $LOCAL_LIBS,
|
43
|
-
cflags: $CFLAGS,
|
44
72
|
cppflags: $CPPFLAGS,
|
45
73
|
ldflags: $LDFLAGS,
|
46
74
|
defs: $defs,
|
@@ -51,7 +79,9 @@ module RMagick
|
|
51
79
|
def configure_headers
|
52
80
|
@headers = %w[assert.h ctype.h stdio.h stdlib.h math.h time.h sys/types.h]
|
53
81
|
|
54
|
-
if have_header('
|
82
|
+
if have_header('MagickCore/MagickCore.h')
|
83
|
+
headers << 'MagickCore/MagickCore.h'
|
84
|
+
elsif have_header('magick/MagickCore.h')
|
55
85
|
headers << 'magick/MagickCore.h'
|
56
86
|
else
|
57
87
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find magick/MagickCore.h."
|
@@ -62,85 +92,52 @@ module RMagick
|
|
62
92
|
# Magick-config is not available on Windows
|
63
93
|
if RUBY_PLATFORM !~ /mswin|mingw/
|
64
94
|
|
65
|
-
# Check for compiler. Extract first word so ENV['CC'] can be a program name with arguments.
|
66
|
-
config = defined?(RbConfig) ? ::RbConfig : ::Config
|
67
|
-
cc = (ENV['CC'] || config::CONFIG['CC'] || 'gcc').split(' ').first
|
68
|
-
exit_failure "No C compiler found in ${ENV['PATH']}. See mkmf.log for details." unless find_executable(cc)
|
69
|
-
|
70
|
-
magick_package = determine_imagemagick_package
|
71
|
-
|
72
|
-
$magick_version = `pkg-config #{magick_package} --modversion`[/^(\d+\.\d+\.\d+)/]
|
73
|
-
|
74
95
|
check_multiple_imagemagick_versions
|
75
96
|
check_partial_imagemagick_versions
|
76
97
|
|
77
|
-
|
78
|
-
# Check minimum ImageMagick version if possible
|
79
|
-
checking_for("outdated ImageMagick version (<= #{Magick::MIN_IM_VERSION})") do
|
80
|
-
Logging.message("Detected ImageMagick version: #{$magick_version}\n")
|
98
|
+
original_ldflags = $LDFLAGS.dup
|
81
99
|
|
82
|
-
|
83
|
-
|
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}"
|
84
103
|
|
85
104
|
# Save flags
|
86
|
-
$
|
87
|
-
$
|
88
|
-
$LDFLAGS
|
89
|
-
$LOCAL_LIBS = ENV['LIBS'].to_s + ' ' + `pkg-config --libs #{magick_package}`.chomp
|
105
|
+
$CPPFLAGS += " #{ENV['CPPFLAGS']} " + PKGConfig.cflags($magick_package).chomp
|
106
|
+
$LOCAL_LIBS += " #{ENV['LIBS']} " + PKGConfig.libs($magick_package).chomp
|
107
|
+
$LDFLAGS += " #{ldflags} #{rpath}"
|
90
108
|
|
91
|
-
|
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
|
92
113
|
|
93
|
-
|
114
|
+
configure_archflags_for_osx($magick_package) if RUBY_PLATFORM =~ /darwin/ # osx
|
94
115
|
|
95
|
-
|
96
|
-
abort 'Unable to get ImageMagick version' unless Regexp.last_match(1)
|
97
|
-
$magick_version = Regexp.last_match(1)
|
116
|
+
elsif RUBY_PLATFORM =~ /mingw/ # mingw
|
98
117
|
|
99
118
|
dir_paths = search_paths_for_library_for_windows
|
100
|
-
$CPPFLAGS
|
101
|
-
$LDFLAGS
|
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')
|
102
122
|
|
103
|
-
have_library('CORE_RL_magick_')
|
123
|
+
have_library(im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_' : 'CORE_RL_magick_')
|
104
124
|
|
105
125
|
else # mswin
|
106
126
|
|
107
|
-
`identify -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
|
108
|
-
abort 'Unable to get ImageMagick version' unless Regexp.last_match(1)
|
109
|
-
$magick_version = Regexp.last_match(1)
|
110
|
-
|
111
127
|
dir_paths = search_paths_for_library_for_windows
|
112
128
|
$CPPFLAGS << %( -I"#{dir_paths[:include]}")
|
113
129
|
$LDFLAGS << %( -libpath:"#{dir_paths[:lib]}")
|
130
|
+
$LDFLAGS << ' -libpath:ucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
114
131
|
|
115
|
-
$LOCAL_LIBS
|
132
|
+
$LOCAL_LIBS += ' ' + (im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
|
116
133
|
|
117
134
|
end
|
118
135
|
|
119
|
-
$
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
checking_for "#{enum}.#{value}" do
|
125
|
-
if try_compile(<<"SRC", &b)
|
126
|
-
#{COMMON_HEADERS}
|
127
|
-
#{cpp_include(headers)}
|
128
|
-
/*top*/
|
129
|
-
int main() { #{enum} t = #{value}; t = t; return 0; }
|
130
|
-
SRC
|
131
|
-
$defs.push(format('-DHAVE_ENUM_%s', value.upcase))
|
132
|
-
true
|
133
|
-
else
|
134
|
-
false
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# Test for multiple values of the same enum type
|
140
|
-
def have_enum_values(enum, values, headers = nil, &b)
|
141
|
-
values.each do |value|
|
142
|
-
have_enum_value(enum, value, headers, &b)
|
143
|
-
end
|
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
|
144
141
|
end
|
145
142
|
|
146
143
|
def exit_failure(msg)
|
@@ -160,22 +157,44 @@ SRC
|
|
160
157
|
exit(1)
|
161
158
|
end
|
162
159
|
|
163
|
-
def
|
164
|
-
|
165
|
-
|
160
|
+
def detect_imagemagick_packages(packages)
|
161
|
+
packages.select do |package|
|
162
|
+
PKGConfig.exist?(package)
|
166
163
|
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def installed_im6_packages
|
167
|
+
@installed_im6_packages ||= detect_imagemagick_packages(IM6_PACKAGES)
|
168
|
+
end
|
167
169
|
|
168
|
-
|
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
|
169
176
|
|
170
|
-
# For ancient version of ImageMagick 6 we need a different regex
|
171
177
|
if packages.empty?
|
172
|
-
|
178
|
+
# ImageMagick 6.7 does not have package file like ImageMagick-6.Q16.pc
|
179
|
+
packages = detect_imagemagick_packages(IM6_7_PACKAGES)
|
173
180
|
end
|
174
181
|
|
175
182
|
if packages.empty?
|
176
183
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find ImageMagick with pkg-config\n"
|
177
184
|
end
|
178
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
|
+
|
179
198
|
if packages.length > 1
|
180
199
|
package_lines = packages.map { |package| " - #{package}" }.join("\n")
|
181
200
|
msg = "\nWarning: Found more than one ImageMagick installation. This could cause problems at runtime.\n#{package_lines}\n\n"
|
@@ -226,21 +245,33 @@ SRC
|
|
226
245
|
matches.delete_if(&:empty?)
|
227
246
|
return unless !matches.empty? && matches.length < 3
|
228
247
|
|
229
|
-
msg =
|
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
|
+
|
230
258
|
Logging.message msg
|
231
259
|
message msg
|
232
260
|
end
|
233
261
|
|
234
262
|
# issue #169
|
235
263
|
# set ARCHFLAGS appropriately for OSX
|
236
|
-
def
|
237
|
-
|
238
|
-
|
239
|
-
|
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}`
|
240
270
|
|
241
271
|
# default ARCHFLAGS
|
242
272
|
archs = $ARCH_FLAG.scan(/-arch\s+(\S+)/).flatten
|
243
273
|
|
274
|
+
archflags = []
|
244
275
|
archs.each do |arch|
|
245
276
|
archflags << "-arch #{arch}" if fileinfo.include?(arch)
|
246
277
|
end
|
@@ -259,7 +290,7 @@ SRC
|
|
259
290
|
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
260
291
|
paths.each do |dir|
|
261
292
|
lib = File.join(dir, 'lib')
|
262
|
-
lib_file = File.join(lib, 'CORE_RL_magick_.lib')
|
293
|
+
lib_file = File.join(lib, im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
|
263
294
|
next unless File.exist?(lib_file)
|
264
295
|
|
265
296
|
dir_paths[:include] = File.join(dir, 'include')
|
@@ -271,86 +302,136 @@ SRC
|
|
271
302
|
|
272
303
|
return dir_paths if found_lib
|
273
304
|
|
274
|
-
exit_failure
|
275
|
-
Can't install RMagick #{RMAGICK_VERS}.
|
276
|
-
Can't find the ImageMagick library.
|
277
|
-
Retry with '--with-opt-dir' option.
|
278
|
-
Usage: gem install rmagick -- '--with-opt-dir=\"[path to ImageMagick]\"'
|
279
|
-
e.g.
|
280
|
-
|
281
|
-
END_MINGW
|
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
|
282
313
|
end
|
283
314
|
|
284
315
|
def assert_can_compile!
|
285
316
|
assert_minimum_ruby_version!
|
286
317
|
assert_has_dev_libs!
|
318
|
+
|
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)
|
287
322
|
end
|
288
323
|
|
289
324
|
def assert_minimum_ruby_version!
|
290
|
-
|
325
|
+
supported = checking_for("Ruby version >= #{MIN_RUBY_VERS}") do
|
291
326
|
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(MIN_RUBY_VERS)
|
292
327
|
end
|
293
|
-
|
294
|
-
|
328
|
+
|
329
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n" unless supported
|
295
330
|
end
|
296
331
|
|
297
332
|
def assert_has_dev_libs!
|
298
|
-
|
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
|
338
|
+
|
339
|
+
if RUBY_PLATFORM !~ /mswin|mingw/
|
340
|
+
unless PKGConfig.libs('MagickCore')[/\bl\s*(MagickCore|Magick)6?\b/]
|
341
|
+
exit_failure failure_message
|
342
|
+
end
|
299
343
|
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
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)
|
304
358
|
end
|
305
359
|
end
|
306
360
|
|
307
361
|
def create_header_file
|
308
|
-
[
|
362
|
+
ruby_api = [
|
363
|
+
'rb_gc_adjust_memory_usage', # Ruby 2.4.0
|
364
|
+
'rb_gc_mark_movable' # Ruby 2.7.0
|
365
|
+
]
|
366
|
+
memory_api = %w[
|
367
|
+
posix_memalign
|
368
|
+
malloc_usable_size
|
369
|
+
malloc_size
|
370
|
+
_aligned_msize
|
371
|
+
]
|
372
|
+
imagemagick_api = [
|
309
373
|
'GetImageChannelEntropy', # 6.9.0-0
|
310
|
-
'SetImageGray' # 6.9.1-10
|
311
|
-
|
374
|
+
'SetImageGray', # 6.9.1-10
|
375
|
+
'SetMagickAlignedMemoryMethods' # 7.0.9-0
|
376
|
+
]
|
377
|
+
|
378
|
+
check_api = ruby_api + memory_api + imagemagick_api
|
379
|
+
check_api.each do |func|
|
312
380
|
have_func(func, headers)
|
313
381
|
end
|
314
382
|
|
383
|
+
unless have_header('malloc.h')
|
384
|
+
have_header('malloc/malloc.h')
|
385
|
+
end
|
386
|
+
|
315
387
|
# Miscellaneous constants
|
316
388
|
$defs.push("-DRUBY_VERSION_STRING=\"ruby #{RUBY_VERSION}\"")
|
317
389
|
$defs.push("-DRMAGICK_VERSION_STRING=\"RMagick #{RMAGICK_VERS}\"")
|
318
390
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
391
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9=1') if im_version_at_least?('6.8.9')
|
392
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0=1') if im_version_at_least?('6.9.0')
|
393
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_10=1') if im_version_at_least?('6.9.10')
|
394
|
+
$defs.push('-DIMAGEMAGICK_7=1') if im_version_at_least?('7.0.0')
|
395
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_8=1') if im_version_at_least?('7.0.8')
|
396
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_10=1') if im_version_at_least?('7.0.10')
|
325
397
|
|
326
398
|
create_header
|
327
399
|
end
|
328
400
|
|
329
401
|
def create_makefile_file
|
330
402
|
create_header_file
|
331
|
-
# Prior to 1.8.5 mkmf duplicated the symbols on the command line and in the
|
332
|
-
# extconf.h header. Suppress that behavior by removing the symbol array.
|
333
|
-
$defs = []
|
334
403
|
|
335
404
|
# Force re-compilation if the generated Makefile changed.
|
336
|
-
$config_h = 'Makefile
|
405
|
+
$config_h = 'Makefile'
|
337
406
|
|
338
407
|
create_makefile('RMagick2')
|
339
408
|
print_summary
|
340
409
|
end
|
341
410
|
|
342
|
-
def
|
343
|
-
|
411
|
+
def magick_command
|
412
|
+
@magick_command ||= if find_executable('magick')
|
413
|
+
'magick'
|
414
|
+
elsif find_executable('identify')
|
415
|
+
'identify'
|
416
|
+
else
|
417
|
+
raise NotImplementedError, "no executable found for ImageMagick"
|
418
|
+
end
|
419
|
+
end
|
344
420
|
|
421
|
+
def im_version_at_least?(version)
|
422
|
+
Gem::Version.new($magick_version) >= Gem::Version.new(version)
|
423
|
+
end
|
345
424
|
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
#{
|
425
|
+
def print_summary
|
426
|
+
summary = <<~"END_SUMMARY"
|
427
|
+
#{'=' * 70}
|
428
|
+
#{Time.now.strftime('%a %d %b %y %T')}
|
429
|
+
This installation of RMagick #{RMAGICK_VERS} is configured for
|
430
|
+
Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM}) and ImageMagick #{$magick_version}
|
431
|
+
#{'=' * 70}
|
351
432
|
|
352
433
|
|
353
|
-
END_SUMMARY
|
434
|
+
END_SUMMARY
|
354
435
|
|
355
436
|
Logging.message summary
|
356
437
|
message summary
|