1 cmake_minimum_required(VERSION 2.8.12)
3 if(CMAKE_EXECUTABLE_SUFFIX)
4 set(CMAKE_EXECUTABLE_SUFFIX_TMP ${CMAKE_EXECUTABLE_SUFFIX})
7 project(libjpeg-turbo C)
9 string(REPLACE "." ";" VERSION_TRIPLET ${VERSION})
10 list(GET VERSION_TRIPLET 0 VERSION_MAJOR)
11 list(GET VERSION_TRIPLET 1 VERSION_MINOR)
12 list(GET VERSION_TRIPLET 2 VERSION_REVISION)
13 function(pad_number NUMBER OUTPUT_LEN)
14 string(LENGTH "${${NUMBER}}" INPUT_LEN)
15 if(INPUT_LEN LESS OUTPUT_LEN)
16 math(EXPR ZEROES "${OUTPUT_LEN} - ${INPUT_LEN} - 1")
18 foreach(C RANGE ${ZEROES})
21 set(${NUMBER} ${NUM} PARENT_SCOPE)
24 pad_number(VERSION_MINOR 3)
25 pad_number(VERSION_REVISION 3)
26 set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION})
28 string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
29 set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
31 # NOTE: On Windows, this does nothing except when using MinGW or Cygwin.
32 # CMAKE_BUILD_TYPE has no meaning in Visual Studio, and it always defaults to
33 # Debug when using NMake.
34 if(NOT CMAKE_BUILD_TYPE)
35 set(CMAKE_BUILD_TYPE Release)
37 message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
39 message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
41 # Detect CPU type and whether we're building 64-bit or 32-bit code
42 math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
43 string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
44 if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
45 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
46 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
47 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
48 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
54 if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ${CPU_TYPE})
55 set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
57 elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
58 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*64*")
60 elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*")
62 elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ppc*" OR
63 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "powerpc*")
66 set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
68 message(STATUS "${BITS}-bit build (${CPU_TYPE})")
71 ###############################################################################
73 ###############################################################################
77 set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}")
79 set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}-gcc")
82 set(CMAKE_INSTALL_DEFAULT_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}64")
85 set(CMAKE_INSTALL_DEFAULT_PREFIX /opt/${CMAKE_PROJECT_NAME})
87 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
88 set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}" CACHE PATH
89 "Directory into which to install ${CMAKE_PROJECT_NAME} (default: ${CMAKE_INSTALL_DEFAULT_PREFIX})"
92 message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
94 # When the prefix is /opt/${CMAKE_PROJECT_NAME}, we assume that an "official"
95 # build is being created, and thus we install things into specific locations.
97 if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}")
98 set(CMAKE_INSTALL_DEFAULT_DATAROOTDIR "")
99 set(CMAKE_INSTALL_DEFAULT_DOCDIR "<CMAKE_INSTALL_DATAROOTDIR>/doc")
100 set(CMAKE_INSTALL_DEFAULT_JAVADIR "<CMAKE_INSTALL_DATAROOTDIR>/classes")
101 if(UNIX AND NOT APPLE)
103 set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
105 set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib32")
110 include(cmakescripts/GNUInstallDirs.cmake)
113 set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
116 macro(report_directory var)
117 if(CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_FULL_${var})
118 message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}}")
120 message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}} (${CMAKE_INSTALL_FULL_${var}})")
122 mark_as_advanced(CLEAR CMAKE_INSTALL_${var})
125 set(DIRLIST "BINDIR;DATAROOTDIR;DOCDIR;INCLUDEDIR;LIBDIR")
127 list(APPEND DIRLIST "MANDIR")
129 foreach(dir ${DIRLIST})
130 report_directory(${dir})
134 ###############################################################################
135 # CONFIGURATION OPTIONS
136 ###############################################################################
138 macro(boolean_number var)
146 option(ENABLE_SHARED "Build shared libraries" TRUE)
147 boolean_number(ENABLE_SHARED)
148 option(ENABLE_STATIC "Build static libraries" TRUE)
149 boolean_number(ENABLE_STATIC)
150 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)
151 boolean_number(REQUIRE_SIMD)
152 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)
153 boolean_number(WITH_12BIT)
154 option(WITH_ARITH_DEC "Include arithmetic decoding support when emulating the libjpeg v6b API/ABI" TRUE)
155 boolean_number(WITH_ARITH_DEC)
156 option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" TRUE)
157 boolean_number(WITH_ARITH_ENC)
158 option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
159 boolean_number(WITH_JAVA)
160 option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
161 boolean_number(WITH_JPEG7)
162 option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
163 boolean_number(WITH_JPEG8)
164 option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
165 boolean_number(WITH_MEM_SRCDST)
166 option(WITH_SIMD "Include SIMD extensions, if available for this platform" TRUE)
167 boolean_number(WITH_SIMD)
168 option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE)
169 boolean_number(WITH_TURBOJPEG)
170 option(ENABLE_COLOR_PICKER "Enable color picker for product TV" FALSE)
171 boolean_number(ENABLE_COLOR_PICKER)
173 macro(report_option var desc)
175 message(STATUS "${desc} enabled (${var} = ${${var}})")
177 message(STATUS "${desc} disabled (${var} = ${${var}})")
185 # Explicitly setting CMAKE_POSITION_INDEPENDENT_CODE=FALSE disables PIC for all
186 # targets, which will cause the shared library builds to fail. Thus, if shared
187 # libraries are enabled and CMAKE_POSITION_INDEPENDENT_CODE is explicitly set
188 # to FALSE, we need to unset it, thus restoring the default behavior
189 # (automatically using PIC for shared library targets.)
190 if(DEFINED CMAKE_POSITION_INDEPENDENT_CODE AND
191 NOT CMAKE_POSITION_INDEPENDENT_CODE AND ENABLE_SHARED)
192 unset(CMAKE_POSITION_INDEPENDENT_CODE CACHE)
195 report_option(ENABLE_SHARED "Shared libraries")
196 report_option(ENABLE_STATIC "Static libraries")
199 set(WITH_ARITH_DEC 0)
200 set(WITH_ARITH_ENC 0)
203 set(WITH_TURBOJPEG 0)
204 set(BITS_IN_JSAMPLE 12)
206 set(BITS_IN_JSAMPLE 8)
208 report_option(WITH_12BIT "12-bit JPEG support")
210 if(WITH_JPEG8 OR WITH_JPEG7)
211 set(WITH_ARITH_ENC 1)
212 set(WITH_ARITH_DEC 1)
215 set(WITH_MEM_SRCDST 0)
219 set(D_ARITH_CODING_SUPPORTED 1)
222 report_option(WITH_ARITH_DEC "Arithmetic decoding support")
226 set(C_ARITH_CODING_SUPPORTED 1)
229 report_option(WITH_ARITH_ENC "Arithmetic encoding support")
233 report_option(WITH_TURBOJPEG "TurboJPEG API library")
234 report_option(WITH_JAVA "TurboJPEG Java wrapper")
238 set(MEM_SRCDST_SUPPORTED 1)
239 set(MEM_SRCDST_FUNCTIONS "global: jpeg_mem_dest; jpeg_mem_src;")
242 report_option(WITH_MEM_SRCDST "In-memory source/destination managers")
251 set(JPEG_LIB_VERSION 80)
253 set(JPEG_LIB_VERSION 70)
255 set(JPEG_LIB_VERSION 62)
258 if(ENABLE_COLOR_PICKER)
259 set(COLOR_PICKER_ENABLE 1)
261 set(COLOR_PICKER_ENABLE 0)
264 math(EXPR JPEG_LIB_VERSION_DIV10 "${JPEG_LIB_VERSION} / 10")
265 math(EXPR JPEG_LIB_VERSION_MOD10 "${JPEG_LIB_VERSION} % 10")
266 if(JPEG_LIB_VERSION STREQUAL "62")
267 set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION})
269 set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION_DIV10})
271 if(JPEG_LIB_VERSION STREQUAL "80")
272 set(DEFAULT_SO_MINOR_VERSION 2)
274 set(DEFAULT_SO_MINOR_VERSION 0)
277 # This causes SO_MAJOR_VERSION/SO_MINOR_VERSION to reset to defaults if
278 # WITH_JPEG7 or WITH_JPEG8 has changed.
279 if((DEFINED WITH_JPEG7_INT AND NOT WITH_JPEG7 EQUAL WITH_JPEG7_INT) OR
280 (DEFINED WITH_JPEG8_INT AND NOT WITH_JPEG8 EQUAL WITH_JPEG8_INT))
281 set(FORCE_SO_VERSION "FORCE")
283 set(WITH_JPEG7_INT ${WITH_JPEG7} CACHE INTERNAL "")
284 set(WITH_JPEG8_INT ${WITH_JPEG8} CACHE INTERNAL "")
286 set(SO_MAJOR_VERSION ${DEFAULT_SO_MAJOR_VERSION} CACHE STRING
287 "Major version of the libjpeg API shared library (default: ${DEFAULT_SO_MAJOR_VERSION})"
289 set(SO_MINOR_VERSION ${DEFAULT_SO_MINOR_VERSION} CACHE STRING
290 "Minor version of the libjpeg API shared library (default: ${DEFAULT_SO_MINOR_VERSION})"
293 set(JPEG_LIB_VERSION_DECIMAL "${JPEG_LIB_VERSION_DIV10}.${JPEG_LIB_VERSION_MOD10}")
294 message(STATUS "Emulating libjpeg API/ABI v${JPEG_LIB_VERSION_DECIMAL} (WITH_JPEG7 = ${WITH_JPEG7}, WITH_JPEG8 = ${WITH_JPEG8})")
295 message(STATUS "libjpeg API shared library version = ${SO_MAJOR_VERSION}.${SO_AGE}.${SO_MINOR_VERSION}")
297 # Because the TurboJPEG API library uses versioned symbols and changes the
298 # names of functions whenever they are modified in a backward-incompatible
299 # manner, it is always backward-ABI-compatible with itself, so the major and
300 # minor SO versions don't change. However, we increase the middle number (the
301 # SO "age") whenever functions are added to the API.
302 set(TURBOJPEG_SO_MAJOR_VERSION 0)
303 set(TURBOJPEG_SO_VERSION 0.2.0)
306 ###############################################################################
308 ###############################################################################
312 "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."
315 # Use the static C library for all build types
316 foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
317 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
318 if(${var} MATCHES "/MD")
319 string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}")
323 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /wd4996")
326 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
327 # Use the maximum optimization level for release builds
328 foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
329 if(${var} MATCHES "-O2")
330 string(REGEX REPLACE "-O2" "-O3" ${var} "${${var}}")
335 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
336 if(CMAKE_C_COMPILER_ID MATCHES "SunPro")
337 # Use the maximum optimization level for release builds
338 foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
339 if(${var} MATCHES "-xO3")
340 string(REGEX REPLACE "-xO3" "-xO5" ${var} "${${var}}")
342 if(${var} MATCHES "-xO2")
343 string(REGEX REPLACE "-xO2" "-xO5" ${var} "${${var}}")
349 string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
351 set(EFFECTIVE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
352 message(STATUS "Compiler flags = ${EFFECTIVE_C_FLAGS}")
354 set(EFFECTIVE_LD_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
355 message(STATUS "Linker flags = ${EFFECTIVE_LD_FLAGS}")
357 include(CheckCSourceCompiles)
358 include(CheckIncludeFiles)
359 include(CheckTypeSize)
361 check_type_size("size_t" SIZE_T)
362 check_type_size("unsigned long" UNSIGNED_LONG)
364 if(SIZE_T EQUAL UNSIGNED_LONG)
365 check_c_source_compiles("int main(int argc, char **argv) { unsigned long a = argc; return __builtin_ctzl(a); }"
369 check_include_files("intrin.h" HAVE_INTRIN_H)
374 check_include_files(locale.h HAVE_LOCALE_H)
375 check_include_files(stddef.h HAVE_STDDEF_H)
376 check_include_files(stdlib.h HAVE_STDLIB_H)
377 check_include_files(sys/types.h NEED_SYS_TYPES_H)
379 # Check for functions
380 include(CheckSymbolExists)
381 check_symbol_exists(memset string.h HAVE_MEMSET)
382 check_symbol_exists(memcpy string.h HAVE_MEMCPY)
383 if(NOT HAVE_MEMSET AND NOT HAVE_MEMCPY)
384 set(NEED_BSD_STRINGS 1)
388 check_type_size("unsigned char" UNSIGNED_CHAR)
389 check_type_size("unsigned short" UNSIGNED_SHORT)
391 # Check for compiler features
392 check_c_source_compiles("int main(void) { typedef struct undefined_structure *undef_struct_ptr; undef_struct_ptr ptr = 0; return ptr != 0; }"
395 message(STATUS "Compiler supports pointers to undefined structures.")
397 set(INCOMPLETE_TYPES_BROKEN 1)
398 message(STATUS "Compiler does not support pointers to undefined structures.")
401 if(CMAKE_CROSSCOMPILING)
402 set(RIGHT_SHIFT_IS_UNSIGNED 0)
404 include(CheckCSourceRuns)
405 check_c_source_runs("
408 int is_shifting_signed (long arg) {
410 if (res == -0x7F7E80CL)
411 return 1; /* right shift is signed */
412 /* see if unsigned-shift hack will fix it. */
413 /* we can't just test exact value since it depends on width of long... */
414 res |= (~0L) << (32-4);
415 if (res == -0x7F7E80CL)
416 return 0; /* right shift is unsigned */
417 printf(\"Right shift isn't acting as I expect it to.\\\\n\");
418 printf(\"I fear the JPEG software will not work at all.\\\\n\\\\n\");
419 return 0; /* try it with unsigned anyway */
422 exit(is_shifting_signed(-0x7F7E80B1L));
423 }" RIGHT_SHIFT_IS_UNSIGNED)
426 if(CMAKE_CROSSCOMPILING)
427 set(__CHAR_UNSIGNED__ 0)
429 check_c_source_runs("int main(void) { return ((char) -1 < 0); }"
435 set(INLINE_OPTIONS "__inline;inline")
437 set(INLINE_OPTIONS "__inline__;inline")
439 option(FORCE_INLINE "Force function inlining" TRUE)
440 boolean_number(FORCE_INLINE)
443 list(INSERT INLINE_OPTIONS 0 "__forceinline")
445 list(INSERT INLINE_OPTIONS 0 "inline __attribute__((always_inline))")
446 list(INSERT INLINE_OPTIONS 0 "__inline__ __attribute__((always_inline))")
449 foreach(inline ${INLINE_OPTIONS})
450 check_c_source_compiles("${inline} static int foo(void) { return 0; } int main(void) { return foo(); }"
453 set(INLINE ${inline})
458 message(FATAL_ERROR "Could not determine how to inline functions.")
460 message(STATUS "INLINE = ${INLINE} (FORCE_INLINE = ${FORCE_INLINE})")
462 if(UNIX AND NOT APPLE)
463 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map "VERS_1 { global: *; };")
464 set(CMAKE_REQUIRED_FLAGS
465 "-Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
466 check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSION_SCRIPT)
467 set(CMAKE_REQUIRED_FLAGS)
468 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
469 if(HAVE_VERSION_SCRIPT)
470 message(STATUS "Linker supports GNU-style version scripts")
471 set(MAPFLAG "-Wl,--version-script,")
472 set(TJMAPFLAG "-Wl,--version-script,")
474 message(STATUS "Linker does not support GNU-style version scripts")
475 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
476 # The Solaris linker doesn't like our version script for the libjpeg API
477 # library, but the version script for the TurboJPEG API library should
479 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map
480 "VERS_1 { global: foo; local: *; }; VERS_2 { global: foo2; } VERS_1;")
481 set(CMAKE_REQUIRED_FLAGS "-Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
482 check_c_source_compiles("void foo() {} void foo2() {} int main(void) { return 0; }"
484 set(CMAKE_REQUIRED_FLAGS)
485 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
487 message(STATUS "Linker supports mapfiles")
488 set(TJMAPFLAG "-Wl,-M,")
490 message(STATUS "Linker does not support mapfiles")
498 configure_file(win/jconfig.h.in jconfig.h)
500 configure_file(jconfig.h.in jconfig.h)
502 configure_file(jconfigint.h.in jconfigint.h)
504 configure_file(libjpeg.map.in libjpeg.map)
507 # Include directories and compiler definitions
508 include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
511 ###############################################################################
513 ###############################################################################
515 if(CMAKE_EXECUTABLE_SUFFIX_TMP)
516 set(CMAKE_EXECUTABLE_SUFFIX ${CMAKE_EXECUTABLE_SUFFIX_TMP})
518 message(STATUS "CMAKE_EXECUTABLE_SUFFIX = ${CMAKE_EXECUTABLE_SUFFIX}")
520 set(JPEG_SOURCES jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c
521 jcicc.c jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c
522 jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c
523 jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdicc.c jdinput.c
524 jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c
525 jdtrans.c jerror.c jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c
526 jidctint.c jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c)
528 if(WITH_ARITH_ENC OR WITH_ARITH_DEC)
529 set(JPEG_SOURCES ${JPEG_SOURCES} jaricom.c)
533 set(JPEG_SOURCES ${JPEG_SOURCES} jcarith.c)
537 set(JPEG_SOURCES ${JPEG_SOURCES} jdarith.c)
541 add_subdirectory(simd)
542 elseif(NOT WITH_12BIT)
543 message(STATUS "SIMD extensions: None (WITH_SIMD = ${WITH_SIMD})")
546 message(STATUS "SIMD extensions: ${CPU_TYPE} (WITH_SIMD = ${WITH_SIMD})")
548 set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1)
551 add_library(simd OBJECT jsimd_none.c)
555 add_subdirectory(java)
559 add_subdirectory(sharedlib)
563 add_library(jpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
566 set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
572 set(TURBOJPEG_SOURCES ${JPEG_SOURCES} $<TARGET_OBJECTS:simd> ${SIMD_OBJS}
573 turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c rdppm.c
575 set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile)
577 set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES} turbojpeg-jni.c)
578 include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
579 set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile.jni)
581 add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
582 set_property(TARGET turbojpeg PROPERTY COMPILE_FLAGS
583 "-DBMP_SUPPORTED -DPPM_SUPPORTED")
585 set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE)
588 set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at)
590 if(APPLE AND (NOT CMAKE_OSX_DEPLOYMENT_TARGET OR
591 CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER 10.4))
592 if(NOT CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG)
593 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
595 set_target_properties(turbojpeg PROPERTIES MACOSX_RPATH 1)
597 set_target_properties(turbojpeg PROPERTIES
598 SOVERSION ${TURBOJPEG_SO_MAJOR_VERSION} VERSION ${TURBOJPEG_SO_VERSION})
600 set_target_properties(turbojpeg PROPERTIES
601 LINK_FLAGS "${TJMAPFLAG}${TJMAPFILE}")
604 add_executable(tjunittest tjunittest.c tjutil.c md5/md5.c md5/md5hl.c)
605 target_link_libraries(tjunittest turbojpeg)
607 add_executable(tjbench tjbench.c tjutil.c)
608 target_link_libraries(tjbench turbojpeg)
610 target_link_libraries(tjbench m)
613 add_executable(tjexample tjexample.c)
614 target_link_libraries(tjexample turbojpeg)
618 add_library(turbojpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
619 ${SIMD_OBJS} turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c rdbmp.c
620 rdppm.c wrbmp.c wrppm.c)
621 set_property(TARGET turbojpeg-static PROPERTY COMPILE_FLAGS
622 "-DBMP_SUPPORTED -DPPM_SUPPORTED")
624 set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
627 add_executable(tjunittest-static tjunittest.c tjutil.c md5/md5.c
629 target_link_libraries(tjunittest-static turbojpeg-static)
631 add_executable(tjbench-static tjbench.c tjutil.c)
632 target_link_libraries(tjbench-static turbojpeg-static)
634 target_link_libraries(tjbench-static m)
640 set(USE_SETMODE "-DUSE_SETMODE")
643 set(COMPILE_FLAGS "-DGIF_SUPPORTED -DPPM_SUPPORTED ${USE_SETMODE}")
645 set(COMPILE_FLAGS "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED ${USE_SETMODE}")
646 set(CJPEG_BMP_SOURCES rdbmp.c rdtarga.c)
647 set(DJPEG_BMP_SOURCES wrbmp.c wrtarga.c)
651 add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdswitch.c
652 ${CJPEG_BMP_SOURCES})
653 set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
654 target_link_libraries(cjpeg-static jpeg-static)
656 add_executable(djpeg-static djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrgif.c
657 wrppm.c ${DJPEG_BMP_SOURCES})
658 set_property(TARGET djpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
659 target_link_libraries(djpeg-static jpeg-static)
661 add_executable(jpegtran-static jpegtran.c cdjpeg.c rdswitch.c transupp.c)
662 target_link_libraries(jpegtran-static jpeg-static)
663 set_property(TARGET jpegtran-static PROPERTY COMPILE_FLAGS "${USE_SETMODE}")
666 add_executable(rdjpgcom rdjpgcom.c)
668 add_executable(wrjpgcom wrjpgcom.c)
671 ###############################################################################
673 ###############################################################################
675 add_subdirectory(md5)
678 set(OBJDIR "\${CTEST_CONFIGURATION_TYPE}/")
686 set(TESTORIG testorig12.jpg)
687 set(MD5_JPEG_RGB_ISLOW 9d7369207c520d37f2c1cbfcb82b2964)
688 set(MD5_JPEG_RGB_ISLOW2 a00bd20d8ae49684640ef7177d2e0b64)
689 set(MD5_PPM_RGB_ISLOW f3301d2219783b8b3d942b7239fa50c0)
690 set(MD5_JPEG_422_IFAST_OPT 7322e3bd2f127f7de4b40d4480ce60e4)
691 set(MD5_PPM_422_IFAST 79807fa552899e66a04708f533e16950)
692 set(MD5_PPM_422M_IFAST 07737bfe8a7c1c87aaa393a0098d16b0)
693 set(MD5_JPEG_420_IFAST_Q100_PROG a1da220b5604081863a504297ed59e55)
694 set(MD5_PPM_420_Q100_IFAST 1b3730122709f53d007255e8dfd3305e)
695 set(MD5_PPM_420M_Q100_IFAST 980a1a3c5bf9510022869d30b7d26566)
696 set(MD5_JPEG_GRAY_ISLOW 235c90707b16e2e069f37c888b2636d9)
697 set(MD5_PPM_GRAY_ISLOW 7213c10af507ad467da5578ca5ee1fca)
698 set(MD5_PPM_GRAY_ISLOW_RGB e96ee81c30a6ed422d466338bd3de65d)
699 set(MD5_JPEG_420S_IFAST_OPT 7af8e60be4d9c227ec63ac9b6630855e)
701 set(MD5_JPEG_3x2_FLOAT_PROG_SSE a8c17daf77b457725ec929e215b603f8)
702 set(MD5_PPM_3x2_FLOAT_SSE 42876ab9e5c2f76a87d08db5fbd57956)
703 set(MD5_JPEG_3x2_FLOAT_PROG_32BIT a8c17daf77b457725ec929e215b603f8)
704 set(MD5_PPM_3x2_FLOAT_32BIT ${MD5_PPM_3x2_FLOAT_SSE})
705 set(MD5_JPEG_3x2_FLOAT_PROG_64BIT ${MD5_JPEG_3x2_FLOAT_PROG_32BIT})
706 set(MD5_PPM_3x2_FLOAT_64BIT ${MD5_PPM_3x2_FLOAT_SSE})
707 set(MD5_JPEG_3x2_FLOAT_PROG_387 bc6dbbefac2872f6b9d6c4a0ae60c3c0)
708 set(MD5_PPM_3x2_FLOAT_387 bcc5723c61560463ac60f772e742d092)
709 set(MD5_JPEG_3x2_FLOAT_PROG_MSVC e27840755870fa849872e58aa0cd1400)
710 set(MD5_PPM_3x2_FLOAT_MSVC 6c2880b83bb1aa41dfe330e7a9768690)
712 set(MD5_JPEG_3x2_IFAST_PROG 1396cc2b7185cfe943d408c9d305339e)
713 set(MD5_PPM_3x2_IFAST 3975985ef6eeb0a2cdc58daa651ccc00)
714 set(MD5_PPM_420M_ISLOW_2_1 4ca6be2a6f326ff9eaab63e70a8259c0)
715 set(MD5_PPM_420M_ISLOW_15_8 12aa9f9534c1b3d7ba047322226365eb)
716 set(MD5_PPM_420M_ISLOW_13_8 f7e22817c7b25e1393e4ec101e9d4e96)
717 set(MD5_PPM_420M_ISLOW_11_8 800a16f9f4dc9b293197bfe11be10a82)
718 set(MD5_PPM_420M_ISLOW_9_8 06b7a92a9bc69f4dc36ec40f1937d55c)
719 set(MD5_PPM_420M_ISLOW_7_8 3ec444a14a4ab4eab88ffc49c48eca43)
720 set(MD5_PPM_420M_ISLOW_3_4 3e726b7ea872445b19437d1c1d4f0d93)
721 set(MD5_PPM_420M_ISLOW_5_8 a8a771abdc94301d20ffac119b2caccd)
722 set(MD5_PPM_420M_ISLOW_1_2 b419124dd5568b085787234866102866)
723 set(MD5_PPM_420M_ISLOW_3_8 343d19015531b7bbe746124127244fa8)
724 set(MD5_PPM_420M_ISLOW_1_4 35fd59d866e44659edfa3c18db2a3edb)
725 set(MD5_PPM_420M_ISLOW_1_8 ccaed48ac0aedefda5d4abe4013f4ad7)
726 set(MD5_PPM_420_ISLOW_SKIP15_31 86664cd9dc956536409e44e244d20a97)
727 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 452a21656115a163029cfba5c04fa76a)
728 set(MD5_PPM_444_ISLOW_SKIP1_6 ef63901f71ef7a75cd78253fc0914f84)
729 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 15b173fb5872d9575572fbcc1b05956f)
730 set(MD5_JPEG_CROP cdb35ff4b4519392690ea040c56ea99c)
732 set(TESTORIG testorig.jpg)
733 set(MD5_JPEG_RGB_ISLOW 1d44a406f61da743b5fd31c0a9abdca3)
734 set(MD5_JPEG_RGB_ISLOW2 31d121e57b6c2934c890a7fc7763bcd4)
735 set(MD5_PPM_RGB_ISLOW 00a257f5393fef8821f2b88ac7421291)
736 set(MD5_BMP_RGB_ISLOW_565 f07d2e75073e4bb10f6c6f4d36e2e3be)
737 set(MD5_BMP_RGB_ISLOW_565D 4cfa0928ef3e6bb626d7728c924cfda4)
738 set(MD5_JPEG_422_IFAST_OPT 2540287b79d913f91665e660303ab2c8)
739 set(MD5_PPM_422_IFAST 35bd6b3f833bad23de82acea847129fa)
740 set(MD5_PPM_422M_IFAST 8dbc65323d62cca7c91ba02dd1cfa81d)
741 set(MD5_BMP_422M_IFAST_565 3294bd4d9a1f2b3d08ea6020d0db7065)
742 set(MD5_BMP_422M_IFAST_565D da98c9c7b6039511be4a79a878a9abc1)
743 set(MD5_JPEG_420_IFAST_Q100_PROG 990cbe0329c882420a2094da7e5adade)
744 set(MD5_PPM_420_Q100_IFAST 5a732542015c278ff43635e473a8a294)
745 set(MD5_PPM_420M_Q100_IFAST ff692ee9323a3b424894862557c092f1)
746 set(MD5_JPEG_GRAY_ISLOW 72b51f894b8f4a10b3ee3066770aa38d)
747 set(MD5_PPM_GRAY_ISLOW 8d3596c56eace32f205deccc229aa5ed)
748 set(MD5_PPM_GRAY_ISLOW_RGB 116424ac07b79e5e801f00508eab48ec)
749 set(MD5_BMP_GRAY_ISLOW_565 12f78118e56a2f48b966f792fedf23cc)
750 set(MD5_BMP_GRAY_ISLOW_565D bdbbd616441a24354c98553df5dc82db)
751 set(MD5_JPEG_420S_IFAST_OPT 388708217ac46273ca33086b22827ed8)
753 set(MD5_JPEG_3x2_FLOAT_PROG_SSE 343e3f8caf8af5986ebaf0bdc13b5c71)
754 set(MD5_PPM_3x2_FLOAT_SSE 1a75f36e5904d6fc3a85a43da9ad89bb)
755 set(MD5_JPEG_3x2_FLOAT_PROG_32BIT 9bca803d2042bd1eb03819e2bf92b3e5)
756 set(MD5_PPM_3x2_FLOAT_32BIT f6bfab038438ed8f5522fbd33595dcdc)
757 set(MD5_JPEG_3x2_FLOAT_PROG_64BIT ${MD5_JPEG_3x2_FLOAT_PROG_32BIT})
758 set(MD5_PPM_3x2_FLOAT_64BIT 0e917a34193ef976b679a6b069b1be26)
759 set(MD5_JPEG_3x2_FLOAT_PROG_387 1657664a410e0822c924b54f6f65e6e9)
760 set(MD5_PPM_3x2_FLOAT_387 cb0a1f027f3d2917c902b5640214e025)
761 set(MD5_JPEG_3x2_FLOAT_PROG_MSVC 7999ce9cd0ee9b6c7043b7351ab7639d)
762 set(MD5_PPM_3x2_FLOAT_MSVC 28cdc448a6b75e97892f0e0f8d4b21f3)
764 set(MD5_JPEG_3x2_IFAST_PROG 1ee5d2c1a77f2da495f993c8c7cceca5)
765 set(MD5_PPM_3x2_IFAST fd283664b3b49127984af0a7f118fccd)
766 set(MD5_JPEG_420_ISLOW_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
767 set(MD5_JPEG_444_ISLOW_PROGARI 0a8f1c8f66e113c3cf635df0a475a617)
768 set(MD5_PPM_420M_IFAST_ARI 72b59a99bcf1de24c5b27d151bde2437)
769 set(MD5_JPEG_420_ISLOW 9a68f56bc76e466aa7e52f415d0f4a5f)
770 set(MD5_PPM_420M_ISLOW_2_1 9f9de8c0612f8d06869b960b05abf9c9)
771 set(MD5_PPM_420M_ISLOW_15_8 b6875bc070720b899566cc06459b63b7)
772 set(MD5_PPM_420M_ISLOW_13_8 bc3452573c8152f6ae552939ee19f82f)
773 set(MD5_PPM_420M_ISLOW_11_8 d8cc73c0aaacd4556569b59437ba00a5)
774 set(MD5_PPM_420M_ISLOW_9_8 d25e61bc7eac0002f5b393aa223747b6)
775 set(MD5_PPM_420M_ISLOW_7_8 ddb564b7c74a09494016d6cd7502a946)
776 set(MD5_PPM_420M_ISLOW_3_4 8ed8e68808c3fbc4ea764fc9d2968646)
777 set(MD5_PPM_420M_ISLOW_5_8 a3363274999da2366a024efae6d16c9b)
778 set(MD5_PPM_420M_ISLOW_1_2 e692a315cea26b988c8e8b29a5dbcd81)
779 set(MD5_PPM_420M_ISLOW_3_8 79eca9175652ced755155c90e785a996)
780 set(MD5_PPM_420M_ISLOW_1_4 79cd778f8bf1a117690052cacdd54eca)
781 set(MD5_PPM_420M_ISLOW_1_8 391b3d4aca640c8567d6f8745eb2142f)
782 set(MD5_BMP_420_ISLOW_256 4980185e3776e89bd931736e1cddeee6)
783 set(MD5_BMP_420_ISLOW_565 bf9d13e16c4923b92e1faa604d7922cb)
784 set(MD5_BMP_420_ISLOW_565D 6bde71526acc44bcff76f696df8638d2)
785 set(MD5_BMP_420M_ISLOW_565 8dc0185245353cfa32ad97027342216f)
786 set(MD5_BMP_420M_ISLOW_565D ce034037d212bc403330df6f915c161b)
787 set(MD5_PPM_420_ISLOW_SKIP15_31 c4c65c1e43d7275cd50328a61e6534f0)
788 set(MD5_PPM_420_ISLOW_ARI_SKIP16_139 087c6b123db16ac00cb88c5b590bb74a)
789 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 26eb36ccc7d1f0cb80cdabb0ac8b5d99)
790 set(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 886c6775af22370257122f8b16207e6d)
791 set(MD5_PPM_444_ISLOW_SKIP1_6 5606f86874cf26b8fcee1117a0a436a6)
792 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 db87dc7ce26bcdc7a6b56239ce2b9d6c)
793 set(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 cb57b32bd6d03e35432362f7bf184b6d)
794 set(MD5_JPEG_CROP b4197f377e621c4e9b1d20471432610d)
799 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
800 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
802 add_test(TJUnitTest-yuv
803 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
804 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
806 add_test(TJUnitTest-yuv-nopad
807 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
808 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
809 TJUnitTest -yuv -noyuvpad)
810 add_test(TJUnitTest-bi
811 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
812 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
814 add_test(TJUnitTest-bi-yuv
815 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
816 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
818 add_test(TJUnitTest-bi-yuv-nopad
819 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
820 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
821 TJUnitTest -bi -yuv -noyuvpad)
824 set(TEST_LIBTYPES "")
826 set(TEST_LIBTYPES ${TEST_LIBTYPES} shared)
829 set(TEST_LIBTYPES ${TEST_LIBTYPES} static)
832 set(TESTIMAGES ${CMAKE_CURRENT_SOURCE_DIR}/testimages)
833 set(MD5CMP ${CMAKE_CURRENT_BINARY_DIR}/md5/md5cmp)
834 if(CMAKE_CROSSCOMPILING)
835 file(RELATIVE_PATH TESTIMAGES ${CMAKE_CURRENT_BINARY_DIR} ${TESTIMAGES})
836 file(RELATIVE_PATH MD5CMP ${CMAKE_CURRENT_BINARY_DIR} ${MD5CMP})
839 # The output of the floating point DCT/IDCT algorithms differs depending on the
840 # type of floating point math used, so the FLOATTEST CMake variable must be
841 # set in order to tell the testing system which floating point results it
844 # sse = validate against the expected results from the libjpeg-turbo SSE SIMD
846 # 32bit = validate against the expected results from the C code when running on
847 # a 32-bit FPU (or when SSE is being used for floating point math,
848 # which is generally the default with x86-64 compilers)
849 # 64bit = validate against the expected results from the C code when running
851 # 387 = validate against the expected results from the C code when the 387 FPU
852 # is being used for floating point math (which is generally the default
853 # with x86 compilers)
854 # msvc = validate against the expected results from the C code when compiled
855 # with a 32-bit version of Visual C++
857 if(CPU_TYPE STREQUAL "x86_64" OR CPU_TYPE STREQUAL "i386")
859 set(DEFAULT_FLOATTEST sse)
860 elseif(CPU_TYPE STREQUAL "x86_64")
861 set(DEFAULT_FLOATTEST 32bit)
862 elseif(CPU_TYPE STREQUAL "i386" AND MSVC)
863 set(DEFAULT_FLOATTEST msvc)
867 set(DEFAULT_FLOATTEST 64bit)
868 elseif(BITS EQUAL 32)
869 set(DEFAULT_FLOATTEST 32bit)
873 # This causes FLOATTEST to reset to the default value if WITH_SIMD has
875 if(DEFINED WITH_SIMD_INT AND NOT WITH_SIMD EQUAL WITH_SIMD_INT)
876 set(FORCE_FLOATTEST "FORCE")
878 set(WITH_SIMD_INT ${WITH_SIMD} CACHE INTERNAL "")
879 set(FLOATTEST ${DEFAULT_FLOATTEST} CACHE STRING
880 "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, 32bit = generic 32-bit FPU or SSE, 64bit = generic 64-bit FPU, 387 = 387 FPU, msvc = 32-bit Visual Studio] (default = ${DEFAULT_FLOATTEST})"
882 message(STATUS "FLOATTEST = ${FLOATTEST}")
885 string(TOUPPER ${FLOATTEST} FLOATTEST_UC)
886 string(TOLOWER ${FLOATTEST} FLOATTEST)
887 if(NOT FLOATTEST STREQUAL "sse" AND NOT FLOATTEST STREQUAL "32bit" AND
888 NOT FLOATTEST STREQUAL "64bit" AND NOT FLOATTEST STREQUAL "387" AND
889 NOT FLOATTEST STREQUAL "msvc")
890 message(FATAL_ERROR "\"${FLOATTEST}\" is not a valid value for FLOATTEST.")
894 foreach(libtype ${TEST_LIBTYPES})
895 if(libtype STREQUAL "static")
899 add_test(tjunittest-${libtype} tjunittest${suffix})
900 add_test(tjunittest-${libtype}-alloc tjunittest${suffix} -alloc)
901 add_test(tjunittest-${libtype}-yuv tjunittest${suffix} -yuv)
902 add_test(tjunittest-${libtype}-yuv-alloc tjunittest${suffix} -yuv -alloc)
903 add_test(tjunittest-${libtype}-yuv-nopad tjunittest${suffix} -yuv -noyuvpad)
904 add_test(tjunittest-${libtype}-bmp tjunittest${suffix} -bmp)
906 set(MD5_PPM_GRAY_TILE 89d3ca21213d9d864b50b4e4e7de4ca6)
907 set(MD5_PPM_420_8x8_TILE 847fceab15c5b7b911cb986cf0f71de3)
908 set(MD5_PPM_420_16x16_TILE ca45552a93687e078f7137cc4126a7b0)
909 set(MD5_PPM_420_32x32_TILE d8676f1d6b68df358353bba9844f4a00)
910 set(MD5_PPM_420_64x64_TILE 4e4c1a3d7ea4bace4f868bcbe83b7050)
911 set(MD5_PPM_420_128x128_TILE f24c3429c52265832beab9df72a0ceae)
912 set(MD5_PPM_420M_8x8_TILE bc25320e1f4c31ce2e610e43e9fd173c)
913 set(MD5_PPM_420M_TILE 75ffdf14602258c5c189522af57fa605)
914 set(MD5_PPM_422_8x8_TILE d83dacd9fc73b0a6f10c09acad64eb1e)
915 set(MD5_PPM_422_16x16_TILE 35077fb610d72dd743b1eb0cbcfe10fb)
916 set(MD5_PPM_422_32x32_TILE e6902ed8a449ecc0f0d6f2bf945f65f7)
917 set(MD5_PPM_422_64x64_TILE 2b4502a8f316cedbde1da7bce3d2231e)
918 set(MD5_PPM_422_128x128_TILE f0b5617d578f5e13c8eee215d64d4877)
919 set(MD5_PPM_422M_8x8_TILE 828941d7f41cd6283abd6beffb7fd51d)
920 set(MD5_PPM_422M_TILE e877ae1324c4a280b95376f7f018172f)
921 set(MD5_PPM_444_TILE 7964e41e67cfb8d0a587c0aa4798f9c3)
923 # Test compressing from/decompressing to an arbitrary subregion of a larger
925 add_test(tjbench-${libtype}-tile-cp
926 ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
928 add_test(tjbench-${libtype}-tile
929 tjbench${suffix} testout_tile.ppm 95 -rgb -quiet -tile -benchtime 0.01
931 set_tests_properties(tjbench-${libtype}-tile
932 PROPERTIES DEPENDS tjbench-${libtype}-tile-cp)
934 foreach(tile 8 16 32 64 128)
935 add_test(tjbench-${libtype}-tile-gray-${tile}x${tile}-cmp
936 ${MD5CMP} ${MD5_PPM_GRAY_TILE}
937 testout_tile_GRAY_Q95_${tile}x${tile}.ppm)
938 foreach(subsamp 420 422)
939 add_test(tjbench-${libtype}-tile-${subsamp}-${tile}x${tile}-cmp
940 ${MD5CMP} ${MD5_PPM_${subsamp}_${tile}x${tile}_TILE}
941 testout_tile_${subsamp}_Q95_${tile}x${tile}.ppm)
943 add_test(tjbench-${libtype}-tile-444-${tile}x${tile}-cmp
944 ${MD5CMP} ${MD5_PPM_444_TILE}
945 testout_tile_444_Q95_${tile}x${tile}.ppm)
946 foreach(subsamp gray 420 422 444)
947 set_tests_properties(tjbench-${libtype}-tile-${subsamp}-${tile}x${tile}-cmp
948 PROPERTIES DEPENDS tjbench-${libtype}-tile)
952 add_test(tjbench-${libtype}-tilem-cp
953 ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
955 add_test(tjbench-${libtype}-tilem
956 tjbench${suffix} testout_tilem.ppm 95 -rgb -fastupsample -quiet -tile
957 -benchtime 0.01 -warmup 0)
958 set_tests_properties(tjbench-${libtype}-tilem
959 PROPERTIES DEPENDS tjbench-${libtype}-tilem-cp)
961 add_test(tjbench-${libtype}-tile-420m-8x8-cmp
962 ${MD5CMP} ${MD5_PPM_420M_8x8_TILE} testout_tilem_420_Q95_8x8.ppm)
963 add_test(tjbench-${libtype}-tile-422m-8x8-cmp
964 ${MD5CMP} ${MD5_PPM_422M_8x8_TILE} testout_tilem_422_Q95_8x8.ppm)
965 foreach(tile 16 32 64 128)
966 foreach(subsamp 420 422)
967 add_test(tjbench-${libtype}-tile-${subsamp}m-${tile}x${tile}-cmp
968 ${MD5CMP} ${MD5_PPM_${subsamp}M_TILE}
969 testout_tilem_${subsamp}_Q95_${tile}x${tile}.ppm)
972 foreach(tile 8 16 32 64 128)
973 foreach(subsamp 420 422)
974 set_tests_properties(tjbench-${libtype}-tile-${subsamp}m-${tile}x${tile}-cmp
975 PROPERTIES DEPENDS tjbench-${libtype}-tilem)
980 # These tests are carefully crafted to provide full coverage of as many of
981 # the underlying algorithms as possible (including all of the
982 # SIMD-accelerated ones.)
984 macro(add_bittest PROG NAME ARGS OUTFILE INFILE MD5SUM)
985 add_test(${PROG}-${libtype}-${NAME}
986 ${PROG}${suffix} ${ARGS} -outfile ${OUTFILE} ${INFILE})
987 add_test(${PROG}-${libtype}-${NAME}-cmp
988 ${MD5CMP} ${MD5SUM} ${OUTFILE})
989 set_tests_properties(${PROG}-${libtype}-${NAME}-cmp PROPERTIES
990 DEPENDS ${PROG}-${libtype}-${NAME})
991 if(${ARGC} GREATER 6)
993 set_tests_properties(${PROG}-${libtype}-${NAME} PROPERTIES
998 # CC: null SAMP: fullsize FDCT: islow ENT: huff
999 add_bittest(cjpeg rgb-islow "-rgb;-dct;int;-icc;${TESTIMAGES}/test1.icc"
1000 testout_rgb_islow.jpg ${TESTIMAGES}/testorig.ppm
1001 ${MD5_JPEG_RGB_ISLOW})
1003 # CC: null SAMP: fullsize IDCT: islow ENT: huff
1004 add_bittest(djpeg rgb-islow "-dct;int;-ppm;-icc;testout_rgb_islow.icc"
1005 testout_rgb_islow.ppm testout_rgb_islow.jpg
1006 ${MD5_PPM_RGB_ISLOW} cjpeg-${libtype}-rgb-islow)
1008 add_test(djpeg-${libtype}-rgb-islow-icc-cmp
1009 ${MD5CMP} b06a39d730129122e85c1363ed1bbc9e testout_rgb_islow.icc)
1011 add_bittest(jpegtran icc "-copy;all;-icc;${TESTIMAGES}/test2.icc"
1012 testout_rgb_islow2.jpg testout_rgb_islow.jpg ${MD5_JPEG_RGB_ISLOW2})
1015 # CC: RGB->RGB565 SAMP: fullsize IDCT: islow ENT: huff
1016 add_bittest(djpeg rgb-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1017 testout_rgb_islow_565.bmp testout_rgb_islow.jpg
1018 ${MD5_BMP_RGB_ISLOW_565} cjpeg-${libtype}-rgb-islow)
1020 # CC: RGB->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
1021 add_bittest(djpeg rgb-islow-565D "-dct;int;-rgb565;-bmp"
1022 testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
1023 ${MD5_BMP_RGB_ISLOW_565D} cjpeg-${libtype}-rgb-islow)
1026 # CC: RGB->YCC SAMP: fullsize/h2v1 FDCT: ifast ENT: 2-pass huff
1027 add_bittest(cjpeg 422-ifast-opt "-sample;2x1;-dct;fast;-opt"
1028 testout_422_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
1029 ${MD5_JPEG_422_IFAST_OPT})
1031 # CC: YCC->RGB SAMP: fullsize/h2v1 fancy IDCT: ifast ENT: huff
1032 add_bittest(djpeg 422-ifast "-dct;fast"
1033 testout_422_ifast.ppm testout_422_ifast_opt.jpg
1034 ${MD5_PPM_422_IFAST} cjpeg-${libtype}-422-ifast-opt)
1036 # CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
1037 add_bittest(djpeg 422m-ifast "-dct;fast;-nosmooth"
1038 testout_422m_ifast.ppm testout_422_ifast_opt.jpg
1039 ${MD5_PPM_422M_IFAST} cjpeg-${libtype}-422-ifast-opt)
1042 # CC: YCC->RGB565 SAMP: h2v1 merged IDCT: ifast ENT: huff
1043 add_bittest(djpeg 422m-ifast-565
1044 "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
1045 testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg
1046 ${MD5_BMP_422M_IFAST_565} cjpeg-${libtype}-422-ifast-opt)
1048 # CC: YCC->RGB565 (dithered) SAMP: h2v1 merged IDCT: ifast ENT: huff
1049 add_bittest(djpeg 422m-ifast-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1050 testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
1051 ${MD5_BMP_422M_IFAST_565D} cjpeg-${libtype}-422-ifast-opt)
1054 # CC: RGB->YCC SAMP: fullsize/h2v2 FDCT: ifast ENT: prog huff
1055 add_bittest(cjpeg 420-q100-ifast-prog
1056 "-sample;2x2;-quality;100;-dct;fast;-prog"
1057 testout_420_q100_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1058 ${MD5_JPEG_420_IFAST_Q100_PROG})
1060 # CC: YCC->RGB SAMP: fullsize/h2v2 fancy IDCT: ifast ENT: prog huff
1061 add_bittest(djpeg 420-q100-ifast-prog "-dct;fast"
1062 testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1063 ${MD5_PPM_420_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
1065 # CC: YCC->RGB SAMP: h2v2 merged IDCT: ifast ENT: prog huff
1066 add_bittest(djpeg 420m-q100-ifast-prog "-dct;fast;-nosmooth"
1067 testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1068 ${MD5_PPM_420M_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
1070 # CC: RGB->Gray SAMP: fullsize FDCT: islow ENT: huff
1071 add_bittest(cjpeg gray-islow "-gray;-dct;int"
1072 testout_gray_islow.jpg ${TESTIMAGES}/testorig.ppm
1073 ${MD5_JPEG_GRAY_ISLOW})
1075 # CC: Gray->Gray SAMP: fullsize IDCT: islow ENT: huff
1076 add_bittest(djpeg gray-islow "-dct;int"
1077 testout_gray_islow.ppm testout_gray_islow.jpg
1078 ${MD5_PPM_GRAY_ISLOW} cjpeg-${libtype}-gray-islow)
1080 # CC: Gray->RGB SAMP: fullsize IDCT: islow ENT: huff
1081 add_bittest(djpeg gray-islow-rgb "-dct;int;-rgb"
1082 testout_gray_islow_rgb.ppm testout_gray_islow.jpg
1083 ${MD5_PPM_GRAY_ISLOW_RGB} cjpeg-${libtype}-gray-islow)
1086 # CC: Gray->RGB565 SAMP: fullsize IDCT: islow ENT: huff
1087 add_bittest(djpeg gray-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1088 testout_gray_islow_565.bmp testout_gray_islow.jpg
1089 ${MD5_BMP_GRAY_ISLOW_565} cjpeg-${libtype}-gray-islow)
1091 # CC: Gray->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
1092 add_bittest(djpeg gray-islow-565D "-dct;int;-rgb565;-bmp"
1093 testout_gray_islow_565D.bmp testout_gray_islow.jpg
1094 ${MD5_BMP_GRAY_ISLOW_565D} cjpeg-${libtype}-gray-islow)
1097 # CC: RGB->YCC SAMP: fullsize smooth/h2v2 smooth FDCT: islow
1099 add_bittest(cjpeg 420s-ifast-opt "-sample;2x2;-smooth;1;-dct;int;-opt"
1100 testout_420s_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
1101 ${MD5_JPEG_420S_IFAST_OPT})
1104 # CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff
1105 add_bittest(cjpeg 3x2-float-prog "-sample;3x2;-dct;float;-prog"
1106 testout_3x2_float_prog.jpg ${TESTIMAGES}/testorig.ppm
1107 ${MD5_JPEG_3x2_FLOAT_PROG_${FLOATTEST_UC}})
1109 # CC: YCC->RGB SAMP: fullsize/int IDCT: float ENT: prog huff
1110 add_bittest(djpeg 3x2-float-prog "-dct;float"
1111 testout_3x2_float.ppm testout_3x2_float_prog.jpg
1112 ${MD5_PPM_3x2_FLOAT_${FLOATTEST_UC}} cjpeg-${libtype}-3x2-float-prog)
1115 # CC: RGB->YCC SAMP: fullsize/int FDCT: ifast ENT: prog huff
1116 add_bittest(cjpeg 3x2-ifast-prog "-sample;3x2;-dct;fast;-prog"
1117 testout_3x2_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1118 ${MD5_JPEG_3x2_IFAST_PROG})
1120 # CC: YCC->RGB SAMP: fullsize/int IDCT: ifast ENT: prog huff
1121 add_bittest(djpeg 3x2-ifast-prog "-dct;fast"
1122 testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
1123 ${MD5_PPM_3x2_IFAST} cjpeg-${libtype}-3x2-ifast-prog)
1126 # CC: YCC->RGB SAMP: fullsize/h2v2 FDCT: islow ENT: arith
1127 add_bittest(cjpeg 420-islow-ari "-dct;int;-arithmetic"
1128 testout_420_islow_ari.jpg ${TESTIMAGES}/testorig.ppm
1129 ${MD5_JPEG_420_ISLOW_ARI})
1131 add_bittest(jpegtran 420-islow-ari "-arithmetic"
1132 testout_420_islow_ari2.jpg ${TESTIMAGES}/testimgint.jpg
1133 ${MD5_JPEG_420_ISLOW_ARI})
1135 # CC: YCC->RGB SAMP: fullsize FDCT: islow ENT: prog arith
1136 add_bittest(cjpeg 444-islow-progari
1137 "-sample;1x1;-dct;int;-prog;-arithmetic"
1138 testout_444_islow_progari.jpg ${TESTIMAGES}/testorig.ppm
1139 ${MD5_JPEG_444_ISLOW_PROGARI})
1143 # CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
1144 add_bittest(djpeg 420m-ifast-ari "-fast;-ppm"
1145 testout_420m_ifast_ari.ppm ${TESTIMAGES}/testimgari.jpg
1146 ${MD5_PPM_420M_IFAST_ARI})
1148 add_bittest(jpegtran 420-islow ""
1149 testout_420_islow.jpg ${TESTIMAGES}/testimgari.jpg
1150 ${MD5_JPEG_420_ISLOW})
1153 # 2/1-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 16x16 islow ENT: huff
1154 # 15/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 15x15 islow ENT: huff
1155 # 13/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 13x13 islow ENT: huff
1156 # 11/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 11x11 islow ENT: huff
1157 # 9/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 9x9 islow ENT: huff
1158 # 7/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 7x7 islow/14x14 islow
1160 # 3/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 6x6 islow/12x12 islow
1162 # 5/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 5x5 islow/10x10 islow
1164 # 1/2-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 4x4 islow/8x8 islow
1166 # 3/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 3x3 islow/6x6 islow
1168 # 1/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 2x2 islow/4x4 islow
1170 # 1/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 1x1 islow/2x2 islow
1172 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)
1173 string(REGEX REPLACE "_" "/" scalearg ${scale})
1174 add_bittest(djpeg 420m-islow-${scale}
1175 "-dct;int;-scale;${scalearg};-nosmooth;-ppm"
1176 testout_420m_islow_${scale}.ppm ${TESTIMAGES}/${TESTORIG}
1177 ${MD5_PPM_420M_ISLOW_${scale}})
1181 # CC: YCC->RGB (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
1182 add_bittest(djpeg 420-islow-256 "-dct;int;-colors;256;-bmp"
1183 testout_420_islow_256.bmp ${TESTIMAGES}/${TESTORIG}
1184 ${MD5_BMP_420_ISLOW_256})
1186 # CC: YCC->RGB565 SAMP: h2v2 fancy IDCT: islow ENT: huff
1187 add_bittest(djpeg 420-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1188 testout_420_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1189 ${MD5_BMP_420_ISLOW_565})
1191 # CC: YCC->RGB565 (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
1192 add_bittest(djpeg 420-islow-565D "-dct;int;-rgb565;-bmp"
1193 testout_420_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1194 ${MD5_BMP_420_ISLOW_565D})
1196 # CC: YCC->RGB565 SAMP: h2v2 merged IDCT: islow ENT: huff
1197 add_bittest(djpeg 420m-islow-565
1198 "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
1199 testout_420m_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1200 ${MD5_BMP_420M_ISLOW_565})
1202 # CC: YCC->RGB565 (dithered) SAMP: h2v2 merged IDCT: islow ENT: huff
1203 add_bittest(djpeg 420m-islow-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1204 testout_420m_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1205 ${MD5_BMP_420M_ISLOW_565D})
1208 # Partial decode tests. These tests are designed to cover all of the
1209 # possible code paths in jpeg_skip_scanlines().
1211 # Context rows: Yes Intra-iMCU row: Yes iMCU row prefetch: No ENT: huff
1212 add_bittest(djpeg 420-islow-skip15_31 "-dct;int;-skip;15,31;-ppm"
1213 testout_420_islow_skip15,31.ppm ${TESTIMAGES}/${TESTORIG}
1214 ${MD5_PPM_420_ISLOW_SKIP15_31})
1216 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: Yes ENT: arith
1218 add_bittest(djpeg 420-islow-ari-skip16_139 "-dct;int;-skip;16,139;-ppm"
1219 testout_420_islow_ari_skip16,139.ppm ${TESTIMAGES}/testimgari.jpg
1220 ${MD5_PPM_420_ISLOW_ARI_SKIP16_139})
1223 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: prog huff
1224 add_test(cjpeg-${libtype}-420-islow-prog
1225 cjpeg${suffix} -dct int -prog
1226 -outfile testout_420_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
1227 add_bittest(djpeg 420-islow-prog-crop62x62_71_71
1228 "-dct;int;-crop;62x62+71+71;-ppm"
1229 testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
1230 ${MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71} cjpeg-${libtype}-420-islow-prog)
1232 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: arith
1234 add_bittest(djpeg 420-islow-ari-crop53x53_4_4
1235 "-dct;int;-crop;53x53+4+4;-ppm"
1236 testout_420_islow_ari_crop53x53,4,4.ppm ${TESTIMAGES}/testimgari.jpg
1237 ${MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4})
1240 # Context rows: No Intra-iMCU row: Yes ENT: huff
1241 add_test(cjpeg-${libtype}-444-islow
1242 cjpeg${suffix} -dct int -sample 1x1
1243 -outfile testout_444_islow.jpg ${TESTIMAGES}/testorig.ppm)
1244 add_bittest(djpeg 444-islow-skip1_6 "-dct;int;-skip;1,6;-ppm"
1245 testout_444_islow_skip1,6.ppm testout_444_islow.jpg
1246 ${MD5_PPM_444_ISLOW_SKIP1_6} cjpeg-${libtype}-444-islow)
1248 # Context rows: No Intra-iMCU row: No ENT: prog huff
1249 add_test(cjpeg-${libtype}-444-islow-prog
1250 cjpeg${suffix} -dct int -prog -sample 1x1
1251 -outfile testout_444_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
1252 add_bittest(djpeg 444-islow-prog-crop98x98_13_13
1253 "-dct;int;-crop;98x98+13+13;-ppm"
1254 testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
1255 ${MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13} cjpeg-${libtype}-444-islow-prog)
1257 # Context rows: No Intra-iMCU row: No ENT: arith
1259 add_test(cjpeg-${libtype}-444-islow-ari
1260 cjpeg${suffix} -dct int -arithmetic -sample 1x1
1261 -outfile testout_444_islow_ari.jpg ${TESTIMAGES}/testorig.ppm)
1263 add_bittest(djpeg 444-islow-ari-crop37x37_0_0
1264 "-dct;int;-crop;37x37+0+0;-ppm"
1265 testout_444_islow_ari_crop37x37,0,0.ppm testout_444_islow_ari.jpg
1266 ${MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0} cjpeg-${libtype}-444-islow-ari)
1270 add_bittest(jpegtran crop "-crop;120x90+20+50;-transpose;-perfect"
1271 testout_crop.jpg ${TESTIMAGES}/${TESTORIG}
1276 add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
1277 ${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/testclean.cmake)
1280 configure_file(tjbenchtest.in tjbenchtest @ONLY)
1281 configure_file(tjexampletest.in tjexampletest @ONLY)
1286 configure_file(tjbenchtest.java.in tjbenchtest.java @ONLY)
1287 configure_file(tjexampletest.java.in tjexampletest.java @ONLY)
1288 add_custom_target(tjtest
1289 COMMAND echo tjbenchtest
1290 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1291 COMMAND echo tjbenchtest -alloc
1292 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -alloc
1293 COMMAND echo tjbenchtest -yuv
1294 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv
1295 COMMAND echo tjbenchtest -yuv -alloc
1296 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv -alloc
1297 COMMAND echo tjbenchtest -progressive
1298 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -progressive
1299 COMMAND echo tjexampletest
1300 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest
1301 COMMAND echo tjbenchtest.java
1302 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1303 COMMAND echo tjbenchtest.java -yuv
1304 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java -yuv
1305 COMMAND echo tjbenchtest.java -progressive
1306 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java -progressive
1307 COMMAND echo tjexampletest.java
1308 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest.java
1309 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1310 ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1311 ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest)
1313 add_custom_target(tjtest
1314 COMMAND echo tjbenchtest
1315 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1316 COMMAND echo tjbenchtest -alloc
1317 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -alloc
1318 COMMAND echo tjbenchtest -yuv
1319 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv
1320 COMMAND echo tjbenchtest -yuv -alloc
1321 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest -yuv -alloc
1322 COMMAND echo tjexampletest
1323 COMMAND ${BASH} ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest
1324 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest)
1329 ###############################################################################
1331 ###############################################################################
1333 set(EXE ${CMAKE_EXECUTABLE_SUFFIX})
1337 install(TARGETS turbojpeg tjbench
1338 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
1339 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1340 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1343 install(TARGETS turbojpeg-static ARCHIVE
1344 DESTINATION ${CMAKE_INSTALL_LIBDIR})
1345 if(NOT ENABLE_SHARED)
1346 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/tjbench-static${EXE}
1347 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME tjbench${EXE})
1350 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg.h
1351 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1355 install(TARGETS jpeg-static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
1356 if(NOT ENABLE_SHARED)
1357 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cjpeg-static${EXE}
1358 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME cjpeg${EXE})
1359 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/djpeg-static${EXE}
1360 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME djpeg${EXE})
1361 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jpegtran-static${EXE}
1362 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME jpegtran${EXE})
1366 install(TARGETS rdjpgcom wrjpgcom RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1368 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.ijg
1369 ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_SOURCE_DIR}/example.txt
1370 ${CMAKE_CURRENT_SOURCE_DIR}/tjexample.c
1371 ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg.txt
1372 ${CMAKE_CURRENT_SOURCE_DIR}/structure.txt
1373 ${CMAKE_CURRENT_SOURCE_DIR}/usage.txt ${CMAKE_CURRENT_SOURCE_DIR}/wizard.txt
1374 ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
1376 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/java/TJExample.java
1377 DESTINATION ${CMAKE_INSTALL_DOCDIR})
1381 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cjpeg.1
1382 ${CMAKE_CURRENT_SOURCE_DIR}/djpeg.1 ${CMAKE_CURRENT_SOURCE_DIR}/jpegtran.1
1383 ${CMAKE_CURRENT_SOURCE_DIR}/rdjpgcom.1
1384 ${CMAKE_CURRENT_SOURCE_DIR}/wrjpgcom.1
1385 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
1387 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libjpeg.pc
1388 ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libturbojpeg.pc
1389 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
1391 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h
1392 ${CMAKE_CURRENT_SOURCE_DIR}/jerror.h ${CMAKE_CURRENT_SOURCE_DIR}/jmorecfg.h
1393 ${CMAKE_CURRENT_SOURCE_DIR}/jpeglib.h
1394 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1396 include(cmakescripts/BuildPackages.cmake)
1398 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/cmake_uninstall.cmake.in"
1399 "cmake_uninstall.cmake" IMMEDIATE @ONLY)
1401 add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P cmake_uninstall.cmake)