Home | History | Annotate | Download | only in libjpeg-turbo
      1 lib_LTLIBRARIES = libjpeg.la
      2 libjpeg_la_LDFLAGS = -version-info ${LIBTOOL_CURRENT}:${SO_MINOR_VERSION}:${SO_AGE} -no-undefined
      3 include_HEADERS = jerror.h jmorecfg.h jpeglib.h
      4 
      5 if WITH_TURBOJPEG
      6 lib_LTLIBRARIES += libturbojpeg.la
      7 libturbojpeg_la_LDFLAGS = -version-info 1:0:1 -no-undefined
      8 include_HEADERS += turbojpeg.h
      9 endif
     10 
     11 nodist_include_HEADERS = jconfig.h
     12 
     13 pkgconfigdir = $(libdir)/pkgconfig
     14 pkgconfig_DATA = pkgscripts/libjpeg.pc
     15 if WITH_TURBOJPEG
     16 pkgconfig_DATA += pkgscripts/libturbojpeg.pc
     17 endif
     18 
     19 HDRS = jchuff.h jdct.h jdhuff.h jerror.h jinclude.h jmemsys.h jmorecfg.h \
     20 	jpegint.h jpeglib.h jversion.h jsimd.h jsimddct.h jpegcomp.h \
     21 	jpeg_nbits_table.h
     22 
     23 libjpeg_la_SOURCES = $(HDRS) jcapimin.c jcapistd.c jccoefct.c jccolor.c \
     24 	jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \
     25 	jcomapi.c jcparam.c jcphuff.c jcprepct.c jcsample.c jctrans.c \
     26 	jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \
     27 	jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \
     28 	jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c \
     29 	jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c \
     30 	jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c
     31 
     32 if WITH_ARITH
     33 libjpeg_la_SOURCES += jaricom.c
     34 endif
     35 
     36 if WITH_ARITH_ENC
     37 libjpeg_la_SOURCES += jcarith.c
     38 endif
     39 
     40 if WITH_ARITH_DEC
     41 libjpeg_la_SOURCES += jdarith.c
     42 endif
     43 
     44 
     45 SUBDIRS = java
     46 
     47 
     48 if WITH_TURBOJPEG
     49 
     50 libturbojpeg_la_SOURCES = $(libjpeg_la_SOURCES) turbojpeg.c turbojpeg.h \
     51 	transupp.c transupp.h jdatadst-tj.c jdatasrc-tj.c
     52 
     53 if WITH_JAVA
     54 
     55 libturbojpeg_la_SOURCES += turbojpeg-jni.c
     56 libturbojpeg_la_CFLAGS = ${JNI_CFLAGS}
     57 TJMAPFILE = turbojpeg-mapfile.jni
     58 
     59 else
     60 
     61 TJMAPFILE = turbojpeg-mapfile
     62 
     63 endif
     64 
     65 libturbojpeg_la_SOURCES += $(TJMAPFILE)
     66 
     67 if VERSION_SCRIPT
     68 libturbojpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)$(srcdir)/$(TJMAPFILE)
     69 endif
     70 
     71 endif
     72 
     73 
     74 if VERSION_SCRIPT
     75 libjpeg_la_LDFLAGS += $(VERSION_SCRIPT_FLAG)libjpeg.map
     76 endif
     77 
     78 
     79 if WITH_SIMD
     80 
     81 SUBDIRS += simd
     82 libjpeg_la_LIBADD = simd/libsimd.la
     83 libturbojpeg_la_LIBADD = simd/libsimd.la
     84 
     85 else
     86 
     87 libjpeg_la_SOURCES += jsimd_none.c
     88 
     89 endif
     90 
     91 
     92 bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom
     93 noinst_PROGRAMS = jcstest
     94 
     95 
     96 if WITH_TURBOJPEG
     97 
     98 bin_PROGRAMS += tjbench
     99 
    100 noinst_PROGRAMS += tjunittest
    101 
    102 tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
    103 	wrbmp.c wrppm.c
    104 
    105 tjbench_LDADD = libturbojpeg.la libjpeg.la -lm
    106 
    107 tjbench_CFLAGS = -DBMP_SUPPORTED -DPPM_SUPPORTED
    108 
    109 tjunittest_SOURCES = tjunittest.c tjutil.h tjutil.c
    110 
    111 tjunittest_LDADD = libturbojpeg.la
    112 
    113 endif
    114 
    115 
    116 cjpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c cjpeg.c rdgif.c rdppm.c rdswitch.c
    117 if WITH_12BIT
    118 else
    119 cjpeg_SOURCES += rdbmp.c rdtarga.c
    120 endif
    121 
    122 cjpeg_LDADD = libjpeg.la
    123 
    124 cjpeg_CFLAGS = -DGIF_SUPPORTED -DPPM_SUPPORTED
    125 if WITH_12BIT
    126 else
    127 cjpeg_CFLAGS += -DBMP_SUPPORTED -DTARGA_SUPPORTED
    128 endif
    129 
    130 djpeg_SOURCES = cdjpeg.h cderror.h cdjpeg.c djpeg.c rdcolmap.c rdswitch.c \
    131 	wrgif.c wrppm.c
    132 if WITH_12BIT
    133 else
    134 djpeg_SOURCES += wrbmp.c wrtarga.c
    135 endif
    136 
    137 djpeg_LDADD = libjpeg.la
    138 
    139 djpeg_CFLAGS = -DGIF_SUPPORTED -DPPM_SUPPORTED
    140 if WITH_12BIT
    141 else
    142 djpeg_CFLAGS += -DBMP_SUPPORTED -DTARGA_SUPPORTED
    143 endif
    144 
    145 jpegtran_SOURCES = jpegtran.c rdswitch.c cdjpeg.c transupp.c transupp.h
    146 
    147 jpegtran_LDADD = libjpeg.la
    148 
    149 rdjpgcom_SOURCES = rdjpgcom.c
    150 
    151 rdjpgcom_LDADD = libjpeg.la
    152 
    153 wrjpgcom_SOURCES = wrjpgcom.c
    154 
    155 wrjpgcom_LDADD = libjpeg.la
    156 
    157 jcstest_SOURCES = jcstest.c
    158 
    159 jcstest_LDADD = libjpeg.la
    160 
    161 dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
    162 
    163 DOCS= coderules.txt jconfig.txt change.log rdrle.c wrrle.c BUILDING.md \
    164 	ChangeLog.md
    165 
    166 dist_doc_DATA = README.ijg README.md libjpeg.txt structure.txt usage.txt \
    167 	wizard.txt LICENSE.md
    168 
    169 exampledir = $(docdir)
    170 dist_example_DATA = example.c
    171 
    172 
    173 EXTRA_DIST = win release $(DOCS) testimages CMakeLists.txt \
    174 	sharedlib/CMakeLists.txt cmakescripts libjpeg.map.in doc doxygen.config \
    175 	doxygen-extra.css jccolext.c jdcolext.c jdcol565.c jdmrgext.c jdmrg565.c \
    176 	jstdhuff.c jdcoefct.h jdmainct.h jdmaster.h jdsample.h wrppm.h \
    177 	md5/CMakeLists.txt
    178 
    179 dist-hook:
    180 	rm -rf `find $(distdir) -name .svn`
    181 
    182 
    183 SUBDIRS += md5
    184 
    185 if WITH_12BIT
    186 
    187 TESTORIG = testorig12.jpg
    188 MD5_JPEG_RGB_ISLOW = 9620f424569594bb9242b48498ad801f
    189 MD5_PPM_RGB_ISLOW = f3301d2219783b8b3d942b7239fa50c0
    190 MD5_JPEG_422_IFAST_OPT = 7322e3bd2f127f7de4b40d4480ce60e4
    191 MD5_PPM_422_IFAST = 79807fa552899e66a04708f533e16950
    192 MD5_PPM_422M_IFAST = 07737bfe8a7c1c87aaa393a0098d16b0
    193 MD5_JPEG_420_IFAST_Q100_PROG = a1da220b5604081863a504297ed59e55
    194 MD5_PPM_420_Q100_IFAST = 1b3730122709f53d007255e8dfd3305e
    195 MD5_PPM_420M_Q100_IFAST = 980a1a3c5bf9510022869d30b7d26566
    196 MD5_JPEG_GRAY_ISLOW = 235c90707b16e2e069f37c888b2636d9
    197 MD5_PPM_GRAY_ISLOW = 7213c10af507ad467da5578ca5ee1fca
    198 MD5_PPM_GRAY_ISLOW_RGB = e96ee81c30a6ed422d466338bd3de65d
    199 MD5_JPEG_420S_IFAST_OPT = 7af8e60be4d9c227ec63ac9b6630855e
    200 MD5_JPEG_3x2_FLOAT_PROG_SSE = a8c17daf77b457725ec929e215b603f8
    201 MD5_PPM_3x2_FLOAT_SSE = 42876ab9e5c2f76a87d08db5fbd57956
    202 MD5_JPEG_3x2_FLOAT_PROG_32BIT = a8c17daf77b457725ec929e215b603f8
    203 MD5_PPM_3x2_FLOAT_32BIT = 42876ab9e5c2f76a87d08db5fbd57956
    204 MD5_PPM_3x2_FLOAT_64BIT = d6fbc71153b3d8ded484dbc17c7b9cf4
    205 MD5_JPEG_3x2_IFAST_PROG = 1396cc2b7185cfe943d408c9d305339e
    206 MD5_PPM_3x2_IFAST = 3975985ef6eeb0a2cdc58daa651ccc00
    207 MD5_PPM_420M_ISLOW_2_1 = 4ca6be2a6f326ff9eaab63e70a8259c0
    208 MD5_PPM_420M_ISLOW_15_8 = 12aa9f9534c1b3d7ba047322226365eb
    209 MD5_PPM_420M_ISLOW_13_8 = f7e22817c7b25e1393e4ec101e9d4e96
    210 MD5_PPM_420M_ISLOW_11_8 = 800a16f9f4dc9b293197bfe11be10a82
    211 MD5_PPM_420M_ISLOW_9_8 = 06b7a92a9bc69f4dc36ec40f1937d55c
    212 MD5_PPM_420M_ISLOW_7_8 = 3ec444a14a4ab4eab88ffc49c48eca43
    213 MD5_PPM_420M_ISLOW_3_4 = 3e726b7ea872445b19437d1c1d4f0d93
    214 MD5_PPM_420M_ISLOW_5_8 = a8a771abdc94301d20ffac119b2caccd
    215 MD5_PPM_420M_ISLOW_1_2 = b419124dd5568b085787234866102866
    216 MD5_PPM_420M_ISLOW_3_8 = 343d19015531b7bbe746124127244fa8
    217 MD5_PPM_420M_ISLOW_1_4 = 35fd59d866e44659edfa3c18db2a3edb
    218 MD5_PPM_420M_ISLOW_1_8 = ccaed48ac0aedefda5d4abe4013f4ad7
    219 MD5_PPM_420_ISLOW_SKIP15_31 = 86664cd9dc956536409e44e244d20a97
    220 MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 = 452a21656115a163029cfba5c04fa76a
    221 MD5_PPM_444_ISLOW_SKIP1_6 = ef63901f71ef7a75cd78253fc0914f84
    222 MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 = 15b173fb5872d9575572fbcc1b05956f
    223 MD5_JPEG_CROP = cdb35ff4b4519392690ea040c56ea99c
    224 
    225 else
    226 
    227 TESTORIG = testorig.jpg
    228 MD5_JPEG_RGB_ISLOW = 768e970dd57b340ff1b83c9d3d47c77b
    229 MD5_PPM_RGB_ISLOW = 00a257f5393fef8821f2b88ac7421291
    230 MD5_BMP_RGB_ISLOW_565 = f07d2e75073e4bb10f6c6f4d36e2e3be
    231 MD5_BMP_RGB_ISLOW_565D = 4cfa0928ef3e6bb626d7728c924cfda4
    232 MD5_JPEG_422_IFAST_OPT = 2540287b79d913f91665e660303ab2c8
    233 MD5_PPM_422_IFAST = 35bd6b3f833bad23de82acea847129fa
    234 MD5_PPM_422M_IFAST = 8dbc65323d62cca7c91ba02dd1cfa81d
    235 MD5_BMP_422M_IFAST_565 = 3294bd4d9a1f2b3d08ea6020d0db7065
    236 MD5_BMP_422M_IFAST_565D = da98c9c7b6039511be4a79a878a9abc1
    237 MD5_JPEG_420_IFAST_Q100_PROG = 990cbe0329c882420a2094da7e5adade
    238 MD5_PPM_420_Q100_IFAST = 5a732542015c278ff43635e473a8a294
    239 MD5_PPM_420M_Q100_IFAST = ff692ee9323a3b424894862557c092f1
    240 MD5_JPEG_GRAY_ISLOW = 72b51f894b8f4a10b3ee3066770aa38d
    241 MD5_PPM_GRAY_ISLOW = 8d3596c56eace32f205deccc229aa5ed
    242 MD5_PPM_GRAY_ISLOW_RGB = 116424ac07b79e5e801f00508eab48ec
    243 MD5_BMP_GRAY_ISLOW_565 = 12f78118e56a2f48b966f792fedf23cc
    244 MD5_BMP_GRAY_ISLOW_565D = bdbbd616441a24354c98553df5dc82db
    245 MD5_JPEG_420S_IFAST_OPT = 388708217ac46273ca33086b22827ed8
    246 # See README.md for more details on why this next bit is necessary.
    247 MD5_JPEG_3x2_FLOAT_PROG_SSE = 343e3f8caf8af5986ebaf0bdc13b5c71
    248 MD5_PPM_3x2_FLOAT_SSE = 1a75f36e5904d6fc3a85a43da9ad89bb
    249 MD5_JPEG_3x2_FLOAT_PROG_32BIT = 9bca803d2042bd1eb03819e2bf92b3e5
    250 MD5_PPM_3x2_FLOAT_32BIT = f6bfab038438ed8f5522fbd33595dcdc
    251 MD5_PPM_3x2_FLOAT_64BIT = 0e917a34193ef976b679a6b069b1be26
    252 MD5_JPEG_3x2_IFAST_PROG = 1ee5d2c1a77f2da495f993c8c7cceca5
    253 MD5_PPM_3x2_IFAST = fd283664b3b49127984af0a7f118fccd
    254 MD5_JPEG_420_ISLOW_ARI = e986fb0a637a8d833d96e8a6d6d84ea1
    255 MD5_JPEG_444_ISLOW_PROGARI = 0a8f1c8f66e113c3cf635df0a475a617
    256 MD5_PPM_420M_IFAST_ARI = 72b59a99bcf1de24c5b27d151bde2437
    257 MD5_JPEG_420_ISLOW = 9a68f56bc76e466aa7e52f415d0f4a5f
    258 MD5_PPM_420M_ISLOW_2_1 = 9f9de8c0612f8d06869b960b05abf9c9
    259 MD5_PPM_420M_ISLOW_15_8 = b6875bc070720b899566cc06459b63b7
    260 MD5_PPM_420M_ISLOW_13_8 = bc3452573c8152f6ae552939ee19f82f
    261 MD5_PPM_420M_ISLOW_11_8 = d8cc73c0aaacd4556569b59437ba00a5
    262 MD5_PPM_420M_ISLOW_9_8 = d25e61bc7eac0002f5b393aa223747b6
    263 MD5_PPM_420M_ISLOW_7_8 = ddb564b7c74a09494016d6cd7502a946
    264 MD5_PPM_420M_ISLOW_3_4 = 8ed8e68808c3fbc4ea764fc9d2968646
    265 MD5_PPM_420M_ISLOW_5_8 = a3363274999da2366a024efae6d16c9b
    266 MD5_PPM_420M_ISLOW_1_2 = e692a315cea26b988c8e8b29a5dbcd81
    267 MD5_PPM_420M_ISLOW_3_8 = 79eca9175652ced755155c90e785a996
    268 MD5_PPM_420M_ISLOW_1_4 = 79cd778f8bf1a117690052cacdd54eca
    269 MD5_PPM_420M_ISLOW_1_8 = 391b3d4aca640c8567d6f8745eb2142f
    270 MD5_BMP_420_ISLOW_256 = 4980185e3776e89bd931736e1cddeee6
    271 MD5_BMP_420_ISLOW_565 = bf9d13e16c4923b92e1faa604d7922cb
    272 MD5_BMP_420_ISLOW_565D = 6bde71526acc44bcff76f696df8638d2
    273 MD5_BMP_420M_ISLOW_565 = 8dc0185245353cfa32ad97027342216f
    274 MD5_BMP_420M_ISLOW_565D =d1be3a3339166255e76fa50a0d70d73e
    275 MD5_PPM_420_ISLOW_SKIP15_31 = c4c65c1e43d7275cd50328a61e6534f0
    276 MD5_PPM_420_ISLOW_ARI_SKIP16_139 = 087c6b123db16ac00cb88c5b590bb74a
    277 MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 = 26eb36ccc7d1f0cb80cdabb0ac8b5d99
    278 MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 = 886c6775af22370257122f8b16207e6d
    279 MD5_PPM_444_ISLOW_SKIP1_6 = 5606f86874cf26b8fcee1117a0a436a6
    280 MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 = db87dc7ce26bcdc7a6b56239ce2b9d6c
    281 MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 = cb57b32bd6d03e35432362f7bf184b6d
    282 MD5_JPEG_CROP = b4197f377e621c4e9b1d20471432610d
    283 
    284 endif
    285 
    286 .PHONY: test
    287 test: tjquicktest tjbittest bittest
    288 
    289 if CROSS_COMPILING
    290 tjquicktest: testclean
    291 else
    292 tjquicktest: testclean all
    293 endif
    294 
    295 if WITH_TURBOJPEG
    296 if WITH_JAVA
    297 	$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest
    298 	$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -bi
    299 	$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv
    300 	$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -noyuvpad
    301 	$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi
    302 	$(JAVA) -cp java/turbojpeg.jar -Djava.library.path=.libs TJUnitTest -yuv -bi -noyuvpad
    303 endif
    304 	./tjunittest
    305 	./tjunittest -alloc
    306 	./tjunittest -yuv
    307 	./tjunittest -yuv -alloc
    308 	./tjunittest -yuv -noyuvpad
    309 endif
    310 	echo GREAT SUCCESS!
    311 
    312 if CROSS_COMPILING
    313 tjbittest: testclean
    314 else
    315 tjbittest: testclean all
    316 endif
    317 
    318 if WITH_TURBOJPEG
    319 
    320 MD5_PPM_GRAY_TILE = 89d3ca21213d9d864b50b4e4e7de4ca6
    321 MD5_PPM_420_8x8_TILE = 847fceab15c5b7b911cb986cf0f71de3
    322 MD5_PPM_420_16x16_TILE = ca45552a93687e078f7137cc4126a7b0
    323 MD5_PPM_420_32x32_TILE = d8676f1d6b68df358353bba9844f4a00
    324 MD5_PPM_420_64x64_TILE = 4e4c1a3d7ea4bace4f868bcbe83b7050
    325 MD5_PPM_420_128x128_TILE = f24c3429c52265832beab9df72a0ceae
    326 MD5_PPM_420M_8x8_TILE = bc25320e1f4c31ce2e610e43e9fd173c
    327 MD5_PPM_420M_TILE = 75ffdf14602258c5c189522af57fa605
    328 MD5_PPM_422_8x8_TILE = d83dacd9fc73b0a6f10c09acad64eb1e
    329 MD5_PPM_422_16x16_TILE = 35077fb610d72dd743b1eb0cbcfe10fb
    330 MD5_PPM_422_32x32_TILE = e6902ed8a449ecc0f0d6f2bf945f65f7
    331 MD5_PPM_422_64x64_TILE = 2b4502a8f316cedbde1da7bce3d2231e
    332 MD5_PPM_422_128x128_TILE = f0b5617d578f5e13c8eee215d64d4877
    333 MD5_PPM_422M_8x8_TILE = 828941d7f41cd6283abd6beffb7fd51d
    334 MD5_PPM_422M_TILE = e877ae1324c4a280b95376f7f018172f
    335 MD5_PPM_444_TILE = 7964e41e67cfb8d0a587c0aa4798f9c3
    336 
    337 # Test compressing from/decompressing to an arbitrary subregion of a larger
    338 # image buffer
    339 	cp $(srcdir)/testimages/testorig.ppm testout_tile.ppm
    340 	./tjbench testout_tile.ppm 95 -rgb -quiet -tile -benchtime 0.01 >/dev/null 2>&1
    341 	for i in 8 16 32 64 128; do \
    342 		md5/md5cmp $(MD5_PPM_GRAY_TILE) testout_tile_GRAY_Q95_$$i\x$$i.ppm; \
    343 	done
    344 	md5/md5cmp $(MD5_PPM_420_8x8_TILE) testout_tile_420_Q95_8x8.ppm
    345 	md5/md5cmp $(MD5_PPM_420_16x16_TILE) testout_tile_420_Q95_16x16.ppm
    346 	md5/md5cmp $(MD5_PPM_420_32x32_TILE) testout_tile_420_Q95_32x32.ppm
    347 	md5/md5cmp $(MD5_PPM_420_64x64_TILE) testout_tile_420_Q95_64x64.ppm
    348 	md5/md5cmp $(MD5_PPM_420_128x128_TILE) testout_tile_420_Q95_128x128.ppm
    349 	md5/md5cmp $(MD5_PPM_422_8x8_TILE) testout_tile_422_Q95_8x8.ppm
    350 	md5/md5cmp $(MD5_PPM_422_16x16_TILE) testout_tile_422_Q95_16x16.ppm
    351 	md5/md5cmp $(MD5_PPM_422_32x32_TILE) testout_tile_422_Q95_32x32.ppm
    352 	md5/md5cmp $(MD5_PPM_422_64x64_TILE) testout_tile_422_Q95_64x64.ppm
    353 	md5/md5cmp $(MD5_PPM_422_128x128_TILE) testout_tile_422_Q95_128x128.ppm
    354 	for i in 8 16 32 64 128; do \
    355 		md5/md5cmp $(MD5_PPM_444_TILE) testout_tile_444_Q95_$$i\x$$i.ppm; \
    356 	done
    357 	rm -f testout_tile_GRAY_* testout_tile_420_* testout_tile_422_* testout_tile_444_*
    358 
    359 	./tjbench testout_tile.ppm 95 -rgb -fastupsample -quiet -tile -benchtime 0.01 >/dev/null 2>&1
    360 	md5/md5cmp $(MD5_PPM_420M_8x8_TILE) testout_tile_420_Q95_8x8.ppm
    361 	for i in 16 32 64 128; do \
    362 		md5/md5cmp $(MD5_PPM_420M_TILE) testout_tile_420_Q95_$$i\x$$i.ppm; \
    363 	done
    364 	md5/md5cmp $(MD5_PPM_422M_8x8_TILE) testout_tile_422_Q95_8x8.ppm
    365 	for i in 16 32 64 128; do \
    366 		md5/md5cmp $(MD5_PPM_422M_TILE) testout_tile_422_Q95_$$i\x$$i.ppm; \
    367 	done
    368 	rm -f testout_tile_GRAY_* testout_tile_420_* testout_tile_422_* testout_tile_444_* testout_tile.ppm
    369 	echo GREAT SUCCESS!
    370 
    371 endif
    372 
    373 if CROSS_COMPILING
    374 bittest: testclean
    375 else
    376 bittest: testclean all
    377 endif
    378 
    379 # These tests are carefully crafted to provide full coverage of as many of the
    380 # underlying algorithms as possible (including all of the SIMD-accelerated
    381 # ones.)
    382 
    383 # CC: null  SAMP: fullsize  FDCT: islow  ENT: huff
    384 	./cjpeg -rgb -dct int -outfile testout_rgb_islow.jpg $(srcdir)/testimages/testorig.ppm
    385 	md5/md5cmp $(MD5_JPEG_RGB_ISLOW) testout_rgb_islow.jpg
    386 # CC: null  SAMP: fullsize  IDCT: islow  ENT: huff
    387 	./djpeg -dct int -ppm -outfile testout_rgb_islow.ppm testout_rgb_islow.jpg
    388 	md5/md5cmp $(MD5_PPM_RGB_ISLOW) testout_rgb_islow.ppm
    389 	rm -f testout_rgb_islow.ppm
    390 if WITH_12BIT
    391 	rm -f testout_rgb_islow.jpg
    392 else
    393 # CC: RGB->RGB565  SAMP: fullsize  IDCT: islow  ENT: huff
    394 	./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_rgb_islow_565.bmp testout_rgb_islow.jpg
    395 	md5/md5cmp $(MD5_BMP_RGB_ISLOW_565) testout_rgb_islow_565.bmp
    396 	rm -f testout_rgb_islow_565.bmp
    397 # CC: RGB->RGB565 (dithered)  SAMP: fullsize  IDCT: islow  ENT: huff
    398 	./djpeg -dct int -rgb565 -bmp -outfile testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
    399 	md5/md5cmp $(MD5_BMP_RGB_ISLOW_565D) testout_rgb_islow_565D.bmp
    400 	rm -f testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
    401 endif
    402 
    403 # CC: RGB->YCC  SAMP: fullsize/h2v1  FDCT: ifast  ENT: 2-pass huff
    404 	./cjpeg -sample 2x1 -dct fast -opt -outfile testout_422_ifast_opt.jpg $(srcdir)/testimages/testorig.ppm
    405 	md5/md5cmp $(MD5_JPEG_422_IFAST_OPT) testout_422_ifast_opt.jpg
    406 # CC: YCC->RGB  SAMP: fullsize/h2v1 fancy  IDCT: ifast  ENT: huff
    407 	./djpeg -dct fast -outfile testout_422_ifast.ppm testout_422_ifast_opt.jpg
    408 	md5/md5cmp $(MD5_PPM_422_IFAST) testout_422_ifast.ppm
    409 	rm -f testout_422_ifast.ppm
    410 # CC: YCC->RGB  SAMP: h2v1 merged  IDCT: ifast  ENT: huff
    411 	./djpeg -dct fast -nosmooth -outfile testout_422m_ifast.ppm testout_422_ifast_opt.jpg
    412 	md5/md5cmp $(MD5_PPM_422M_IFAST) testout_422m_ifast.ppm
    413 	rm -f testout_422m_ifast.ppm
    414 if WITH_12BIT
    415 	rm -f testout_422_ifast_opt.jpg
    416 else
    417 # CC: YCC->RGB565  SAMP: h2v1 merged  IDCT: ifast  ENT: huff
    418 	./djpeg -dct int -nosmooth -rgb565 -dither none -bmp -outfile testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg
    419 	md5/md5cmp $(MD5_BMP_422M_IFAST_565) testout_422m_ifast_565.bmp
    420 	rm -f testout_422m_ifast_565.bmp
    421 # CC: YCC->RGB565 (dithered)  SAMP: h2v1 merged  IDCT: ifast  ENT: huff
    422 	./djpeg -dct int -nosmooth -rgb565 -bmp -outfile testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
    423 	md5/md5cmp $(MD5_BMP_422M_IFAST_565D) testout_422m_ifast_565D.bmp
    424 	rm -f testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
    425 endif
    426 
    427 # CC: RGB->YCC  SAMP: fullsize/h2v2  FDCT: ifast  ENT: prog huff
    428 	./cjpeg -sample 2x2 -quality 100 -dct fast -prog -outfile testout_420_q100_ifast_prog.jpg $(srcdir)/testimages/testorig.ppm
    429 	md5/md5cmp $(MD5_JPEG_420_IFAST_Q100_PROG) testout_420_q100_ifast_prog.jpg
    430 # CC: YCC->RGB  SAMP: fullsize/h2v2 fancy  IDCT: ifast  ENT: prog huff
    431 	./djpeg -dct fast -outfile testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
    432 	md5/md5cmp $(MD5_PPM_420_Q100_IFAST) testout_420_q100_ifast.ppm
    433 	rm -f testout_420_q100_ifast.ppm
    434 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: ifast  ENT: prog huff
    435 	./djpeg -dct fast -nosmooth -outfile testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
    436 	md5/md5cmp $(MD5_PPM_420M_Q100_IFAST) testout_420m_q100_ifast.ppm
    437 	rm -f testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
    438 
    439 # CC: RGB->Gray  SAMP: fullsize  FDCT: islow  ENT: huff
    440 	./cjpeg -gray -dct int -outfile testout_gray_islow.jpg $(srcdir)/testimages/testorig.ppm
    441 	md5/md5cmp $(MD5_JPEG_GRAY_ISLOW) testout_gray_islow.jpg
    442 # CC: Gray->Gray  SAMP: fullsize  IDCT: islow  ENT: huff
    443 	./djpeg -dct int -outfile testout_gray_islow.ppm testout_gray_islow.jpg
    444 	md5/md5cmp $(MD5_PPM_GRAY_ISLOW) testout_gray_islow.ppm
    445 	rm -f testout_gray_islow.ppm
    446 # CC: Gray->RGB  SAMP: fullsize  IDCT: islow  ENT: huff
    447 	./djpeg -dct int -rgb -outfile testout_gray_islow_rgb.ppm testout_gray_islow.jpg
    448 	md5/md5cmp $(MD5_PPM_GRAY_ISLOW_RGB) testout_gray_islow_rgb.ppm
    449 	rm -f testout_gray_islow_rgb.ppm
    450 if WITH_12BIT
    451 	rm -f testout_gray_islow.jpg
    452 else
    453 # CC: Gray->RGB565  SAMP: fullsize  IDCT: islow  ENT: huff
    454 	./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_gray_islow_565.bmp testout_gray_islow.jpg
    455 	md5/md5cmp $(MD5_BMP_GRAY_ISLOW_565) testout_gray_islow_565.bmp
    456 	rm -f testout_gray_islow_565.bmp
    457 # CC: Gray->RGB565 (dithered)  SAMP: fullsize  IDCT: islow  ENT: huff
    458 	./djpeg -dct int -rgb565 -bmp -outfile testout_gray_islow_565D.bmp testout_gray_islow.jpg
    459 	md5/md5cmp $(MD5_BMP_GRAY_ISLOW_565D) testout_gray_islow_565D.bmp
    460 	rm -f testout_gray_islow_565D.bmp testout_gray_islow.jpg
    461 endif
    462 
    463 # CC: RGB->YCC  SAMP: fullsize smooth/h2v2 smooth  FDCT: islow
    464 # ENT: 2-pass huff
    465 	./cjpeg -sample 2x2 -smooth 1 -dct int -opt -outfile testout_420s_ifast_opt.jpg $(srcdir)/testimages/testorig.ppm
    466 	md5/md5cmp $(MD5_JPEG_420S_IFAST_OPT) testout_420s_ifast_opt.jpg
    467 	rm -f testout_420s_ifast_opt.jpg
    468 
    469 # The output of the floating point tests is not validated by default, because
    470 # the output differs depending on the type of floating point math used, and
    471 # this is only deterministic if the DCT/IDCT are implemented using SIMD
    472 # instructions on a particular platform.  Pass one of the following on the make
    473 # command line to validate the floating point tests against one of the expected
    474 # results:
    475 #
    476 # FLOATTEST=sse  validate against the expected results from the libjpeg-turbo
    477 #                SSE SIMD extensions
    478 # FLOATTEST=32bit  validate against the expected results from the C code
    479 #                  when running on a 32-bit FPU (or when SSE is being used for
    480 #                  floating point math, which is generally the default with
    481 #                  x86-64 compilers)
    482 # FLOATTEST=64bit  validate against the exepected results from the C code
    483 #                  when running on a 64-bit FPU
    484 
    485 # CC: RGB->YCC  SAMP: fullsize/int  FDCT: float  ENT: prog huff
    486 	./cjpeg -sample 3x2 -dct float -prog -outfile testout_3x2_float_prog.jpg $(srcdir)/testimages/testorig.ppm
    487 	if [ "${FLOATTEST}" = "sse" ]; then \
    488 		md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_SSE) testout_3x2_float_prog.jpg; \
    489 	elif [ "${FLOATTEST}" = "32bit" -o "${FLOATTEST}" = "64bit" ]; then \
    490 		md5/md5cmp $(MD5_JPEG_3x2_FLOAT_PROG_32BIT) testout_3x2_float_prog.jpg; \
    491 	fi
    492 # CC: YCC->RGB  SAMP: fullsize/int  IDCT: float  ENT: prog huff
    493 	./djpeg -dct float -outfile testout_3x2_float.ppm testout_3x2_float_prog.jpg
    494 	if [ "${FLOATTEST}" = "sse" ]; then \
    495 		md5/md5cmp $(MD5_PPM_3x2_FLOAT_SSE) testout_3x2_float.ppm; \
    496 	elif [ "${FLOATTEST}" = "32bit" ]; then \
    497 		md5/md5cmp $(MD5_PPM_3x2_FLOAT_32BIT) testout_3x2_float.ppm; \
    498 	elif [ "${FLOATTEST}" = "64bit" ]; then \
    499 		md5/md5cmp $(MD5_PPM_3x2_FLOAT_64BIT) testout_3x2_float.ppm; \
    500 	fi
    501 	rm -f testout_3x2_float.ppm testout_3x2_float_prog.jpg
    502 
    503 # CC: RGB->YCC  SAMP: fullsize/int  FDCT: ifast  ENT: prog huff
    504 	./cjpeg -sample 3x2 -dct fast -prog -outfile testout_3x2_ifast_prog.jpg $(srcdir)/testimages/testorig.ppm
    505 	md5/md5cmp $(MD5_JPEG_3x2_IFAST_PROG) testout_3x2_ifast_prog.jpg
    506 # CC: YCC->RGB  SAMP: fullsize/int  IDCT: ifast  ENT: prog huff
    507 	./djpeg -dct fast -outfile testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
    508 	md5/md5cmp $(MD5_PPM_3x2_IFAST) testout_3x2_ifast.ppm
    509 	rm -f testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
    510 
    511 if WITH_ARITH_ENC
    512 # CC: YCC->RGB  SAMP: fullsize/h2v2  FDCT: islow  ENT: arith
    513 	./cjpeg -dct int -arithmetic -outfile testout_420_islow_ari.jpg $(srcdir)/testimages/testorig.ppm
    514 	md5/md5cmp $(MD5_JPEG_420_ISLOW_ARI) testout_420_islow_ari.jpg
    515 	rm -f testout_420_islow_ari.jpg
    516 	./jpegtran -arithmetic -outfile testout_420_islow_ari.jpg $(srcdir)/testimages/testimgint.jpg
    517 	md5/md5cmp $(MD5_JPEG_420_ISLOW_ARI) testout_420_islow_ari.jpg
    518 	rm -f testout_420_islow_ari.jpg
    519 # CC: YCC->RGB  SAMP: fullsize  FDCT: islow  ENT: prog arith
    520 	./cjpeg -sample 1x1 -dct int -prog -arithmetic -outfile testout_444_islow_progari.jpg $(srcdir)/testimages/testorig.ppm
    521 	md5/md5cmp $(MD5_JPEG_444_ISLOW_PROGARI) testout_444_islow_progari.jpg
    522 	rm -f testout_444_islow_progari.jpg
    523 endif
    524 if WITH_ARITH_DEC
    525 # CC: RGB->YCC  SAMP: h2v2 merged  IDCT: ifast  ENT: arith
    526 	./djpeg -fast -ppm -outfile testout_420m_ifast_ari.ppm $(srcdir)/testimages/testimgari.jpg
    527 	md5/md5cmp $(MD5_PPM_420M_IFAST_ARI) testout_420m_ifast_ari.ppm
    528 	rm -f testout_420m_ifast_ari.ppm
    529 	./jpegtran -outfile testout_420_islow.jpg $(srcdir)/testimages/testimgari.jpg
    530 	md5/md5cmp $(MD5_JPEG_420_ISLOW) testout_420_islow.jpg
    531 	rm -f testout_420_islow.jpg
    532 endif
    533 
    534 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 16x16 islow  ENT: huff
    535 	./djpeg -dct int -scale 2/1 -nosmooth -ppm -outfile testout_420m_islow_2_1.ppm $(srcdir)/testimages/$(TESTORIG)
    536 	md5/md5cmp $(MD5_PPM_420M_ISLOW_2_1) testout_420m_islow_2_1.ppm
    537 	rm -f testout_420m_islow_2_1.ppm
    538 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 15x15 islow  ENT: huff
    539 	./djpeg -dct int -scale 15/8 -nosmooth -ppm -outfile testout_420m_islow_15_8.ppm $(srcdir)/testimages/$(TESTORIG)
    540 	md5/md5cmp $(MD5_PPM_420M_ISLOW_15_8) testout_420m_islow_15_8.ppm
    541 	rm -f testout_420m_islow_15_8.ppm
    542 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 13x13 islow  ENT: huff
    543 	./djpeg -dct int -scale 13/8 -nosmooth -ppm -outfile testout_420m_islow_13_8.ppm $(srcdir)/testimages/$(TESTORIG)
    544 	md5/md5cmp $(MD5_PPM_420M_ISLOW_13_8) testout_420m_islow_13_8.ppm
    545 	rm -f testout_420m_islow_13_8.ppm
    546 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 11x11 islow  ENT: huff
    547 	./djpeg -dct int -scale 11/8 -nosmooth -ppm -outfile testout_420m_islow_11_8.ppm $(srcdir)/testimages/$(TESTORIG)
    548 	md5/md5cmp $(MD5_PPM_420M_ISLOW_11_8) testout_420m_islow_11_8.ppm
    549 	rm -f testout_420m_islow_11_8.ppm
    550 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 9x9 islow  ENT: huff
    551 	./djpeg -dct int -scale 9/8 -nosmooth -ppm -outfile testout_420m_islow_9_8.ppm $(srcdir)/testimages/$(TESTORIG)
    552 	md5/md5cmp $(MD5_PPM_420M_ISLOW_9_8) testout_420m_islow_9_8.ppm
    553 	rm -f testout_420m_islow_9_8.ppm
    554 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 7x7 islow/14x14 islow  ENT: huff
    555 	./djpeg -dct int -scale 7/8 -nosmooth -ppm -outfile testout_420m_islow_7_8.ppm $(srcdir)/testimages/$(TESTORIG)
    556 	md5/md5cmp $(MD5_PPM_420M_ISLOW_7_8) testout_420m_islow_7_8.ppm
    557 	rm -f testout_420m_islow_7_8.ppm
    558 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 6x6 islow/12x12 islow  ENT: huff
    559 	./djpeg -dct int -scale 3/4 -nosmooth -ppm -outfile testout_420m_islow_3_4.ppm $(srcdir)/testimages/$(TESTORIG)
    560 	md5/md5cmp $(MD5_PPM_420M_ISLOW_3_4) testout_420m_islow_3_4.ppm
    561 	rm -f testout_420m_islow_3_4.ppm
    562 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 5x5 islow/10x10 islow  ENT: huff
    563 	./djpeg -dct int -scale 5/8 -nosmooth -ppm -outfile testout_420m_islow_5_8.ppm $(srcdir)/testimages/$(TESTORIG)
    564 	md5/md5cmp $(MD5_PPM_420M_ISLOW_5_8) testout_420m_islow_5_8.ppm
    565 	rm -f testout_420m_islow_5_8.ppm
    566 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 4x4 islow/8x8 islow  ENT: huff
    567 	./djpeg -dct int -scale 1/2 -nosmooth -ppm -outfile testout_420m_islow_1_2.ppm $(srcdir)/testimages/$(TESTORIG)
    568 	md5/md5cmp $(MD5_PPM_420M_ISLOW_1_2) testout_420m_islow_1_2.ppm
    569 	rm -f testout_420m_islow_1_2.ppm
    570 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 3x3 islow/6x6 islow  ENT: huff
    571 	./djpeg -dct int -scale 3/8 -nosmooth -ppm -outfile testout_420m_islow_3_8.ppm $(srcdir)/testimages/$(TESTORIG)
    572 	md5/md5cmp $(MD5_PPM_420M_ISLOW_3_8) testout_420m_islow_3_8.ppm
    573 	rm -f testout_420m_islow_3_8.ppm
    574 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 2x2 islow/4x4 islow  ENT: huff
    575 	./djpeg -dct int -scale 1/4 -nosmooth -ppm -outfile testout_420m_islow_1_4.ppm $(srcdir)/testimages/$(TESTORIG)
    576 	md5/md5cmp $(MD5_PPM_420M_ISLOW_1_4) testout_420m_islow_1_4.ppm
    577 	rm -f testout_420m_islow_1_4.ppm
    578 # CC: YCC->RGB  SAMP: h2v2 merged  IDCT: 1x1 islow/2x2 islow  ENT: huff
    579 	./djpeg -dct int -scale 1/8 -nosmooth -ppm -outfile testout_420m_islow_1_8.ppm $(srcdir)/testimages/$(TESTORIG)
    580 	md5/md5cmp $(MD5_PPM_420M_ISLOW_1_8) testout_420m_islow_1_8.ppm
    581 	rm -f testout_420m_islow_1_8.ppm
    582 if WITH_12BIT
    583 else
    584 # CC: YCC->RGB (dithered)  SAMP: h2v2 fancy  IDCT: islow  ENT: huff
    585 	./djpeg -dct int -colors 256 -bmp -outfile testout_420_islow_256.bmp $(srcdir)/testimages/$(TESTORIG)
    586 	md5/md5cmp $(MD5_BMP_420_ISLOW_256) testout_420_islow_256.bmp
    587 	rm -f testout_420_islow_256.bmp
    588 # CC: YCC->RGB565  SAMP: h2v2 fancy  IDCT: islow  ENT: huff
    589 	./djpeg -dct int -rgb565 -dither none -bmp -outfile testout_420_islow_565.bmp $(srcdir)/testimages/$(TESTORIG)
    590 	md5/md5cmp $(MD5_BMP_420_ISLOW_565) testout_420_islow_565.bmp
    591 	rm -f testout_420_islow_565.bmp
    592 # CC: YCC->RGB565 (dithered)  SAMP: h2v2 fancy  IDCT: islow  ENT: huff
    593 	./djpeg -dct int -rgb565 -bmp -outfile testout_420_islow_565D.bmp $(srcdir)/testimages/$(TESTORIG)
    594 	md5/md5cmp $(MD5_BMP_420_ISLOW_565D) testout_420_islow_565D.bmp
    595 	rm -f testout_420_islow_565D.bmp
    596 # CC: YCC->RGB565  SAMP: h2v2 merged  IDCT: islow  ENT: huff
    597 	./djpeg -dct int -nosmooth -rgb565 -dither none -bmp -outfile testout_420m_islow_565.bmp $(srcdir)/testimages/$(TESTORIG)
    598 	md5/md5cmp $(MD5_BMP_420M_ISLOW_565) testout_420m_islow_565.bmp
    599 	rm -f testout_420m_islow_565.bmp
    600 # CC: YCC->RGB565 (dithered)  SAMP: h2v2 merged  IDCT: islow  ENT: huff
    601 	./djpeg -dct int -nosmooth -rgb565 -bmp -outfile testout_420m_islow_565D.bmp $(srcdir)/testimages/$(TESTORIG)
    602 	md5/md5cmp $(MD5_BMP_420M_ISLOW_565D) testout_420m_islow_565D.bmp
    603 	rm -f testout_420m_islow_565D.bmp
    604 endif
    605 
    606 # Partial decode tests.  These tests are designed to cover all of the possible
    607 # code paths in jpeg_skip_scanlines().
    608 
    609 # Context rows: Yes  Intra-iMCU row: Yes  iMCU row prefetch: No   ENT: huff
    610 	./djpeg -dct int -skip 15,31 -ppm -outfile testout_420_islow_skip15,31.ppm $(srcdir)/testimages/$(TESTORIG)
    611 	md5/md5cmp $(MD5_PPM_420_ISLOW_SKIP15_31) testout_420_islow_skip15,31.ppm
    612 	rm -f testout_420_islow_skip15,31.ppm
    613 # Context rows: Yes  Intra-iMCU row: No   iMCU row prefetch: Yes  ENT: arith
    614 if WITH_ARITH_DEC
    615 	./djpeg -dct int -skip 16,139 -ppm -outfile testout_420_islow_ari_skip16,139.ppm $(srcdir)/testimages/testimgari.jpg
    616 	md5/md5cmp $(MD5_PPM_420_ISLOW_ARI_SKIP16_139) testout_420_islow_ari_skip16,139.ppm
    617 	rm -f testout_420_islow_ari_skip16,139.ppm
    618 endif
    619 # Context rows: Yes  Intra-iMCU row: No   iMCU row prefetch: No   ENT: prog huff
    620 	./cjpeg -dct int -prog -outfile testout_420_islow_prog.jpg $(srcdir)/testimages/testorig.ppm
    621 	./djpeg -dct int -crop 62x62+71+71 -ppm -outfile testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
    622 	md5/md5cmp $(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71) testout_420_islow_prog_crop62x62,71,71.ppm
    623 	rm -f testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
    624 # Context rows: Yes  Intra-iMCU row: No   iMCU row prefetch: No   ENT: arith
    625 if WITH_ARITH_DEC
    626 	./djpeg -dct int -crop 53x53+4+4 -ppm -outfile testout_420_islow_ari_crop53x53,4,4.ppm $(srcdir)/testimages/testimgari.jpg
    627 	md5/md5cmp $(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4) testout_420_islow_ari_crop53x53,4,4.ppm
    628 	rm -f testout_420_islow_ari_crop53x53,4,4.ppm
    629 endif
    630 # Context rows: No   Intra-iMCU row: Yes  ENT: huff
    631 	./cjpeg -dct int -sample 1x1 -outfile testout_444_islow.jpg $(srcdir)/testimages/testorig.ppm
    632 	./djpeg -dct int -skip 1,6 -ppm -outfile testout_444_islow_skip1,6.ppm testout_444_islow.jpg
    633 	md5/md5cmp $(MD5_PPM_444_ISLOW_SKIP1_6) testout_444_islow_skip1,6.ppm
    634 	rm -f testout_444_islow_skip1,6.ppm testout_444_islow.jpg
    635 # Context rows: No   Intra-iMCU row: No   ENT: prog huff
    636 	./cjpeg -dct int -prog -sample 1x1 -outfile testout_444_islow_prog.jpg $(srcdir)/testimages/testorig.ppm
    637 	./djpeg -dct int -crop 98x98+13+13 -ppm -outfile testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
    638 	md5/md5cmp $(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13) testout_444_islow_prog_crop98x98,13,13.ppm
    639 	rm -f testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
    640 # Context rows: No   Intra-iMCU row: No   ENT: arith
    641 if WITH_ARITH_ENC
    642 	./cjpeg -dct int -arithmetic -sample 1x1 -outfile testout_444_islow_ari.jpg $(srcdir)/testimages/testorig.ppm
    643 if WITH_ARITH_DEC
    644 	./djpeg -dct int -crop 37x37+0+0 -ppm -outfile testout_444_islow_ari_crop37x37,0,0.ppm testout_444_islow_ari.jpg
    645 	md5/md5cmp $(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0) testout_444_islow_ari_crop37x37,0,0.ppm
    646 	rm -f testout_444_islow_ari_crop37x37,0,0.ppm
    647 endif
    648 	rm -f testout_444_islow_ari.jpg
    649 endif
    650 
    651 	./jpegtran -crop 120x90+20+50 -transpose -perfect -outfile testout_crop.jpg $(srcdir)/testimages/$(TESTORIG)
    652 	md5/md5cmp $(MD5_JPEG_CROP) testout_crop.jpg
    653 	rm -f testout_crop.jpg
    654 	echo GREAT SUCCESS!
    655 
    656 
    657 testclean:
    658 	rm -f testout*
    659 	rm -f *_GRAY_*.bmp
    660 	rm -f *_GRAY_*.png
    661 	rm -f *_GRAY_*.ppm
    662 	rm -f *_GRAY_*.jpg
    663 	rm -f *_GRAY.yuv
    664 	rm -f *_420_*.bmp
    665 	rm -f *_420_*.png
    666 	rm -f *_420_*.ppm
    667 	rm -f *_420_*.jpg
    668 	rm -f *_420.yuv
    669 	rm -f *_422_*.bmp
    670 	rm -f *_422_*.png
    671 	rm -f *_422_*.ppm
    672 	rm -f *_422_*.jpg
    673 	rm -f *_422.yuv
    674 	rm -f *_444_*.bmp
    675 	rm -f *_444_*.png
    676 	rm -f *_444_*.ppm
    677 	rm -f *_444_*.jpg
    678 	rm -f *_444.yuv
    679 	rm -f *_440_*.bmp
    680 	rm -f *_440_*.png
    681 	rm -f *_440_*.ppm
    682 	rm -f *_440_*.jpg
    683 	rm -f *_440.yuv
    684 	rm -f *_411_*.bmp
    685 	rm -f *_411_*.png
    686 	rm -f *_411_*.ppm
    687 	rm -f *_411_*.jpg
    688 	rm -f *_411.yuv
    689 
    690 
    691 tjtest:
    692 	sh ./tjbenchtest
    693 	sh ./tjbenchtest -alloc
    694 	sh ./tjbenchtest -yuv
    695 	sh ./tjbenchtest -yuv -alloc
    696 if WITH_JAVA
    697 	sh ./tjbenchtest.java
    698 	sh ./tjbenchtest.java -yuv
    699 endif
    700 
    701 
    702 pkgscripts/libjpeg-turbo.spec: pkgscripts/libjpeg-turbo.spec.tmpl
    703 	cat pkgscripts/libjpeg-turbo.spec.tmpl | sed s@%{__prefix}@$(prefix)@g | \
    704 		sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
    705 		sed s@%{__docdir}@$(docdir)@g | sed s@%{__includedir}@$(includedir)@g | \
    706 		sed s@%{__libdir}@$(libdir)@g | sed s@%{__mandir}@$(mandir)@g \
    707 		> pkgscripts/libjpeg-turbo.spec
    708 
    709 rpm: all pkgscripts/libjpeg-turbo.spec
    710 	TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
    711 	mkdir -p $$TMPDIR/RPMS; \
    712 	ln -fs `pwd` $$TMPDIR/BUILD; \
    713 	rm -f ${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
    714 	rpmbuild -bb --define "_blddir $$TMPDIR/buildroot"  \
    715 		--define "_topdir $$TMPDIR" \
    716 		--target ${RPMARCH} pkgscripts/libjpeg-turbo.spec; \
    717 	cp $$TMPDIR/RPMS/${RPMARCH}/${PKGNAME}-${VERSION}-${BUILD}.${RPMARCH}.rpm \
    718 		${PKGNAME}-${VERSION}.${RPMARCH}.rpm; \
    719 	rm -rf $$TMPDIR
    720 
    721 srpm: dist-gzip pkgscripts/libjpeg-turbo.spec
    722 	TMPDIR=`mktemp -d /tmp/${PACKAGE_NAME}-build.XXXXXX`; \
    723 	mkdir -p $$TMPDIR/RPMS; \
    724 	mkdir -p $$TMPDIR/SRPMS; \
    725 	mkdir -p $$TMPDIR/BUILD; \
    726 	mkdir -p $$TMPDIR/SOURCES; \
    727 	mkdir -p $$TMPDIR/SPECS; \
    728 	rm -f ${PKGNAME}-${VERSION}.src.rpm; \
    729 	cp ${PACKAGE_NAME}-${VERSION}.tar.gz $$TMPDIR/SOURCES; \
    730 	cat pkgscripts/libjpeg-turbo.spec | sed s/%{_blddir}/%{_tmppath}/g \
    731 		| sed s/#--\>//g \
    732 		> $$TMPDIR/SPECS/libjpeg-turbo.spec; \
    733 	rpmbuild -bs --define "_topdir $$TMPDIR" $$TMPDIR/SPECS/libjpeg-turbo.spec; \
    734 	cp $$TMPDIR/SRPMS/${PKGNAME}-${VERSION}-${BUILD}.src.rpm \
    735 		${PKGNAME}-${VERSION}.src.rpm; \
    736 	rm -rf $$TMPDIR
    737 
    738 pkgscripts/makedpkg: pkgscripts/makedpkg.tmpl
    739 	cat pkgscripts/makedpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
    740 		sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
    741 		> pkgscripts/makedpkg
    742 
    743 deb: all pkgscripts/makedpkg
    744 	sh pkgscripts/makedpkg
    745 
    746 pkgscripts/uninstall: pkgscripts/uninstall.tmpl
    747 	cat pkgscripts/uninstall.tmpl | sed s@%{__prefix}@$(prefix)@g | \
    748 		sed s@%{__bindir}@$(bindir)@g | sed s@%{__datadir}@$(datadir)@g | \
    749 		sed s@%{__includedir}@$(includedir)@g | sed s@%{__libdir}@$(libdir)@g | \
    750 		sed s@%{__mandir}@$(mandir)@g > pkgscripts/uninstall
    751 
    752 pkgscripts/makemacpkg: pkgscripts/makemacpkg.tmpl
    753 	cat pkgscripts/makemacpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
    754 		sed s@%{__bindir}@$(bindir)@g | sed s@%{__docdir}@$(docdir)@g | \
    755 		sed s@%{__libdir}@$(libdir)@g > pkgscripts/makemacpkg
    756 
    757 if X86_64
    758 
    759 udmg: all pkgscripts/makemacpkg pkgscripts/uninstall
    760 	sh pkgscripts/makemacpkg -build32 ${BUILDDIR32}
    761 
    762 iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
    763 	sh pkgscripts/makemacpkg -build32 ${BUILDDIR32} -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S} -buildarmv8 ${BUILDDIRARMV8} -lipo "${LIPO}"
    764 
    765 else
    766 
    767 iosdmg: all pkgscripts/makemacpkg pkgscripts/uninstall
    768 	sh pkgscripts/makemacpkg -buildarmv7 ${BUILDDIRARMV7} -buildarmv7s ${BUILDDIRARMV7S} -buildarmv8 ${BUILDDIRARMV8} -lipo "${LIPO}"
    769 
    770 endif
    771 
    772 dmg: all pkgscripts/makemacpkg pkgscripts/uninstall
    773 	sh pkgscripts/makemacpkg
    774 
    775 pkgscripts/makecygwinpkg: pkgscripts/makecygwinpkg.tmpl
    776 	cat pkgscripts/makecygwinpkg.tmpl | sed s@%{__prefix}@$(prefix)@g | \
    777 		sed s@%{__docdir}@$(docdir)@g | sed s@%{__libdir}@$(libdir)@g \
    778 		> pkgscripts/makecygwinpkg
    779 
    780 cygwinpkg: all pkgscripts/makecygwinpkg
    781 	sh pkgscripts/makecygwinpkg
    782