image_pack 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +18 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +140 -0
  5. data/THIRD_PARTY_NOTICES.md +8 -0
  6. data/ext/image_pack/extconf.rb +515 -0
  7. data/ext/image_pack/image_pack.c +1618 -0
  8. data/ext/image_pack/vendor/.vendored +1 -0
  9. data/ext/image_pack/vendor/mozjpeg/BUILDING.txt +902 -0
  10. data/ext/image_pack/vendor/mozjpeg/CMakeLists.txt +1593 -0
  11. data/ext/image_pack/vendor/mozjpeg/LICENSE.md +132 -0
  12. data/ext/image_pack/vendor/mozjpeg/README-mozilla.txt +194 -0
  13. data/ext/image_pack/vendor/mozjpeg/README-turbo.txt +346 -0
  14. data/ext/image_pack/vendor/mozjpeg/README.ijg +258 -0
  15. data/ext/image_pack/vendor/mozjpeg/README.md +29 -0
  16. data/ext/image_pack/vendor/mozjpeg/cderror.h +128 -0
  17. data/ext/image_pack/vendor/mozjpeg/cdjpeg.c +156 -0
  18. data/ext/image_pack/vendor/mozjpeg/cdjpeg.h +171 -0
  19. data/ext/image_pack/vendor/mozjpeg/cjpeg.c +961 -0
  20. data/ext/image_pack/vendor/mozjpeg/cmyk.h +60 -0
  21. data/ext/image_pack/vendor/mozjpeg/coderules.txt +78 -0
  22. data/ext/image_pack/vendor/mozjpeg/croptest.in +95 -0
  23. data/ext/image_pack/vendor/mozjpeg/djpeg.c +855 -0
  24. data/ext/image_pack/vendor/mozjpeg/example.txt +464 -0
  25. data/ext/image_pack/vendor/mozjpeg/jaricom.c +157 -0
  26. data/ext/image_pack/vendor/mozjpeg/jcapimin.c +307 -0
  27. data/ext/image_pack/vendor/mozjpeg/jcapistd.c +168 -0
  28. data/ext/image_pack/vendor/mozjpeg/jcarith.c +972 -0
  29. data/ext/image_pack/vendor/mozjpeg/jccoefct.c +609 -0
  30. data/ext/image_pack/vendor/mozjpeg/jccolext.c +144 -0
  31. data/ext/image_pack/vendor/mozjpeg/jccolor.c +721 -0
  32. data/ext/image_pack/vendor/mozjpeg/jcdctmgr.c +1776 -0
  33. data/ext/image_pack/vendor/mozjpeg/jcext.c +219 -0
  34. data/ext/image_pack/vendor/mozjpeg/jchuff.c +1146 -0
  35. data/ext/image_pack/vendor/mozjpeg/jchuff.h +57 -0
  36. data/ext/image_pack/vendor/mozjpeg/jcicc.c +105 -0
  37. data/ext/image_pack/vendor/mozjpeg/jcinit.c +82 -0
  38. data/ext/image_pack/vendor/mozjpeg/jcmainct.c +162 -0
  39. data/ext/image_pack/vendor/mozjpeg/jcmarker.c +844 -0
  40. data/ext/image_pack/vendor/mozjpeg/jcmaster.c +958 -0
  41. data/ext/image_pack/vendor/mozjpeg/jcmaster.h +56 -0
  42. data/ext/image_pack/vendor/mozjpeg/jcomapi.c +109 -0
  43. data/ext/image_pack/vendor/mozjpeg/jconfig.h.in +37 -0
  44. data/ext/image_pack/vendor/mozjpeg/jconfig.txt +93 -0
  45. data/ext/image_pack/vendor/mozjpeg/jconfigint.h.in +44 -0
  46. data/ext/image_pack/vendor/mozjpeg/jcparam.c +991 -0
  47. data/ext/image_pack/vendor/mozjpeg/jcphuff.c +1123 -0
  48. data/ext/image_pack/vendor/mozjpeg/jcprepct.c +351 -0
  49. data/ext/image_pack/vendor/mozjpeg/jcsample.c +522 -0
  50. data/ext/image_pack/vendor/mozjpeg/jcstest.c +126 -0
  51. data/ext/image_pack/vendor/mozjpeg/jctrans.c +408 -0
  52. data/ext/image_pack/vendor/mozjpeg/jdapimin.c +407 -0
  53. data/ext/image_pack/vendor/mozjpeg/jdapistd.c +691 -0
  54. data/ext/image_pack/vendor/mozjpeg/jdarith.c +782 -0
  55. data/ext/image_pack/vendor/mozjpeg/jdatadst-tj.c +198 -0
  56. data/ext/image_pack/vendor/mozjpeg/jdatadst.c +299 -0
  57. data/ext/image_pack/vendor/mozjpeg/jdatasrc-tj.c +194 -0
  58. data/ext/image_pack/vendor/mozjpeg/jdatasrc.c +295 -0
  59. data/ext/image_pack/vendor/mozjpeg/jdcoefct.c +881 -0
  60. data/ext/image_pack/vendor/mozjpeg/jdcoefct.h +83 -0
  61. data/ext/image_pack/vendor/mozjpeg/jdcol565.c +384 -0
  62. data/ext/image_pack/vendor/mozjpeg/jdcolext.c +141 -0
  63. data/ext/image_pack/vendor/mozjpeg/jdcolor.c +881 -0
  64. data/ext/image_pack/vendor/mozjpeg/jdct.h +208 -0
  65. data/ext/image_pack/vendor/mozjpeg/jddctmgr.c +367 -0
  66. data/ext/image_pack/vendor/mozjpeg/jdhuff.c +834 -0
  67. data/ext/image_pack/vendor/mozjpeg/jdhuff.h +247 -0
  68. data/ext/image_pack/vendor/mozjpeg/jdicc.c +167 -0
  69. data/ext/image_pack/vendor/mozjpeg/jdinput.c +408 -0
  70. data/ext/image_pack/vendor/mozjpeg/jdmainct.c +460 -0
  71. data/ext/image_pack/vendor/mozjpeg/jdmainct.h +71 -0
  72. data/ext/image_pack/vendor/mozjpeg/jdmarker.c +1374 -0
  73. data/ext/image_pack/vendor/mozjpeg/jdmaster.c +727 -0
  74. data/ext/image_pack/vendor/mozjpeg/jdmaster.h +33 -0
  75. data/ext/image_pack/vendor/mozjpeg/jdmerge.c +587 -0
  76. data/ext/image_pack/vendor/mozjpeg/jdmerge.h +47 -0
  77. data/ext/image_pack/vendor/mozjpeg/jdmrg565.c +354 -0
  78. data/ext/image_pack/vendor/mozjpeg/jdmrgext.c +184 -0
  79. data/ext/image_pack/vendor/mozjpeg/jdphuff.c +679 -0
  80. data/ext/image_pack/vendor/mozjpeg/jdpostct.c +294 -0
  81. data/ext/image_pack/vendor/mozjpeg/jdsample.c +524 -0
  82. data/ext/image_pack/vendor/mozjpeg/jdsample.h +50 -0
  83. data/ext/image_pack/vendor/mozjpeg/jdtrans.c +156 -0
  84. data/ext/image_pack/vendor/mozjpeg/jerror.c +251 -0
  85. data/ext/image_pack/vendor/mozjpeg/jerror.h +335 -0
  86. data/ext/image_pack/vendor/mozjpeg/jfdctflt.c +169 -0
  87. data/ext/image_pack/vendor/mozjpeg/jfdctfst.c +227 -0
  88. data/ext/image_pack/vendor/mozjpeg/jfdctint.c +288 -0
  89. data/ext/image_pack/vendor/mozjpeg/jidctflt.c +240 -0
  90. data/ext/image_pack/vendor/mozjpeg/jidctfst.c +371 -0
  91. data/ext/image_pack/vendor/mozjpeg/jidctint.c +2627 -0
  92. data/ext/image_pack/vendor/mozjpeg/jidctred.c +409 -0
  93. data/ext/image_pack/vendor/mozjpeg/jinclude.h +147 -0
  94. data/ext/image_pack/vendor/mozjpeg/jmemmgr.c +1180 -0
  95. data/ext/image_pack/vendor/mozjpeg/jmemnobs.c +110 -0
  96. data/ext/image_pack/vendor/mozjpeg/jmemsys.h +178 -0
  97. data/ext/image_pack/vendor/mozjpeg/jmorecfg.h +382 -0
  98. data/ext/image_pack/vendor/mozjpeg/jpeg_nbits_table.h +4098 -0
  99. data/ext/image_pack/vendor/mozjpeg/jpegcomp.h +32 -0
  100. data/ext/image_pack/vendor/mozjpeg/jpegint.h +453 -0
  101. data/ext/image_pack/vendor/mozjpeg/jpeglib.h +1211 -0
  102. data/ext/image_pack/vendor/mozjpeg/jpegtran.c +827 -0
  103. data/ext/image_pack/vendor/mozjpeg/jpegyuv.c +172 -0
  104. data/ext/image_pack/vendor/mozjpeg/jquant1.c +856 -0
  105. data/ext/image_pack/vendor/mozjpeg/jquant2.c +1286 -0
  106. data/ext/image_pack/vendor/mozjpeg/jsimd.h +123 -0
  107. data/ext/image_pack/vendor/mozjpeg/jsimd_none.c +431 -0
  108. data/ext/image_pack/vendor/mozjpeg/jsimddct.h +70 -0
  109. data/ext/image_pack/vendor/mozjpeg/jstdhuff.c +144 -0
  110. data/ext/image_pack/vendor/mozjpeg/jutils.c +133 -0
  111. data/ext/image_pack/vendor/mozjpeg/jversion.h.in +56 -0
  112. data/ext/image_pack/vendor/mozjpeg/libjpeg.map.in +11 -0
  113. data/ext/image_pack/vendor/mozjpeg/libjpeg.txt +3150 -0
  114. data/ext/image_pack/vendor/mozjpeg/rdbmp.c +690 -0
  115. data/ext/image_pack/vendor/mozjpeg/rdcolmap.c +253 -0
  116. data/ext/image_pack/vendor/mozjpeg/rdgif.c +720 -0
  117. data/ext/image_pack/vendor/mozjpeg/rdjpeg.c +160 -0
  118. data/ext/image_pack/vendor/mozjpeg/rdjpgcom.c +494 -0
  119. data/ext/image_pack/vendor/mozjpeg/rdpng.c +194 -0
  120. data/ext/image_pack/vendor/mozjpeg/rdppm.c +781 -0
  121. data/ext/image_pack/vendor/mozjpeg/rdswitch.c +642 -0
  122. data/ext/image_pack/vendor/mozjpeg/rdtarga.c +508 -0
  123. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jccolext-neon.c +148 -0
  124. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jchuff-neon.c +334 -0
  125. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd.c +976 -0
  126. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd_neon.S +1200 -0
  127. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jccolext-neon.c +316 -0
  128. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jchuff-neon.c +411 -0
  129. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd.c +1053 -0
  130. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd_neon.S +2254 -0
  131. data/ext/image_pack/vendor/mozjpeg/simd/arm/align.h +28 -0
  132. data/ext/image_pack/vendor/mozjpeg/simd/arm/jccolor-neon.c +160 -0
  133. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgray-neon.c +120 -0
  134. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgryext-neon.c +106 -0
  135. data/ext/image_pack/vendor/mozjpeg/simd/arm/jchuff.h +131 -0
  136. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcphuff-neon.c +623 -0
  137. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcsample-neon.c +192 -0
  138. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolext-neon.c +374 -0
  139. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolor-neon.c +141 -0
  140. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmerge-neon.c +144 -0
  141. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmrgext-neon.c +723 -0
  142. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdsample-neon.c +569 -0
  143. data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctfst-neon.c +214 -0
  144. data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctint-neon.c +376 -0
  145. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctfst-neon.c +472 -0
  146. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctint-neon.c +801 -0
  147. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctred-neon.c +486 -0
  148. data/ext/image_pack/vendor/mozjpeg/simd/arm/jquanti-neon.c +193 -0
  149. data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h +26 -0
  150. data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h.in +37 -0
  151. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-avx2.asm +578 -0
  152. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-mmx.asm +476 -0
  153. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-sse2.asm +503 -0
  154. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-avx2.asm +121 -0
  155. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-mmx.asm +121 -0
  156. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-sse2.asm +120 -0
  157. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-avx2.asm +113 -0
  158. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-mmx.asm +113 -0
  159. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-sse2.asm +112 -0
  160. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-avx2.asm +457 -0
  161. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-mmx.asm +355 -0
  162. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-sse2.asm +382 -0
  163. data/ext/image_pack/vendor/mozjpeg/simd/i386/jchuff-sse2.asm +761 -0
  164. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcphuff-sse2.asm +662 -0
  165. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-avx2.asm +388 -0
  166. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-mmx.asm +324 -0
  167. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-sse2.asm +351 -0
  168. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-avx2.asm +515 -0
  169. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-mmx.asm +404 -0
  170. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-sse2.asm +458 -0
  171. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-avx2.asm +118 -0
  172. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-mmx.asm +117 -0
  173. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-sse2.asm +117 -0
  174. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-avx2.asm +136 -0
  175. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-mmx.asm +123 -0
  176. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-sse2.asm +135 -0
  177. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-avx2.asm +575 -0
  178. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-mmx.asm +460 -0
  179. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-sse2.asm +517 -0
  180. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-avx2.asm +760 -0
  181. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-mmx.asm +731 -0
  182. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-sse2.asm +724 -0
  183. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-3dn.asm +318 -0
  184. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-sse.asm +369 -0
  185. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-mmx.asm +395 -0
  186. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-sse2.asm +403 -0
  187. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-avx2.asm +331 -0
  188. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-mmx.asm +620 -0
  189. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-sse2.asm +633 -0
  190. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-3dn.asm +451 -0
  191. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse.asm +571 -0
  192. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse2.asm +497 -0
  193. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-mmx.asm +499 -0
  194. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-sse2.asm +501 -0
  195. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-avx2.asm +453 -0
  196. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-mmx.asm +851 -0
  197. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-sse2.asm +858 -0
  198. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-mmx.asm +704 -0
  199. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-sse2.asm +592 -0
  200. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-3dn.asm +230 -0
  201. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-mmx.asm +276 -0
  202. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-sse.asm +208 -0
  203. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquantf-sse2.asm +168 -0
  204. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-avx2.asm +188 -0
  205. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-sse2.asm +201 -0
  206. data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimd.c +1312 -0
  207. data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimdcpu.asm +135 -0
  208. data/ext/image_pack/vendor/mozjpeg/simd/jsimd.h +1258 -0
  209. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd.c +1143 -0
  210. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2.S +4543 -0
  211. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2_asm.h +292 -0
  212. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolext-mmi.c +455 -0
  213. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolor-mmi.c +148 -0
  214. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgray-mmi.c +132 -0
  215. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgryext-mmi.c +374 -0
  216. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample-mmi.c +98 -0
  217. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample.h +28 -0
  218. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolext-mmi.c +415 -0
  219. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolor-mmi.c +139 -0
  220. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmerge-mmi.c +149 -0
  221. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmrgext-mmi.c +615 -0
  222. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdsample-mmi.c +304 -0
  223. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctfst-mmi.c +255 -0
  224. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctint-mmi.c +398 -0
  225. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctfst-mmi.c +395 -0
  226. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctint-mmi.c +571 -0
  227. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jquanti-mmi.c +124 -0
  228. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd.c +866 -0
  229. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd_mmi.h +69 -0
  230. data/ext/image_pack/vendor/mozjpeg/simd/mips64/loongson-mmintrin.h +1334 -0
  231. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jcolsamp.inc +135 -0
  232. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jdct.inc +31 -0
  233. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc +93 -0
  234. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc.h +133 -0
  235. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdext.inc +520 -0
  236. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolext-altivec.c +269 -0
  237. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolor-altivec.c +116 -0
  238. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgray-altivec.c +111 -0
  239. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgryext-altivec.c +228 -0
  240. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample-altivec.c +159 -0
  241. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample.h +28 -0
  242. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolext-altivec.c +276 -0
  243. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolor-altivec.c +106 -0
  244. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmerge-altivec.c +130 -0
  245. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmrgext-altivec.c +329 -0
  246. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdsample-altivec.c +400 -0
  247. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctfst-altivec.c +154 -0
  248. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctint-altivec.c +258 -0
  249. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctfst-altivec.c +255 -0
  250. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctint-altivec.c +357 -0
  251. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jquanti-altivec.c +250 -0
  252. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd.c +884 -0
  253. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd_altivec.h +98 -0
  254. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-avx2.asm +559 -0
  255. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-sse2.asm +484 -0
  256. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-avx2.asm +121 -0
  257. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-sse2.asm +120 -0
  258. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-avx2.asm +113 -0
  259. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-sse2.asm +112 -0
  260. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-avx2.asm +438 -0
  261. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-sse2.asm +363 -0
  262. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jchuff-sse2.asm +583 -0
  263. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcphuff-sse2.asm +639 -0
  264. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-avx2.asm +367 -0
  265. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-sse2.asm +330 -0
  266. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-avx2.asm +496 -0
  267. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-sse2.asm +439 -0
  268. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-avx2.asm +118 -0
  269. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-sse2.asm +117 -0
  270. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-avx2.asm +136 -0
  271. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-sse2.asm +135 -0
  272. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-avx2.asm +596 -0
  273. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-sse2.asm +538 -0
  274. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-avx2.asm +696 -0
  275. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-sse2.asm +665 -0
  276. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctflt-sse.asm +355 -0
  277. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctfst-sse2.asm +389 -0
  278. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-avx2.asm +320 -0
  279. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-sse2.asm +619 -0
  280. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctflt-sse2.asm +482 -0
  281. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctfst-sse2.asm +491 -0
  282. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-avx2.asm +418 -0
  283. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-sse2.asm +847 -0
  284. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctred-sse2.asm +574 -0
  285. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquantf-sse2.asm +155 -0
  286. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-avx2.asm +163 -0
  287. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-sse2.asm +188 -0
  288. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimd.c +1110 -0
  289. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimdcpu.asm +86 -0
  290. data/ext/image_pack/vendor/mozjpeg/strtest.c +170 -0
  291. data/ext/image_pack/vendor/mozjpeg/structure.txt +900 -0
  292. data/ext/image_pack/vendor/mozjpeg/tjbench.c +1044 -0
  293. data/ext/image_pack/vendor/mozjpeg/tjbenchtest.in +256 -0
  294. data/ext/image_pack/vendor/mozjpeg/tjbenchtest.java.in +215 -0
  295. data/ext/image_pack/vendor/mozjpeg/tjexample.c +406 -0
  296. data/ext/image_pack/vendor/mozjpeg/tjexampletest.in +149 -0
  297. data/ext/image_pack/vendor/mozjpeg/tjexampletest.java.in +151 -0
  298. data/ext/image_pack/vendor/mozjpeg/tjunittest.c +961 -0
  299. data/ext/image_pack/vendor/mozjpeg/tjutil.c +70 -0
  300. data/ext/image_pack/vendor/mozjpeg/tjutil.h +53 -0
  301. data/ext/image_pack/vendor/mozjpeg/transupp.c +2373 -0
  302. data/ext/image_pack/vendor/mozjpeg/transupp.h +243 -0
  303. data/ext/image_pack/vendor/mozjpeg/turbojpeg-jni.c +1259 -0
  304. data/ext/image_pack/vendor/mozjpeg/turbojpeg.c +2320 -0
  305. data/ext/image_pack/vendor/mozjpeg/turbojpeg.h +1784 -0
  306. data/ext/image_pack/vendor/mozjpeg/usage.txt +679 -0
  307. data/ext/image_pack/vendor/mozjpeg/wizard.txt +220 -0
  308. data/ext/image_pack/vendor/mozjpeg/wrbmp.c +552 -0
  309. data/ext/image_pack/vendor/mozjpeg/wrgif.c +580 -0
  310. data/ext/image_pack/vendor/mozjpeg/wrjpgcom.c +577 -0
  311. data/ext/image_pack/vendor/mozjpeg/wrppm.c +366 -0
  312. data/ext/image_pack/vendor/mozjpeg/wrtarga.c +258 -0
  313. data/ext/image_pack/vendor/mozjpeg/yuvjpeg.c +268 -0
  314. data/lib/image_pack/backend.rb +8 -0
  315. data/lib/image_pack/configuration.rb +23 -0
  316. data/lib/image_pack/errors.rb +13 -0
  317. data/lib/image_pack/version.rb +5 -0
  318. data/lib/image_pack.rb +208 -0
  319. metadata +433 -0
@@ -0,0 +1,1593 @@
1
+ cmake_minimum_required(VERSION 2.8.12)
2
+ # When using CMake 3.4 and later, don't export symbols from executables unless
3
+ # the CMAKE_ENABLE_EXPORTS variable is set.
4
+ if(POLICY CMP0065)
5
+ cmake_policy(SET CMP0065 NEW)
6
+ endif()
7
+
8
+ if(CMAKE_EXECUTABLE_SUFFIX)
9
+ set(CMAKE_EXECUTABLE_SUFFIX_TMP ${CMAKE_EXECUTABLE_SUFFIX})
10
+ endif()
11
+
12
+ project(mozjpeg C)
13
+ set(VERSION 4.1.5)
14
+ set(COPYRIGHT_YEAR "1991-2023")
15
+ string(REPLACE "." ";" VERSION_TRIPLET ${VERSION})
16
+ list(GET VERSION_TRIPLET 0 VERSION_MAJOR)
17
+ list(GET VERSION_TRIPLET 1 VERSION_MINOR)
18
+ list(GET VERSION_TRIPLET 2 VERSION_REVISION)
19
+ function(pad_number NUMBER OUTPUT_LEN)
20
+ string(LENGTH "${${NUMBER}}" INPUT_LEN)
21
+ if(INPUT_LEN LESS OUTPUT_LEN)
22
+ math(EXPR ZEROES "${OUTPUT_LEN} - ${INPUT_LEN} - 1")
23
+ set(NUM ${${NUMBER}})
24
+ foreach(C RANGE ${ZEROES})
25
+ set(NUM "0${NUM}")
26
+ endforeach()
27
+ set(${NUMBER} ${NUM} PARENT_SCOPE)
28
+ endif()
29
+ endfunction()
30
+ pad_number(VERSION_MINOR 3)
31
+ pad_number(VERSION_REVISION 3)
32
+ set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION})
33
+
34
+ # The libjpeg-turbo build system has never supported and will never support
35
+ # being integrated into another build system using add_subdirectory(), because
36
+ # doing so would require that we (minimally):
37
+ #
38
+ # 1. avoid using certain CMake variables, such as CMAKE_SOURCE_DIR,
39
+ # CMAKE_BINARY_DIR, and CMAKE_PROJECT_NAME;
40
+ # 2. avoid using implicit include directories and relative paths;
41
+ # 3. optionally provide a way to skip the installation of libjpeg-turbo
42
+ # components when the 'install' target is built;
43
+ # 4. optionally provide a way to postfix target names, to avoid namespace
44
+ # conflicts;
45
+ # 5. restructure the top-level CMakeLists.txt so that it properly sets the
46
+ # PROJECT_VERSION variable; and
47
+ # 6. design automated regression tests to ensure that new commits don't break
48
+ # any of the above.
49
+ #
50
+ # Even if we did all of that, issues would still arise, because it is
51
+ # impossible for an upstream build system to anticipate the widely varying
52
+ # needs of every downstream build system. That's why the CMake
53
+ # ExternalProject_Add() function exists. Downstream projects that wish to
54
+ # integrate libjpeg-turbo as a subdirectory should either use
55
+ # ExternalProject_Add() or make downstream modifications to the libjpeg-turbo
56
+ # build system to suit their specific needs. Please do not file bug reports,
57
+ # feature requests, or pull requests regarding this.
58
+ if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
59
+ message(FATAL_ERROR "The libjpeg-turbo build system cannot be integrated into another build system using add_subdirectory(). Use ExternalProject_Add() instead.")
60
+ endif()
61
+
62
+ # CMake 3.14 and later sets CMAKE_MACOSX_BUNDLE to TRUE by default when
63
+ # CMAKE_SYSTEM_NAME is iOS, tvOS, or watchOS, which breaks the libjpeg-turbo
64
+ # build. (Specifically, when CMAKE_MACOSX_BUNDLE is TRUE, executables for
65
+ # Apple platforms are built as application bundles, which causes CMake to
66
+ # complain that our install() directives for executables do not specify a
67
+ # BUNDLE DESTINATION. Even if CMake did not complain, building executables as
68
+ # application bundles would break our iOS packages.)
69
+ set(CMAKE_MACOSX_BUNDLE FALSE)
70
+
71
+ get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY
72
+ GENERATOR_IS_MULTI_CONFIG)
73
+ # If the GENERATOR_IS_MULTI_CONFIG property doesn't exist (CMake < 3.9), then
74
+ # set the GENERATOR_IS_MULTI_CONFIG variable manually if the generator is
75
+ # Visual Studio or Xcode (the only multi-config generators in CMake < 3.9).
76
+ if(NOT GENERATOR_IS_MULTI_CONFIG AND (MSVC_IDE OR XCODE))
77
+ set(GENERATOR_IS_MULTI_CONFIG TRUE)
78
+ endif()
79
+
80
+ string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
81
+ set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
82
+
83
+ # NOTE: On Windows, this does nothing except when using MinGW or Cygwin.
84
+ # CMAKE_BUILD_TYPE has no meaning in Visual Studio, and it always defaults to
85
+ # Debug when using NMake.
86
+ if(NOT CMAKE_BUILD_TYPE)
87
+ set(CMAKE_BUILD_TYPE Release)
88
+ endif()
89
+ message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
90
+
91
+ message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
92
+
93
+ include(cmakescripts/PackageInfo.cmake)
94
+
95
+ # Detect CPU type and whether we're building 64-bit or 32-bit code
96
+ math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
97
+ string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
98
+ set(COUNT 1)
99
+ foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
100
+ if(COUNT GREATER 1)
101
+ message(FATAL_ERROR "libjpeg-turbo contains assembly code, so it cannot be built with multiple values in CMAKE_OSX_ARCHITECTURES.")
102
+ endif()
103
+ math(EXPR COUNT "${COUNT}+1")
104
+ endforeach()
105
+ if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
106
+ CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
107
+ CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
108
+ CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
109
+ CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
110
+ if(BITS EQUAL 64 OR CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
111
+ set(CPU_TYPE x86_64)
112
+ else()
113
+ set(CPU_TYPE i386)
114
+ endif()
115
+ if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ${CPU_TYPE})
116
+ set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
117
+ endif()
118
+ elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
119
+ CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^arm")
120
+ if(BITS EQUAL 64)
121
+ set(CPU_TYPE arm64)
122
+ else()
123
+ set(CPU_TYPE arm)
124
+ endif()
125
+ elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^ppc" OR
126
+ CMAKE_SYSTEM_PROCESSOR_LC MATCHES "^powerpc")
127
+ set(CPU_TYPE powerpc)
128
+ else()
129
+ set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
130
+ endif()
131
+ if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR
132
+ CMAKE_OSX_ARCHITECTURES MATCHES "arm64" OR
133
+ CMAKE_OSX_ARCHITECTURES MATCHES "i386")
134
+ set(CPU_TYPE ${CMAKE_OSX_ARCHITECTURES})
135
+ endif()
136
+ if(CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
137
+ set(CPU_TYPE powerpc)
138
+ endif()
139
+ if(MSVC_IDE AND CMAKE_GENERATOR_PLATFORM MATCHES "arm64")
140
+ set(CPU_TYPE arm64)
141
+ endif()
142
+
143
+ message(STATUS "${BITS}-bit build (${CPU_TYPE})")
144
+
145
+
146
+ ###############################################################################
147
+ # INSTALL DIRECTORIES
148
+ ###############################################################################
149
+
150
+ if(WIN32)
151
+ if(MSVC)
152
+ set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}")
153
+ else()
154
+ set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}-gcc")
155
+ endif()
156
+ if(BITS EQUAL 64)
157
+ set(CMAKE_INSTALL_DEFAULT_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}64")
158
+ endif()
159
+ else()
160
+ if(NOT CMAKE_INSTALL_DEFAULT_PREFIX)
161
+ set(CMAKE_INSTALL_DEFAULT_PREFIX /opt/${CMAKE_PROJECT_NAME})
162
+ endif()
163
+ endif()
164
+ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
165
+ set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}" CACHE PATH
166
+ "Directory into which to install ${CMAKE_PROJECT_NAME} (default: ${CMAKE_INSTALL_DEFAULT_PREFIX})"
167
+ FORCE)
168
+ endif()
169
+ message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
170
+
171
+ # When the prefix is /opt/${CMAKE_PROJECT_NAME}, we assume that an "official"
172
+ # build is being created, and thus we install things into specific locations.
173
+
174
+ if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}")
175
+ set(CMAKE_INSTALL_DEFAULT_DATAROOTDIR "")
176
+ set(CMAKE_INSTALL_DEFAULT_DOCDIR "<CMAKE_INSTALL_DATAROOTDIR>/doc")
177
+ set(CMAKE_INSTALL_DEFAULT_JAVADIR "<CMAKE_INSTALL_DATAROOTDIR>/classes")
178
+ if(UNIX AND NOT APPLE)
179
+ if(BITS EQUAL 64)
180
+ set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
181
+ elseif(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
182
+ set(CMAKE_INSTALL_DEFAULT_LIBDIR "libx32")
183
+ else()
184
+ set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib32")
185
+ endif()
186
+ endif()
187
+ endif()
188
+
189
+ include(cmakescripts/GNUInstallDirs.cmake)
190
+
191
+ macro(report_directory var)
192
+ if(CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_FULL_${var})
193
+ message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}}")
194
+ else()
195
+ message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}} (${CMAKE_INSTALL_FULL_${var}})")
196
+ endif()
197
+ mark_as_advanced(CLEAR CMAKE_INSTALL_${var})
198
+ endmacro()
199
+
200
+ set(DIRLIST "BINDIR;DATAROOTDIR;DOCDIR;INCLUDEDIR;LIBDIR")
201
+ if(UNIX)
202
+ list(APPEND DIRLIST "MANDIR")
203
+ endif()
204
+ foreach(dir ${DIRLIST})
205
+ report_directory(${dir})
206
+ endforeach()
207
+
208
+
209
+ ###############################################################################
210
+ # CONFIGURATION OPTIONS
211
+ ###############################################################################
212
+
213
+ macro(boolean_number var)
214
+ if(${var})
215
+ set(${var} 1 ${ARGN})
216
+ else()
217
+ set(${var} 0 ${ARGN})
218
+ endif()
219
+ endmacro()
220
+
221
+ option(ENABLE_SHARED "Build shared libraries" TRUE)
222
+ boolean_number(ENABLE_SHARED)
223
+ option(ENABLE_STATIC "Build static libraries" TRUE)
224
+ boolean_number(ENABLE_STATIC)
225
+ option(REQUIRE_SIMD "Generate a fatal error if SIMD extensions are not available for this platform (default is to fall back to a non-SIMD build)" FALSE)
226
+ boolean_number(REQUIRE_SIMD)
227
+ option(PNG_SUPPORTED "Enable PNG support (requires libpng)" TRUE)
228
+ boolean_number(PNG_SUPPORTED)
229
+ option(WITH_12BIT "Encode/decode JPEG images with 12-bit samples (implies WITH_ARITH_DEC=0 WITH_ARITH_ENC=0 WITH_JAVA=0 WITH_SIMD=0 WITH_TURBOJPEG=0 )" FALSE)
230
+ boolean_number(WITH_12BIT)
231
+ option(WITH_ARITH_DEC "Include arithmetic decoding support when emulating the libjpeg v6b API/ABI" FALSE)
232
+ boolean_number(WITH_ARITH_DEC)
233
+ option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" FALSE)
234
+ boolean_number(WITH_ARITH_ENC)
235
+ if(CMAKE_C_COMPILER_ABI MATCHES "ELF X32")
236
+ set(WITH_JAVA 0)
237
+ else()
238
+ option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
239
+ boolean_number(WITH_JAVA)
240
+ endif()
241
+ option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
242
+ boolean_number(WITH_JPEG7)
243
+ option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
244
+ boolean_number(WITH_JPEG8)
245
+ option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
246
+ boolean_number(WITH_MEM_SRCDST)
247
+ option(WITH_SIMD "Include SIMD extensions, if available for this platform" TRUE)
248
+ boolean_number(WITH_SIMD)
249
+ option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE)
250
+ boolean_number(WITH_TURBOJPEG)
251
+ option(WITH_FUZZ "Build fuzz targets" FALSE)
252
+
253
+ macro(report_option var desc)
254
+ if(${var})
255
+ message(STATUS "${desc} enabled (${var} = ${${var}})")
256
+ else()
257
+ message(STATUS "${desc} disabled (${var} = ${${var}})")
258
+ endif()
259
+ endmacro()
260
+
261
+ if(WITH_JAVA)
262
+ set(ENABLE_SHARED 1)
263
+ endif()
264
+
265
+ # Explicitly setting CMAKE_POSITION_INDEPENDENT_CODE=FALSE disables PIC for all
266
+ # targets, which will cause the shared library builds to fail. Thus, if shared
267
+ # libraries are enabled and CMAKE_POSITION_INDEPENDENT_CODE is explicitly set
268
+ # to FALSE, we need to unset it, thus restoring the default behavior
269
+ # (automatically using PIC for shared library targets.)
270
+ if(DEFINED CMAKE_POSITION_INDEPENDENT_CODE AND
271
+ NOT CMAKE_POSITION_INDEPENDENT_CODE AND ENABLE_SHARED)
272
+ unset(CMAKE_POSITION_INDEPENDENT_CODE CACHE)
273
+ endif()
274
+
275
+ report_option(ENABLE_SHARED "Shared libraries")
276
+ report_option(ENABLE_STATIC "Static libraries")
277
+
278
+ if(ENABLE_SHARED)
279
+ set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
280
+ endif()
281
+
282
+ if(WITH_JPEG8 OR WITH_JPEG7)
283
+ set(WITH_ARITH_ENC 1)
284
+ set(WITH_ARITH_DEC 1)
285
+ endif()
286
+ if(WITH_JPEG8)
287
+ set(WITH_MEM_SRCDST 0)
288
+ endif()
289
+
290
+ if(WITH_12BIT)
291
+ set(WITH_ARITH_DEC 0)
292
+ set(WITH_ARITH_ENC 0)
293
+ set(WITH_JAVA 0)
294
+ set(WITH_SIMD 0)
295
+ set(WITH_TURBOJPEG 0)
296
+ set(BITS_IN_JSAMPLE 12)
297
+ else()
298
+ set(BITS_IN_JSAMPLE 8)
299
+ endif()
300
+ report_option(WITH_12BIT "12-bit JPEG support")
301
+
302
+ if(WITH_ARITH_DEC)
303
+ set(D_ARITH_CODING_SUPPORTED 1)
304
+ endif()
305
+ if(NOT WITH_12BIT)
306
+ report_option(WITH_ARITH_DEC "Arithmetic decoding support")
307
+ endif()
308
+
309
+ if(WITH_ARITH_ENC)
310
+ set(C_ARITH_CODING_SUPPORTED 1)
311
+ endif()
312
+ if(NOT WITH_12BIT)
313
+ report_option(WITH_ARITH_ENC "Arithmetic encoding support")
314
+ endif()
315
+
316
+ if(NOT WITH_12BIT)
317
+ report_option(WITH_TURBOJPEG "TurboJPEG API library")
318
+ report_option(WITH_JAVA "TurboJPEG Java wrapper")
319
+ endif()
320
+
321
+ if(WITH_MEM_SRCDST)
322
+ set(MEM_SRCDST_SUPPORTED 1)
323
+ set(MEM_SRCDST_FUNCTIONS "global: jpeg_mem_dest; jpeg_mem_src;")
324
+ endif()
325
+ if(NOT WITH_JPEG8)
326
+ report_option(WITH_MEM_SRCDST "In-memory source/destination managers")
327
+ endif()
328
+
329
+ # 0: Original libjpeg v6b/v7/v8 API/ABI
330
+ #
331
+ # libjpeg v6b/v7 API/ABI emulation:
332
+ # 1: + In-memory source/destination managers (libjpeg-turbo 1.3.x)
333
+ # 2: + Partial image decompression functions (libjpeg-turbo 1.5.x)
334
+ # 3: + ICC functions (libjpeg-turbo 2.0.x)
335
+ #
336
+ # libjpeg v8 API/ABI emulation:
337
+ # 1: + Partial image decompression functions (libjpeg-turbo 1.5.x)
338
+ # 2: + ICC functions (libjpeg-turbo 2.0.x)
339
+ set(SO_AGE 2)
340
+ if(WITH_MEM_SRCDST)
341
+ set(SO_AGE 3)
342
+ endif()
343
+
344
+ if(WITH_JPEG8)
345
+ set(JPEG_LIB_VERSION 80)
346
+ elseif(WITH_JPEG7)
347
+ set(JPEG_LIB_VERSION 70)
348
+ else()
349
+ set(JPEG_LIB_VERSION 62)
350
+ endif()
351
+
352
+ math(EXPR JPEG_LIB_VERSION_DIV10 "${JPEG_LIB_VERSION} / 10")
353
+ math(EXPR JPEG_LIB_VERSION_MOD10 "${JPEG_LIB_VERSION} % 10")
354
+ if(JPEG_LIB_VERSION STREQUAL "62")
355
+ set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION})
356
+ else()
357
+ set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION_DIV10})
358
+ endif()
359
+ if(JPEG_LIB_VERSION STREQUAL "80")
360
+ set(DEFAULT_SO_MINOR_VERSION 2)
361
+ else()
362
+ set(DEFAULT_SO_MINOR_VERSION 0)
363
+ endif()
364
+
365
+ # This causes SO_MAJOR_VERSION/SO_MINOR_VERSION to reset to defaults if
366
+ # WITH_JPEG7 or WITH_JPEG8 has changed.
367
+ if((DEFINED WITH_JPEG7_INT AND NOT WITH_JPEG7 EQUAL WITH_JPEG7_INT) OR
368
+ (DEFINED WITH_JPEG8_INT AND NOT WITH_JPEG8 EQUAL WITH_JPEG8_INT))
369
+ set(FORCE_SO_VERSION "FORCE")
370
+ endif()
371
+ set(WITH_JPEG7_INT ${WITH_JPEG7} CACHE INTERNAL "")
372
+ set(WITH_JPEG8_INT ${WITH_JPEG8} CACHE INTERNAL "")
373
+
374
+ set(SO_MAJOR_VERSION ${DEFAULT_SO_MAJOR_VERSION} CACHE STRING
375
+ "Major version of the libjpeg API shared library (default: ${DEFAULT_SO_MAJOR_VERSION})"
376
+ ${FORCE_SO_VERSION})
377
+ set(SO_MINOR_VERSION ${DEFAULT_SO_MINOR_VERSION} CACHE STRING
378
+ "Minor version of the libjpeg API shared library (default: ${DEFAULT_SO_MINOR_VERSION})"
379
+ ${FORCE_SO_VERSION})
380
+
381
+ set(JPEG_LIB_VERSION_DECIMAL "${JPEG_LIB_VERSION_DIV10}.${JPEG_LIB_VERSION_MOD10}")
382
+ message(STATUS "Emulating libjpeg API/ABI v${JPEG_LIB_VERSION_DECIMAL} (WITH_JPEG7 = ${WITH_JPEG7}, WITH_JPEG8 = ${WITH_JPEG8})")
383
+ message(STATUS "libjpeg API shared library version = ${SO_MAJOR_VERSION}.${SO_AGE}.${SO_MINOR_VERSION}")
384
+
385
+ # Because the TurboJPEG API library uses versioned symbols and changes the
386
+ # names of functions whenever they are modified in a backward-incompatible
387
+ # manner, it is always backward-ABI-compatible with itself, so the major and
388
+ # minor SO versions don't change. However, we increase the middle number (the
389
+ # SO "age") whenever functions are added to the API, because adding functions
390
+ # affects forward API/ABI compatibility.
391
+ set(TURBOJPEG_SO_MAJOR_VERSION 0)
392
+ # 0: TurboJPEG 1.3.x API
393
+ # 1: TurboJPEG 1.4.x API
394
+ # The TurboJPEG 1.5.x API modified some of the function prototypes, adding
395
+ # the const keyword in front of pointers to unmodified buffers, but that did
396
+ # not affect forward API/ABI compatibility.
397
+ # 2: TurboJPEG 2.0.x API
398
+ # The TurboJPEG 2.1.x API modified the behavior of the tjDecompressHeader3()
399
+ # function so that it accepts "abbreviated table specification" (AKA
400
+ # "tables-only") datastreams as well as JPEG images, but that did not affect
401
+ # forward API/ABI compatibility.
402
+ set(TURBOJPEG_SO_AGE 2)
403
+ set(TURBOJPEG_SO_VERSION 0.${TURBOJPEG_SO_AGE}.0)
404
+
405
+
406
+ ###############################################################################
407
+ # COMPILER SETTINGS
408
+ ###############################################################################
409
+
410
+ if(MSVC)
411
+ option(WITH_CRT_DLL
412
+ "Link all ${CMAKE_PROJECT_NAME} libraries and executables with the C run-time DLL (msvcr*.dll) instead of the static C run-time library (libcmt*.lib.) The default is to use the C run-time DLL only with the libraries and executables that need it."
413
+ FALSE)
414
+ if(NOT WITH_CRT_DLL)
415
+ # Use the static C library for all build types
416
+ foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
417
+ CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
418
+ if(${var} MATCHES "/MD")
419
+ string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}")
420
+ endif()
421
+ endforeach()
422
+ endif()
423
+ add_definitions(-D_CRT_NONSTDC_NO_WARNINGS)
424
+ endif()
425
+
426
+ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
427
+ # Use the maximum optimization level for release builds
428
+ foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
429
+ if(${var} MATCHES "-O2")
430
+ string(REGEX REPLACE "-O2" "-O3" ${var} "${${var}}")
431
+ endif()
432
+ endforeach()
433
+ endif()
434
+
435
+ if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
436
+ if(CMAKE_C_COMPILER_ID MATCHES "SunPro")
437
+ # Use the maximum optimization level for release builds
438
+ foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
439
+ if(${var} MATCHES "-xO3")
440
+ string(REGEX REPLACE "-xO3" "-xO5" ${var} "${${var}}")
441
+ endif()
442
+ if(${var} MATCHES "-xO2")
443
+ string(REGEX REPLACE "-xO2" "-xO5" ${var} "${${var}}")
444
+ endif()
445
+ endforeach()
446
+ endif()
447
+ endif()
448
+
449
+ string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
450
+
451
+ set(EFFECTIVE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
452
+ message(STATUS "Compiler flags = ${EFFECTIVE_C_FLAGS}")
453
+
454
+ set(EFFECTIVE_LD_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
455
+ message(STATUS "Linker flags = ${EFFECTIVE_LD_FLAGS}")
456
+
457
+ include(CheckCSourceCompiles)
458
+ include(CheckIncludeFiles)
459
+ include(CheckTypeSize)
460
+
461
+ check_type_size("size_t" SIZE_T)
462
+ check_type_size("unsigned long" UNSIGNED_LONG)
463
+
464
+ if(SIZE_T EQUAL UNSIGNED_LONG)
465
+ check_c_source_compiles("int main(int argc, char **argv) { unsigned long a = argc; return __builtin_ctzl(a); }"
466
+ HAVE_BUILTIN_CTZL)
467
+ endif()
468
+ if(MSVC)
469
+ check_include_files("intrin.h" HAVE_INTRIN_H)
470
+ endif()
471
+
472
+ if(UNIX)
473
+ if(CMAKE_CROSSCOMPILING)
474
+ set(RIGHT_SHIFT_IS_UNSIGNED 0)
475
+ else()
476
+ include(CheckCSourceRuns)
477
+ check_c_source_runs("
478
+ #include <stdio.h>
479
+ #include <stdlib.h>
480
+ int is_shifting_signed (long arg) {
481
+ long res = arg >> 4;
482
+ if (res == -0x7F7E80CL)
483
+ return 1; /* right shift is signed */
484
+ /* see if unsigned-shift hack will fix it. */
485
+ /* we can't just test exact value since it depends on width of long... */
486
+ res |= (~0L) << (32-4);
487
+ if (res == -0x7F7E80CL)
488
+ return 0; /* right shift is unsigned */
489
+ printf(\"Right shift isn't acting as I expect it to.\\\\n\");
490
+ printf(\"I fear the JPEG software will not work at all.\\\\n\\\\n\");
491
+ return 0; /* try it with unsigned anyway */
492
+ }
493
+ int main (void) {
494
+ exit(is_shifting_signed(-0x7F7E80B1L));
495
+ }" RIGHT_SHIFT_IS_UNSIGNED)
496
+ endif()
497
+ endif()
498
+
499
+ if(MSVC)
500
+ set(INLINE_OPTIONS "__inline;inline")
501
+ else()
502
+ set(INLINE_OPTIONS "__inline__;inline")
503
+ endif()
504
+ option(FORCE_INLINE "Force function inlining" TRUE)
505
+ boolean_number(FORCE_INLINE)
506
+ if(FORCE_INLINE)
507
+ if(MSVC)
508
+ list(INSERT INLINE_OPTIONS 0 "__forceinline")
509
+ else()
510
+ list(INSERT INLINE_OPTIONS 0 "inline __attribute__((always_inline))")
511
+ list(INSERT INLINE_OPTIONS 0 "__inline__ __attribute__((always_inline))")
512
+ endif()
513
+ endif()
514
+ foreach(inline ${INLINE_OPTIONS})
515
+ check_c_source_compiles("${inline} static int foo(void) { return 0; } int main(void) { return foo(); }"
516
+ INLINE_WORKS)
517
+ if(INLINE_WORKS)
518
+ set(INLINE ${inline})
519
+ break()
520
+ endif()
521
+ endforeach()
522
+ if(NOT INLINE_WORKS)
523
+ message(FATAL_ERROR "Could not determine how to inline functions.")
524
+ endif()
525
+ message(STATUS "INLINE = ${INLINE} (FORCE_INLINE = ${FORCE_INLINE})")
526
+
527
+ if(MSVC)
528
+ set(THREAD_LOCAL "__declspec(thread)")
529
+ else()
530
+ set(THREAD_LOCAL "__thread")
531
+ endif()
532
+ check_c_source_compiles("${THREAD_LOCAL} int i; int main(void) { i = 0; return i; }" HAVE_THREAD_LOCAL)
533
+ if(HAVE_THREAD_LOCAL)
534
+ message(STATUS "THREAD_LOCAL = ${THREAD_LOCAL}")
535
+ else()
536
+ message(WARNING "Thread-local storage is not available. The TurboJPEG API library's global error handler will not be thread-safe.")
537
+ unset(THREAD_LOCAL)
538
+ endif()
539
+
540
+ if(UNIX AND NOT APPLE)
541
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map "VERS_1 { global: *; };")
542
+ set(CMAKE_REQUIRED_FLAGS
543
+ "-Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
544
+ check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSION_SCRIPT)
545
+ set(CMAKE_REQUIRED_FLAGS)
546
+ file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
547
+ if(HAVE_VERSION_SCRIPT)
548
+ message(STATUS "Linker supports GNU-style version scripts")
549
+ set(MAPFLAG "-Wl,--version-script,")
550
+ set(TJMAPFLAG "-Wl,--version-script,")
551
+ else()
552
+ message(STATUS "Linker does not support GNU-style version scripts")
553
+ if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
554
+ # The Solaris linker doesn't like our version script for the libjpeg API
555
+ # library, but the version script for the TurboJPEG API library should
556
+ # still work.
557
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map
558
+ "VERS_1 { global: foo; local: *; }; VERS_2 { global: foo2; } VERS_1;")
559
+ set(CMAKE_REQUIRED_FLAGS "-Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/conftest.map -shared")
560
+ check_c_source_compiles("int foo() { return 0; } int foo2() { return 2; }"
561
+ HAVE_MAPFILE)
562
+ set(CMAKE_REQUIRED_FLAGS)
563
+ file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
564
+ if(HAVE_MAPFILE)
565
+ message(STATUS "Linker supports mapfiles")
566
+ set(TJMAPFLAG "-Wl,-M,")
567
+ else()
568
+ message(STATUS "Linker does not support mapfiles")
569
+ endif()
570
+ endif()
571
+ endif()
572
+ endif()
573
+
574
+ # Generate files
575
+ if(WIN32)
576
+ configure_file(win/jconfig.h.in jconfig.h)
577
+ else()
578
+ configure_file(jconfig.h.in jconfig.h)
579
+ endif()
580
+ configure_file(jconfigint.h.in jconfigint.h)
581
+ configure_file(jversion.h.in jversion.h)
582
+ if(UNIX)
583
+ configure_file(libjpeg.map.in libjpeg.map)
584
+ endif()
585
+
586
+ # Include directories and compiler definitions
587
+ include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
588
+
589
+
590
+ ###############################################################################
591
+ # TARGETS
592
+ ###############################################################################
593
+
594
+ if(CMAKE_EXECUTABLE_SUFFIX_TMP)
595
+ set(CMAKE_EXECUTABLE_SUFFIX ${CMAKE_EXECUTABLE_SUFFIX_TMP})
596
+ endif()
597
+ message(STATUS "CMAKE_EXECUTABLE_SUFFIX = ${CMAKE_EXECUTABLE_SUFFIX}")
598
+
599
+ set(JPEG_SOURCES jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcext.c
600
+ jcicc.c jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c
601
+ jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c
602
+ jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdicc.c jdinput.c
603
+ jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c
604
+ jdtrans.c jerror.c jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c
605
+ jidctint.c jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c)
606
+
607
+ if(WITH_ARITH_ENC OR WITH_ARITH_DEC)
608
+ set(JPEG_SOURCES ${JPEG_SOURCES} jaricom.c)
609
+ endif()
610
+
611
+ if(WITH_ARITH_ENC)
612
+ set(JPEG_SOURCES ${JPEG_SOURCES} jcarith.c)
613
+ endif()
614
+
615
+ if(WITH_ARITH_DEC)
616
+ set(JPEG_SOURCES ${JPEG_SOURCES} jdarith.c)
617
+ endif()
618
+
619
+ if(WITH_SIMD)
620
+ add_subdirectory(simd)
621
+ if(NEON_INTRINSICS)
622
+ add_definitions(-DNEON_INTRINSICS)
623
+ endif()
624
+ elseif(NOT WITH_12BIT)
625
+ message(STATUS "SIMD extensions: None (WITH_SIMD = ${WITH_SIMD})")
626
+ endif()
627
+ if(WITH_SIMD)
628
+ message(STATUS "SIMD extensions: ${CPU_TYPE} (WITH_SIMD = ${WITH_SIMD})")
629
+ if(MSVC_IDE OR XCODE)
630
+ set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1)
631
+ endif()
632
+ else()
633
+ add_library(simd OBJECT jsimd_none.c)
634
+ if(NOT WIN32 AND (CMAKE_POSITION_INDEPENDENT_CODE OR ENABLE_SHARED))
635
+ set_target_properties(simd PROPERTIES POSITION_INDEPENDENT_CODE 1)
636
+ endif()
637
+ endif()
638
+
639
+ if(WITH_JAVA)
640
+ add_subdirectory(java)
641
+ endif()
642
+
643
+ if(ENABLE_SHARED)
644
+ add_subdirectory(sharedlib)
645
+ endif()
646
+
647
+ if(ENABLE_STATIC)
648
+ add_library(jpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
649
+ ${SIMD_OBJS})
650
+ if(NOT MSVC)
651
+ set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
652
+ endif()
653
+ endif()
654
+
655
+ if(WITH_TURBOJPEG)
656
+ if(ENABLE_SHARED)
657
+ set(TURBOJPEG_SOURCES ${JPEG_SOURCES} $<TARGET_OBJECTS:simd> ${SIMD_OBJS}
658
+ turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c rdppm.c
659
+ wrbmp.c wrppm.c)
660
+ set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile)
661
+ if(WITH_JAVA)
662
+ set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES} turbojpeg-jni.c)
663
+ include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
664
+ set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile.jni)
665
+ endif()
666
+ if(MSVC)
667
+ configure_file(${CMAKE_SOURCE_DIR}/win/turbojpeg.rc.in
668
+ ${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
669
+ set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES}
670
+ ${CMAKE_BINARY_DIR}/win/turbojpeg.rc)
671
+ endif()
672
+ add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
673
+ set_property(TARGET turbojpeg PROPERTY COMPILE_FLAGS
674
+ "-DBMP_SUPPORTED -DPPM_SUPPORTED")
675
+ if(WIN32)
676
+ set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE)
677
+ endif()
678
+ if(MINGW)
679
+ set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at)
680
+ endif()
681
+ if(APPLE AND (NOT CMAKE_OSX_DEPLOYMENT_TARGET OR
682
+ CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER 10.4))
683
+ if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
684
+ set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
685
+ endif()
686
+ set_target_properties(turbojpeg PROPERTIES MACOSX_RPATH 1)
687
+ endif()
688
+ set_target_properties(turbojpeg PROPERTIES
689
+ SOVERSION ${TURBOJPEG_SO_MAJOR_VERSION} VERSION ${TURBOJPEG_SO_VERSION})
690
+ if(TJMAPFLAG)
691
+ set_target_properties(turbojpeg PROPERTIES
692
+ LINK_FLAGS "${TJMAPFLAG}${TJMAPFILE}")
693
+ endif()
694
+
695
+ add_executable(tjunittest tjunittest.c tjutil.c md5/md5.c md5/md5hl.c)
696
+ target_link_libraries(tjunittest turbojpeg)
697
+ if(UNIX)
698
+ target_link_libraries(tjunittest m)
699
+ endif()
700
+
701
+ add_executable(tjbench tjbench.c tjutil.c)
702
+ target_link_libraries(tjbench turbojpeg)
703
+ if(UNIX)
704
+ target_link_libraries(tjbench m)
705
+ endif()
706
+
707
+ add_executable(tjexample tjexample.c)
708
+ target_link_libraries(tjexample turbojpeg)
709
+ if(UNIX)
710
+ target_link_libraries(tjexample m)
711
+ endif()
712
+ endif()
713
+
714
+ if(ENABLE_STATIC)
715
+ add_library(turbojpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
716
+ ${SIMD_OBJS} turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c
717
+ rdppm.c wrbmp.c wrppm.c)
718
+ set_property(TARGET turbojpeg-static PROPERTY COMPILE_FLAGS
719
+ "-DBMP_SUPPORTED -DPPM_SUPPORTED")
720
+ if(NOT MSVC)
721
+ set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
722
+ endif()
723
+
724
+ add_executable(tjunittest-static tjunittest.c tjutil.c md5/md5.c
725
+ md5/md5hl.c)
726
+ target_link_libraries(tjunittest-static turbojpeg-static)
727
+ if(UNIX)
728
+ target_link_libraries(tjunittest-static m)
729
+ endif()
730
+
731
+ add_executable(tjbench-static tjbench.c tjutil.c)
732
+ target_link_libraries(tjbench-static turbojpeg-static)
733
+ if(UNIX)
734
+ target_link_libraries(tjbench-static m)
735
+ endif()
736
+ endif()
737
+ endif()
738
+
739
+ if(WIN32)
740
+ set(USE_SETMODE "-DUSE_SETMODE")
741
+ endif()
742
+ if(WITH_12BIT)
743
+ set(COMPILE_FLAGS "-DGIF_SUPPORTED -DPPM_SUPPORTED ${USE_SETMODE}")
744
+ else()
745
+ set(COMPILE_FLAGS "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED ${USE_SETMODE}")
746
+ set(CJPEG_BMP_SOURCES rdbmp.c rdtarga.c)
747
+ set(DJPEG_BMP_SOURCES wrbmp.c wrtarga.c)
748
+
749
+ if(PNG_SUPPORTED)
750
+ report_option(PNG_SUPPORTED "PNG reading support")
751
+ set(COMPILE_FLAGS "${COMPILE_FLAGS} -DPNG_SUPPORTED")
752
+ set(CJPEG_BMP_SOURCES ${CJPEG_BMP_SOURCES} rdpng.c)
753
+ endif()
754
+ endif()
755
+
756
+ if(ENABLE_STATIC)
757
+ add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdjpeg.c rdswitch.c
758
+ ${CJPEG_BMP_SOURCES})
759
+ set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
760
+ target_link_libraries(cjpeg-static jpeg-static)
761
+ if(UNIX)
762
+ target_link_libraries(cjpeg-static m)
763
+ endif()
764
+
765
+ if(PNG_SUPPORTED)
766
+ # to avoid finding shared library from CMake cache
767
+ unset(PNG_LIBRARY CACHE)
768
+ unset(PNG_LIBRARY_RELEASE CACHE)
769
+ unset(PNG_LIBRARY_DEBUG CACHE)
770
+ unset(ZLIB_LIBRARY CACHE)
771
+ unset(ZLIB_LIBRARY_RELEASE CACHE)
772
+ unset(ZLIB_LIBRARY_DEBUG CACHE)
773
+
774
+ if (APPLE)
775
+ find_package(ZLIB REQUIRED) # macos doesn't have static zlib
776
+ endif()
777
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
778
+ find_package(PNG 1.6 REQUIRED)
779
+ if (NOT APPLE)
780
+ find_package(ZLIB REQUIRED)
781
+ endif()
782
+ target_include_directories(cjpeg-static PUBLIC ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
783
+ target_link_libraries(cjpeg-static ${PNG_LIBRARY} ${ZLIB_LIBRARY})
784
+ endif()
785
+
786
+ add_executable(djpeg-static djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrgif.c
787
+ wrppm.c ${DJPEG_BMP_SOURCES})
788
+ set_property(TARGET djpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
789
+ target_link_libraries(djpeg-static jpeg-static)
790
+ if(UNIX)
791
+ target_link_libraries(djpeg-static m)
792
+ endif()
793
+
794
+ add_executable(jpegtran-static jpegtran.c cdjpeg.c rdswitch.c transupp.c)
795
+ target_link_libraries(jpegtran-static jpeg-static)
796
+ if(UNIX)
797
+ target_link_libraries(jpegtran-static m)
798
+ endif()
799
+
800
+ set_property(TARGET jpegtran-static PROPERTY COMPILE_FLAGS "${USE_SETMODE}")
801
+ endif()
802
+
803
+ add_executable(rdjpgcom rdjpgcom.c)
804
+
805
+ add_executable(wrjpgcom wrjpgcom.c)
806
+
807
+
808
+ ###############################################################################
809
+ # TESTS
810
+ ###############################################################################
811
+
812
+ if(WITH_FUZZ)
813
+ add_subdirectory(fuzz)
814
+ endif()
815
+
816
+ add_executable(strtest strtest.c)
817
+
818
+ add_subdirectory(md5)
819
+
820
+ if(GENERATOR_IS_MULTI_CONFIG)
821
+ set(OBJDIR "\${CTEST_CONFIGURATION_TYPE}/")
822
+ else()
823
+ set(OBJDIR "")
824
+ endif()
825
+
826
+ enable_testing()
827
+
828
+ if(WITH_12BIT)
829
+ set(TESTORIG testorig12.jpg)
830
+ set(MD5_JPEG_RGB_ISLOW 9d7369207c520d37f2c1cbfcb82b2964)
831
+ set(MD5_JPEG_RGB_ISLOW2 a00bd20d8ae49684640ef7177d2e0b64)
832
+ set(MD5_PPM_RGB_ISLOW f3301d2219783b8b3d942b7239fa50c0)
833
+ set(MD5_JPEG_422_IFAST_OPT 7322e3bd2f127f7de4b40d4480ce60e4)
834
+ set(MD5_PPM_422_IFAST 79807fa552899e66a04708f533e16950)
835
+ set(MD5_JPEG_440_ISLOW e25c1912e38367be505a89c410c1c2d2)
836
+ set(MD5_PPM_440_ISLOW e7d2e26288870cfcb30f3114ad01e380)
837
+ set(MD5_PPM_422M_IFAST 07737bfe8a7c1c87aaa393a0098d16b0)
838
+ set(MD5_JPEG_420_IFAST_Q100_PROG 9447cef4803d9b0f74bcf333cc710a29)
839
+ set(MD5_PPM_420_Q100_IFAST 1b3730122709f53d007255e8dfd3305e)
840
+ set(MD5_PPM_420M_Q100_IFAST 980a1a3c5bf9510022869d30b7d26566)
841
+ set(MD5_JPEG_GRAY_ISLOW 235c90707b16e2e069f37c888b2636d9)
842
+ set(MD5_PPM_GRAY_ISLOW 7213c10af507ad467da5578ca5ee1fca)
843
+ set(MD5_PPM_GRAY_ISLOW_RGB e96ee81c30a6ed422d466338bd3de65d)
844
+ set(MD5_JPEG_420S_IFAST_OPT 7af8e60be4d9c227ec63ac9b6630855e)
845
+
846
+ set(MD5_JPEG_3x2_FLOAT_PROG_SSE a8c17daf77b457725ec929e215b603f8)
847
+ set(MD5_PPM_3x2_FLOAT_SSE 42876ab9e5c2f76a87d08db5fbd57956)
848
+ set(MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT a8c17daf77b457725ec929e215b603f8)
849
+ set(MD5_PPM_3x2_FLOAT_NO_FP_CONTRACT ${MD5_PPM_3x2_FLOAT_SSE})
850
+ set(MD5_JPEG_3x2_FLOAT_PROG_FP_CONTRACT
851
+ ${MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT})
852
+ set(MD5_PPM_3x2_FLOAT_FP_CONTRACT ${MD5_PPM_3x2_FLOAT_SSE})
853
+ set(MD5_JPEG_3x2_FLOAT_PROG_387 bc6dbbefac2872f6b9d6c4a0ae60c3c0)
854
+ set(MD5_PPM_3x2_FLOAT_387 bcc5723c61560463ac60f772e742d092)
855
+ set(MD5_JPEG_3x2_FLOAT_PROG_MSVC e27840755870fa849872e58aa0cd1400)
856
+ set(MD5_PPM_3x2_FLOAT_MSVC 6c2880b83bb1aa41dfe330e7a9768690)
857
+
858
+ set(MD5_JPEG_3x2_IFAST_PROG 1396cc2b7185cfe943d408c9d305339e)
859
+ set(MD5_PPM_3x2_IFAST 3975985ef6eeb0a2cdc58daa651ccc00)
860
+ set(MD5_PPM_420M_ISLOW_2_1 4ca6be2a6f326ff9eaab63e70a8259c0)
861
+ set(MD5_PPM_420M_ISLOW_15_8 12aa9f9534c1b3d7ba047322226365eb)
862
+ set(MD5_PPM_420M_ISLOW_13_8 f7e22817c7b25e1393e4ec101e9d4e96)
863
+ set(MD5_PPM_420M_ISLOW_11_8 800a16f9f4dc9b293197bfe11be10a82)
864
+ set(MD5_PPM_420M_ISLOW_9_8 06b7a92a9bc69f4dc36ec40f1937d55c)
865
+ set(MD5_PPM_420M_ISLOW_7_8 3ec444a14a4ab4eab88ffc49c48eca43)
866
+ set(MD5_PPM_420M_ISLOW_3_4 3e726b7ea872445b19437d1c1d4f0d93)
867
+ set(MD5_PPM_420M_ISLOW_5_8 a8a771abdc94301d20ffac119b2caccd)
868
+ set(MD5_PPM_420M_ISLOW_1_2 b419124dd5568b085787234866102866)
869
+ set(MD5_PPM_420M_ISLOW_3_8 343d19015531b7bbe746124127244fa8)
870
+ set(MD5_PPM_420M_ISLOW_1_4 35fd59d866e44659edfa3c18db2a3edb)
871
+ set(MD5_PPM_420M_ISLOW_1_8 ccaed48ac0aedefda5d4abe4013f4ad7)
872
+ set(MD5_PPM_420_ISLOW_SKIP15_31 86664cd9dc956536409e44e244d20a97)
873
+ set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 b1fd2e6de6a6db2b3f5447a0b774a117)
874
+ set(MD5_PPM_444_ISLOW_SKIP1_6 4bfeeafcbaeb2ec4b32a71cc72f64fbc)
875
+ set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 e6d8226f43bb30afe927e8b96646b147)
876
+ set(MD5_JPEG_CROP cdb35ff4b4519392690ea040c56ea99c)
877
+ else()
878
+ set(TESTORIG testorig.jpg)
879
+ set(MD5_JPEG_RGB_ISLOW 1d44a406f61da743b5fd31c0a9abdca3)
880
+ set(MD5_JPEG_RGB_ISLOW2 31d121e57b6c2934c890a7fc7763bcd4)
881
+ set(MD5_PPM_RGB_ISLOW 00a257f5393fef8821f2b88ac7421291)
882
+ set(MD5_BMP_RGB_ISLOW_565 f07d2e75073e4bb10f6c6f4d36e2e3be)
883
+ set(MD5_BMP_RGB_ISLOW_565D 4cfa0928ef3e6bb626d7728c924cfda4)
884
+ set(MD5_JPEG_422_IFAST_OPT 2540287b79d913f91665e660303ab2c8)
885
+ set(MD5_PPM_422_IFAST 35bd6b3f833bad23de82acea847129fa)
886
+ set(MD5_JPEG_440_ISLOW 368200a98a9d5041170a6232491522f9)
887
+ set(MD5_PPM_440_ISLOW 59d718725c83d37a0b59b7e4e355d2fb)
888
+ set(MD5_PPM_422M_IFAST 8dbc65323d62cca7c91ba02dd1cfa81d)
889
+ set(MD5_BMP_422M_IFAST_565 3294bd4d9a1f2b3d08ea6020d0db7065)
890
+ set(MD5_BMP_422M_IFAST_565D da98c9c7b6039511be4a79a878a9abc1)
891
+ set(MD5_JPEG_420_IFAST_Q100_PROG 0ba15f9dab81a703505f835f9dbbac6d)
892
+ set(MD5_PPM_420_Q100_IFAST 5a732542015c278ff43635e473a8a294)
893
+ set(MD5_PPM_420M_Q100_IFAST ff692ee9323a3b424894862557c092f1)
894
+ set(MD5_JPEG_GRAY_ISLOW 72b51f894b8f4a10b3ee3066770aa38d)
895
+ set(MD5_PPM_GRAY_ISLOW 8d3596c56eace32f205deccc229aa5ed)
896
+ set(MD5_PPM_GRAY_ISLOW_RGB 116424ac07b79e5e801f00508eab48ec)
897
+ set(MD5_BMP_GRAY_ISLOW_565 12f78118e56a2f48b966f792fedf23cc)
898
+ set(MD5_BMP_GRAY_ISLOW_565D bdbbd616441a24354c98553df5dc82db)
899
+ set(MD5_JPEG_420S_IFAST_OPT 388708217ac46273ca33086b22827ed8)
900
+
901
+ set(MD5_JPEG_3x2_FLOAT_PROG_SSE 343e3f8caf8af5986ebaf0bdc13b5c71)
902
+ set(MD5_PPM_3x2_FLOAT_SSE 1a75f36e5904d6fc3a85a43da9ad89bb)
903
+ set(MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT 9bca803d2042bd1eb03819e2bf92b3e5)
904
+ set(MD5_PPM_3x2_FLOAT_NO_FP_CONTRACT f6bfab038438ed8f5522fbd33595dcdc)
905
+ set(MD5_JPEG_3x2_FLOAT_PROG_FP_CONTRACT
906
+ ${MD5_JPEG_3x2_FLOAT_PROG_NO_FP_CONTRACT})
907
+ set(MD5_PPM_3x2_FLOAT_FP_CONTRACT 0e917a34193ef976b679a6b069b1be26)
908
+ set(MD5_JPEG_3x2_FLOAT_PROG_387 1657664a410e0822c924b54f6f65e6e9)
909
+ set(MD5_PPM_3x2_FLOAT_387 cb0a1f027f3d2917c902b5640214e025)
910
+ set(MD5_JPEG_3x2_FLOAT_PROG_MSVC 7999ce9cd0ee9b6c7043b7351ab7639d)
911
+ set(MD5_PPM_3x2_FLOAT_MSVC 28cdc448a6b75e97892f0e0f8d4b21f3)
912
+
913
+ set(MD5_JPEG_3x2_IFAST_PROG 1ee5d2c1a77f2da495f993c8c7cceca5)
914
+ set(MD5_PPM_3x2_IFAST fd283664b3b49127984af0a7f118fccd)
915
+ set(MD5_JPEG_420_ISLOW_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
916
+ set(MD5_JPEG_444_ISLOW_PROGARI 0a8f1c8f66e113c3cf635df0a475a617)
917
+ set(MD5_PPM_420M_IFAST_ARI 57251da28a35b46eecb7177d82d10e0e)
918
+ set(MD5_JPEG_420_ISLOW 9a68f56bc76e466aa7e52f415d0f4a5f)
919
+ set(MD5_PPM_420M_ISLOW_2_1 9f9de8c0612f8d06869b960b05abf9c9)
920
+ set(MD5_PPM_420M_ISLOW_15_8 b6875bc070720b899566cc06459b63b7)
921
+ set(MD5_PPM_420M_ISLOW_13_8 bc3452573c8152f6ae552939ee19f82f)
922
+ set(MD5_PPM_420M_ISLOW_11_8 d8cc73c0aaacd4556569b59437ba00a5)
923
+ set(MD5_PPM_420M_ISLOW_9_8 d25e61bc7eac0002f5b393aa223747b6)
924
+ set(MD5_PPM_420M_ISLOW_7_8 ddb564b7c74a09494016d6cd7502a946)
925
+ set(MD5_PPM_420M_ISLOW_3_4 8ed8e68808c3fbc4ea764fc9d2968646)
926
+ set(MD5_PPM_420M_ISLOW_5_8 a3363274999da2366a024efae6d16c9b)
927
+ set(MD5_PPM_420M_ISLOW_1_2 e692a315cea26b988c8e8b29a5dbcd81)
928
+ set(MD5_PPM_420M_ISLOW_3_8 79eca9175652ced755155c90e785a996)
929
+ set(MD5_PPM_420M_ISLOW_1_4 79cd778f8bf1a117690052cacdd54eca)
930
+ set(MD5_PPM_420M_ISLOW_1_8 391b3d4aca640c8567d6f8745eb2142f)
931
+ set(MD5_BMP_420_ISLOW_256 4980185e3776e89bd931736e1cddeee6)
932
+ set(MD5_BMP_420_ISLOW_565 bf9d13e16c4923b92e1faa604d7922cb)
933
+ set(MD5_BMP_420_ISLOW_565D 6bde71526acc44bcff76f696df8638d2)
934
+ set(MD5_BMP_420M_ISLOW_565 8dc0185245353cfa32ad97027342216f)
935
+ set(MD5_BMP_420M_ISLOW_565D ce034037d212bc403330df6f915c161b)
936
+ set(MD5_PPM_420_ISLOW_SKIP15_31 c4c65c1e43d7275cd50328a61e6534f0)
937
+ set(MD5_PPM_420_ISLOW_ARI_SKIP16_139 087c6b123db16ac00cb88c5b590bb74a)
938
+ set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 f2c1179887f0ff6c5689ed881ea3f32c)
939
+ set(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 886c6775af22370257122f8b16207e6d)
940
+ set(MD5_PPM_444_ISLOW_SKIP1_6 2f4d84e9832ce741f5f0666a84632a5a)
941
+ set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 d04ed9d1a2a059455b343bf07a2433a3)
942
+ set(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 cb57b32bd6d03e35432362f7bf184b6d)
943
+ set(MD5_JPEG_CROP b4197f377e621c4e9b1d20471432610d)
944
+ endif()
945
+
946
+ if(WITH_JAVA)
947
+ add_test(TJUnitTest
948
+ ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
949
+ -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
950
+ TJUnitTest)
951
+ add_test(TJUnitTest-yuv
952
+ ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
953
+ -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
954
+ TJUnitTest -yuv)
955
+ add_test(TJUnitTest-yuv-nopad
956
+ ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
957
+ -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
958
+ TJUnitTest -yuv -noyuvpad)
959
+ add_test(TJUnitTest-bi
960
+ ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
961
+ -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
962
+ TJUnitTest -bi)
963
+ add_test(TJUnitTest-bi-yuv
964
+ ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
965
+ -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
966
+ TJUnitTest -bi -yuv)
967
+ add_test(TJUnitTest-bi-yuv-nopad
968
+ ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
969
+ -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
970
+ TJUnitTest -bi -yuv -noyuvpad)
971
+ endif()
972
+
973
+ set(TEST_LIBTYPES "")
974
+ if(ENABLE_SHARED)
975
+ set(TEST_LIBTYPES ${TEST_LIBTYPES} shared)
976
+ endif()
977
+ if(ENABLE_STATIC)
978
+ set(TEST_LIBTYPES ${TEST_LIBTYPES} static)
979
+ endif()
980
+
981
+ set(TESTIMAGES ${CMAKE_CURRENT_SOURCE_DIR}/testimages)
982
+ set(MD5CMP ${CMAKE_CURRENT_BINARY_DIR}/md5/md5cmp)
983
+ if(CMAKE_CROSSCOMPILING)
984
+ file(RELATIVE_PATH TESTIMAGES ${CMAKE_CURRENT_BINARY_DIR} ${TESTIMAGES})
985
+ file(RELATIVE_PATH MD5CMP ${CMAKE_CURRENT_BINARY_DIR} ${MD5CMP})
986
+ endif()
987
+
988
+ # The output of the floating point DCT/IDCT algorithms differs depending on the
989
+ # type of floating point math used, so the FLOATTEST CMake variable must be
990
+ # set in order to tell the testing system which floating point results it
991
+ # should expect:
992
+ #
993
+ # sse = validate against the expected results from the libjpeg-turbo SSE SIMD
994
+ # extensions
995
+ # no-fp-contract = validate against the expected results from the C code when
996
+ # floating point expression contraction is disabled (the
997
+ # default with Clang, with GCC when building for platforms
998
+ # that lack fused multiply-add [FMA] instructions, or when
999
+ # passing -ffp-contract=off to the compiler)
1000
+ # fp-contract = validate against the expected results from the C code when
1001
+ # floating point expression contraction is enabled (the default
1002
+ # with GCC when building for platforms that have fused multiply-
1003
+ # add [FMA] instructions or when passing -ffp-contract=fast to
1004
+ # the compiler)
1005
+ # 387 = validate against the expected results from the C code when the 387 FPU
1006
+ # is being used for floating point math (which is generally the default
1007
+ # with x86 compilers)
1008
+ # msvc = validate against the expected results from the C code when compiled
1009
+ # with a 32-bit version of Visual C++
1010
+
1011
+ if(CPU_TYPE STREQUAL "x86_64" OR CPU_TYPE STREQUAL "i386")
1012
+ if(WITH_SIMD)
1013
+ set(DEFAULT_FLOATTEST sse)
1014
+ elseif(CPU_TYPE STREQUAL "x86_64")
1015
+ set(DEFAULT_FLOATTEST no-fp-contract)
1016
+ # else we can't really set an intelligent default for i386. The appropriate
1017
+ # value could be no-fp-contract, fp-contract, 387, or msvc, depending on the
1018
+ # compiler and compiler options. We leave it to the user to set FLOATTEST
1019
+ # manually.
1020
+ endif()
1021
+ else()
1022
+ if((CPU_TYPE STREQUAL "powerpc" OR CPU_TYPE STREQUAL "arm64") AND
1023
+ NOT CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT MSVC)
1024
+ set(DEFAULT_FLOATTEST fp-contract)
1025
+ else()
1026
+ set(DEFAULT_FLOATTEST no-fp-contract)
1027
+ endif()
1028
+ endif()
1029
+
1030
+ # This causes FLOATTEST to reset to the default value if WITH_SIMD has
1031
+ # changed.
1032
+ if(DEFINED WITH_SIMD_INT AND NOT WITH_SIMD EQUAL WITH_SIMD_INT)
1033
+ set(FORCE_FLOATTEST "FORCE")
1034
+ endif()
1035
+ set(WITH_SIMD_INT ${WITH_SIMD} CACHE INTERNAL "")
1036
+ set(FLOATTEST ${DEFAULT_FLOATTEST} CACHE STRING
1037
+ "The type of floating point math used by the floating point DCT/IDCT algorithms. This tells the testing system which numerical results it should expect from those tests. [sse = libjpeg-turbo x86/x86-64 SIMD extensions, no-fp-contract = generic FPU with floating point expression contraction disabled, fp-contract = generic FPU with floating point expression contraction enabled, 387 = 387 FPU, msvc = 32-bit Visual Studio] (default = ${DEFAULT_FLOATTEST})"
1038
+ ${FORCE_FLOATTEST})
1039
+ message(STATUS "FLOATTEST = ${FLOATTEST}")
1040
+
1041
+ if(FLOATTEST)
1042
+ string(TOUPPER ${FLOATTEST} FLOATTEST_UC)
1043
+ string(REGEX REPLACE "-" "_" FLOATTEST_UC ${FLOATTEST_UC})
1044
+ string(TOLOWER ${FLOATTEST} FLOATTEST)
1045
+ if(NOT FLOATTEST STREQUAL "sse" AND
1046
+ NOT FLOATTEST STREQUAL "no-fp-contract" AND
1047
+ NOT FLOATTEST STREQUAL "fp-contract" AND NOT FLOATTEST STREQUAL "387" AND
1048
+ NOT FLOATTEST STREQUAL "msvc")
1049
+ message(FATAL_ERROR "\"${FLOATTEST}\" is not a valid value for FLOATTEST.")
1050
+ endif()
1051
+ endif()
1052
+
1053
+ foreach(libtype ${TEST_LIBTYPES})
1054
+ if(libtype STREQUAL "static")
1055
+ set(suffix -static)
1056
+ endif()
1057
+ if(WITH_TURBOJPEG)
1058
+ add_test(tjunittest-${libtype}
1059
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix})
1060
+ add_test(tjunittest-${libtype}-alloc
1061
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -alloc)
1062
+ add_test(tjunittest-${libtype}-yuv
1063
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -yuv)
1064
+ add_test(tjunittest-${libtype}-yuv-alloc
1065
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -yuv -alloc)
1066
+ add_test(tjunittest-${libtype}-yuv-nopad
1067
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -yuv -noyuvpad)
1068
+ add_test(tjunittest-${libtype}-bmp
1069
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjunittest${suffix} -bmp)
1070
+
1071
+ set(MD5_PPM_GRAY_TILE b8f5defbd8e76a1d557b860b457bcd05)
1072
+ set(MD5_PPM_420_8x8_TILE cb8bb3f7de153b4cfbf6cc6f36b43bf0)
1073
+ set(MD5_PPM_420_16x16_TILE a144f52396cba331bb85c6b43d1deedc)
1074
+ set(MD5_PPM_420_32x32_TILE 5d6a7c35bb44adc89581466b253ef920)
1075
+ set(MD5_PPM_420_64x64_TILE 4e4c1a3d7ea4bace4f868bcbe83b7050)
1076
+ set(MD5_PPM_420_128x128_TILE d8b12baac07d24d9705d712359ae2181)
1077
+ set(MD5_PPM_420M_8x8_TILE bc25320e1f4c31ce2e610e43e9fd173c)
1078
+ set(MD5_PPM_420M_TILE 391df0063a66d7656f18f3a5cb107357)
1079
+ set(MD5_PPM_422_8x8_TILE d83dacd9fc73b0a6f10c09acad64eb1e)
1080
+ set(MD5_PPM_422_16x16_TILE 35077fb610d72dd743b1eb0cbcfe10fb)
1081
+ set(MD5_PPM_422_32x32_TILE 06a45b730ffa26990af4930140c3233b)
1082
+ set(MD5_PPM_422_64x64_TILE 007d991538e571e6e56c54b6224b060a)
1083
+ set(MD5_PPM_422_128x128_TILE f0b5617d578f5e13c8eee215d64d4877)
1084
+ set(MD5_PPM_422M_8x8_TILE 828941d7f41cd6283abd6beffb7fd51d)
1085
+ set(MD5_PPM_422M_TILE df4b4c784feb513d250c2dd76d61fa1a)
1086
+ set(MD5_PPM_444_TILE c757cfea44ac6439fea03ef57d04b7de)
1087
+
1088
+ # Test compressing from/decompressing to an arbitrary subregion of a larger
1089
+ # image buffer
1090
+ add_test(tjbench-${libtype}-tile-cp
1091
+ ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
1092
+ testout_tile.ppm)
1093
+ add_test(tjbench-${libtype}-tile
1094
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjbench${suffix} testout_tile.ppm 95
1095
+ -rgb -quiet -tile -benchtime 0.01 -warmup 0)
1096
+ set_tests_properties(tjbench-${libtype}-tile
1097
+ PROPERTIES DEPENDS tjbench-${libtype}-tile-cp)
1098
+
1099
+ add_test(tjbench-${libtype}-tilem-cp
1100
+ ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
1101
+ testout_tilem.ppm)
1102
+ add_test(tjbench-${libtype}-tilem
1103
+ ${CMAKE_CROSSCOMPILING_EMULATOR} tjbench${suffix} testout_tilem.ppm 95
1104
+ -rgb -fastupsample -quiet -tile -benchtime 0.01 -warmup 0)
1105
+ set_tests_properties(tjbench-${libtype}-tilem
1106
+ PROPERTIES DEPENDS tjbench-${libtype}-tilem-cp)
1107
+ endif()
1108
+
1109
+ # These tests are carefully crafted to provide full coverage of as many of
1110
+ # the underlying algorithms as possible (including all of the
1111
+ # SIMD-accelerated ones.)
1112
+
1113
+ macro(add_bittest PROG NAME ARGS OUTFILE INFILE MD5SUM)
1114
+ add_test(${PROG}-${libtype}-${NAME}
1115
+ ${CMAKE_CROSSCOMPILING_EMULATOR} ${PROG}${suffix} ${ARGS}
1116
+ -outfile ${OUTFILE} ${INFILE})
1117
+ add_test(${PROG}-${libtype}-${NAME}-cmp
1118
+ ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP} ${MD5SUM} ${OUTFILE})
1119
+ set_tests_properties(${PROG}-${libtype}-${NAME}-cmp PROPERTIES
1120
+ DEPENDS ${PROG}-${libtype}-${NAME})
1121
+ if(${ARGC} GREATER 6)
1122
+ set(DEPENDS ${ARGN})
1123
+ set_tests_properties(${PROG}-${libtype}-${NAME} PROPERTIES
1124
+ DEPENDS ${DEPENDS})
1125
+ endif()
1126
+ endmacro()
1127
+
1128
+ # CC: null SAMP: fullsize FDCT: islow ENT: huff
1129
+ add_bittest(cjpeg rgb-islow "-revert;-rgb;-dct;int;-icc;${TESTIMAGES}/test1.icc"
1130
+ testout_rgb_islow.jpg ${TESTIMAGES}/testorig.ppm
1131
+ ${MD5_JPEG_RGB_ISLOW})
1132
+
1133
+ # CC: null SAMP: fullsize IDCT: islow ENT: huff
1134
+ add_bittest(djpeg rgb-islow "-dct;int;-ppm;-icc;testout_rgb_islow.icc"
1135
+ testout_rgb_islow.ppm testout_rgb_islow.jpg
1136
+ ${MD5_PPM_RGB_ISLOW} cjpeg-${libtype}-rgb-islow)
1137
+
1138
+ add_test(djpeg-${libtype}-rgb-islow-icc-cmp
1139
+ ${CMAKE_CROSSCOMPILING_EMULATOR} ${MD5CMP}
1140
+ b06a39d730129122e85c1363ed1bbc9e testout_rgb_islow.icc)
1141
+ set_tests_properties(djpeg-${libtype}-rgb-islow-icc-cmp PROPERTIES
1142
+ DEPENDS djpeg-${libtype}-rgb-islow)
1143
+
1144
+ add_bittest(jpegtran icc "-revert;-copy;all;-icc;${TESTIMAGES}/test2.icc"
1145
+ testout_rgb_islow2.jpg testout_rgb_islow.jpg
1146
+ ${MD5_JPEG_RGB_ISLOW2} cjpeg-${libtype}-rgb-islow)
1147
+
1148
+ if(NOT WITH_12BIT)
1149
+ # CC: RGB->RGB565 SAMP: fullsize IDCT: islow ENT: huff
1150
+ add_bittest(djpeg rgb-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1151
+ testout_rgb_islow_565.bmp testout_rgb_islow.jpg
1152
+ ${MD5_BMP_RGB_ISLOW_565} cjpeg-${libtype}-rgb-islow)
1153
+
1154
+ # CC: RGB->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
1155
+ add_bittest(djpeg rgb-islow-565D "-dct;int;-rgb565;-bmp"
1156
+ testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
1157
+ ${MD5_BMP_RGB_ISLOW_565D} cjpeg-${libtype}-rgb-islow)
1158
+ endif()
1159
+
1160
+ # CC: RGB->YCC SAMP: fullsize/h2v1 FDCT: ifast ENT: 2-pass huff
1161
+ add_bittest(cjpeg 422-ifast-opt "-revert;-sample;2x1;-dct;fast;-opt"
1162
+ testout_422_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
1163
+ ${MD5_JPEG_422_IFAST_OPT})
1164
+
1165
+ # CC: YCC->RGB SAMP: fullsize/h2v1 fancy IDCT: ifast ENT: huff
1166
+ add_bittest(djpeg 422-ifast "-dct;fast"
1167
+ testout_422_ifast.ppm testout_422_ifast_opt.jpg
1168
+ ${MD5_PPM_422_IFAST} cjpeg-${libtype}-422-ifast-opt)
1169
+
1170
+ # CC: RGB->YCC SAMP: fullsize/h1v2 FDCT: islow ENT: huff
1171
+ add_bittest(cjpeg 440-islow "-sample;1x2;-dct;int"
1172
+ testout_440_islow.jpg ${TESTIMAGES}/testorig.ppm
1173
+ ${MD5_JPEG_440_ISLOW})
1174
+
1175
+ # CC: YCC->RGB SAMP: fullsize/h1v2 fancy IDCT: islow ENT: huff
1176
+ add_bittest(djpeg 440-islow "-dct;int"
1177
+ testout_440_islow.ppm testout_440_islow.jpg
1178
+ ${MD5_PPM_440_ISLOW} cjpeg-${libtype}-440-islow)
1179
+
1180
+ # CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
1181
+ add_bittest(djpeg 422m-ifast "-dct;fast;-nosmooth"
1182
+ testout_422m_ifast.ppm testout_422_ifast_opt.jpg
1183
+ ${MD5_PPM_422M_IFAST} cjpeg-${libtype}-422-ifast-opt)
1184
+
1185
+ if(NOT WITH_12BIT)
1186
+ # CC: YCC->RGB565 SAMP: h2v1 merged IDCT: ifast ENT: huff
1187
+ add_bittest(djpeg 422m-ifast-565
1188
+ "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
1189
+ testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg
1190
+ ${MD5_BMP_422M_IFAST_565} cjpeg-${libtype}-422-ifast-opt)
1191
+
1192
+ # CC: YCC->RGB565 (dithered) SAMP: h2v1 merged IDCT: ifast ENT: huff
1193
+ add_bittest(djpeg 422m-ifast-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1194
+ testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
1195
+ ${MD5_BMP_422M_IFAST_565D} cjpeg-${libtype}-422-ifast-opt)
1196
+ endif()
1197
+
1198
+ # CC: RGB->YCC SAMP: fullsize/h2v2 FDCT: ifast ENT: prog huff
1199
+ add_bittest(cjpeg 420-q100-ifast-prog
1200
+ "-revert;-sample;2x2;-quality;100;-dct;fast;-scans;${TESTIMAGES}/test.scan"
1201
+ testout_420_q100_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1202
+ ${MD5_JPEG_420_IFAST_Q100_PROG})
1203
+
1204
+ # CC: YCC->RGB SAMP: fullsize/h2v2 fancy IDCT: ifast ENT: prog huff
1205
+ add_bittest(djpeg 420-q100-ifast-prog "-dct;fast"
1206
+ testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1207
+ ${MD5_PPM_420_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
1208
+
1209
+ # CC: YCC->RGB SAMP: h2v2 merged IDCT: ifast ENT: prog huff
1210
+ add_bittest(djpeg 420m-q100-ifast-prog "-dct;fast;-nosmooth"
1211
+ testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1212
+ ${MD5_PPM_420M_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
1213
+
1214
+ # CC: RGB->Gray SAMP: fullsize FDCT: islow ENT: huff
1215
+ add_bittest(cjpeg gray-islow "-revert;-gray;-dct;int"
1216
+ testout_gray_islow.jpg ${TESTIMAGES}/testorig.ppm
1217
+ ${MD5_JPEG_GRAY_ISLOW})
1218
+
1219
+ # CC: Gray->Gray SAMP: fullsize IDCT: islow ENT: huff
1220
+ add_bittest(djpeg gray-islow "-dct;int"
1221
+ testout_gray_islow.ppm testout_gray_islow.jpg
1222
+ ${MD5_PPM_GRAY_ISLOW} cjpeg-${libtype}-gray-islow)
1223
+
1224
+ # CC: Gray->RGB SAMP: fullsize IDCT: islow ENT: huff
1225
+ add_bittest(djpeg gray-islow-rgb "-dct;int;-rgb"
1226
+ testout_gray_islow_rgb.ppm testout_gray_islow.jpg
1227
+ ${MD5_PPM_GRAY_ISLOW_RGB} cjpeg-${libtype}-gray-islow)
1228
+
1229
+ if(NOT WITH_12BIT)
1230
+ # CC: Gray->RGB565 SAMP: fullsize IDCT: islow ENT: huff
1231
+ add_bittest(djpeg gray-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1232
+ testout_gray_islow_565.bmp testout_gray_islow.jpg
1233
+ ${MD5_BMP_GRAY_ISLOW_565} cjpeg-${libtype}-gray-islow)
1234
+
1235
+ # CC: Gray->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
1236
+ add_bittest(djpeg gray-islow-565D "-dct;int;-rgb565;-bmp"
1237
+ testout_gray_islow_565D.bmp testout_gray_islow.jpg
1238
+ ${MD5_BMP_GRAY_ISLOW_565D} cjpeg-${libtype}-gray-islow)
1239
+ endif()
1240
+
1241
+ # CC: RGB->YCC SAMP: fullsize smooth/h2v2 smooth FDCT: islow
1242
+ # ENT: 2-pass huff
1243
+ add_bittest(cjpeg 420s-ifast-opt "-revert;-sample;2x2;-smooth;1;-dct;int;-opt"
1244
+ testout_420s_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
1245
+ ${MD5_JPEG_420S_IFAST_OPT})
1246
+
1247
+ if(FLOATTEST)
1248
+ # CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff
1249
+ add_bittest(cjpeg 3x2-float-prog "-revert;-sample;3x2;-dct;float;-prog"
1250
+ testout_3x2_float_prog.jpg ${TESTIMAGES}/testorig.ppm
1251
+ ${MD5_JPEG_3x2_FLOAT_PROG_${FLOATTEST_UC}})
1252
+
1253
+ # CC: YCC->RGB SAMP: fullsize/int IDCT: float ENT: prog huff
1254
+ add_bittest(djpeg 3x2-float-prog "-dct;float"
1255
+ testout_3x2_float.ppm testout_3x2_float_prog.jpg
1256
+ ${MD5_PPM_3x2_FLOAT_${FLOATTEST_UC}} cjpeg-${libtype}-3x2-float-prog)
1257
+ endif()
1258
+
1259
+ # CC: RGB->YCC SAMP: fullsize/int FDCT: ifast ENT: prog huff
1260
+ add_bittest(cjpeg 3x2-ifast-prog "-revert;-sample;3x2;-dct;fast;-prog"
1261
+ testout_3x2_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1262
+ ${MD5_JPEG_3x2_IFAST_PROG})
1263
+
1264
+ # CC: YCC->RGB SAMP: fullsize/int IDCT: ifast ENT: prog huff
1265
+ add_bittest(djpeg 3x2-ifast-prog "-dct;fast"
1266
+ testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
1267
+ ${MD5_PPM_3x2_IFAST} cjpeg-${libtype}-3x2-ifast-prog)
1268
+
1269
+ if(WITH_ARITH_ENC)
1270
+ # CC: YCC->RGB SAMP: fullsize/h2v2 FDCT: islow ENT: arith
1271
+ add_bittest(cjpeg 420-islow-ari "-revert;-dct;int;-arithmetic"
1272
+ testout_420_islow_ari.jpg ${TESTIMAGES}/testorig.ppm
1273
+ ${MD5_JPEG_420_ISLOW_ARI})
1274
+
1275
+ add_bittest(jpegtran 420-islow-ari "-revert;-arithmetic"
1276
+ testout_420_islow_ari2.jpg ${TESTIMAGES}/testimgint.jpg
1277
+ ${MD5_JPEG_420_ISLOW_ARI})
1278
+
1279
+ # CC: YCC->RGB SAMP: fullsize FDCT: islow ENT: prog arith
1280
+ add_bittest(cjpeg 444-islow-progari
1281
+ "-revert;-sample;1x1;-dct;int;-prog;-arithmetic"
1282
+ testout_444_islow_progari.jpg ${TESTIMAGES}/testorig.ppm
1283
+ ${MD5_JPEG_444_ISLOW_PROGARI})
1284
+ endif()
1285
+
1286
+ if(WITH_ARITH_DEC)
1287
+ # CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
1288
+ add_bittest(djpeg 420m-ifast-ari "-fast;-skip;1,20;-ppm"
1289
+ testout_420m_ifast_ari.ppm ${TESTIMAGES}/testimgari.jpg
1290
+ ${MD5_PPM_420M_IFAST_ARI})
1291
+
1292
+ add_bittest(jpegtran 420-islow "-revert"
1293
+ testout_420_islow.jpg ${TESTIMAGES}/testimgari.jpg
1294
+ ${MD5_JPEG_420_ISLOW})
1295
+ endif()
1296
+
1297
+ # 2/1-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 16x16 islow ENT: huff
1298
+ # 15/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 15x15 islow ENT: huff
1299
+ # 13/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 13x13 islow ENT: huff
1300
+ # 11/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 11x11 islow ENT: huff
1301
+ # 9/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 9x9 islow ENT: huff
1302
+ # 7/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 7x7 islow/14x14 islow
1303
+ # ENT: huff
1304
+ # 3/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 6x6 islow/12x12 islow
1305
+ # ENT: huff
1306
+ # 5/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 5x5 islow/10x10 islow
1307
+ # ENT: huff
1308
+ # 1/2-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 4x4 islow/8x8 islow
1309
+ # ENT: huff
1310
+ # 3/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 3x3 islow/6x6 islow
1311
+ # ENT: huff
1312
+ # 1/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 2x2 islow/4x4 islow
1313
+ # ENT: huff
1314
+ # 1/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 1x1 islow/2x2 islow
1315
+ # ENT: huff
1316
+ foreach(scale 2_1 15_8 13_8 11_8 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8)
1317
+ string(REGEX REPLACE "_" "/" scalearg ${scale})
1318
+ add_bittest(djpeg 420m-islow-${scale}
1319
+ "-dct;int;-scale;${scalearg};-nosmooth;-ppm"
1320
+ testout_420m_islow_${scale}.ppm ${TESTIMAGES}/${TESTORIG}
1321
+ ${MD5_PPM_420M_ISLOW_${scale}})
1322
+ endforeach()
1323
+
1324
+ if(NOT WITH_12BIT)
1325
+ # CC: YCC->RGB (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
1326
+ add_bittest(djpeg 420-islow-256 "-dct;int;-colors;256;-bmp"
1327
+ testout_420_islow_256.bmp ${TESTIMAGES}/${TESTORIG}
1328
+ ${MD5_BMP_420_ISLOW_256})
1329
+
1330
+ # CC: YCC->RGB565 SAMP: h2v2 fancy IDCT: islow ENT: huff
1331
+ add_bittest(djpeg 420-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1332
+ testout_420_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1333
+ ${MD5_BMP_420_ISLOW_565})
1334
+
1335
+ # CC: YCC->RGB565 (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
1336
+ add_bittest(djpeg 420-islow-565D "-dct;int;-rgb565;-bmp"
1337
+ testout_420_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1338
+ ${MD5_BMP_420_ISLOW_565D})
1339
+
1340
+ # CC: YCC->RGB565 SAMP: h2v2 merged IDCT: islow ENT: huff
1341
+ add_bittest(djpeg 420m-islow-565
1342
+ "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
1343
+ testout_420m_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1344
+ ${MD5_BMP_420M_ISLOW_565})
1345
+
1346
+ # CC: YCC->RGB565 (dithered) SAMP: h2v2 merged IDCT: islow ENT: huff
1347
+ add_bittest(djpeg 420m-islow-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1348
+ testout_420m_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1349
+ ${MD5_BMP_420M_ISLOW_565D})
1350
+ endif()
1351
+
1352
+ # Partial decode tests. These tests are designed to cover all of the
1353
+ # possible code paths in jpeg_skip_scanlines().
1354
+
1355
+ # Context rows: Yes Intra-iMCU row: Yes iMCU row prefetch: No ENT: huff
1356
+ add_bittest(djpeg 420-islow-skip15_31 "-dct;int;-skip;15,31;-ppm"
1357
+ testout_420_islow_skip15,31.ppm ${TESTIMAGES}/${TESTORIG}
1358
+ ${MD5_PPM_420_ISLOW_SKIP15_31})
1359
+
1360
+ # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: Yes ENT: arith
1361
+ if(WITH_ARITH_DEC)
1362
+ add_bittest(djpeg 420-islow-ari-skip16_139 "-dct;int;-skip;16,139;-ppm"
1363
+ testout_420_islow_ari_skip16,139.ppm ${TESTIMAGES}/testimgari.jpg
1364
+ ${MD5_PPM_420_ISLOW_ARI_SKIP16_139})
1365
+ endif()
1366
+
1367
+ # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: prog huff
1368
+ add_test(cjpeg-${libtype}-420-islow-prog
1369
+ ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -prog
1370
+ -outfile testout_420_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
1371
+ add_bittest(djpeg 420-islow-prog-crop62x62_71_71
1372
+ "-dct;int;-crop;62x62+71+71;-ppm"
1373
+ testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
1374
+ ${MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71} cjpeg-${libtype}-420-islow-prog)
1375
+
1376
+ # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: arith
1377
+ if(WITH_ARITH_DEC)
1378
+ add_bittest(djpeg 420-islow-ari-crop53x53_4_4
1379
+ "-dct;int;-crop;53x53+4+4;-ppm"
1380
+ testout_420_islow_ari_crop53x53,4,4.ppm ${TESTIMAGES}/testimgari.jpg
1381
+ ${MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4})
1382
+ endif()
1383
+
1384
+ # Context rows: No Intra-iMCU row: Yes ENT: huff
1385
+ add_test(cjpeg-${libtype}-444-islow
1386
+ ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -sample 1x1
1387
+ -outfile testout_444_islow.jpg ${TESTIMAGES}/testorig.ppm)
1388
+ add_bittest(djpeg 444-islow-skip1_6 "-dct;int;-skip;1,6;-ppm"
1389
+ testout_444_islow_skip1,6.ppm testout_444_islow.jpg
1390
+ ${MD5_PPM_444_ISLOW_SKIP1_6} cjpeg-${libtype}-444-islow)
1391
+
1392
+ # Context rows: No Intra-iMCU row: No ENT: prog huff
1393
+ add_test(cjpeg-${libtype}-444-islow-prog
1394
+ ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -prog -sample 1x1
1395
+ -outfile testout_444_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
1396
+ add_bittest(djpeg 444-islow-prog-crop98x98_13_13
1397
+ "-dct;int;-crop;98x98+13+13;-ppm"
1398
+ testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
1399
+ ${MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13} cjpeg-${libtype}-444-islow-prog)
1400
+
1401
+ # Context rows: No Intra-iMCU row: No ENT: arith
1402
+ if(WITH_ARITH_ENC)
1403
+ add_test(cjpeg-${libtype}-444-islow-ari
1404
+ ${CMAKE_CROSSCOMPILING_EMULATOR} cjpeg${suffix} -dct int -arithmetic
1405
+ -sample 1x1 -outfile testout_444_islow_ari.jpg
1406
+ ${TESTIMAGES}/testorig.ppm)
1407
+ if(WITH_ARITH_DEC)
1408
+ add_bittest(djpeg 444-islow-ari-crop37x37_0_0
1409
+ "-dct;int;-crop;37x37+0+0;-ppm"
1410
+ testout_444_islow_ari_crop37x37,0,0.ppm testout_444_islow_ari.jpg
1411
+ ${MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0} cjpeg-${libtype}-444-islow-ari)
1412
+ endif()
1413
+ endif()
1414
+
1415
+ add_bittest(jpegtran crop "-revert;-crop;120x90+20+50;-transpose;-perfect"
1416
+ testout_crop.jpg ${TESTIMAGES}/${TESTORIG}
1417
+ ${MD5_JPEG_CROP})
1418
+
1419
+ endforeach()
1420
+
1421
+ add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
1422
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/testclean.cmake)
1423
+
1424
+ configure_file(croptest.in croptest @ONLY)
1425
+ add_custom_target(croptest
1426
+ COMMAND echo croptest
1427
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/croptest)
1428
+
1429
+ if(WITH_TURBOJPEG)
1430
+ configure_file(tjbenchtest.in tjbenchtest @ONLY)
1431
+ configure_file(tjexampletest.in tjexampletest @ONLY)
1432
+ if(WIN32)
1433
+ set(BASH bash)
1434
+ endif()
1435
+ if(WITH_JAVA)
1436
+ configure_file(tjbenchtest.java.in tjbenchtest.java @ONLY)
1437
+ configure_file(tjexampletest.java.in tjexampletest.java @ONLY)
1438
+ add_custom_target(tjtest
1439
+ COMMAND echo tjbenchtest
1440
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1441
+ COMMAND echo tjbenchtest -alloc
1442
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -alloc
1443
+ COMMAND echo tjbenchtest -yuv
1444
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv
1445
+ COMMAND echo tjbenchtest -yuv -alloc
1446
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv -alloc
1447
+ COMMAND echo tjbenchtest -progressive
1448
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive
1449
+ COMMAND echo tjbenchtest -progressive -yuv
1450
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive -yuv
1451
+ COMMAND echo tjexampletest
1452
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest
1453
+ COMMAND echo tjbenchtest.java
1454
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1455
+ COMMAND echo tjbenchtest.java -yuv
1456
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java -yuv
1457
+ COMMAND echo tjbenchtest.java -progressive
1458
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java -progressive
1459
+ COMMAND echo tjbenchtest.java -progressive -yuv
1460
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1461
+ -progressive -yuv
1462
+ COMMAND echo tjexampletest.java
1463
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest.java
1464
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1465
+ ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1466
+ ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest
1467
+ ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest.java)
1468
+ else()
1469
+ add_custom_target(tjtest
1470
+ COMMAND echo tjbenchtest
1471
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1472
+ COMMAND echo tjbenchtest -alloc
1473
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -alloc
1474
+ COMMAND echo tjbenchtest -yuv
1475
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv
1476
+ COMMAND echo tjbenchtest -yuv -alloc
1477
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv -alloc
1478
+ COMMAND echo tjbenchtest -progressive
1479
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive
1480
+ COMMAND echo tjbenchtest -progressive -yuv
1481
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive -yuv
1482
+ COMMAND echo tjexampletest
1483
+ COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest
1484
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1485
+ ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest)
1486
+ endif()
1487
+ endif()
1488
+
1489
+
1490
+ ###############################################################################
1491
+ # INSTALLATION
1492
+ ###############################################################################
1493
+
1494
+ set(EXE ${CMAKE_EXECUTABLE_SUFFIX})
1495
+
1496
+ if(WITH_TURBOJPEG)
1497
+ if(ENABLE_SHARED)
1498
+ install(TARGETS turbojpeg EXPORT ${CMAKE_PROJECT_NAME}Targets
1499
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1500
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
1501
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1502
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1503
+ install(TARGETS tjbench
1504
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1505
+ if(NOT CMAKE_VERSION VERSION_LESS "3.1" AND MSVC AND
1506
+ CMAKE_C_LINKER_SUPPORTS_PDB)
1507
+ install(FILES "$<TARGET_PDB_FILE:turbojpeg>"
1508
+ DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
1509
+ endif()
1510
+ endif()
1511
+ if(ENABLE_STATIC)
1512
+ install(TARGETS turbojpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
1513
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1514
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
1515
+ if(NOT ENABLE_SHARED)
1516
+ if(GENERATOR_IS_MULTI_CONFIG)
1517
+ set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
1518
+ else()
1519
+ set(DIR ${CMAKE_CURRENT_BINARY_DIR})
1520
+ endif()
1521
+ install(PROGRAMS ${DIR}/tjbench-static${EXE}
1522
+ DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME tjbench${EXE})
1523
+ endif()
1524
+ endif()
1525
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg.h
1526
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1527
+ endif()
1528
+
1529
+ if(ENABLE_STATIC)
1530
+ install(TARGETS jpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets
1531
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
1532
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
1533
+ if(NOT ENABLE_SHARED)
1534
+ if(GENERATOR_IS_MULTI_CONFIG)
1535
+ set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}")
1536
+ else()
1537
+ set(DIR ${CMAKE_CURRENT_BINARY_DIR})
1538
+ endif()
1539
+ install(PROGRAMS ${DIR}/cjpeg-static${EXE}
1540
+ DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME cjpeg${EXE})
1541
+ install(PROGRAMS ${DIR}/djpeg-static${EXE}
1542
+ DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME djpeg${EXE})
1543
+ install(PROGRAMS ${DIR}/jpegtran-static${EXE}
1544
+ DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME jpegtran${EXE})
1545
+ endif()
1546
+ endif()
1547
+
1548
+ install(TARGETS rdjpgcom wrjpgcom RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1549
+
1550
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.ijg
1551
+ ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_SOURCE_DIR}/example.txt
1552
+ ${CMAKE_CURRENT_SOURCE_DIR}/tjexample.c
1553
+ ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg.txt
1554
+ ${CMAKE_CURRENT_SOURCE_DIR}/structure.txt
1555
+ ${CMAKE_CURRENT_SOURCE_DIR}/usage.txt ${CMAKE_CURRENT_SOURCE_DIR}/wizard.txt
1556
+ ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
1557
+ if(WITH_JAVA)
1558
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/java/TJExample.java
1559
+ DESTINATION ${CMAKE_INSTALL_DOCDIR})
1560
+ endif()
1561
+
1562
+ if(UNIX OR MINGW)
1563
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cjpeg.1
1564
+ ${CMAKE_CURRENT_SOURCE_DIR}/djpeg.1 ${CMAKE_CURRENT_SOURCE_DIR}/jpegtran.1
1565
+ ${CMAKE_CURRENT_SOURCE_DIR}/rdjpgcom.1
1566
+ ${CMAKE_CURRENT_SOURCE_DIR}/wrjpgcom.1
1567
+ DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
1568
+ endif()
1569
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libjpeg.pc
1570
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1571
+ if(WITH_TURBOJPEG)
1572
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libturbojpeg.pc
1573
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1574
+ endif()
1575
+ install(FILES
1576
+ ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}Config.cmake
1577
+ ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
1578
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
1579
+ install(EXPORT ${CMAKE_PROJECT_NAME}Targets
1580
+ NAMESPACE ${CMAKE_PROJECT_NAME}::
1581
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
1582
+
1583
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h
1584
+ ${CMAKE_CURRENT_SOURCE_DIR}/jerror.h ${CMAKE_CURRENT_SOURCE_DIR}/jmorecfg.h
1585
+ ${CMAKE_CURRENT_SOURCE_DIR}/jpeglib.h
1586
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1587
+
1588
+ include(cmakescripts/BuildPackages.cmake)
1589
+
1590
+ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/cmake_uninstall.cmake.in"
1591
+ "cmake_uninstall.cmake" IMMEDIATE @ONLY)
1592
+
1593
+ add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P cmake_uninstall.cmake)