rmagick 3.2.0 → 4.3.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 +4 -4
- 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 +3 -1
- data/.rspec +1 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +151 -297
- data/.yardopts +5 -0
- data/CHANGELOG.md +233 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +14 -10
- data/README.md +326 -0
- data/Rakefile +16 -22
- data/before_install_linux.sh +22 -28
- data/before_install_osx.sh +57 -2
- data/ext/RMagick/extconf.rb +149 -105
- data/ext/RMagick/rmagick.c +77 -104
- data/ext/RMagick/rmagick.h +121 -103
- data/ext/RMagick/rmdraw.c +364 -436
- data/ext/RMagick/rmenum.c +106 -114
- data/ext/RMagick/rmfill.c +149 -70
- data/ext/RMagick/rmilist.c +225 -367
- data/ext/RMagick/rmimage.c +4751 -4405
- data/ext/RMagick/rminfo.c +574 -787
- data/ext/RMagick/rmkinfo.c +51 -121
- data/ext/RMagick/rmmain.c +454 -286
- data/ext/RMagick/rmmontage.c +64 -130
- data/ext/RMagick/rmpixel.c +488 -437
- data/ext/RMagick/rmstruct.c +83 -96
- data/ext/RMagick/rmutil.c +302 -214
- data/lib/rmagick/version.rb +1 -1
- data/lib/rmagick_internal.rb +138 -93
- 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 +12 -8
- 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 +10 -11
- metadata +52 -423
- 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/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 -42
- 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/lib/obsolete.rb +0 -66
- 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 -627
- data/test/Image2.rb +0 -1426
- data/test/Image3.rb +0 -1091
- data/test/ImageList1.rb +0 -858
- data/test/ImageList2.rb +0 -406
- data/test/Image_attributes.rb +0 -666
- data/test/Import_Export.rb +0 -115
- data/test/Info.rb +0 -444
- data/test/KernelInfo.rb +0 -67
- data/test/Magick.rb +0 -311
- data/test/Pixel.rb +0 -285
- 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/Obsolete.rb +0 -30
- data/test/lib/internal/Draw.rb +0 -823
- 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,6 @@ 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 'date'
|
6
5
|
|
7
6
|
module RMagick
|
8
7
|
class Extconf
|
@@ -16,12 +15,14 @@ module RMagick
|
|
16
15
|
@stdout = $stdout.dup
|
17
16
|
|
18
17
|
setup_pkg_config_path
|
19
|
-
configure_compile_options
|
20
18
|
assert_can_compile!
|
19
|
+
configure_compile_options
|
21
20
|
configure_headers
|
22
21
|
end
|
23
22
|
|
24
23
|
def setup_pkg_config_path
|
24
|
+
return if RUBY_PLATFORM =~ /mswin|mingw/
|
25
|
+
|
25
26
|
if find_executable('brew')
|
26
27
|
pkg_config_path = "#{`brew --prefix imagemagick@6`.strip}/lib/pkgconfig"
|
27
28
|
elsif find_executable('pacman')
|
@@ -40,7 +41,6 @@ module RMagick
|
|
40
41
|
{
|
41
42
|
magick_version: $magick_version,
|
42
43
|
local_libs: $LOCAL_LIBS,
|
43
|
-
cflags: $CFLAGS,
|
44
44
|
cppflags: $CPPFLAGS,
|
45
45
|
ldflags: $LDFLAGS,
|
46
46
|
defs: $defs,
|
@@ -51,7 +51,9 @@ module RMagick
|
|
51
51
|
def configure_headers
|
52
52
|
@headers = %w[assert.h ctype.h stdio.h stdlib.h math.h time.h sys/types.h]
|
53
53
|
|
54
|
-
if have_header('
|
54
|
+
if have_header('MagickCore/MagickCore.h')
|
55
|
+
headers << 'MagickCore/MagickCore.h'
|
56
|
+
elsif have_header('magick/MagickCore.h')
|
55
57
|
headers << 'magick/MagickCore.h'
|
56
58
|
else
|
57
59
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find magick/MagickCore.h."
|
@@ -62,85 +64,46 @@ module RMagick
|
|
62
64
|
# Magick-config is not available on Windows
|
63
65
|
if RUBY_PLATFORM !~ /mswin|mingw/
|
64
66
|
|
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
67
|
check_multiple_imagemagick_versions
|
75
68
|
check_partial_imagemagick_versions
|
76
69
|
|
77
|
-
|
78
|
-
#
|
79
|
-
|
80
|
-
Logging.message("Detected ImageMagick version: #{$magick_version}\n")
|
81
|
-
|
82
|
-
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)
|
83
|
-
end
|
70
|
+
libdir = `pkg-config --libs-only-L #{$magick_package}`.chomp.sub('-L', '')
|
71
|
+
ldflags = "#{ENV['LDFLAGS']} " + `pkg-config --libs #{$magick_package}`.chomp
|
72
|
+
rpath = libdir.empty? ? '' : "-Wl,-rpath,#{libdir}"
|
84
73
|
|
85
74
|
# Save flags
|
86
|
-
$
|
87
|
-
$
|
88
|
-
$LDFLAGS
|
89
|
-
$LOCAL_LIBS = ENV['LIBS'].to_s + ' ' + `pkg-config --libs #{magick_package}`.chomp
|
75
|
+
$CPPFLAGS = "#{ENV['CPPFLAGS']} " + `pkg-config --cflags #{$magick_package}`.chomp
|
76
|
+
$LOCAL_LIBS = "#{ENV['LIBS']} " + `pkg-config --libs #{$magick_package}`.chomp
|
77
|
+
$LDFLAGS = "#{ldflags} #{rpath}"
|
90
78
|
|
91
|
-
|
79
|
+
unless try_link("int main() { }")
|
80
|
+
# if linker does not recognizes '-Wl,-rpath,somewhere' option, it revert to original option
|
81
|
+
$LDFLAGS = ldflags
|
82
|
+
end
|
92
83
|
|
93
|
-
|
84
|
+
configure_archflags_for_osx($magick_package) if RUBY_PLATFORM =~ /darwin/ # osx
|
94
85
|
|
95
|
-
|
96
|
-
abort 'Unable to get ImageMagick version' unless Regexp.last_match(1)
|
97
|
-
$magick_version = Regexp.last_match(1)
|
86
|
+
elsif RUBY_PLATFORM =~ /mingw/ # mingw
|
98
87
|
|
99
88
|
dir_paths = search_paths_for_library_for_windows
|
100
89
|
$CPPFLAGS = %(-I"#{dir_paths[:include]}")
|
101
90
|
$LDFLAGS = %(-L"#{dir_paths[:lib]}")
|
91
|
+
$LDFLAGS << ' -lucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
102
92
|
|
103
|
-
have_library('CORE_RL_magick_')
|
93
|
+
have_library(im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_' : 'CORE_RL_magick_')
|
104
94
|
|
105
95
|
else # mswin
|
106
96
|
|
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
97
|
dir_paths = search_paths_for_library_for_windows
|
112
98
|
$CPPFLAGS << %( -I"#{dir_paths[:include]}")
|
113
99
|
$LDFLAGS << %( -libpath:"#{dir_paths[:lib]}")
|
100
|
+
$LDFLAGS << ' -libpath:ucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
|
114
101
|
|
115
|
-
$LOCAL_LIBS = 'CORE_RL_magick_.lib'
|
102
|
+
$LOCAL_LIBS = im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib'
|
116
103
|
|
117
104
|
end
|
118
105
|
|
119
|
-
$
|
120
|
-
end
|
121
|
-
|
122
|
-
# Test for a specific value in an enum type
|
123
|
-
def have_enum_value(enum, value, headers = nil, &b)
|
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
|
106
|
+
$CPPFLAGS << (have_macro('__GNUC__') ? ' -std=gnu99' : ' -std=c99')
|
144
107
|
end
|
145
108
|
|
146
109
|
def exit_failure(msg)
|
@@ -161,11 +124,7 @@ SRC
|
|
161
124
|
end
|
162
125
|
|
163
126
|
def determine_imagemagick_package
|
164
|
-
|
165
|
-
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find pkg-config in #{ENV['PATH']}\n"
|
166
|
-
end
|
167
|
-
|
168
|
-
packages = `pkg-config --list-all`.scan(/(ImageMagick\-6[\.A-Z0-9]+) .*/).flatten
|
127
|
+
packages = `pkg-config --list-all`.scan(/(ImageMagick\-[\.A-Z0-9]+) .*/).flatten
|
169
128
|
|
170
129
|
# For ancient version of ImageMagick 6 we need a different regex
|
171
130
|
if packages.empty?
|
@@ -176,6 +135,23 @@ SRC
|
|
176
135
|
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find ImageMagick with pkg-config\n"
|
177
136
|
end
|
178
137
|
|
138
|
+
if packages.length > 1
|
139
|
+
|
140
|
+
im7_packages = packages.grep(/\AImageMagick-7/)
|
141
|
+
|
142
|
+
if im7_packages.any?
|
143
|
+
checking_for('forced use of ImageMagick 6') do
|
144
|
+
if ENV['USE_IMAGEMAGICK_6']
|
145
|
+
packages -= im7_packages
|
146
|
+
true
|
147
|
+
else
|
148
|
+
packages = im7_packages
|
149
|
+
false
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
179
155
|
if packages.length > 1
|
180
156
|
package_lines = packages.map { |package| " - #{package}" }.join("\n")
|
181
157
|
msg = "\nWarning: Found more than one ImageMagick installation. This could cause problems at runtime.\n#{package_lines}\n\n"
|
@@ -226,21 +202,33 @@ SRC
|
|
226
202
|
matches.delete_if(&:empty?)
|
227
203
|
return unless !matches.empty? && matches.length < 3
|
228
204
|
|
229
|
-
msg =
|
205
|
+
msg = <<~MESSAGE
|
206
|
+
|
207
|
+
Warning: Found a partial ImageMagick installation. Your operating
|
208
|
+
system likely has some built-in ImageMagick libraries but not all of
|
209
|
+
ImageMagick. This will most likely cause problems at both compile and
|
210
|
+
runtime.
|
211
|
+
Found partial installation at: #{prefix}
|
212
|
+
|
213
|
+
MESSAGE
|
214
|
+
|
230
215
|
Logging.message msg
|
231
216
|
message msg
|
232
217
|
end
|
233
218
|
|
234
219
|
# issue #169
|
235
220
|
# set ARCHFLAGS appropriately for OSX
|
236
|
-
def
|
237
|
-
|
238
|
-
|
239
|
-
|
221
|
+
def configure_archflags_for_osx(magick_package)
|
222
|
+
return unless `pkg-config #{magick_package} --libs-only-L`.match(%r{-L(.+)/lib})
|
223
|
+
|
224
|
+
imagemagick_dir = Regexp.last_match(1)
|
225
|
+
command = Dir.glob(File.join(imagemagick_dir, "bin/*")).select { |file| File.executable? file }.first
|
226
|
+
fileinfo = `file #{command}`
|
240
227
|
|
241
228
|
# default ARCHFLAGS
|
242
229
|
archs = $ARCH_FLAG.scan(/-arch\s+(\S+)/).flatten
|
243
230
|
|
231
|
+
archflags = []
|
244
232
|
archs.each do |arch|
|
245
233
|
archflags << "-arch #{arch}" if fileinfo.include?(arch)
|
246
234
|
end
|
@@ -259,7 +247,7 @@ SRC
|
|
259
247
|
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
260
248
|
paths.each do |dir|
|
261
249
|
lib = File.join(dir, 'lib')
|
262
|
-
lib_file = File.join(lib, 'CORE_RL_magick_.lib')
|
250
|
+
lib_file = File.join(lib, im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib')
|
263
251
|
next unless File.exist?(lib_file)
|
264
252
|
|
265
253
|
dir_paths[:include] = File.join(dir, 'include')
|
@@ -271,57 +259,101 @@ SRC
|
|
271
259
|
|
272
260
|
return dir_paths if found_lib
|
273
261
|
|
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
|
262
|
+
exit_failure <<~END_MINGW
|
263
|
+
Can't install RMagick #{RMAGICK_VERS}.
|
264
|
+
Can't find the ImageMagick library.
|
265
|
+
Retry with '--with-opt-dir' option.
|
266
|
+
Usage: gem install rmagick -- '--with-opt-dir=\"[path to ImageMagick]\"'
|
267
|
+
e.g.
|
268
|
+
gem install rmagick -- '--with-opt-dir=\"C:\\Program Files\\ImageMagick-6.9.1-Q16\"'
|
269
|
+
END_MINGW
|
282
270
|
end
|
283
271
|
|
284
272
|
def assert_can_compile!
|
285
273
|
assert_minimum_ruby_version!
|
286
274
|
assert_has_dev_libs!
|
275
|
+
|
276
|
+
# Check for compiler. Extract first word so ENV['CC'] can be a program name with arguments.
|
277
|
+
cc = (ENV['CC'] || RbConfig::CONFIG['CC'] || 'gcc').split(' ').first
|
278
|
+
exit_failure "No C compiler found in ${ENV['PATH']}. See mkmf.log for details." unless find_executable(cc)
|
287
279
|
end
|
288
280
|
|
289
281
|
def assert_minimum_ruby_version!
|
290
|
-
|
282
|
+
supported = checking_for("Ruby version >= #{MIN_RUBY_VERS}") do
|
291
283
|
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(MIN_RUBY_VERS)
|
292
284
|
end
|
293
|
-
|
294
|
-
|
285
|
+
|
286
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n" unless supported
|
295
287
|
end
|
296
288
|
|
297
289
|
def assert_has_dev_libs!
|
298
|
-
|
290
|
+
failure_message = <<~END_FAILURE
|
291
|
+
Can't install RMagick #{RMAGICK_VERS}.
|
292
|
+
Can't find the ImageMagick library or one of the dependent libraries.
|
293
|
+
Check the mkmf.log file for more detailed information.
|
294
|
+
END_FAILURE
|
295
|
+
|
296
|
+
if RUBY_PLATFORM !~ /mswin|mingw/
|
297
|
+
unless find_executable('pkg-config')
|
298
|
+
exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find pkg-config in #{ENV['PATH']}\n"
|
299
|
+
end
|
300
|
+
|
301
|
+
unless `pkg-config --libs MagickCore`[/\bl\s*(MagickCore|Magick)6?\b/]
|
302
|
+
exit_failure failure_message
|
303
|
+
end
|
299
304
|
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
305
|
+
$magick_package = determine_imagemagick_package
|
306
|
+
$magick_version = `pkg-config #{$magick_package} --modversion`[/^(\d+\.\d+\.\d+)/]
|
307
|
+
else
|
308
|
+
`#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
|
309
|
+
$magick_version = Regexp.last_match(1)
|
310
|
+
exit_failure failure_message unless $magick_version
|
311
|
+
end
|
312
|
+
|
313
|
+
# Ensure minimum ImageMagick version
|
314
|
+
# Check minimum ImageMagick version if possible
|
315
|
+
checking_for("outdated ImageMagick version (<= #{Magick::MIN_IM_VERSION})") do
|
316
|
+
Logging.message("Detected ImageMagick version: #{$magick_version}\n")
|
317
|
+
|
318
|
+
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
319
|
end
|
305
320
|
end
|
306
321
|
|
307
322
|
def create_header_file
|
308
|
-
[
|
323
|
+
ruby_api = [
|
324
|
+
'rb_gc_adjust_memory_usage' # Ruby 2.4.0
|
325
|
+
]
|
326
|
+
memory_api = %w[
|
327
|
+
posix_memalign
|
328
|
+
malloc_usable_size
|
329
|
+
malloc_size
|
330
|
+
_aligned_msize
|
331
|
+
]
|
332
|
+
imagemagick_api = [
|
309
333
|
'GetImageChannelEntropy', # 6.9.0-0
|
310
|
-
'SetImageGray' # 6.9.1-10
|
311
|
-
|
334
|
+
'SetImageGray', # 6.9.1-10
|
335
|
+
'SetMagickAlignedMemoryMethods' # 7.0.9-0
|
336
|
+
]
|
337
|
+
|
338
|
+
check_api = ruby_api + memory_api + imagemagick_api
|
339
|
+
check_api.each do |func|
|
312
340
|
have_func(func, headers)
|
313
341
|
end
|
314
342
|
|
343
|
+
unless have_header('malloc.h')
|
344
|
+
have_header('malloc/malloc.h')
|
345
|
+
end
|
346
|
+
|
315
347
|
# Miscellaneous constants
|
316
348
|
$defs.push("-DRUBY_VERSION_STRING=\"ruby #{RUBY_VERSION}\"")
|
317
349
|
$defs.push("-DRMAGICK_VERSION_STRING=\"RMagick #{RMAGICK_VERS}\"")
|
318
350
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
351
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9=1') if im_version_at_least?('6.8.9')
|
352
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0=1') if im_version_at_least?('6.9.0')
|
353
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_6_9_10=1') if im_version_at_least?('6.9.10')
|
354
|
+
$defs.push('-DIMAGEMAGICK_7=1') if im_version_at_least?('7.0.0')
|
355
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_8=1') if im_version_at_least?('7.0.8')
|
356
|
+
$defs.push('-DIMAGEMAGICK_GREATER_THAN_EQUAL_7_0_10=1') if im_version_at_least?('7.0.10')
|
325
357
|
|
326
358
|
create_header
|
327
359
|
end
|
@@ -333,24 +365,36 @@ END_MINGW
|
|
333
365
|
$defs = []
|
334
366
|
|
335
367
|
# Force re-compilation if the generated Makefile changed.
|
336
|
-
$config_h = 'Makefile
|
368
|
+
$config_h = 'Makefile'
|
337
369
|
|
338
370
|
create_makefile('RMagick2')
|
339
371
|
print_summary
|
340
372
|
end
|
341
373
|
|
342
|
-
def
|
343
|
-
|
374
|
+
def magick_command
|
375
|
+
@magick_command ||= if find_executable('magick')
|
376
|
+
'magick'
|
377
|
+
elsif find_executable('identify')
|
378
|
+
'identify'
|
379
|
+
else
|
380
|
+
raise NotImplementedError, "no executable found for ImageMagick"
|
381
|
+
end
|
382
|
+
end
|
344
383
|
|
384
|
+
def im_version_at_least?(version)
|
385
|
+
Gem::Version.new($magick_version) >= Gem::Version.new(version)
|
386
|
+
end
|
345
387
|
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
#{
|
388
|
+
def print_summary
|
389
|
+
summary = <<~"END_SUMMARY"
|
390
|
+
#{'=' * 70}
|
391
|
+
#{Time.now.strftime('%a %d %b %y %T')}
|
392
|
+
This installation of RMagick #{RMAGICK_VERS} is configured for
|
393
|
+
Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM}) and ImageMagick #{$magick_version}
|
394
|
+
#{'=' * 70}
|
351
395
|
|
352
396
|
|
353
|
-
END_SUMMARY
|
397
|
+
END_SUMMARY
|
354
398
|
|
355
399
|
Logging.message summary
|
356
400
|
message summary
|