rmagick 2.13.2 → 4.2.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

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