rmagick 4.1.0.rc2 → 4.1.0

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

Potentially problematic release.


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

Files changed (412) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +3 -0
  4. data/.github/workflows/ci.yml +148 -0
  5. data/.gitignore +3 -1
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +24 -0
  8. data/.rubocop_todo.yml +80 -270
  9. data/.yardopts +5 -0
  10. data/CHANGELOG.md +63 -0
  11. data/CONTRIBUTING.md +14 -10
  12. data/README.md +292 -0
  13. data/Rakefile +16 -22
  14. data/before_install_linux.sh +22 -32
  15. data/before_install_osx.sh +56 -2
  16. data/ext/RMagick/extconf.rb +100 -94
  17. data/ext/RMagick/rmagick.c +77 -104
  18. data/ext/RMagick/rmagick.h +74 -70
  19. data/ext/RMagick/rmdraw.c +261 -444
  20. data/ext/RMagick/rmenum.c +96 -113
  21. data/ext/RMagick/rmfill.c +46 -77
  22. data/ext/RMagick/rmilist.c +136 -244
  23. data/ext/RMagick/rmimage.c +3395 -4166
  24. data/ext/RMagick/rminfo.c +531 -737
  25. data/ext/RMagick/rmkinfo.c +21 -87
  26. data/ext/RMagick/rmmain.c +405 -245
  27. data/ext/RMagick/rmmontage.c +60 -126
  28. data/ext/RMagick/rmpixel.c +401 -345
  29. data/ext/RMagick/rmstruct.c +62 -88
  30. data/ext/RMagick/rmutil.c +112 -218
  31. data/lib/rmagick/version.rb +1 -1
  32. data/lib/rmagick_internal.rb +128 -77
  33. data/lib/rvg/clippath.rb +2 -1
  34. data/lib/rvg/container.rb +10 -5
  35. data/lib/rvg/describable.rb +1 -1
  36. data/lib/rvg/embellishable.rb +5 -4
  37. data/lib/rvg/misc.rb +15 -12
  38. data/lib/rvg/paint.rb +2 -1
  39. data/lib/rvg/pathdata.rb +12 -11
  40. data/lib/rvg/rvg.rb +8 -4
  41. data/lib/rvg/stylable.rb +9 -7
  42. data/lib/rvg/text.rb +11 -6
  43. data/lib/rvg/transformable.rb +3 -2
  44. data/lib/rvg/units.rb +1 -1
  45. data/rmagick.gemspec +7 -6
  46. metadata +31 -421
  47. data/.appveyor.yml +0 -57
  48. data/.circleci/config.yml +0 -56
  49. data/.ruby-version +0 -1
  50. data/.simplecov +0 -27
  51. data/.travis.yml +0 -64
  52. data/Doxyfile +0 -1514
  53. data/README.textile +0 -259
  54. data/benchmarks/memory/README.md +0 -50
  55. data/benchmarks/memory/image_new.rb +0 -8
  56. data/benchmarks/memory/rmagick.gnuplot +0 -16
  57. data/doc/.cvsignore +0 -1
  58. data/doc/comtasks.html +0 -287
  59. data/doc/constants.html +0 -1581
  60. data/doc/css/doc.css +0 -299
  61. data/doc/css/popup.css +0 -34
  62. data/doc/css/ref.css +0 -67
  63. data/doc/draw.html +0 -3272
  64. data/doc/ex/InitialCoords.rb +0 -22
  65. data/doc/ex/NewCoordSys.rb +0 -30
  66. data/doc/ex/OrigCoordSys.rb +0 -16
  67. data/doc/ex/PreserveAspectRatio.rb +0 -204
  68. data/doc/ex/RotateScale.rb +0 -36
  69. data/doc/ex/Skew.rb +0 -38
  70. data/doc/ex/Use01.rb +0 -15
  71. data/doc/ex/Use02.rb +0 -20
  72. data/doc/ex/Use03.rb +0 -16
  73. data/doc/ex/ViewBox.rb +0 -31
  74. data/doc/ex/adaptive_threshold.rb +0 -9
  75. data/doc/ex/add_noise.rb +0 -16
  76. data/doc/ex/affine.rb +0 -48
  77. data/doc/ex/affine_transform.rb +0 -20
  78. data/doc/ex/arc.rb +0 -49
  79. data/doc/ex/arcpath.rb +0 -32
  80. data/doc/ex/arcs01.rb +0 -28
  81. data/doc/ex/arcs02.rb +0 -59
  82. data/doc/ex/average.rb +0 -15
  83. data/doc/ex/axes.rb +0 -64
  84. data/doc/ex/baseline_shift01.rb +0 -17
  85. data/doc/ex/bilevel_channel.rb +0 -8
  86. data/doc/ex/blur_image.rb +0 -12
  87. data/doc/ex/border.rb +0 -10
  88. data/doc/ex/bounding_box.rb +0 -42
  89. data/doc/ex/cbezier1.rb +0 -41
  90. data/doc/ex/cbezier2.rb +0 -41
  91. data/doc/ex/cbezier3.rb +0 -41
  92. data/doc/ex/cbezier4.rb +0 -42
  93. data/doc/ex/cbezier5.rb +0 -42
  94. data/doc/ex/cbezier6.rb +0 -53
  95. data/doc/ex/channel.rb +0 -25
  96. data/doc/ex/charcoal.rb +0 -12
  97. data/doc/ex/chop.rb +0 -29
  98. data/doc/ex/circle.rb +0 -33
  99. data/doc/ex/circle01.rb +0 -16
  100. data/doc/ex/clip_path.rb +0 -60
  101. data/doc/ex/coalesce.rb +0 -57
  102. data/doc/ex/color_fill_to_border.rb +0 -29
  103. data/doc/ex/color_floodfill.rb +0 -28
  104. data/doc/ex/color_histogram.rb +0 -47
  105. data/doc/ex/color_reset.rb +0 -11
  106. data/doc/ex/colorize.rb +0 -16
  107. data/doc/ex/colors.rb +0 -64
  108. data/doc/ex/compose_mask.rb +0 -22
  109. data/doc/ex/composite.rb +0 -133
  110. data/doc/ex/composite_layers.rb +0 -52
  111. data/doc/ex/composite_tiled.rb +0 -21
  112. data/doc/ex/contrast.rb +0 -36
  113. data/doc/ex/crop.rb +0 -31
  114. data/doc/ex/crop_with_gravity.rb +0 -42
  115. data/doc/ex/cubic01.rb +0 -43
  116. data/doc/ex/cubic02.rb +0 -91
  117. data/doc/ex/cycle_colormap.rb +0 -21
  118. data/doc/ex/dissolve.rb +0 -12
  119. data/doc/ex/drawcomp.rb +0 -41
  120. data/doc/ex/drop_shadow.rb +0 -60
  121. data/doc/ex/edge.rb +0 -11
  122. data/doc/ex/ellipse.rb +0 -45
  123. data/doc/ex/ellipse01.rb +0 -21
  124. data/doc/ex/emboss.rb +0 -11
  125. data/doc/ex/enhance.rb +0 -28
  126. data/doc/ex/equalize.rb +0 -11
  127. data/doc/ex/evenodd.rb +0 -42
  128. data/doc/ex/fill_pattern.rb +0 -23
  129. data/doc/ex/flatten_images.rb +0 -36
  130. data/doc/ex/flip.rb +0 -11
  131. data/doc/ex/flop.rb +0 -11
  132. data/doc/ex/font_styles.rb +0 -32
  133. data/doc/ex/fonts.rb +0 -16
  134. data/doc/ex/frame.rb +0 -12
  135. data/doc/ex/gaussian_blur.rb +0 -11
  136. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  137. data/doc/ex/get_pixels.rb +0 -45
  138. data/doc/ex/get_type_metrics.rb +0 -142
  139. data/doc/ex/gradientfill.rb +0 -27
  140. data/doc/ex/grav.rb +0 -45
  141. data/doc/ex/gravity.rb +0 -78
  142. data/doc/ex/group.rb +0 -26
  143. data/doc/ex/hatchfill.rb +0 -27
  144. data/doc/ex/image.rb +0 -44
  145. data/doc/ex/images/Apple.miff +0 -0
  146. data/doc/ex/images/Ballerina.jpg +0 -0
  147. data/doc/ex/images/Ballerina3.jpg +0 -0
  148. data/doc/ex/images/Button_0.gif +0 -0
  149. data/doc/ex/images/Button_1.gif +0 -0
  150. data/doc/ex/images/Button_2.gif +0 -0
  151. data/doc/ex/images/Button_3.gif +0 -0
  152. data/doc/ex/images/Button_4.gif +0 -0
  153. data/doc/ex/images/Button_5.gif +0 -0
  154. data/doc/ex/images/Button_6.gif +0 -0
  155. data/doc/ex/images/Button_7.gif +0 -0
  156. data/doc/ex/images/Button_8.gif +0 -0
  157. data/doc/ex/images/Button_9.gif +0 -0
  158. data/doc/ex/images/Button_A.gif +0 -0
  159. data/doc/ex/images/Button_B.gif +0 -0
  160. data/doc/ex/images/Button_C.gif +0 -0
  161. data/doc/ex/images/Button_D.gif +0 -0
  162. data/doc/ex/images/Button_E.gif +0 -0
  163. data/doc/ex/images/Button_F.gif +0 -0
  164. data/doc/ex/images/Button_G.gif +0 -0
  165. data/doc/ex/images/Button_H.gif +0 -0
  166. data/doc/ex/images/Button_I.gif +0 -0
  167. data/doc/ex/images/Button_J.gif +0 -0
  168. data/doc/ex/images/Button_K.gif +0 -0
  169. data/doc/ex/images/Button_L.gif +0 -0
  170. data/doc/ex/images/Button_M.gif +0 -0
  171. data/doc/ex/images/Button_N.gif +0 -0
  172. data/doc/ex/images/Button_O.gif +0 -0
  173. data/doc/ex/images/Button_P.gif +0 -0
  174. data/doc/ex/images/Button_Q.gif +0 -0
  175. data/doc/ex/images/Button_R.gif +0 -0
  176. data/doc/ex/images/Button_S.gif +0 -0
  177. data/doc/ex/images/Button_T.gif +0 -0
  178. data/doc/ex/images/Button_U.gif +0 -0
  179. data/doc/ex/images/Button_V.gif +0 -0
  180. data/doc/ex/images/Button_W.gif +0 -0
  181. data/doc/ex/images/Button_X.gif +0 -0
  182. data/doc/ex/images/Button_Y.gif +0 -0
  183. data/doc/ex/images/Button_Z.gif +0 -0
  184. data/doc/ex/images/Cheetah.jpg +0 -0
  185. data/doc/ex/images/Coffee.png +0 -0
  186. data/doc/ex/images/Flower_Hat.jpg +0 -0
  187. data/doc/ex/images/Gold_Statue.jpg +0 -0
  188. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  189. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  190. data/doc/ex/images/Leaf.miff +0 -0
  191. data/doc/ex/images/No.png +0 -0
  192. data/doc/ex/images/Polynesia.jpg +0 -0
  193. data/doc/ex/images/Red_Rocks.jpg +0 -0
  194. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  195. data/doc/ex/images/Shorts.jpg +0 -0
  196. data/doc/ex/images/Snake.png +0 -0
  197. data/doc/ex/images/Violin.jpg +0 -0
  198. data/doc/ex/images/Yellow_Rose.miff +0 -0
  199. data/doc/ex/images/big-duck.gif +0 -0
  200. data/doc/ex/images/duck.gif +0 -0
  201. data/doc/ex/images/duck0.gif +0 -0
  202. data/doc/ex/images/duck1.gif +0 -0
  203. data/doc/ex/images/duck10.gif +0 -0
  204. data/doc/ex/images/duck11.gif +0 -0
  205. data/doc/ex/images/duck12.gif +0 -0
  206. data/doc/ex/images/duck13.gif +0 -0
  207. data/doc/ex/images/duck14.gif +0 -0
  208. data/doc/ex/images/duck15.gif +0 -0
  209. data/doc/ex/images/duck2.gif +0 -0
  210. data/doc/ex/images/duck3.gif +0 -0
  211. data/doc/ex/images/duck4.gif +0 -0
  212. data/doc/ex/images/duck5.gif +0 -0
  213. data/doc/ex/images/duck6.gif +0 -0
  214. data/doc/ex/images/duck7.gif +0 -0
  215. data/doc/ex/images/duck8.gif +0 -0
  216. data/doc/ex/images/duck9.gif +0 -0
  217. data/doc/ex/images/graydient230x6.gif +0 -0
  218. data/doc/ex/images/image_with_profile.jpg +0 -0
  219. data/doc/ex/images/logo400x83.gif +0 -0
  220. data/doc/ex/images/model.miff +0 -0
  221. data/doc/ex/images/notimplemented.gif +0 -0
  222. data/doc/ex/images/smile.miff +0 -0
  223. data/doc/ex/images/spin.gif +0 -0
  224. data/doc/ex/implode.rb +0 -34
  225. data/doc/ex/level.rb +0 -11
  226. data/doc/ex/level_colors.rb +0 -11
  227. data/doc/ex/line.rb +0 -41
  228. data/doc/ex/line01.rb +0 -21
  229. data/doc/ex/mask.rb +0 -35
  230. data/doc/ex/matte_fill_to_border.rb +0 -39
  231. data/doc/ex/matte_floodfill.rb +0 -32
  232. data/doc/ex/matte_replace.rb +0 -39
  233. data/doc/ex/median_filter.rb +0 -28
  234. data/doc/ex/modulate.rb +0 -11
  235. data/doc/ex/mono.rb +0 -23
  236. data/doc/ex/morph.rb +0 -25
  237. data/doc/ex/mosaic.rb +0 -37
  238. data/doc/ex/motion_blur.rb +0 -11
  239. data/doc/ex/negate.rb +0 -11
  240. data/doc/ex/negate_channel.rb +0 -9
  241. data/doc/ex/nested_rvg.rb +0 -21
  242. data/doc/ex/nonzero.rb +0 -42
  243. data/doc/ex/normalize.rb +0 -11
  244. data/doc/ex/oil_paint.rb +0 -11
  245. data/doc/ex/opacity.rb +0 -37
  246. data/doc/ex/ordered_dither.rb +0 -11
  247. data/doc/ex/path.rb +0 -63
  248. data/doc/ex/pattern1.rb +0 -25
  249. data/doc/ex/pattern2.rb +0 -26
  250. data/doc/ex/polaroid.rb +0 -26
  251. data/doc/ex/polygon.rb +0 -23
  252. data/doc/ex/polygon01.rb +0 -21
  253. data/doc/ex/polyline.rb +0 -22
  254. data/doc/ex/polyline01.rb +0 -21
  255. data/doc/ex/posterize.rb +0 -8
  256. data/doc/ex/preview.rb +0 -8
  257. data/doc/ex/qbezierpath.rb +0 -52
  258. data/doc/ex/quad01.rb +0 -34
  259. data/doc/ex/quantize-m.rb +0 -25
  260. data/doc/ex/radial_blur.rb +0 -9
  261. data/doc/ex/raise.rb +0 -8
  262. data/doc/ex/random_threshold_channel.rb +0 -13
  263. data/doc/ex/rect01.rb +0 -14
  264. data/doc/ex/rect02.rb +0 -20
  265. data/doc/ex/rectangle.rb +0 -34
  266. data/doc/ex/reduce_noise.rb +0 -28
  267. data/doc/ex/remap.rb +0 -11
  268. data/doc/ex/remap_images.rb +0 -19
  269. data/doc/ex/resize_to_fill.rb +0 -8
  270. data/doc/ex/resize_to_fit.rb +0 -8
  271. data/doc/ex/roll.rb +0 -9
  272. data/doc/ex/rotate.rb +0 -44
  273. data/doc/ex/rotate_f.rb +0 -14
  274. data/doc/ex/roundrect.rb +0 -33
  275. data/doc/ex/rubyname.rb +0 -30
  276. data/doc/ex/rvg_clippath.rb +0 -12
  277. data/doc/ex/rvg_linecap.rb +0 -42
  278. data/doc/ex/rvg_linejoin.rb +0 -40
  279. data/doc/ex/rvg_opacity.rb +0 -18
  280. data/doc/ex/rvg_pattern.rb +0 -26
  281. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  282. data/doc/ex/segment.rb +0 -11
  283. data/doc/ex/sepiatone.rb +0 -7
  284. data/doc/ex/shade.rb +0 -11
  285. data/doc/ex/shadow.rb +0 -30
  286. data/doc/ex/shave.rb +0 -15
  287. data/doc/ex/shear.rb +0 -10
  288. data/doc/ex/sketch.rb +0 -17
  289. data/doc/ex/skewx.rb +0 -51
  290. data/doc/ex/skewy.rb +0 -47
  291. data/doc/ex/smile.rb +0 -126
  292. data/doc/ex/solarize.rb +0 -11
  293. data/doc/ex/sparse_color.rb +0 -55
  294. data/doc/ex/splice.rb +0 -8
  295. data/doc/ex/spread.rb +0 -11
  296. data/doc/ex/stegano.rb +0 -54
  297. data/doc/ex/stroke_dasharray.rb +0 -42
  298. data/doc/ex/stroke_fill.rb +0 -10
  299. data/doc/ex/stroke_linecap.rb +0 -44
  300. data/doc/ex/stroke_linejoin.rb +0 -48
  301. data/doc/ex/stroke_width.rb +0 -49
  302. data/doc/ex/swirl.rb +0 -17
  303. data/doc/ex/text.rb +0 -37
  304. data/doc/ex/text01.rb +0 -16
  305. data/doc/ex/text_align.rb +0 -36
  306. data/doc/ex/text_antialias.rb +0 -37
  307. data/doc/ex/text_styles.rb +0 -19
  308. data/doc/ex/text_undercolor.rb +0 -28
  309. data/doc/ex/texture_fill_to_border.rb +0 -34
  310. data/doc/ex/texture_floodfill.rb +0 -32
  311. data/doc/ex/texturefill.rb +0 -24
  312. data/doc/ex/threshold.rb +0 -13
  313. data/doc/ex/to_blob.rb +0 -13
  314. data/doc/ex/translate.rb +0 -39
  315. data/doc/ex/transparent.rb +0 -38
  316. data/doc/ex/transpose.rb +0 -9
  317. data/doc/ex/transverse.rb +0 -9
  318. data/doc/ex/tref01.rb +0 -24
  319. data/doc/ex/triangle01.rb +0 -15
  320. data/doc/ex/trim.rb +0 -23
  321. data/doc/ex/tspan01.rb +0 -17
  322. data/doc/ex/tspan02.rb +0 -17
  323. data/doc/ex/tspan03.rb +0 -19
  324. data/doc/ex/unsharp_mask.rb +0 -28
  325. data/doc/ex/viewex.rb +0 -33
  326. data/doc/ex/vignette.rb +0 -12
  327. data/doc/ex/watermark.rb +0 -27
  328. data/doc/ex/wave.rb +0 -9
  329. data/doc/ex/wet_floor.rb +0 -58
  330. data/doc/ex/writing_mode01.rb +0 -26
  331. data/doc/ex/writing_mode02.rb +0 -26
  332. data/doc/ilist.html +0 -2056
  333. data/doc/image1.html +0 -4680
  334. data/doc/image2.html +0 -3665
  335. data/doc/image3.html +0 -4522
  336. data/doc/imageattrs.html +0 -1638
  337. data/doc/imusage.html +0 -514
  338. data/doc/index.html +0 -416
  339. data/doc/info.html +0 -1499
  340. data/doc/magick.html +0 -570
  341. data/doc/optequiv.html +0 -2435
  342. data/doc/rvg.html +0 -975
  343. data/doc/rvgclip.html +0 -248
  344. data/doc/rvggroup.html +0 -305
  345. data/doc/rvgimage.html +0 -289
  346. data/doc/rvgpattern.html +0 -475
  347. data/doc/rvgshape.html +0 -406
  348. data/doc/rvgstyle.html +0 -270
  349. data/doc/rvgtext.html +0 -465
  350. data/doc/rvgtspan.html +0 -238
  351. data/doc/rvgtut.html +0 -530
  352. data/doc/rvguse.html +0 -145
  353. data/doc/rvgxform.html +0 -294
  354. data/doc/scripts/doc.js +0 -22
  355. data/doc/scripts/stripeTables.js +0 -23
  356. data/doc/struct.html +0 -1339
  357. data/doc/usage.html +0 -1621
  358. data/examples/constitute.rb +0 -7
  359. data/examples/crop_with_gravity.rb +0 -43
  360. data/examples/demo.rb +0 -323
  361. data/examples/describe.rb +0 -41
  362. data/examples/find_similar_region.rb +0 -34
  363. data/examples/histogram.rb +0 -312
  364. data/examples/identify.rb +0 -174
  365. data/examples/image_opacity.rb +0 -28
  366. data/examples/import_export.rb +0 -31
  367. data/examples/pattern_fill.rb +0 -37
  368. data/examples/rotating_text.rb +0 -45
  369. data/examples/spinner.rb +0 -49
  370. data/examples/thumbnail.rb +0 -64
  371. data/examples/vignette.rb +0 -78
  372. data/spec/rmagick/ImageList1_spec.rb +0 -24
  373. data/spec/rmagick/draw_spec.rb +0 -155
  374. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  375. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  376. data/spec/rmagick/image/composite_spec.rb +0 -72
  377. data/spec/rmagick/image/constitute_spec.rb +0 -13
  378. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  379. data/spec/rmagick/image/dissolve_spec.rb +0 -54
  380. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  381. data/spec/rmagick/image/ping_spec.rb +0 -12
  382. data/spec/rmagick/image/properties_spec.rb +0 -27
  383. data/spec/rmagick/image/read_spec.rb +0 -28
  384. data/spec/spec_helper.rb +0 -9
  385. data/spec/support/issue_200/app.rb +0 -8
  386. data/test/Draw.rb +0 -351
  387. data/test/Enum.rb +0 -228
  388. data/test/Fill.rb +0 -93
  389. data/test/Image1.rb +0 -606
  390. data/test/Image2.rb +0 -1408
  391. data/test/Image3.rb +0 -1086
  392. data/test/ImageList1.rb +0 -858
  393. data/test/ImageList2.rb +0 -375
  394. data/test/Image_attributes.rb +0 -635
  395. data/test/Import_Export.rb +0 -111
  396. data/test/Info.rb +0 -436
  397. data/test/KernelInfo.rb +0 -59
  398. data/test/Magick.rb +0 -311
  399. data/test/Pixel.rb +0 -259
  400. data/test/PolaroidOptions.rb +0 -23
  401. data/test/Preview.rb +0 -26
  402. data/test/Struct.rb +0 -45
  403. data/test/appearance/Montage.rb +0 -26
  404. data/test/appearance/appearance_assertion.rb +0 -13
  405. data/test/appearance/expected/montage_border_color.jpg +0 -0
  406. data/test/cmyk.icm +0 -0
  407. data/test/lib/internal/Draw.rb +0 -811
  408. data/test/lib/internal/Geometry.rb +0 -98
  409. data/test/lib/internal/Magick.rb +0 -40
  410. data/test/srgb.icm +0 -0
  411. data/test/test_all_basic.rb +0 -49
  412. data/test/tmpnam_test.rb +0 -50
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env bash
2
+
1
3
  set -euox pipefail
2
4
 
3
5
  gem install bundler
@@ -13,66 +15,54 @@ if [ ! -v IMAGEMAGICK_VERSION ]; then
13
15
  exit 1
14
16
  fi
15
17
 
18
+ sudo apt-get clean
19
+ sudo apt-get update
20
+
16
21
  # remove all existing imagemagick related packages
17
22
  sudo apt-get autoremove -y imagemagick* libmagick* --purge
18
23
 
19
- if [ ! -v TRAVIS ]; then
20
- sudo apt-get update
21
-
22
- # install build tools, ImageMagick delegates
23
- sudo apt-get install -y build-essential libx11-dev libxext-dev zlib1g-dev \
24
- liblcms2-dev libpng-dev libjpeg-dev libfreetype6-dev libxml2-dev \
25
- libtiff5-dev libwebp-dev vim ghostscript ccache
26
- fi
24
+ # install build tools, ImageMagick delegates
25
+ sudo apt-get install -y build-essential libx11-dev libxext-dev zlib1g-dev \
26
+ liblcms2-dev libpng-dev libjpeg-dev libfreetype6-dev libxml2-dev \
27
+ libtiff5-dev libwebp-dev vim gsfonts ghostscript ccache
27
28
 
28
29
  if [ ! -d /usr/include/freetype ]; then
29
30
  # If `/usr/include/freetype` is not existed, ImageMagick 6.7 configuration fails about Freetype.
30
31
  sudo ln -sf /usr/include/freetype2 /usr/include/freetype
31
32
  fi
32
33
 
33
- project_dir=`pwd`
34
- build_dir=${project_dir}/build-ImageMagick/ImageMagick-${IMAGEMAGICK_VERSION}
34
+ project_dir=$(pwd)
35
+ build_dir="${project_dir}/build-ImageMagick/ImageMagick-${IMAGEMAGICK_VERSION}"
35
36
  if [ -v CONFIGURE_OPTIONS ]; then
36
- build_dir=${build_dir}-${CONFIGURE_OPTIONS}
37
+ build_dir="${build_dir}-${CONFIGURE_OPTIONS}"
37
38
  fi
38
39
 
39
40
  build_imagemagick() {
40
41
  mkdir -p build-ImageMagick
41
42
 
42
43
  version=(${IMAGEMAGICK_VERSION//./ })
43
- if (( "${version[0]}" >= 7 )); then
44
- wget https://github.com/ImageMagick/ImageMagick/archive/${IMAGEMAGICK_VERSION}.tar.gz
45
- tar -xf ${IMAGEMAGICK_VERSION}.tar.gz
46
- mv ImageMagick-${IMAGEMAGICK_VERSION} $build_dir
47
- elif (( "${version[0]}${version[1]}" >= 69 )); then
48
- wget https://github.com/ImageMagick/ImageMagick6/archive/${IMAGEMAGICK_VERSION}.tar.gz
49
- tar -xf ${IMAGEMAGICK_VERSION}.tar.gz
50
- rm ${IMAGEMAGICK_VERSION}.tar.gz
51
- mv ImageMagick6-${IMAGEMAGICK_VERSION} $build_dir
52
- else
53
- wget https://www.imagemagick.org/download/releases/ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz
54
- tar -xf ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz
55
- rm ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz
56
- mv ImageMagick-${IMAGEMAGICK_VERSION} $build_dir
57
- fi
44
+ wget "https://imagemagick.org/download/releases/ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz"
45
+ tar -xf "ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz"
46
+ rm "ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz"
47
+ mv "ImageMagick-${IMAGEMAGICK_VERSION}" "${build_dir}"
58
48
 
59
49
  options="--with-magick-plus-plus=no --disable-docs"
60
50
  if [ -v CONFIGURE_OPTIONS ]; then
61
- options="${CONFIGURE_OPTIONS} $options"
51
+ options="${CONFIGURE_OPTIONS} ${options}"
62
52
  fi
63
53
 
64
- cd $build_dir
65
- CC="ccache cc" CXX="ccache c++" ./configure --prefix=/usr $options
54
+ cd "${build_dir}"
55
+ CC="ccache cc" CXX="ccache c++" ./configure --prefix=/usr "${options}"
66
56
  make -j
67
57
  }
68
58
 
69
- if [ ! -d $build_dir ]; then
59
+ if [ ! -d "${build_dir}" ]; then
70
60
  build_imagemagick
71
61
  fi
72
62
 
73
- cd $build_dir
63
+ cd "${build_dir}"
74
64
  sudo make install -j
75
- cd $project_dir
65
+ cd "${project_dir}"
76
66
 
77
67
  sudo ldconfig
78
68
 
@@ -1,2 +1,56 @@
1
- brew update
2
- brew install imagemagick
1
+ #!/usr/bin/env bash
2
+
3
+ set -euox pipefail
4
+
5
+ gem install bundler
6
+
7
+ if [ -v STYLE_CHECKS ]; then
8
+ set +ux
9
+ exit 0
10
+ fi
11
+
12
+ if [ ! -v IMAGEMAGICK_VERSION ]; then
13
+ echo "you must specify an ImageMagick version."
14
+ echo "example: 'IMAGEMAGICK_VERSION=6.8.9-10 bash ./before_install_osx.sh'"
15
+ exit 1
16
+ fi
17
+
18
+ brew install wget pkg-config ghostscript freetype jpeg little-cms2 libomp libpng libtiff libtool libxml2 zlib webp
19
+
20
+ export LDFLAGS="-L/usr/local/opt/libxml2/lib -L/usr/local/opt/zlib/li"
21
+ export CPPFLAGS="-I/usr/local/opt/libxml2/include/libxml2 -I/usr/local/opt/zlib/include"
22
+
23
+ project_dir=$(pwd)
24
+ build_dir="${project_dir}/build-ImageMagick/ImageMagick-${IMAGEMAGICK_VERSION}"
25
+ if [ -v CONFIGURE_OPTIONS ]; then
26
+ build_dir="${build_dir}-${CONFIGURE_OPTIONS}"
27
+ fi
28
+
29
+ build_imagemagick() {
30
+ mkdir -p build-ImageMagick
31
+
32
+ version=(${IMAGEMAGICK_VERSION//./ })
33
+ wget "https://imagemagick.org/download/releases/ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz"
34
+ tar -xf "ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz"
35
+ rm "ImageMagick-${IMAGEMAGICK_VERSION}.tar.xz"
36
+ mv "ImageMagick-${IMAGEMAGICK_VERSION}" "${build_dir}"
37
+
38
+ options="--with-magick-plus-plus=no --disable-docs"
39
+ if [ -v CONFIGURE_OPTIONS ]; then
40
+ options="${CONFIGURE_OPTIONS} ${options}"
41
+ fi
42
+
43
+ cd "${build_dir}"
44
+ ./configure --prefix=/usr/local "${options}"
45
+ make -j
46
+ }
47
+
48
+ if [ ! -d "${build_dir}" ]; then
49
+ build_imagemagick
50
+ fi
51
+
52
+ cd "${build_dir}"
53
+ make install -j
54
+ cd "${project_dir}"
55
+
56
+ set +ux
@@ -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')
@@ -64,55 +65,32 @@ module RMagick
64
65
  # Magick-config is not available on Windows
65
66
  if RUBY_PLATFORM !~ /mswin|mingw/
66
67
 
67
- # Check for compiler. Extract first word so ENV['CC'] can be a program name with arguments.
68
- config = defined?(RbConfig) ? ::RbConfig : ::Config
69
- cc = (ENV['CC'] || config::CONFIG['CC'] || 'gcc').split(' ').first
70
- exit_failure "No C compiler found in ${ENV['PATH']}. See mkmf.log for details." unless find_executable(cc)
71
-
72
- magick_package = determine_imagemagick_package
73
-
74
- $magick_version = `pkg-config #{magick_package} --modversion`[/^(\d+\.\d+\.\d+)/]
75
-
76
68
  check_multiple_imagemagick_versions
77
69
  check_partial_imagemagick_versions
78
70
 
79
- # Ensure minimum ImageMagick version
80
- # Check minimum ImageMagick version if possible
81
- checking_for("outdated ImageMagick version (<= #{Magick::MIN_IM_VERSION})") do
82
- Logging.message("Detected ImageMagick version: #{$magick_version}\n")
83
-
84
- 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)
85
- end
86
-
87
71
  # Save flags
88
- $CFLAGS = ENV['CFLAGS'].to_s + ' ' + `pkg-config --cflags #{magick_package}`.chomp
89
- $CPPFLAGS = ENV['CPPFLAGS'].to_s + ' ' + `pkg-config --cflags #{magick_package}`.chomp
90
- $LDFLAGS = ENV['LDFLAGS'].to_s + ' ' + `pkg-config --libs #{magick_package}`.chomp
91
- $LOCAL_LIBS = ENV['LIBS'].to_s + ' ' + `pkg-config --libs #{magick_package}`.chomp
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
92
76
 
93
- set_archflags_for_osx if RUBY_PLATFORM =~ /darwin/ # osx
77
+ configure_archflags_for_osx($magick_package) if RUBY_PLATFORM =~ /darwin/ # osx
94
78
 
95
79
  elsif RUBY_PLATFORM =~ /mingw/ # mingw
96
80
 
97
- `#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
98
- abort 'Unable to get ImageMagick version' unless Regexp.last_match(1)
99
- $magick_version = Regexp.last_match(1)
100
-
101
81
  dir_paths = search_paths_for_library_for_windows
102
82
  $CPPFLAGS = %(-I"#{dir_paths[:include]}")
103
83
  $LDFLAGS = %(-L"#{dir_paths[:lib]}")
84
+ $LDFLAGS << ' -lucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
104
85
 
105
86
  have_library(im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_' : 'CORE_RL_magick_')
106
87
 
107
88
  else # mswin
108
89
 
109
- `#{magick_command} -version` =~ /Version: ImageMagick (\d+\.\d+\.\d+)-+\d+ /
110
- abort 'Unable to get ImageMagick version' unless Regexp.last_match(1)
111
- $magick_version = Regexp.last_match(1)
112
-
113
90
  dir_paths = search_paths_for_library_for_windows
114
91
  $CPPFLAGS << %( -I"#{dir_paths[:include]}")
115
92
  $LDFLAGS << %( -libpath:"#{dir_paths[:lib]}")
93
+ $LDFLAGS << ' -libpath:ucrt' if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
116
94
 
117
95
  $LOCAL_LIBS = im_version_at_least?('7.0.0') ? 'CORE_RL_MagickCore_.lib' : 'CORE_RL_magick_.lib'
118
96
 
@@ -121,30 +99,6 @@ module RMagick
121
99
  $CFLAGS << (have_macro('__GNUC__') ? ' -std=gnu99' : ' -std=c99')
122
100
  end
123
101
 
124
- # Test for a specific value in an enum type
125
- def have_enum_value(enum, value, headers = nil, &b)
126
- checking_for "#{enum}.#{value}" do
127
- if try_compile(<<"SRC", &b)
128
- #{COMMON_HEADERS}
129
- #{cpp_include(headers)}
130
- /*top*/
131
- int main() { #{enum} t = #{value}; t = t; return 0; }
132
- SRC
133
- $defs.push(format('-DHAVE_ENUM_%s', value.upcase))
134
- true
135
- else
136
- false
137
- end
138
- end
139
- end
140
-
141
- # Test for multiple values of the same enum type
142
- def have_enum_values(enum, values, headers = nil, &b)
143
- values.each do |value|
144
- have_enum_value(enum, value, headers, &b)
145
- end
146
- end
147
-
148
102
  def exit_failure(msg)
149
103
  msg = "ERROR: #{msg}"
150
104
 
@@ -163,10 +117,6 @@ SRC
163
117
  end
164
118
 
165
119
  def determine_imagemagick_package
166
- unless find_executable('pkg-config')
167
- exit_failure "Can't install RMagick #{RMAGICK_VERS}. Can't find pkg-config in #{ENV['PATH']}\n"
168
- end
169
-
170
120
  packages = `pkg-config --list-all`.scan(/(ImageMagick\-[\.A-Z0-9]+) .*/).flatten
171
121
 
172
122
  # For ancient version of ImageMagick 6 we need a different regex
@@ -245,21 +195,33 @@ SRC
245
195
  matches.delete_if(&:empty?)
246
196
  return unless !matches.empty? && matches.length < 3
247
197
 
248
- 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"
198
+ msg = <<~MESSAGE
199
+
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}
205
+
206
+ MESSAGE
207
+
249
208
  Logging.message msg
250
209
  message msg
251
210
  end
252
211
 
253
212
  # issue #169
254
213
  # set ARCHFLAGS appropriately for OSX
255
- def set_archflags_for_osx
256
- archflags = []
257
- fullpath = `which convert`
258
- fileinfo = `file #{fullpath}`
214
+ def configure_archflags_for_osx(magick_package)
215
+ return unless `pkg-config #{magick_package} --libs-only-L`.match(%r{-L(.+)/lib})
216
+
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}`
259
220
 
260
221
  # default ARCHFLAGS
261
222
  archs = $ARCH_FLAG.scan(/-arch\s+(\S+)/).flatten
262
223
 
224
+ archflags = []
263
225
  archs.each do |arch|
264
226
  archflags << "-arch #{arch}" if fileinfo.include?(arch)
265
227
  end
@@ -290,44 +252,84 @@ SRC
290
252
 
291
253
  return dir_paths if found_lib
292
254
 
293
- exit_failure <<END_MINGW
294
- Can't install RMagick #{RMAGICK_VERS}.
295
- Can't find the ImageMagick library.
296
- Retry with '--with-opt-dir' option.
297
- Usage: gem install rmagick -- '--with-opt-dir=\"[path to ImageMagick]\"'
298
- e.g.
299
- gem install rmagick -- '--with-opt-dir=\"C:\Program Files\ImageMagick-6.9.1-Q16\"'
300
- END_MINGW
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
301
263
  end
302
264
 
303
265
  def assert_can_compile!
304
266
  assert_minimum_ruby_version!
305
267
  assert_has_dev_libs!
268
+
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)
306
272
  end
307
273
 
308
274
  def assert_minimum_ruby_version!
309
- unless checking_for("Ruby version >= #{MIN_RUBY_VERS}") do
275
+ supported = checking_for("Ruby version >= #{MIN_RUBY_VERS}") do
310
276
  Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(MIN_RUBY_VERS)
311
277
  end
312
- exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n"
313
- end
278
+
279
+ exit_failure "Can't install RMagick #{RMAGICK_VERS}. Ruby #{MIN_RUBY_VERS} or later required.\n" unless supported
314
280
  end
315
281
 
316
282
  def assert_has_dev_libs!
317
- return unless RUBY_PLATFORM !~ /mswin|mingw/
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
318
293
 
319
- unless `pkg-config --libs MagickCore`[/\bl\s*(MagickCore|Magick)6?\b/]
320
- exit_failure "Can't install RMagick #{RMAGICK_VERS}. " \
321
- "Can't find the ImageMagick library or one of the dependent libraries. " \
322
- "Check the mkmf.log file for more detailed information.\n"
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
305
+
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")
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)
323
312
  end
324
313
  end
325
314
 
326
315
  def create_header_file
327
- [
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 = [
328
326
  'GetImageChannelEntropy', # 6.9.0-0
329
- 'SetImageGray' # 6.9.1-10
330
- ].each do |func|
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|
331
333
  have_func(func, headers)
332
334
  end
333
335
 
@@ -356,7 +358,13 @@ END_MINGW
356
358
  end
357
359
 
358
360
  def magick_command
359
- @magick_command ||= find_executable('magick') ? 'magick' : 'identify'
361
+ @magick_command ||= if find_executable('magick')
362
+ 'magick'
363
+ elsif find_executable('identify')
364
+ 'identify'
365
+ else
366
+ raise NotImplementedError, "no executable found for ImageMagick"
367
+ end
360
368
  end
361
369
 
362
370
  def im_version_at_least?(version)
@@ -364,17 +372,15 @@ END_MINGW
364
372
  end
365
373
 
366
374
  def print_summary
367
- summary = <<"END_SUMMARY"
368
-
369
-
370
- #{'=' * 70}
371
- #{DateTime.now.strftime('%a %d %b %y %T')}
372
- This installation of RMagick #{RMAGICK_VERS} is configured for
373
- Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM}) and ImageMagick #{$magick_version}
374
- #{'=' * 70}
375
+ summary = <<~"END_SUMMARY"
376
+ #{'=' * 70}
377
+ #{Time.now.strftime('%a %d %b %y %T')}
378
+ This installation of RMagick #{RMAGICK_VERS} is configured for
379
+ Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM}) and ImageMagick #{$magick_version}
380
+ #{'=' * 70}
375
381
 
376
382
 
377
- END_SUMMARY
383
+ END_SUMMARY
378
384
 
379
385
  Logging.message summary
380
386
  message summary