1# 2# Setup 3# 4 5cmake_minimum_required(VERSION 2.8.11) 6# Use LINK_INTERFACE_LIBRARIES instead of INTERFACE_LINK_LIBRARIES 7if(POLICY CMP0022) 8 cmake_policy(SET CMP0022 OLD) 9endif() 10 11project(libjpeg-turbo C) 12set(VERSION 1.5.3) 13string(REPLACE "." ";" VERSION_TRIPLET ${VERSION}) 14list(GET VERSION_TRIPLET 0 VERSION_MAJOR) 15list(GET VERSION_TRIPLET 1 VERSION_MINOR) 16list(GET VERSION_TRIPLET 2 VERSION_REVISION) 17function(pad_number NUMBER OUTPUT_LEN) 18 string(LENGTH "${${NUMBER}}" INPUT_LEN) 19 if(INPUT_LEN LESS OUTPUT_LEN) 20 math(EXPR ZEROES "${OUTPUT_LEN} - ${INPUT_LEN} - 1") 21 set(NUM ${${NUMBER}}) 22 foreach(C RANGE ${ZEROES}) 23 set(NUM "0${NUM}") 24 endforeach() 25 set(${NUMBER} ${NUM} PARENT_SCOPE) 26 endif() 27endfunction() 28pad_number(VERSION_MINOR 3) 29pad_number(VERSION_REVISION 3) 30set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION}) 31 32if(NOT WIN32) 33 message(FATAL_ERROR "Platform not supported by this build system. Use autotools instead.") 34endif() 35 36string(TIMESTAMP BUILD "%Y%m%d") 37 38# This does nothing except when using MinGW. CMAKE_BUILD_TYPE has no meaning 39# in Visual Studio, and it always defaults to Debug when using NMake. 40if(NOT CMAKE_BUILD_TYPE) 41 set(CMAKE_BUILD_TYPE Release) 42endif() 43 44message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") 45 46# This only works if building from the command line. There is currently no way 47# to set a variable's value based on the build type when using Visual Studio. 48if(CMAKE_BUILD_TYPE STREQUAL "Debug") 49 set(BUILD "${BUILD}d") 50endif() 51 52message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}") 53 54option(WITH_SIMD "Include SIMD extensions" TRUE) 55option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" TRUE) 56option(WITH_ARITH_DEC "Include arithmetic decoding support when emulating the libjpeg v6b API/ABI" TRUE) 57option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE) 58option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes libjpeg-turbo backward incompatible with libjpeg v6b)" FALSE) 59option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE) 60option(WITH_TURBOJPEG "Include the TurboJPEG wrapper library and associated test programs" TRUE) 61option(WITH_JAVA "Build Java wrapper for the TurboJPEG library" FALSE) 62option(WITH_12BIT "Encode/decode JPEG images with 12-bit samples (implies WITH_SIMD=0 WITH_TURBOJPEG=0 WITH_ARITH_ENC=0 WITH_ARITH_DEC=0)" FALSE) 63option(ENABLE_STATIC "Build static libraries" TRUE) 64option(ENABLE_SHARED "Build shared libraries" TRUE) 65 66if(WITH_12BIT) 67 set(WITH_SIMD FALSE) 68 set(WITH_TURBOJPEG FALSE) 69 set(WITH_JAVA FALSE) 70 set(WITH_ARITH_ENC FALSE) 71 set(WITH_ARITH_DEC FALSE) 72 set(BITS_IN_JSAMPLE 12) 73 message(STATUS "12-bit JPEG support enabled") 74else() 75 set(BITS_IN_JSAMPLE 8) 76endif() 77 78if(WITH_JPEG8 OR WITH_JPEG7) 79 set(WITH_ARITH_ENC 1) 80 set(WITH_ARITH_DEC 1) 81endif() 82if(WITH_JPEG8) 83 set(WITH_MEM_SRCDST 1) 84endif() 85 86if(WITH_ARITH_ENC) 87 set(C_ARITH_CODING_SUPPORTED 1) 88 message(STATUS "Arithmetic encoding support enabled") 89else() 90 message(STATUS "Arithmetic encoding support disabled") 91endif() 92 93if(WITH_ARITH_DEC) 94 set(D_ARITH_CODING_SUPPORTED 1) 95 message(STATUS "Arithmetic decoding support enabled") 96else() 97 message(STATUS "Arithmetic decoding support disabled") 98endif() 99 100if(WITH_TURBOJPEG) 101 message(STATUS "TurboJPEG C wrapper enabled") 102else() 103 message(STATUS "TurboJPEG C wrapper disabled") 104endif() 105 106if(WITH_JAVA) 107 message(STATUS "TurboJPEG Java wrapper enabled") 108else() 109 message(STATUS "TurboJPEG Java wrapper disabled") 110endif() 111 112set(SO_AGE 0) 113if(WITH_MEM_SRCDST) 114 set(SO_AGE 1) 115endif() 116 117set(JPEG_LIB_VERSION 62) 118set(DLL_VERSION ${JPEG_LIB_VERSION}) 119set(FULLVERSION ${DLL_VERSION}.${SO_AGE}.0) 120if(WITH_JPEG8) 121 set(JPEG_LIB_VERSION 80) 122 set(DLL_VERSION 8) 123 set(FULLVERSION ${DLL_VERSION}.0.2) 124 message(STATUS "Emulating libjpeg v8 API/ABI") 125elseif(WITH_JPEG7) 126 set(JPEG_LIB_VERSION 70) 127 set(DLL_VERSION 7) 128 set(FULLVERSION ${DLL_VERSION}.${SO_AGE}.0) 129 message(STATUS "Emulating libjpeg v7 API/ABI") 130endif(WITH_JPEG8) 131 132if(WITH_MEM_SRCDST) 133 set(MEM_SRCDST_SUPPORTED 1) 134 message(STATUS "In-memory source/destination managers enabled") 135else() 136 message(STATUS "In-memory source/destination managers disabled") 137endif() 138 139if(MSVC) 140 option(WITH_CRT_DLL 141 "Link all libjpeg-turbo 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." 142 FALSE) 143 if(NOT WITH_CRT_DLL) 144 # Use the static C library for all build types 145 foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE 146 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) 147 if(${var} MATCHES "/MD") 148 string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}") 149 endif() 150 endforeach() 151 endif() 152 add_definitions(-W3 -wd4996) 153endif() 154 155# Detect whether compiler is 64-bit 156if(MSVC AND CMAKE_CL_64) 157 set(SIMD_X86_64 1) 158 set(64BIT 1) 159elseif(CMAKE_SIZEOF_VOID_P MATCHES 8) 160 set(SIMD_X86_64 1) 161 set(64BIT 1) 162endif() 163 164if(64BIT) 165 message(STATUS "64-bit build") 166else() 167 message(STATUS "32-bit build") 168endif() 169 170if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 171 if(MSVC) 172 set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_PROJECT_NAME}) 173 else() 174 set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_PROJECT_NAME}-gcc) 175 endif() 176 if(64BIT) 177 set(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_INSTALL_PREFIX_DEFAULT}64) 178 endif() 179 set(CMAKE_INSTALL_PREFIX "c:/${CMAKE_INSTALL_PREFIX_DEFAULT}" CACHE PATH 180 "Directory into which to install libjpeg-turbo (default: c:/${CMAKE_INSTALL_PREFIX_DEFAULT})" 181 FORCE) 182endif() 183 184message(STATUS "Install directory = ${CMAKE_INSTALL_PREFIX}") 185 186configure_file(win/jconfig.h.in jconfig.h) 187configure_file(win/jconfigint.h.in jconfigint.h) 188 189include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) 190 191string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC) 192 193set(EFFECTIVE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}") 194message(STATUS "Compiler flags = ${EFFECTIVE_C_FLAGS}") 195 196set(EFFECTIVE_LD_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}") 197message(STATUS "Linker flags = ${EFFECTIVE_LD_FLAGS}") 198 199if(WITH_JAVA) 200 find_package(Java) 201 find_package(JNI) 202 if(DEFINED JAVACFLAGS) 203 message(STATUS "Java compiler flags = ${JAVACFLAGS}") 204 endif() 205endif() 206 207 208# 209# Targets 210# 211 212set(JPEG_SOURCES jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c 213 jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c jcphuff.c 214 jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c jdatasrc.c 215 jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c 216 jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c 217 jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c 218 jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c) 219 220if(WITH_ARITH_ENC OR WITH_ARITH_DEC) 221 set(JPEG_SOURCES ${JPEG_SOURCES} jaricom.c) 222endif() 223 224if(WITH_ARITH_ENC) 225 set(JPEG_SOURCES ${JPEG_SOURCES} jcarith.c) 226endif() 227 228if(WITH_ARITH_DEC) 229 set(JPEG_SOURCES ${JPEG_SOURCES} jdarith.c) 230endif() 231 232if(WITH_SIMD) 233 add_definitions(-DWITH_SIMD) 234 add_subdirectory(simd) 235 if(SIMD_X86_64) 236 set(JPEG_SOURCES ${JPEG_SOURCES} simd/jsimd_x86_64.c) 237 else() 238 set(JPEG_SOURCES ${JPEG_SOURCES} simd/jsimd_i386.c) 239 endif() 240 # This tells CMake that the "source" files haven't been generated yet 241 set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1) 242else() 243 set(JPEG_SOURCES ${JPEG_SOURCES} jsimd_none.c) 244 message(STATUS "Not using SIMD acceleration") 245endif() 246 247if(WITH_JAVA) 248 add_subdirectory(java) 249 set(ENABLE_SHARED TRUE) 250endif() 251 252if(ENABLE_SHARED) 253 add_subdirectory(sharedlib) 254endif() 255 256if(ENABLE_STATIC OR WITH_TURBOJPEG) 257 add_library(jpeg-static STATIC ${JPEG_SOURCES} ${SIMD_OBJS}) 258 if(NOT MSVC) 259 set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg) 260 endif() 261 if(WITH_SIMD) 262 add_dependencies(jpeg-static simd) 263 endif() 264endif() 265 266if(WITH_TURBOJPEG) 267 set(TURBOJPEG_SOURCES turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c) 268 if(WITH_JAVA) 269 set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES} turbojpeg-jni.c) 270 include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2}) 271 endif() 272 273 if(ENABLE_SHARED) 274 add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES}) 275 set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE) 276 if(MINGW) 277 set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at) 278 endif() 279 target_link_libraries(turbojpeg jpeg-static) 280 set_target_properties(turbojpeg PROPERTIES LINK_INTERFACE_LIBRARIES "") 281 282 add_executable(tjunittest tjunittest.c tjutil.c) 283 target_link_libraries(tjunittest turbojpeg) 284 285 add_executable(tjbench tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c wrbmp.c 286 wrppm.c) 287 target_link_libraries(tjbench turbojpeg jpeg-static) 288 set_property(TARGET tjbench PROPERTY COMPILE_FLAGS 289 "-DBMP_SUPPORTED -DPPM_SUPPORTED") 290 endif() 291 292 if(ENABLE_STATIC) 293 add_library(turbojpeg-static STATIC ${JPEG_SOURCES} ${SIMD_OBJS} 294 turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c) 295 if(NOT MSVC) 296 set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg) 297 endif() 298 if(WITH_SIMD) 299 add_dependencies(turbojpeg-static simd) 300 endif() 301 302 add_executable(tjunittest-static tjunittest.c tjutil.c) 303 target_link_libraries(tjunittest-static turbojpeg-static) 304 305 add_executable(tjbench-static tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c 306 wrbmp.c wrppm.c) 307 target_link_libraries(tjbench-static turbojpeg-static jpeg-static) 308 set_property(TARGET tjbench-static PROPERTY COMPILE_FLAGS 309 "-DBMP_SUPPORTED -DPPM_SUPPORTED") 310 endif() 311endif() 312 313if(WITH_12BIT) 314 set(COMPILE_FLAGS "-DGIF_SUPPORTED -DPPM_SUPPORTED -DUSE_SETMODE") 315else() 316 set(COMPILE_FLAGS "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED -DUSE_SETMODE") 317 set(CJPEG_BMP_SOURCES rdbmp.c rdtarga.c) 318 set(DJPEG_BMP_SOURCES wrbmp.c wrtarga.c) 319endif() 320 321if(ENABLE_STATIC) 322 add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdswitch.c 323 ${CJPEG_BMP_SOURCES}) 324 set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS}) 325 target_link_libraries(cjpeg-static jpeg-static) 326 327 add_executable(djpeg-static djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrgif.c 328 wrppm.c ${DJPEG_BMP_SOURCES}) 329 set_property(TARGET djpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS}) 330 target_link_libraries(djpeg-static jpeg-static) 331 332 add_executable(jpegtran-static jpegtran.c cdjpeg.c rdswitch.c transupp.c) 333 target_link_libraries(jpegtran-static jpeg-static) 334 set_property(TARGET jpegtran-static PROPERTY COMPILE_FLAGS "-DUSE_SETMODE") 335endif() 336 337add_executable(rdjpgcom rdjpgcom.c) 338 339add_executable(wrjpgcom wrjpgcom.c) 340 341 342# 343# Tests 344# 345 346add_subdirectory(md5) 347 348if(MSVC_IDE) 349 set(OBJDIR "\${CTEST_CONFIGURATION_TYPE}/") 350else() 351 set(OBJDIR "") 352endif() 353 354enable_testing() 355 356if(WITH_12BIT) 357 set(TESTORIG testorig12.jpg) 358 set(MD5_JPEG_RGB_ISLOW 9620f424569594bb9242b48498ad801f) 359 set(MD5_PPM_RGB_ISLOW f3301d2219783b8b3d942b7239fa50c0) 360 set(MD5_JPEG_422_IFAST_OPT 7322e3bd2f127f7de4b40d4480ce60e4) 361 set(MD5_PPM_422_IFAST 79807fa552899e66a04708f533e16950) 362 set(MD5_PPM_422M_IFAST 07737bfe8a7c1c87aaa393a0098d16b0) 363 set(MD5_JPEG_420_IFAST_Q100_PROG a1da220b5604081863a504297ed59e55) 364 set(MD5_PPM_420_Q100_IFAST 1b3730122709f53d007255e8dfd3305e) 365 set(MD5_PPM_420M_Q100_IFAST 980a1a3c5bf9510022869d30b7d26566) 366 set(MD5_JPEG_GRAY_ISLOW 235c90707b16e2e069f37c888b2636d9) 367 set(MD5_PPM_GRAY_ISLOW 7213c10af507ad467da5578ca5ee1fca) 368 set(MD5_PPM_GRAY_ISLOW_RGB e96ee81c30a6ed422d466338bd3de65d) 369 set(MD5_JPEG_420S_IFAST_OPT 7af8e60be4d9c227ec63ac9b6630855e) 370 if(64BIT) 371 # Windows/x64 uses SSE for floating point 372 set(MD5_JPEG_3x2_FLOAT_PROG a8c17daf77b457725ec929e215b603f8) 373 set(MD5_PPM_3x2_FLOAT 42876ab9e5c2f76a87d08db5fbd57956) 374 else() 375 # Windows/x86 uses the 387 FPU for floating point 376 if(MSVC) 377 set(MD5_JPEG_3x2_FLOAT_PROG e27840755870fa849872e58aa0cd1400) 378 set(MD5_PPM_3x2_FLOAT 6c2880b83bb1aa41dfe330e7a9768690) 379 else() 380 set(MD5_JPEG_3x2_FLOAT_PROG bc6dbbefac2872f6b9d6c4a0ae60c3c0) 381 set(MD5_PPM_3x2_FLOAT f58119ee294198ac9b4a9f5645a34266) 382 endif() 383 endif() 384 set(MD5_PPM_420M_ISLOW_2_1 4ca6be2a6f326ff9eaab63e70a8259c0) 385 set(MD5_PPM_420M_ISLOW_15_8 12aa9f9534c1b3d7ba047322226365eb) 386 set(MD5_PPM_420M_ISLOW_13_8 f7e22817c7b25e1393e4ec101e9d4e96) 387 set(MD5_PPM_420M_ISLOW_11_8 800a16f9f4dc9b293197bfe11be10a82) 388 set(MD5_PPM_420M_ISLOW_9_8 06b7a92a9bc69f4dc36ec40f1937d55c) 389 set(MD5_PPM_420M_ISLOW_7_8 3ec444a14a4ab4eab88ffc49c48eca43) 390 set(MD5_PPM_420M_ISLOW_3_4 3e726b7ea872445b19437d1c1d4f0d93) 391 set(MD5_PPM_420M_ISLOW_5_8 a8a771abdc94301d20ffac119b2caccd) 392 set(MD5_PPM_420M_ISLOW_1_2 b419124dd5568b085787234866102866) 393 set(MD5_PPM_420M_ISLOW_3_8 343d19015531b7bbe746124127244fa8) 394 set(MD5_PPM_420M_ISLOW_1_4 35fd59d866e44659edfa3c18db2a3edb) 395 set(MD5_PPM_420M_ISLOW_1_8 ccaed48ac0aedefda5d4abe4013f4ad7) 396 set(MD5_PPM_420_ISLOW_SKIP15_31 86664cd9dc956536409e44e244d20a97) 397 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 452a21656115a163029cfba5c04fa76a) 398 set(MD5_PPM_444_ISLOW_SKIP1_6 ef63901f71ef7a75cd78253fc0914f84) 399 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 15b173fb5872d9575572fbcc1b05956f) 400 set(MD5_JPEG_CROP cdb35ff4b4519392690ea040c56ea99c) 401else() 402 set(TESTORIG testorig.jpg) 403 set(MD5_JPEG_RGB_ISLOW 768e970dd57b340ff1b83c9d3d47c77b) 404 set(MD5_PPM_RGB_ISLOW 00a257f5393fef8821f2b88ac7421291) 405 set(MD5_BMP_RGB_ISLOW_565 f07d2e75073e4bb10f6c6f4d36e2e3be) 406 set(MD5_BMP_RGB_ISLOW_565D 4cfa0928ef3e6bb626d7728c924cfda4) 407 set(MD5_JPEG_422_IFAST_OPT 2540287b79d913f91665e660303ab2c8) 408 set(MD5_PPM_422_IFAST 35bd6b3f833bad23de82acea847129fa) 409 set(MD5_PPM_422M_IFAST 8dbc65323d62cca7c91ba02dd1cfa81d) 410 set(MD5_BMP_422M_IFAST_565 3294bd4d9a1f2b3d08ea6020d0db7065) 411 set(MD5_BMP_422M_IFAST_565D da98c9c7b6039511be4a79a878a9abc1) 412 set(MD5_JPEG_420_IFAST_Q100_PROG 990cbe0329c882420a2094da7e5adade) 413 set(MD5_PPM_420_Q100_IFAST 5a732542015c278ff43635e473a8a294) 414 set(MD5_PPM_420M_Q100_IFAST ff692ee9323a3b424894862557c092f1) 415 set(MD5_JPEG_GRAY_ISLOW 72b51f894b8f4a10b3ee3066770aa38d) 416 set(MD5_PPM_GRAY_ISLOW 8d3596c56eace32f205deccc229aa5ed) 417 set(MD5_PPM_GRAY_ISLOW_RGB 116424ac07b79e5e801f00508eab48ec) 418 set(MD5_BMP_GRAY_ISLOW_565 12f78118e56a2f48b966f792fedf23cc) 419 set(MD5_BMP_GRAY_ISLOW_565D bdbbd616441a24354c98553df5dc82db) 420 set(MD5_JPEG_420S_IFAST_OPT 388708217ac46273ca33086b22827ed8) 421 if(WITH_SIMD) 422 set(MD5_JPEG_3x2_FLOAT_PROG 343e3f8caf8af5986ebaf0bdc13b5c71) 423 set(MD5_PPM_3x2_FLOAT 1a75f36e5904d6fc3a85a43da9ad89bb) 424 else() 425 if(64BIT) 426 set(MD5_JPEG_3x2_FLOAT_PROG 9bca803d2042bd1eb03819e2bf92b3e5) 427 set(MD5_PPM_3x2_FLOAT f6bfab038438ed8f5522fbd33595dcdc) 428 else() 429 if(MSVC) 430 set(MD5_JPEG_3x2_FLOAT_PROG 7999ce9cd0ee9b6c7043b7351ab7639d) 431 set(MD5_PPM_3x2_FLOAT 28cdc448a6b75e97892f0e0f8d4b21f3) 432 else() 433 set(MD5_JPEG_3x2_FLOAT_PROG 1657664a410e0822c924b54f6f65e6e9) 434 set(MD5_PPM_3x2_FLOAT cb0a1f027f3d2917c902b5640214e025) 435 endif() 436 endif() 437 endif() 438 set(MD5_JPEG_420_ISLOW_ARI e986fb0a637a8d833d96e8a6d6d84ea1) 439 set(MD5_JPEG_444_ISLOW_PROGARI 0a8f1c8f66e113c3cf635df0a475a617) 440 set(MD5_PPM_420M_IFAST_ARI 72b59a99bcf1de24c5b27d151bde2437) 441 set(MD5_JPEG_420_ISLOW 9a68f56bc76e466aa7e52f415d0f4a5f) 442 set(MD5_PPM_420M_ISLOW_2_1 9f9de8c0612f8d06869b960b05abf9c9) 443 set(MD5_PPM_420M_ISLOW_15_8 b6875bc070720b899566cc06459b63b7) 444 set(MD5_PPM_420M_ISLOW_13_8 bc3452573c8152f6ae552939ee19f82f) 445 set(MD5_PPM_420M_ISLOW_11_8 d8cc73c0aaacd4556569b59437ba00a5) 446 set(MD5_PPM_420M_ISLOW_9_8 d25e61bc7eac0002f5b393aa223747b6) 447 set(MD5_PPM_420M_ISLOW_7_8 ddb564b7c74a09494016d6cd7502a946) 448 set(MD5_PPM_420M_ISLOW_3_4 8ed8e68808c3fbc4ea764fc9d2968646) 449 set(MD5_PPM_420M_ISLOW_5_8 a3363274999da2366a024efae6d16c9b) 450 set(MD5_PPM_420M_ISLOW_1_2 e692a315cea26b988c8e8b29a5dbcd81) 451 set(MD5_PPM_420M_ISLOW_3_8 79eca9175652ced755155c90e785a996) 452 set(MD5_PPM_420M_ISLOW_1_4 79cd778f8bf1a117690052cacdd54eca) 453 set(MD5_PPM_420M_ISLOW_1_8 391b3d4aca640c8567d6f8745eb2142f) 454 set(MD5_BMP_420_ISLOW_256 4980185e3776e89bd931736e1cddeee6) 455 set(MD5_BMP_420_ISLOW_565 bf9d13e16c4923b92e1faa604d7922cb) 456 set(MD5_BMP_420_ISLOW_565D 6bde71526acc44bcff76f696df8638d2) 457 set(MD5_BMP_420M_ISLOW_565 8dc0185245353cfa32ad97027342216f) 458 set(MD5_BMP_420M_ISLOW_565D d1be3a3339166255e76fa50a0d70d73e) 459 set(MD5_PPM_420_ISLOW_SKIP15_31 c4c65c1e43d7275cd50328a61e6534f0) 460 set(MD5_PPM_420_ISLOW_ARI_SKIP16_139 087c6b123db16ac00cb88c5b590bb74a) 461 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 26eb36ccc7d1f0cb80cdabb0ac8b5d99) 462 set(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 886c6775af22370257122f8b16207e6d) 463 set(MD5_PPM_444_ISLOW_SKIP1_6 5606f86874cf26b8fcee1117a0a436a6) 464 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 db87dc7ce26bcdc7a6b56239ce2b9d6c) 465 set(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 cb57b32bd6d03e35432362f7bf184b6d) 466 set(MD5_JPEG_CROP b4197f377e621c4e9b1d20471432610d) 467endif() 468 469if(WITH_JAVA) 470 add_test(TJUnitTest 471 ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar 472 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} 473 TJUnitTest) 474 add_test(TJUnitTest-yuv 475 ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar 476 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} 477 TJUnitTest -yuv) 478 add_test(TJUnitTest-yuv-nopad 479 ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar 480 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} 481 TJUnitTest -yuv -noyuvpad) 482 add_test(TJUnitTest-bi 483 ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar 484 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} 485 TJUnitTest -bi) 486 add_test(TJUnitTest-bi-yuv 487 ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar 488 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} 489 TJUnitTest -bi -yuv) 490 add_test(TJUnitTest-bi-yuv-nopad 491 ${JAVA_RUNTIME} -cp java/${OBJDIR}turbojpeg.jar 492 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR} 493 TJUnitTest -bi -yuv -noyuvpad) 494endif() 495 496set(TEST_LIBTYPES "") 497if(ENABLE_SHARED) 498 set(TEST_LIBTYPES ${TEST_LIBTYPES} shared) 499endif() 500if(ENABLE_STATIC) 501 set(TEST_LIBTYPES ${TEST_LIBTYPES} static) 502endif() 503 504set(TESTIMAGES ${CMAKE_SOURCE_DIR}/testimages) 505set(MD5CMP ${CMAKE_CURRENT_BINARY_DIR}/md5/md5cmp) 506if(CMAKE_CROSSCOMPILING) 507 file(RELATIVE_PATH TESTIMAGES ${CMAKE_CURRENT_BINARY_DIR} ${TESTIMAGES}) 508 file(RELATIVE_PATH MD5CMP ${CMAKE_CURRENT_BINARY_DIR} ${MD5CMP}) 509endif() 510 511foreach(libtype ${TEST_LIBTYPES}) 512 if(libtype STREQUAL "shared") 513 set(dir sharedlib/) 514 else() 515 set(dir "") 516 set(suffix -static) 517 endif() 518 if(WITH_TURBOJPEG) 519 add_test(tjunittest${suffix} tjunittest${suffix}) 520 add_test(tjunittest${suffix}-alloc tjunittest${suffix} -alloc) 521 add_test(tjunittest${suffix}-yuv tjunittest${suffix} -yuv) 522 add_test(tjunittest${suffix}-yuv-alloc tjunittest${suffix} -yuv -alloc) 523 add_test(tjunittest${suffix}-yuv-nopad tjunittest${suffix} -yuv -noyuvpad) 524 endif() 525 526 # These tests are carefully chosen to provide full coverage of as many of the 527 # underlying algorithms as possible (including all of the SIMD-accelerated 528 # ones.) 529 530 # CC: null SAMP: fullsize FDCT: islow ENT: huff 531 add_test(cjpeg${suffix}-rgb-islow 532 ${dir}cjpeg${suffix} -rgb -dct int 533 -outfile testout_rgb_islow.jpg ${TESTIMAGES}/testorig.ppm) 534 add_test(cjpeg${suffix}-rgb-islow-cmp 535 ${MD5CMP} ${MD5_JPEG_RGB_ISLOW} testout_rgb_islow.jpg) 536 537 # CC: null SAMP: fullsize IDCT: islow ENT: huff 538 add_test(djpeg${suffix}-rgb-islow 539 ${dir}djpeg${suffix} -dct int -ppm 540 -outfile testout_rgb_islow.ppm testout_rgb_islow.jpg) 541 add_test(djpeg${suffix}-rgb-islow-cmp 542 ${MD5CMP} ${MD5_PPM_RGB_ISLOW} testout_rgb_islow.ppm) 543 544 if(NOT WITH_12BIT) 545 # CC: RGB->RGB565 SAMP: fullsize IDCT: islow ENT: huff 546 add_test(djpeg${suffix}-rgb-islow-565 547 ${dir}djpeg${suffix} -dct int -rgb565 -dither none -bmp 548 -outfile testout_rgb_islow_565.bmp testout_rgb_islow.jpg) 549 add_test(djpeg${suffix}-rgb-islow-565-cmp 550 ${MD5CMP} ${MD5_BMP_RGB_ISLOW_565} testout_rgb_islow_565.bmp) 551 552 # CC: RGB->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff 553 add_test(djpeg${suffix}-rgb-islow-565D 554 ${dir}djpeg${suffix} -dct int -rgb565 -bmp 555 -outfile testout_rgb_islow_565D.bmp testout_rgb_islow.jpg) 556 add_test(djpeg${suffix}-rgb-islow-565D-cmp 557 ${MD5CMP} ${MD5_BMP_RGB_ISLOW_565D} testout_rgb_islow_565D.bmp) 558 endif() 559 560 # CC: RGB->YCC SAMP: fullsize/h2v1 FDCT: ifast ENT: 2-pass huff 561 add_test(cjpeg${suffix}-422-ifast-opt 562 ${dir}cjpeg${suffix} -sample 2x1 -dct fast -opt 563 -outfile testout_422_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm) 564 add_test(cjpeg${suffix}-422-ifast-opt-cmp 565 ${MD5CMP} ${MD5_JPEG_422_IFAST_OPT} testout_422_ifast_opt.jpg) 566 567 # CC: YCC->RGB SAMP: fullsize/h2v1 fancy IDCT: ifast ENT: huff 568 add_test(djpeg${suffix}-422-ifast 569 ${dir}djpeg${suffix} -dct fast 570 -outfile testout_422_ifast.ppm testout_422_ifast_opt.jpg) 571 add_test(djpeg${suffix}-422-ifast-cmp 572 ${MD5CMP} ${MD5_PPM_422_IFAST} testout_422_ifast.ppm) 573 574 # CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff 575 add_test(djpeg${suffix}-422m-ifast 576 ${dir}djpeg${suffix} -dct fast -nosmooth 577 -outfile testout_422m_ifast.ppm testout_422_ifast_opt.jpg) 578 add_test(djpeg${suffix}-422m-ifast-cmp 579 ${MD5CMP} ${MD5_PPM_422M_IFAST} testout_422m_ifast.ppm) 580 581 if(NOT WITH_12BIT) 582 # CC: YCC->RGB565 SAMP: h2v1 merged IDCT: ifast ENT: huff 583 add_test(djpeg${suffix}-422m-ifast-565 584 ${dir}djpeg${suffix} -dct int -nosmooth -rgb565 -dither none -bmp 585 -outfile testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg) 586 add_test(djpeg${suffix}-422m-ifast-565-cmp 587 ${MD5CMP} ${MD5_BMP_422M_IFAST_565} testout_422m_ifast_565.bmp) 588 589 # CC: YCC->RGB565 (dithered) SAMP: h2v1 merged IDCT: ifast ENT: huff 590 add_test(djpeg${suffix}-422m-ifast-565D 591 ${dir}djpeg${suffix} -dct int -nosmooth -rgb565 -bmp 592 -outfile testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg) 593 add_test(djpeg${suffix}-422m-ifast-565D-cmp 594 ${MD5CMP} ${MD5_BMP_422M_IFAST_565D} testout_422m_ifast_565D.bmp) 595 endif() 596 597 # CC: RGB->YCC SAMP: fullsize/h2v2 FDCT: ifast ENT: prog huff 598 add_test(cjpeg${suffix}-420-q100-ifast-prog 599 ${dir}cjpeg${suffix} -sample 2x2 -quality 100 -dct fast -prog 600 -outfile testout_420_q100_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm) 601 add_test(cjpeg${suffix}-420-q100-ifast-prog-cmp 602 ${MD5CMP} ${MD5_JPEG_420_IFAST_Q100_PROG} testout_420_q100_ifast_prog.jpg) 603 604 # CC: YCC->RGB SAMP: fullsize/h2v2 fancy IDCT: ifast ENT: prog huff 605 add_test(djpeg${suffix}-420-q100-ifast-prog 606 ${dir}djpeg${suffix} -dct fast 607 -outfile testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg) 608 add_test(djpeg${suffix}-420-q100-ifast-prog-cmp 609 ${MD5CMP} ${MD5_PPM_420_Q100_IFAST} testout_420_q100_ifast.ppm) 610 611 # CC: YCC->RGB SAMP: h2v2 merged IDCT: ifast ENT: prog huff 612 add_test(djpeg${suffix}-420m-q100-ifast-prog 613 ${dir}djpeg${suffix} -dct fast -nosmooth 614 -outfile testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg) 615 add_test(djpeg${suffix}-420m-q100-ifast-prog-cmp 616 ${MD5CMP} ${MD5_PPM_420M_Q100_IFAST} testout_420m_q100_ifast.ppm) 617 618 # CC: RGB->Gray SAMP: fullsize FDCT: islow ENT: huff 619 add_test(cjpeg${suffix}-gray-islow 620 ${dir}cjpeg${suffix} -gray -dct int 621 -outfile testout_gray_islow.jpg ${TESTIMAGES}/testorig.ppm) 622 add_test(cjpeg${suffix}-gray-islow-cmp 623 ${MD5CMP} ${MD5_JPEG_GRAY_ISLOW} testout_gray_islow.jpg) 624 625 # CC: Gray->Gray SAMP: fullsize IDCT: islow ENT: huff 626 add_test(djpeg${suffix}-gray-islow 627 ${dir}djpeg${suffix} -dct int 628 -outfile testout_gray_islow.ppm testout_gray_islow.jpg) 629 add_test(djpeg${suffix}-gray-islow-cmp 630 ${MD5CMP} ${MD5_PPM_GRAY_ISLOW} testout_gray_islow.ppm) 631 632 # CC: Gray->RGB SAMP: fullsize IDCT: islow ENT: huff 633 add_test(djpeg${suffix}-gray-islow-rgb 634 ${dir}djpeg${suffix} -dct int -rgb 635 -outfile testout_gray_islow_rgb.ppm testout_gray_islow.jpg) 636 add_test(djpeg${suffix}-gray-islow-rgb-cmp 637 ${MD5CMP} ${MD5_PPM_GRAY_ISLOW_RGB} testout_gray_islow_rgb.ppm) 638 639 if(NOT WITH_12BIT) 640 # CC: Gray->RGB565 SAMP: fullsize IDCT: islow ENT: huff 641 add_test(djpeg${suffix}-gray-islow-565 642 ${dir}djpeg${suffix} -dct int -rgb565 -dither none -bmp 643 -outfile testout_gray_islow_565.bmp testout_gray_islow.jpg) 644 add_test(djpeg${suffix}-gray-islow-565-cmp 645 ${MD5CMP} ${MD5_BMP_GRAY_ISLOW_565} testout_gray_islow_565.bmp) 646 647 # CC: Gray->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff 648 add_test(djpeg${suffix}-gray-islow-565D 649 ${dir}djpeg${suffix} -dct int -rgb565 -bmp 650 -outfile testout_gray_islow_565D.bmp testout_gray_islow.jpg) 651 add_test(djpeg${suffix}-gray-islow-565D-cmp 652 ${MD5CMP} ${MD5_BMP_GRAY_ISLOW_565D} testout_gray_islow_565D.bmp) 653 endif() 654 655 # CC: RGB->YCC SAMP: fullsize smooth/h2v2 smooth FDCT: islow 656 # ENT: 2-pass huff 657 add_test(cjpeg${suffix}-420s-ifast-opt 658 ${dir}cjpeg${suffix} -sample 2x2 -smooth 1 -dct int -opt 659 -outfile testout_420s_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm) 660 add_test(cjpeg${suffix}-420s-ifast-opt-cmp 661 ${MD5CMP} ${MD5_JPEG_420S_IFAST_OPT} testout_420s_ifast_opt.jpg) 662 663 # CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff 664 add_test(cjpeg${suffix}-3x2-float-prog 665 ${dir}cjpeg${suffix} -sample 3x2 -dct float -prog 666 -outfile testout_3x2_float_prog.jpg ${TESTIMAGES}/testorig.ppm) 667 add_test(cjpeg${suffix}-3x2-float-prog-cmp 668 ${MD5CMP} ${MD5_JPEG_3x2_FLOAT_PROG} testout_3x2_float_prog.jpg) 669 670 # CC: YCC->RGB SAMP: fullsize/int IDCT: float ENT: prog huff 671 add_test(djpeg${suffix}-3x2-float-prog 672 ${dir}djpeg${suffix} -dct float 673 -outfile testout_3x2_float.ppm testout_3x2_float_prog.jpg) 674 add_test(djpeg${suffix}-3x2-float-prog-cmp 675 ${MD5CMP} ${MD5_PPM_3x2_FLOAT} testout_3x2_float.ppm) 676 677 if(WITH_ARITH_ENC) 678 # CC: YCC->RGB SAMP: fullsize/h2v2 FDCT: islow ENT: arith 679 add_test(cjpeg${suffix}-420-islow-ari 680 ${dir}cjpeg${suffix} -dct int -arithmetic 681 -outfile testout_420_islow_ari.jpg ${TESTIMAGES}/testorig.ppm) 682 add_test(cjpeg${suffix}-420-islow-ari-cmp 683 ${MD5CMP} ${MD5_JPEG_420_ISLOW_ARI} testout_420_islow_ari.jpg) 684 685 add_test(jpegtran${suffix}-420-islow-ari 686 ${dir}jpegtran${suffix} -arithmetic 687 -outfile testout_420_islow_ari.jpg ${TESTIMAGES}/testimgint.jpg) 688 add_test(jpegtran${suffix}-420-islow-ari-cmp 689 ${MD5CMP} ${MD5_JPEG_420_ISLOW_ARI} testout_420_islow_ari.jpg) 690 691 # CC: YCC->RGB SAMP: fullsize FDCT: islow ENT: prog arith 692 add_test(cjpeg${suffix}-444-islow-progari 693 ${dir}cjpeg${suffix} -sample 1x1 -dct int -prog -arithmetic 694 -outfile testout_444_islow_progari.jpg ${TESTIMAGES}/testorig.ppm) 695 add_test(cjpeg${suffix}-444-islow-progari-cmp 696 ${MD5CMP} ${MD5_JPEG_444_ISLOW_PROGARI} testout_444_islow_progari.jpg) 697 endif() 698 699 if(WITH_ARITH_DEC) 700 # CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith 701 add_test(djpeg${suffix}-420m-ifast-ari 702 ${dir}djpeg${suffix} -fast -ppm 703 -outfile testout_420m_ifast_ari.ppm ${TESTIMAGES}/testimgari.jpg) 704 add_test(djpeg${suffix}-420m-ifast-ari-cmp 705 ${MD5CMP} ${MD5_PPM_420M_IFAST_ARI} testout_420m_ifast_ari.ppm) 706 707 add_test(jpegtran${suffix}-420-islow 708 ${dir}jpegtran${suffix} 709 -outfile testout_420_islow.jpg ${TESTIMAGES}/testimgari.jpg) 710 add_test(jpegtran${suffix}-420-islow-cmp 711 ${MD5CMP} ${MD5_JPEG_420_ISLOW} testout_420_islow.jpg) 712 endif() 713 714 # 2/1-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 16x16 islow ENT: huff 715 # 15/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 15x15 islow ENT: huff 716 # 13/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 13x13 islow ENT: huff 717 # 11/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 11x11 islow ENT: huff 718 # 9/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 9x9 islow ENT: huff 719 # 7/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 7x7 islow/14x14 islow 720 # ENT: huff 721 # 3/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 6x6 islow/12x12 islow 722 # ENT: huff 723 # 5/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 5x5 islow/10x10 islow 724 # ENT: huff 725 # 1/2-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 4x4 islow/8x8 islow 726 # ENT: huff 727 # 3/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 3x3 islow/6x6 islow 728 # ENT: huff 729 # 1/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 2x2 islow/4x4 islow 730 # ENT: huff 731 # 1/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 1x1 islow/2x2 islow 732 # ENT: huff 733 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) 734 string(REGEX REPLACE "_" "/" scalearg ${scale}) 735 add_test(djpeg${suffix}-420m-islow-${scale} 736 ${dir}djpeg${suffix} -dct int -scale ${scalearg} -nosmooth -ppm 737 -outfile testout_420m_islow_${scale}.ppm ${TESTIMAGES}/${TESTORIG}) 738 add_test(djpeg${suffix}-420m-islow-${scale}-cmp 739 ${MD5CMP} ${MD5_PPM_420M_ISLOW_${scale}} testout_420m_islow_${scale}.ppm) 740 endforeach() 741 742 if(NOT WITH_12BIT) 743 # CC: YCC->RGB (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff 744 add_test(djpeg${suffix}-420-islow-256 745 ${dir}djpeg${suffix} -dct int -colors 256 -bmp 746 -outfile testout_420_islow_256.bmp ${TESTIMAGES}/${TESTORIG}) 747 add_test(djpeg${suffix}-420-islow-256-cmp 748 ${MD5CMP} ${MD5_BMP_420_ISLOW_256} testout_420_islow_256.bmp) 749 750 # CC: YCC->RGB565 SAMP: h2v2 fancy IDCT: islow ENT: huff 751 add_test(djpeg${suffix}-420-islow-565 752 ${dir}djpeg${suffix} -dct int -rgb565 -dither none -bmp 753 -outfile testout_420_islow_565.bmp ${TESTIMAGES}/${TESTORIG}) 754 add_test(djpeg${suffix}-420-islow-565-cmp 755 ${MD5CMP} ${MD5_BMP_420_ISLOW_565} testout_420_islow_565.bmp) 756 757 # CC: YCC->RGB565 (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff 758 add_test(djpeg${suffix}-420-islow-565D 759 ${dir}djpeg${suffix} -dct int -rgb565 -bmp 760 -outfile testout_420_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}) 761 add_test(djpeg${suffix}-420-islow-565D-cmp 762 ${MD5CMP} ${MD5_BMP_420_ISLOW_565D} testout_420_islow_565D.bmp) 763 764 # CC: YCC->RGB565 SAMP: h2v2 merged IDCT: islow ENT: huff 765 add_test(djpeg${suffix}-420m-islow-565 766 ${dir}djpeg${suffix} -dct int -nosmooth -rgb565 -dither none -bmp 767 -outfile testout_420m_islow_565.bmp ${TESTIMAGES}/${TESTORIG}) 768 add_test(djpeg${suffix}-420m-islow-565-cmp 769 ${MD5CMP} ${MD5_BMP_420M_ISLOW_565} testout_420m_islow_565.bmp) 770 771 # CC: YCC->RGB565 (dithered) SAMP: h2v2 merged IDCT: islow ENT: huff 772 add_test(djpeg${suffix}-420m-islow-565D 773 ${dir}djpeg${suffix} -dct int -nosmooth -rgb565 -bmp 774 -outfile testout_420m_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}) 775 add_test(djpeg${suffix}-420m-islow-565D-cmp 776 ${MD5CMP} ${MD5_BMP_420M_ISLOW_565D} testout_420m_islow_565D.bmp) 777 endif() 778 779 # Partial decode tests. These tests are designed to cover all of the 780 # possible code paths in jpeg_skip_scanlines(). 781 782 # Context rows: Yes Intra-iMCU row: Yes iMCU row prefetch: No ENT: huff 783 add_test(djpeg${suffix}-420-islow-skip15_31 784 ${dir}djpeg${suffix} -dct int -skip 15,31 -ppm 785 -outfile testout_420_islow_skip15,31.ppm ${TESTIMAGES}/${TESTORIG}) 786 add_test(djpeg${suffix}-420-islow-skip15_31-cmp 787 ${MD5CMP} ${MD5_PPM_420_ISLOW_SKIP15_31} testout_420_islow_skip15,31.ppm) 788 789 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: Yes ENT: arith 790 if(WITH_ARITH_DEC) 791 add_test(djpeg${suffix}-420-islow-ari-skip16_139 792 ${dir}djpeg${suffix} -dct int -skip 16,139 -ppm 793 -outfile testout_420_islow_ari_skip16,139.ppm 794 ${TESTIMAGES}/testimgari.jpg) 795 add_test(djpeg${suffix}-420-islow-ari_skip16_139-cmp 796 ${MD5CMP} ${MD5_PPM_420_ISLOW_ARI_SKIP16_139} 797 testout_420_islow_ari_skip16,139.ppm) 798 endif() 799 800 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: prog huff 801 add_test(cjpeg${suffix}-420-islow-prog 802 ${dir}cjpeg${suffix} -dct int -prog 803 -outfile testout_420_islow_prog.jpg ${TESTIMAGES}/testorig.ppm) 804 add_test(djpeg${suffix}-420-islow-prog-crop62x62_71_71 805 ${dir}djpeg${suffix} -dct int -crop 62x62+71+71 -ppm 806 -outfile testout_420_islow_prog_crop62x62,71,71.ppm 807 testout_420_islow_prog.jpg) 808 add_test(djpeg${suffix}-420-islow-prog-crop62x62_71_71-cmp 809 ${MD5CMP} ${MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71} 810 testout_420_islow_prog_crop62x62,71,71.ppm) 811 812 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: arith 813 if(WITH_ARITH_DEC) 814 add_test(djpeg${suffix}-420-islow-ari-crop53x53_4_4 815 ${dir}djpeg${suffix} -dct int -crop 53x53+4+4 -ppm 816 -outfile testout_420_islow_ari_crop53x53,4,4.ppm 817 ${TESTIMAGES}/testimgari.jpg) 818 add_test(djpeg${suffix}-420-islow-ari-crop53x53_4_4-cmp 819 ${MD5CMP} ${MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4} 820 testout_420_islow_ari_crop53x53,4,4.ppm) 821 endif() 822 823 # Context rows: No Intra-iMCU row: Yes ENT: huff 824 add_test(cjpeg${suffix}-444-islow 825 ${dir}cjpeg${suffix} -dct int -sample 1x1 826 -outfile testout_444_islow.jpg ${TESTIMAGES}/testorig.ppm) 827 add_test(djpeg${suffix}-444-islow-skip1_6 828 ${dir}djpeg${suffix} -dct int -skip 1,6 -ppm 829 -outfile testout_444_islow_skip1,6.ppm testout_444_islow.jpg) 830 add_test(djpeg${suffix}-444-islow-skip1_6-cmp 831 ${MD5CMP} ${MD5_PPM_444_ISLOW_SKIP1_6} testout_444_islow_skip1,6.ppm) 832 833 # Context rows: No Intra-iMCU row: No ENT: prog huff 834 add_test(cjpeg${suffix}-444-islow-prog 835 ${dir}cjpeg${suffix} -dct int -prog -sample 1x1 836 -outfile testout_444_islow_prog.jpg ${TESTIMAGES}/testorig.ppm) 837 add_test(djpeg${suffix}-444-islow-prog-crop98x98_13_13 838 ${dir}djpeg${suffix} -dct int -crop 98x98+13+13 -ppm 839 -outfile testout_444_islow_prog_crop98x98,13,13.ppm 840 testout_444_islow_prog.jpg) 841 add_test(djpeg${suffix}-444-islow-prog_crop98x98_13_13-cmp 842 ${MD5CMP} ${MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13} 843 testout_444_islow_prog_crop98x98,13,13.ppm) 844 845 # Context rows: No Intra-iMCU row: No ENT: arith 846 if(WITH_ARITH_ENC) 847 add_test(cjpeg${suffix}-444-islow-ari 848 ${dir}cjpeg${suffix} -dct int -arithmetic -sample 1x1 849 -outfile testout_444_islow_ari.jpg ${TESTIMAGES}/testorig.ppm) 850 if(WITH_ARITH_DEC) 851 add_test(djpeg${suffix}-444-islow-ari-crop37x37_0_0 852 ${dir}djpeg${suffix} -dct int -crop 37x37+0+0 -ppm 853 -outfile testout_444_islow_ari_crop37x37,0,0.ppm 854 testout_444_islow_ari.jpg) 855 add_test(djpeg${suffix}-444-islow-ari-crop37x37_0_0-cmp 856 ${MD5CMP} ${MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0} 857 testout_444_islow_ari_crop37x37,0,0.ppm) 858 endif() 859 endif() 860 861 add_test(jpegtran${suffix}-crop 862 ${dir}jpegtran${suffix} -crop 120x90+20+50 -transpose -perfect 863 -outfile testout_crop.jpg ${TESTIMAGES}/${TESTORIG}) 864 add_test(jpegtran${suffix}-crop-cmp 865 ${MD5CMP} ${MD5_JPEG_CROP} testout_crop.jpg) 866 867endforeach() 868 869add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P 870 ${CMAKE_SOURCE_DIR}/cmakescripts/testclean.cmake) 871 872 873# 874# Installer 875# 876 877if(MSVC) 878 set(INST_PLATFORM "Visual C++") 879 set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-vc) 880 set(INST_REG_NAME ${CMAKE_PROJECT_NAME}) 881elseif(MINGW) 882 set(INST_PLATFORM GCC) 883 set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-gcc) 884 set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-gcc) 885 set(INST_DEFS -DGCC) 886endif() 887 888if(64BIT) 889 set(INST_PLATFORM "${INST_PLATFORM} 64-bit") 890 set(INST_NAME ${INST_NAME}64) 891 set(INST_REG_NAME ${INST_DIR}64) 892 set(INST_DEFS ${INST_DEFS} -DWIN64) 893endif() 894 895if(WITH_JAVA) 896 set(INST_DEFS ${INST_DEFS} -DJAVA) 897endif() 898 899if(MSVC_IDE) 900 set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=${CMAKE_CFG_INTDIR}\\") 901else() 902 set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=") 903endif() 904 905STRING(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX}) 906 907configure_file(release/libjpeg-turbo.nsi.in libjpeg-turbo.nsi @ONLY) 908 909if(WITH_JAVA) 910 set(JAVA_DEPEND java) 911endif() 912add_custom_target(installer 913 makensis -nocd ${INST_DEFS} libjpeg-turbo.nsi 914 DEPENDS jpeg jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom 915 cjpeg djpeg jpegtran tjbench ${JAVA_DEPEND} 916 SOURCES libjpeg-turbo.nsi) 917 918if(WITH_TURBOJPEG) 919 if(ENABLE_SHARED) 920 install(TARGETS turbojpeg tjbench 921 ARCHIVE DESTINATION lib 922 LIBRARY DESTINATION lib 923 RUNTIME DESTINATION bin) 924 endif() 925 if(ENABLE_STATIC) 926 install(TARGETS turbojpeg-static ARCHIVE DESTINATION lib) 927 if(NOT ENABLE_SHARED) 928 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/tjbench-static.exe 929 DESTINATION bin RENAME tjbench.exe) 930 endif() 931 endif() 932 install(FILES ${CMAKE_SOURCE_DIR}/turbojpeg.h DESTINATION include) 933endif() 934 935if(ENABLE_STATIC) 936 install(TARGETS jpeg-static ARCHIVE DESTINATION lib) 937 if(NOT ENABLE_SHARED) 938 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cjpeg-static.exe 939 DESTINATION bin RENAME cjpeg.exe) 940 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/djpeg-static.exe 941 DESTINATION bin RENAME djpeg.exe) 942 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jpegtran-static.exe 943 DESTINATION bin RENAME jpegtran.exe) 944 endif() 945endif() 946 947install(TARGETS rdjpgcom wrjpgcom RUNTIME DESTINATION bin) 948 949install(FILES ${CMAKE_SOURCE_DIR}/README.ijg ${CMAKE_SOURCE_DIR}/README.md 950 ${CMAKE_SOURCE_DIR}/example.c ${CMAKE_SOURCE_DIR}/libjpeg.txt 951 ${CMAKE_SOURCE_DIR}/structure.txt ${CMAKE_SOURCE_DIR}/usage.txt 952 ${CMAKE_SOURCE_DIR}/wizard.txt 953 DESTINATION doc) 954 955install(FILES ${CMAKE_BINARY_DIR}/jconfig.h ${CMAKE_SOURCE_DIR}/jerror.h 956 ${CMAKE_SOURCE_DIR}/jmorecfg.h ${CMAKE_SOURCE_DIR}/jpeglib.h 957 DESTINATION include) 958 959configure_file("${CMAKE_SOURCE_DIR}/cmakescripts/cmake_uninstall.cmake.in" 960 "cmake_uninstall.cmake" IMMEDIATE @ONLY) 961 962add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P cmake_uninstall.cmake) 963