blob: dae19716fc6921ff51ae0c24e9f221963d9f77b2 [file] [log] [blame]
DRC6abd3912016-11-15 08:47:43 -06001cmake_minimum_required(VERSION 2.8.12)
DRC84697032010-10-15 03:43:24 +00002
DRC5d6f8582011-02-18 23:08:58 +00003project(libjpeg-turbo C)
DRC6cb27c32016-05-09 20:28:17 -05004set(VERSION 1.5.80)
DRCf06cc122016-05-10 19:36:34 -05005string(REPLACE "." ";" VERSION_TRIPLET ${VERSION})
6list(GET VERSION_TRIPLET 0 VERSION_MAJOR)
7list(GET VERSION_TRIPLET 1 VERSION_MINOR)
8list(GET VERSION_TRIPLET 2 VERSION_REVISION)
9function(pad_number NUMBER OUTPUT_LEN)
10 string(LENGTH "${${NUMBER}}" INPUT_LEN)
11 if(INPUT_LEN LESS OUTPUT_LEN)
12 math(EXPR ZEROES "${OUTPUT_LEN} - ${INPUT_LEN} - 1")
13 set(NUM ${${NUMBER}})
14 foreach(C RANGE ${ZEROES})
15 set(NUM "0${NUM}")
16 endforeach()
17 set(${NUMBER} ${NUM} PARENT_SCOPE)
18 endif()
19endfunction()
20pad_number(VERSION_MINOR 3)
21pad_number(VERSION_REVISION 3)
22set(LIBJPEG_TURBO_VERSION_NUMBER ${VERSION_MAJOR}${VERSION_MINOR}${VERSION_REVISION})
DRC84697032010-10-15 03:43:24 +000023
DRC6abd3912016-11-15 08:47:43 -060024string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
25set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
DRC84697032010-10-15 03:43:24 +000026
DRC6abd3912016-11-15 08:47:43 -060027# NOTE: On Windows, this does nothing except when using MinGW or Cygwin.
28# CMAKE_BUILD_TYPE has no meaning in Visual Studio, and it always defaults to
29# Debug when using NMake.
DRC84697032010-10-15 03:43:24 +000030if(NOT CMAKE_BUILD_TYPE)
31 set(CMAKE_BUILD_TYPE Release)
32endif()
DRC84697032010-10-15 03:43:24 +000033message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
34
DRCeb2b9d62010-10-15 04:55:13 +000035message(STATUS "VERSION = ${VERSION}, BUILD = ${BUILD}")
36
DRC6abd3912016-11-15 08:47:43 -060037# Detect CPU type and whether we're building 64-bit or 32-bit code
38math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
39string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
40if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
41 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
42 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
43 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
44 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
45 if(BITS EQUAL 64)
46 set(CPU_TYPE x86_64)
47 else()
48 set(CPU_TYPE i386)
49 endif()
50 if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ${CPU_TYPE})
51 set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
52 endif()
53elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
54 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*64*")
55 set(CPU_TYPE arm64)
56elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*")
57 set(CPU_TYPE arm)
58elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ppc*" OR
59 CMAKE_SYSTEM_PROCESSOR_LC MATCHES "powerpc*")
60 set(CPU_TYPE powerpc)
61else()
62 set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
63endif()
64message(STATUS "${BITS}-bit build (${CPU_TYPE})")
65
66
67###############################################################################
68# INSTALL DIRECTORIES
69###############################################################################
70
71if(WIN32)
72 if(MSVC)
DRCd681fa72016-12-07 10:54:54 -060073 set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}")
DRC6abd3912016-11-15 08:47:43 -060074 else()
DRCd681fa72016-12-07 10:54:54 -060075 set(CMAKE_INSTALL_DEFAULT_PREFIX "c:/${CMAKE_PROJECT_NAME}-gcc")
DRC6abd3912016-11-15 08:47:43 -060076 endif()
77 if(BITS EQUAL 64)
DRCd681fa72016-12-07 10:54:54 -060078 set(CMAKE_INSTALL_DEFAULT_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}64")
DRC6abd3912016-11-15 08:47:43 -060079 endif()
80else()
DRCd681fa72016-12-07 10:54:54 -060081 set(CMAKE_INSTALL_DEFAULT_PREFIX /opt/${CMAKE_PROJECT_NAME})
DRC6abd3912016-11-15 08:47:43 -060082endif()
83if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
DRCd681fa72016-12-07 10:54:54 -060084 set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_DEFAULT_PREFIX}" CACHE PATH
85 "Directory into which to install ${CMAKE_PROJECT_NAME} (default: ${CMAKE_INSTALL_DEFAULT_PREFIX})"
DRC6abd3912016-11-15 08:47:43 -060086 FORCE)
87endif()
DRCd681fa72016-12-07 10:54:54 -060088message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
DRC6abd3912016-11-15 08:47:43 -060089
90# When the prefix is /opt/${CMAKE_PROJECT_NAME}, we assume that an "official"
91# build is being created, and thus we install things into specific locations.
DRCd681fa72016-12-07 10:54:54 -060092
DRCc8358fc2016-12-08 14:43:59 -060093if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}")
DRCd681fa72016-12-07 10:54:54 -060094 set(CMAKE_INSTALL_DEFAULT_DATAROOTDIR "")
DRCc8358fc2016-12-08 14:43:59 -060095 set(CMAKE_INSTALL_DEFAULT_DOCDIR "<CMAKE_INSTALL_DATAROOTDIR>/doc")
96 set(CMAKE_INSTALL_DEFAULT_JAVADIR "<CMAKE_INSTALL_DATAROOTDIR>/classes")
97 if(UNIX AND NOT APPLE)
DRCd681fa72016-12-07 10:54:54 -060098 if(BITS EQUAL 64)
99 set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64")
100 else()
101 set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib32")
102 endif()
DRC6abd3912016-11-15 08:47:43 -0600103 endif()
DRC6abd3912016-11-15 08:47:43 -0600104endif()
DRC6abd3912016-11-15 08:47:43 -0600105
DRCd681fa72016-12-07 10:54:54 -0600106include(cmakescripts/GNUInstallDirs.cmake)
DRC6abd3912016-11-15 08:47:43 -0600107
DRCd681fa72016-12-07 10:54:54 -0600108set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
109
DRC65302032016-12-09 10:21:29 -0600110macro(report_directory var)
DRCd681fa72016-12-07 10:54:54 -0600111 if(CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_FULL_${var})
112 message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}}")
113 else()
114 message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}} (${CMAKE_INSTALL_FULL_${var}})")
115 endif()
116 mark_as_advanced(CLEAR CMAKE_INSTALL_${var})
DRC65302032016-12-09 10:21:29 -0600117endmacro()
118
119set(DIRLIST "BINDIR;DATAROOTDIR;DOCDIR;INCLUDEDIR;LIBDIR")
120if(UNIX)
121 list(APPEND DIRLIST "MANDIR")
122endif()
123foreach(dir ${DIRLIST})
124 report_directory(${dir})
DRCd681fa72016-12-07 10:54:54 -0600125endforeach()
DRC6abd3912016-11-15 08:47:43 -0600126
127
128###############################################################################
129# CONFIGURATION OPTIONS
130###############################################################################
131
132macro(boolean_number var)
133 if(${var})
134 set(${var} 1)
135 else()
136 set(${var} 0)
137 endif()
138endmacro()
139
DRC665c96e2015-05-15 22:08:21 +0000140option(ENABLE_SHARED "Build shared libraries" TRUE)
DRC6abd3912016-11-15 08:47:43 -0600141boolean_number(ENABLE_SHARED)
142option(ENABLE_STATIC "Build static libraries" TRUE)
143boolean_number(ENABLE_STATIC)
144option(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)
145boolean_number(REQUIRE_SIMD)
146option(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)
147boolean_number(WITH_12BIT)
148option(WITH_ARITH_DEC "Include arithmetic decoding support when emulating the libjpeg v6b API/ABI" TRUE)
149boolean_number(WITH_ARITH_DEC)
150option(WITH_ARITH_ENC "Include arithmetic encoding support when emulating the libjpeg v6b API/ABI" TRUE)
151boolean_number(WITH_ARITH_ENC)
152option(WITH_JAVA "Build Java wrapper for the TurboJPEG API library (implies ENABLE_SHARED=1)" FALSE)
153boolean_number(WITH_JAVA)
154option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
155boolean_number(WITH_JPEG7)
156option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
157boolean_number(WITH_JPEG8)
158option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
159boolean_number(WITH_MEM_SRCDST)
160option(WITH_SIMD "Include SIMD extensions, if available for this platform" TRUE)
161boolean_number(WITH_SIMD)
162option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE)
163boolean_number(WITH_TURBOJPEG)
164
165macro(report_option var desc)
166 if(${var})
167 message(STATUS "${desc} enabled (${var} = ${${var}})")
168 else()
169 message(STATUS "${desc} disabled (${var} = ${${var}})")
170 endif()
171endmacro()
172
173if(WITH_JAVA)
174 set(ENABLE_SHARED 1)
175endif()
176
177# Explicitly setting CMAKE_POSITION_INDEPENDENT_CODE=FALSE disables PIC for all
178# targets, which will cause the shared library builds to fail. Thus, if shared
179# libraries are enabled and CMAKE_POSITION_INDEPENDENT_CODE is explicitly set
180# to FALSE, we need to unset it, thus restoring the default behavior
181# (automatically using PIC for shared library targets.)
182if(DEFINED CMAKE_POSITION_INDEPENDENT_CODE AND
183 NOT CMAKE_POSITION_INDEPENDENT_CODE AND ENABLE_SHARED)
184 unset(CMAKE_POSITION_INDEPENDENT_CODE CACHE)
185endif()
186
187report_option(ENABLE_SHARED "Shared libraries")
188report_option(ENABLE_STATIC "Static libraries")
DRCaee4f722014-08-09 23:06:07 +0000189
190if(WITH_12BIT)
DRC6abd3912016-11-15 08:47:43 -0600191 set(WITH_ARITH_DEC 0)
192 set(WITH_ARITH_ENC 0)
193 set(WITH_JAVA 0)
194 set(WITH_SIMD 0)
195 set(WITH_TURBOJPEG 0)
DRCaee4f722014-08-09 23:06:07 +0000196 set(BITS_IN_JSAMPLE 12)
DRCaee4f722014-08-09 23:06:07 +0000197else()
198 set(BITS_IN_JSAMPLE 8)
199endif()
DRC6abd3912016-11-15 08:47:43 -0600200report_option(WITH_12BIT "12-bit JPEG support")
DRC245cfdf2010-11-23 17:11:06 +0000201
DRC5c064de2016-05-09 20:00:46 -0500202if(WITH_JPEG8 OR WITH_JPEG7)
203 set(WITH_ARITH_ENC 1)
204 set(WITH_ARITH_DEC 1)
205endif()
206if(WITH_JPEG8)
DRC6abd3912016-11-15 08:47:43 -0600207 set(WITH_MEM_SRCDST 0)
DRC245cfdf2010-11-23 17:11:06 +0000208endif()
209
210if(WITH_ARITH_DEC)
211 set(D_ARITH_CODING_SUPPORTED 1)
DRC6abd3912016-11-15 08:47:43 -0600212endif()
213if(NOT WITH_12BIT)
214 report_option(WITH_ARITH_DEC "Arithmetic decoding support")
DRC245cfdf2010-11-23 17:11:06 +0000215endif()
216
DRC6abd3912016-11-15 08:47:43 -0600217if(WITH_ARITH_ENC)
218 set(C_ARITH_CODING_SUPPORTED 1)
219endif()
220if(NOT WITH_12BIT)
221 report_option(WITH_ARITH_ENC "Arithmetic encoding support")
DRCaee4f722014-08-09 23:06:07 +0000222endif()
223
DRC6abd3912016-11-15 08:47:43 -0600224if(NOT WITH_12BIT)
225 report_option(WITH_TURBOJPEG "TurboJPEG API library")
226 report_option(WITH_JAVA "TurboJPEG Java wrapper")
DRC218c0c12011-02-05 06:01:18 +0000227endif()
228
DRCab706232013-01-18 23:42:31 +0000229if(WITH_MEM_SRCDST)
230 set(MEM_SRCDST_SUPPORTED 1)
DRC6abd3912016-11-15 08:47:43 -0600231 set(MEM_SRCDST_FUNCTIONS "global: jpeg_mem_dest; jpeg_mem_src;")
DRCab706232013-01-18 23:42:31 +0000232endif()
DRC6abd3912016-11-15 08:47:43 -0600233if(NOT WITH_JPEG8)
234 report_option(WITH_MEM_SRCDST "In-memory source/destination managers")
235endif()
236
237set(SO_AGE 1)
238if(WITH_MEM_SRCDST)
239 set(SO_AGE 2)
240endif()
241
242if(WITH_JPEG8)
243 set(JPEG_LIB_VERSION 80)
244elseif(WITH_JPEG7)
245 set(JPEG_LIB_VERSION 70)
246else()
247 set(JPEG_LIB_VERSION 62)
248endif()
249
250math(EXPR JPEG_LIB_VERSION_DIV10 "${JPEG_LIB_VERSION} / 10")
251math(EXPR JPEG_LIB_VERSION_MOD10 "${JPEG_LIB_VERSION} % 10")
252if(JPEG_LIB_VERSION STREQUAL "62")
253 set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION})
254else()
255 set(DEFAULT_SO_MAJOR_VERSION ${JPEG_LIB_VERSION_DIV10})
256endif()
257if(JPEG_LIB_VERSION STREQUAL "80")
258 set(DEFAULT_SO_MINOR_VERSION 2)
259else()
260 set(DEFAULT_SO_MINOR_VERSION 0)
261endif()
262
263# This causes SO_MAJOR_VERSION/SO_MINOR_VERSION to reset to defaults if
264# WITH_JPEG7 or WITH_JPEG8 has changed.
265if((DEFINED WITH_JPEG7_INT AND NOT WITH_JPEG7 EQUAL WITH_JPEG7_INT) OR
266 (DEFINED WITH_JPEG8_INT AND NOT WITH_JPEG8 EQUAL WITH_JPEG8_INT))
267 set(FORCE_SO_VERSION "FORCE")
268endif()
269set(WITH_JPEG7_INT ${WITH_JPEG7} CACHE INTERNAL "")
270set(WITH_JPEG8_INT ${WITH_JPEG8} CACHE INTERNAL "")
271
272set(SO_MAJOR_VERSION ${DEFAULT_SO_MAJOR_VERSION} CACHE STRING
273 "Major version of the libjpeg API shared library (default: ${DEFAULT_SO_MAJOR_VERSION})"
274 ${FORCE_SO_VERSION})
275set(SO_MINOR_VERSION ${DEFAULT_SO_MINOR_VERSION} CACHE STRING
276 "Minor version of the libjpeg API shared library (default: ${DEFAULT_SO_MINOR_VERSION})"
277 ${FORCE_SO_VERSION})
278
279set(JPEG_LIB_VERSION_DECIMAL "${JPEG_LIB_VERSION_DIV10}.${JPEG_LIB_VERSION_MOD10}")
280message(STATUS "Emulating libjpeg API/ABI v${JPEG_LIB_VERSION_DECIMAL} (WITH_JPEG7 = ${WITH_JPEG7}, WITH_JPEG8 = ${WITH_JPEG8})")
281message(STATUS "libjpeg API shared library version = ${SO_MAJOR_VERSION}.${SO_AGE}.${SO_MINOR_VERSION}")
282
283# Because the TurboJPEG API library uses versioned symbols and changes the
284# names of functions whenever they are modified in a backward-incompatible
285# manner, it is always backward-ABI-compatible with itself, so the major and
286# minor SO versions don't change. However, we increase the middle number (the
287# SO "age") whenever functions are added to the API.
288set(TURBOJPEG_SO_MAJOR_VERSION 0)
289set(TURBOJPEG_SO_VERSION 0.1.0)
290
291
292###############################################################################
293# COMPILER SETTINGS
294###############################################################################
DRCab706232013-01-18 23:42:31 +0000295
DRC84697032010-10-15 03:43:24 +0000296if(MSVC)
DRC89a3f972015-03-19 19:27:40 +0000297 option(WITH_CRT_DLL
DRC6abd3912016-11-15 08:47:43 -0600298 "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."
DRC89a3f972015-03-19 19:27:40 +0000299 FALSE)
300 if(NOT WITH_CRT_DLL)
301 # Use the static C library for all build types
302 foreach(var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
303 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
304 if(${var} MATCHES "/MD")
305 string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}")
306 endif()
307 endforeach()
308 endif()
DRC6abd3912016-11-15 08:47:43 -0600309 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /wd4996")
DRC84697032010-10-15 03:43:24 +0000310endif()
311
DRC6abd3912016-11-15 08:47:43 -0600312if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
313 # Use the maximum optimization level for release builds
314 foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
315 if(${var} MATCHES "-O2")
316 string(REGEX REPLACE "-O2" "-O3" ${var} "${${var}}")
317 endif()
318 endforeach()
DRC84697032010-10-15 03:43:24 +0000319endif()
320
DRC6abd3912016-11-15 08:47:43 -0600321if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
322 if(CMAKE_C_COMPILER_ID MATCHES "SunPro")
323 # Use the maximum optimization level for release builds
324 foreach(var CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
325 if(${var} MATCHES "-xO3")
326 string(REGEX REPLACE "-xO3" "-xO5" ${var} "${${var}}")
327 endif()
328 if(${var} MATCHES "-xO2")
329 string(REGEX REPLACE "-xO2" "-xO5" ${var} "${${var}}")
330 endif()
331 endforeach()
DRC7175e512013-04-23 22:29:00 +0000332 endif()
DRC7175e512013-04-23 22:29:00 +0000333endif()
334
DRC03841e62016-02-09 18:27:27 -0600335string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
336
337set(EFFECTIVE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
338message(STATUS "Compiler flags = ${EFFECTIVE_C_FLAGS}")
339
340set(EFFECTIVE_LD_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_UC}}")
341message(STATUS "Linker flags = ${EFFECTIVE_LD_FLAGS}")
342
DRC6abd3912016-11-15 08:47:43 -0600343include(CheckCSourceCompiles)
344
345if(UNIX)
346 # Check for headers
347 include(CheckIncludeFiles)
348 check_include_files(locale.h HAVE_LOCALE_H)
349 check_include_files(stddef.h HAVE_STDDEF_H)
350 check_include_files(stdlib.h HAVE_STDLIB_H)
351 check_include_files(sys/types.h NEED_SYS_TYPES_H)
352
353 # Check for functions
354 include(CheckFunctionExists)
355 check_function_exists(memset HAVE_MEMSET)
356 check_function_exists(memcpy HAVE_MEMCPY)
357 if(NOT HAVE_MEMSET AND NOT HAVE_MEMCPY)
358 set(NEED_BSD_STRINGS 1)
359 endif()
360
361 # Check for types
362 include(CheckTypeSize)
363 check_type_size("unsigned char" UNSIGNED_CHAR)
364 check_type_size("unsigned short" UNSIGNED_SHORT)
365 check_type_size("size_t" SIZE_T)
366
367 # Check for compiler features
368 check_c_source_compiles("int main(void) { typedef struct undefined_structure *undef_struct_ptr; }"
369 INCOMPLETE_TYPES)
370 if(INCOMPLETE_TYPES)
371 message(STATUS "Compiler supports pointers to undefined structures.")
372 else()
373 set(INCOMPLETE_TYPES_BROKEN 1)
374 message(STATUS "Compiler does not support pointers to undefined structures.")
375 endif()
376
377 if(CMAKE_CROSSCOMPILING)
378 set(RIGHT_SHIFT_IS_UNSIGNED 0)
379 else()
380 include(CheckCSourceRuns)
381 check_c_source_runs("
382 #include <stdio.h>
383 #include <stdlib.h>
384 int is_shifting_signed (long arg) {
385 long res = arg >> 4;
386 if (res == -0x7F7E80CL)
387 return 1; /* right shift is signed */
388 /* see if unsigned-shift hack will fix it. */
389 /* we can't just test exact value since it depends on width of long... */
390 res |= (~0L) << (32-4);
391 if (res == -0x7F7E80CL)
392 return 0; /* right shift is unsigned */
393 printf(\"Right shift isn't acting as I expect it to.\\\\n\");
394 printf(\"I fear the JPEG software will not work at all.\\\\n\\\\n\");
395 return 0; /* try it with unsigned anyway */
396 }
397 int main (void) {
398 exit(is_shifting_signed(-0x7F7E80B1L));
399 }" RIGHT_SHIFT_IS_UNSIGNED)
400 endif()
401
402 if(CMAKE_CROSSCOMPILING)
403 set(__CHAR_UNSIGNED__ 0)
404 else()
405 check_c_source_runs("int main(void) { return ((char) -1 < 0); }"
406 __CHAR_UNSIGNED__)
DRCdb425062011-04-03 06:10:18 +0000407 endif()
DRC218c0c12011-02-05 06:01:18 +0000408endif()
409
DRC2af2fe42016-12-05 16:52:54 -0600410if(MSVC)
411 set(INLINE_OPTIONS "__inline;inline")
412else()
413 set(INLINE_OPTIONS "__inline__;inline")
414endif()
DRC6abd3912016-11-15 08:47:43 -0600415option(FORCE_INLINE "Force function inlining" TRUE)
416boolean_number(FORCE_INLINE)
417if(FORCE_INLINE)
418 if(MSVC)
DRC2af2fe42016-12-05 16:52:54 -0600419 list(INSERT INLINE_OPTIONS 0 "__forceinline")
DRC6abd3912016-11-15 08:47:43 -0600420 else()
DRC2af2fe42016-12-05 16:52:54 -0600421 list(INSERT INLINE_OPTIONS 0 "inline __attribute__((always_inline))")
422 list(INSERT INLINE_OPTIONS 0 "__inline__ __attribute__((always_inline))")
DRC6abd3912016-11-15 08:47:43 -0600423 endif()
424endif()
DRC2af2fe42016-12-05 16:52:54 -0600425foreach(inline ${INLINE_OPTIONS})
426 check_c_source_compiles("${inline} static void foo(void) {} int main(void) { foo(); }"
427 INLINE_WORKS)
428 if(INLINE_WORKS)
429 set(INLINE ${inline})
430 break()
DRC6abd3912016-11-15 08:47:43 -0600431 endif()
DRC2af2fe42016-12-05 16:52:54 -0600432endforeach()
433if(NOT INLINE_WORKS)
434 message(FATAL_ERROR "Could not determine how to inline functions.")
DRC6abd3912016-11-15 08:47:43 -0600435endif()
436message(STATUS "INLINE = ${INLINE} (FORCE_INLINE = ${FORCE_INLINE})")
DRC84697032010-10-15 03:43:24 +0000437
DRC6abd3912016-11-15 08:47:43 -0600438if(UNIX AND NOT APPLE)
439 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map "VERS_1 { global: *; };")
440 set(CMAKE_REQUIRED_FLAGS
441 "-Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
442 check_c_source_compiles("int main(void) { return 0; }" HAVE_VERSION_SCRIPT)
443 set(CMAKE_REQUIRED_FLAGS)
444 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
445 if(HAVE_VERSION_SCRIPT)
446 message(STATUS "Linker supports GNU-style version scripts")
447 set(MAPFLAG "-Wl,--version-script,")
448 set(TJMAPFLAG "-Wl,--version-script,")
449 else()
450 message(STATUS "Linker does not support GNU-style version scripts")
451 if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
452 # The Solaris linker doesn't like our version script for the libjpeg API
453 # library, but the version script for the TurboJPEG API library should
454 # still work.
455 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map
456 "VERS_1 { global: foo; local: *; }; VERS_2 { global: foo2; } VERS_1;")
457 set(CMAKE_REQUIRED_FLAGS "-Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/conftest.map")
458 check_c_source_compiles("void foo() {} void foo2() {} int main(void) { return 0; }"
459 HAVE_MAPFILE)
460 set(CMAKE_REQUIRED_FLAGS)
461 file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map)
462 if(HAVE_MAPFILE)
463 message(STATUS "Linker supports mapfiles")
464 set(TJMAPFLAG "-Wl,-M,")
465 else()
466 message(STATUS "Linker does not support mapfiles")
467 endif()
468 endif()
469 endif()
470endif()
471
472# Generate files
473if(WIN32)
474 configure_file(win/jconfig.h.in jconfig.h)
475else()
476 configure_file(jconfig.h.in jconfig.h)
477endif()
478configure_file(jconfigint.h.in jconfigint.h)
479if(UNIX)
480 configure_file(libjpeg.map.in libjpeg.map)
481endif()
482
483# Include directories and compiler definitions
DRC952191d2016-12-03 14:21:11 -0600484include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
DRC6abd3912016-11-15 08:47:43 -0600485
486
487###############################################################################
488# TARGETS
489###############################################################################
DRC84697032010-10-15 03:43:24 +0000490
DRC245cfdf2010-11-23 17:11:06 +0000491set(JPEG_SOURCES jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c
492 jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c jcphuff.c
493 jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c jdatasrc.c
494 jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c
495 jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c
496 jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c
497 jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c)
498
499if(WITH_ARITH_ENC OR WITH_ARITH_DEC)
500 set(JPEG_SOURCES ${JPEG_SOURCES} jaricom.c)
501endif()
502
503if(WITH_ARITH_ENC)
504 set(JPEG_SOURCES ${JPEG_SOURCES} jcarith.c)
505endif()
506
507if(WITH_ARITH_DEC)
508 set(JPEG_SOURCES ${JPEG_SOURCES} jdarith.c)
509endif()
DRC84697032010-10-15 03:43:24 +0000510
511if(WITH_SIMD)
DRC84697032010-10-15 03:43:24 +0000512 add_subdirectory(simd)
DRC6abd3912016-11-15 08:47:43 -0600513elseif(NOT WITH_12BIT)
514 message(STATUS "SIMD extensions: None (WITH_SIMD = ${WITH_SIMD})")
515endif()
516if(WITH_SIMD)
517 message(STATUS "SIMD extensions: ${CPU_TYPE} (WITH_SIMD = ${WITH_SIMD})")
518 if(MSVC_IDE)
519 set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1)
DRC84697032010-10-15 03:43:24 +0000520 endif()
DRC84697032010-10-15 03:43:24 +0000521else()
DRC6abd3912016-11-15 08:47:43 -0600522 add_library(simd OBJECT jsimd_none.c)
DRC84697032010-10-15 03:43:24 +0000523endif()
524
DRC957d6232011-04-01 11:13:11 +0000525if(WITH_JAVA)
526 add_subdirectory(java)
527endif()
528
DRC665c96e2015-05-15 22:08:21 +0000529if(ENABLE_SHARED)
530 add_subdirectory(sharedlib)
DRC84697032010-10-15 03:43:24 +0000531endif()
DRC665c96e2015-05-15 22:08:21 +0000532
DRC6abd3912016-11-15 08:47:43 -0600533if(ENABLE_STATIC)
534 add_library(jpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
535 ${SIMD_OBJS})
DRC665c96e2015-05-15 22:08:21 +0000536 if(NOT MSVC)
537 set_target_properties(jpeg-static PROPERTIES OUTPUT_NAME jpeg)
538 endif()
DRC84697032010-10-15 03:43:24 +0000539endif()
540
DRCaee4f722014-08-09 23:06:07 +0000541if(WITH_TURBOJPEG)
DRC665c96e2015-05-15 22:08:21 +0000542 if(ENABLE_SHARED)
DRC6abd3912016-11-15 08:47:43 -0600543 set(TURBOJPEG_SOURCES ${JPEG_SOURCES} $<TARGET_OBJECTS:simd> ${SIMD_OBJS}
544 turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c)
DRC952191d2016-12-03 14:21:11 -0600545 set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile)
DRC6abd3912016-11-15 08:47:43 -0600546 if(WITH_JAVA)
547 set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES} turbojpeg-jni.c)
548 include_directories(${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
DRC952191d2016-12-03 14:21:11 -0600549 set(TJMAPFILE ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg-mapfile.jni)
DRC6abd3912016-11-15 08:47:43 -0600550 endif()
DRC665c96e2015-05-15 22:08:21 +0000551 add_library(turbojpeg SHARED ${TURBOJPEG_SOURCES})
DRC6abd3912016-11-15 08:47:43 -0600552 if(WIN32)
553 set_target_properties(turbojpeg PROPERTIES DEFINE_SYMBOL DLLDEFINE)
554 endif()
DRC665c96e2015-05-15 22:08:21 +0000555 if(MINGW)
556 set_target_properties(turbojpeg PROPERTIES LINK_FLAGS -Wl,--kill-at)
557 endif()
DRC27d4c5e2016-11-23 17:12:57 -0600558 if(APPLE)
559 set_target_properties(turbojpeg PROPERTIES MACOSX_RPATH 1)
560 endif()
DRC6abd3912016-11-15 08:47:43 -0600561 set_target_properties(turbojpeg PROPERTIES
562 SOVERSION ${TURBOJPEG_SO_MAJOR_VERSION} VERSION ${TURBOJPEG_SO_VERSION})
563 if(TJMAPFLAG)
564 set_target_properties(turbojpeg PROPERTIES
565 LINK_FLAGS "${TJMAPFLAG}${TJMAPFILE}")
566 endif()
DRCaee4f722014-08-09 23:06:07 +0000567
DRC665c96e2015-05-15 22:08:21 +0000568 add_executable(tjunittest tjunittest.c tjutil.c)
569 target_link_libraries(tjunittest turbojpeg)
570
571 add_executable(tjbench tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c wrbmp.c
572 wrppm.c)
DRC6abd3912016-11-15 08:47:43 -0600573 target_link_libraries(tjbench turbojpeg jpeg)
574 if(UNIX)
575 target_link_libraries(tjbench m)
576 endif()
DRC665c96e2015-05-15 22:08:21 +0000577 set_property(TARGET tjbench PROPERTY COMPILE_FLAGS
578 "-DBMP_SUPPORTED -DPPM_SUPPORTED")
DRCaee4f722014-08-09 23:06:07 +0000579 endif()
580
DRC665c96e2015-05-15 22:08:21 +0000581 if(ENABLE_STATIC)
DRC6abd3912016-11-15 08:47:43 -0600582 add_library(turbojpeg-static STATIC ${JPEG_SOURCES} $<TARGET_OBJECTS:simd>
583 ${SIMD_OBJS} turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c)
DRC665c96e2015-05-15 22:08:21 +0000584 if(NOT MSVC)
585 set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
586 endif()
DRCaee4f722014-08-09 23:06:07 +0000587
DRC665c96e2015-05-15 22:08:21 +0000588 add_executable(tjunittest-static tjunittest.c tjutil.c)
589 target_link_libraries(tjunittest-static turbojpeg-static)
DRCaee4f722014-08-09 23:06:07 +0000590
DRC665c96e2015-05-15 22:08:21 +0000591 add_executable(tjbench-static tjbench.c bmp.c tjutil.c rdbmp.c rdppm.c
592 wrbmp.c wrppm.c)
593 target_link_libraries(tjbench-static turbojpeg-static jpeg-static)
DRC6abd3912016-11-15 08:47:43 -0600594 if(UNIX)
595 target_link_libraries(tjbench-static m)
596 endif()
DRC665c96e2015-05-15 22:08:21 +0000597 set_property(TARGET tjbench-static PROPERTY COMPILE_FLAGS
598 "-DBMP_SUPPORTED -DPPM_SUPPORTED")
599 endif()
DRC218c0c12011-02-05 06:01:18 +0000600endif()
601
DRC6abd3912016-11-15 08:47:43 -0600602if(WIN32)
603 set(USE_SETMODE "-DUSE_SETMODE")
604endif()
DRCaee4f722014-08-09 23:06:07 +0000605if(WITH_12BIT)
DRC6abd3912016-11-15 08:47:43 -0600606 set(COMPILE_FLAGS "-DGIF_SUPPORTED -DPPM_SUPPORTED ${USE_SETMODE}")
DRCaee4f722014-08-09 23:06:07 +0000607else()
DRC6abd3912016-11-15 08:47:43 -0600608 set(COMPILE_FLAGS "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED ${USE_SETMODE}")
DRCecc58362015-06-27 07:56:29 +0000609 set(CJPEG_BMP_SOURCES rdbmp.c rdtarga.c)
610 set(DJPEG_BMP_SOURCES wrbmp.c wrtarga.c)
DRC84697032010-10-15 03:43:24 +0000611endif()
612
DRC665c96e2015-05-15 22:08:21 +0000613if(ENABLE_STATIC)
614 add_executable(cjpeg-static cjpeg.c cdjpeg.c rdgif.c rdppm.c rdswitch.c
615 ${CJPEG_BMP_SOURCES})
616 set_property(TARGET cjpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
617 target_link_libraries(cjpeg-static jpeg-static)
DRC84697032010-10-15 03:43:24 +0000618
DRC665c96e2015-05-15 22:08:21 +0000619 add_executable(djpeg-static djpeg.c cdjpeg.c rdcolmap.c rdswitch.c wrgif.c
620 wrppm.c ${DJPEG_BMP_SOURCES})
621 set_property(TARGET djpeg-static PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})
622 target_link_libraries(djpeg-static jpeg-static)
DRC84697032010-10-15 03:43:24 +0000623
DRC665c96e2015-05-15 22:08:21 +0000624 add_executable(jpegtran-static jpegtran.c cdjpeg.c rdswitch.c transupp.c)
625 target_link_libraries(jpegtran-static jpeg-static)
DRC6abd3912016-11-15 08:47:43 -0600626 set_property(TARGET jpegtran-static PROPERTY COMPILE_FLAGS "${USE_SETMODE}")
DRC665c96e2015-05-15 22:08:21 +0000627endif()
DRC84697032010-10-15 03:43:24 +0000628
629add_executable(rdjpgcom rdjpgcom.c)
630
DRCa81f5422014-06-22 20:50:14 +0000631add_executable(wrjpgcom wrjpgcom.c)
DRC84697032010-10-15 03:43:24 +0000632
633
DRC6abd3912016-11-15 08:47:43 -0600634###############################################################################
635# TESTS
636###############################################################################
DRC84697032010-10-15 03:43:24 +0000637
DRCf9134382016-02-06 14:09:20 -0600638add_subdirectory(md5)
639
DRC957d6232011-04-01 11:13:11 +0000640if(MSVC_IDE)
641 set(OBJDIR "\${CTEST_CONFIGURATION_TYPE}/")
642else()
643 set(OBJDIR "")
644endif()
645
DRC84697032010-10-15 03:43:24 +0000646enable_testing()
DRC211d1e72013-01-13 11:25:20 +0000647
DRCaee4f722014-08-09 23:06:07 +0000648if(WITH_12BIT)
649 set(TESTORIG testorig12.jpg)
650 set(MD5_JPEG_RGB_ISLOW 9620f424569594bb9242b48498ad801f)
651 set(MD5_PPM_RGB_ISLOW f3301d2219783b8b3d942b7239fa50c0)
652 set(MD5_JPEG_422_IFAST_OPT 7322e3bd2f127f7de4b40d4480ce60e4)
653 set(MD5_PPM_422_IFAST 79807fa552899e66a04708f533e16950)
654 set(MD5_PPM_422M_IFAST 07737bfe8a7c1c87aaa393a0098d16b0)
655 set(MD5_JPEG_420_IFAST_Q100_PROG a1da220b5604081863a504297ed59e55)
656 set(MD5_PPM_420_Q100_IFAST 1b3730122709f53d007255e8dfd3305e)
657 set(MD5_PPM_420M_Q100_IFAST 980a1a3c5bf9510022869d30b7d26566)
658 set(MD5_JPEG_GRAY_ISLOW 235c90707b16e2e069f37c888b2636d9)
659 set(MD5_PPM_GRAY_ISLOW 7213c10af507ad467da5578ca5ee1fca)
660 set(MD5_PPM_GRAY_ISLOW_RGB e96ee81c30a6ed422d466338bd3de65d)
661 set(MD5_JPEG_420S_IFAST_OPT 7af8e60be4d9c227ec63ac9b6630855e)
DRC6abd3912016-11-15 08:47:43 -0600662
663 set(MD5_JPEG_3x2_FLOAT_PROG_SSE a8c17daf77b457725ec929e215b603f8)
664 set(MD5_PPM_3x2_FLOAT_SSE 42876ab9e5c2f76a87d08db5fbd57956)
665 set(MD5_JPEG_3x2_FLOAT_PROG_32BIT a8c17daf77b457725ec929e215b603f8)
666 set(MD5_PPM_3x2_FLOAT_32BIT ${MD5_PPM_3x2_FLOAT_SSE})
667 set(MD5_JPEG_3x2_FLOAT_PROG_64BIT ${MD5_JPEG_3x2_FLOAT_PROG_32BIT})
668 set(MD5_PPM_3x2_FLOAT_64BIT ${MD5_PPM_3x2_FLOAT_SSE})
669 set(MD5_JPEG_3x2_FLOAT_PROG_387 bc6dbbefac2872f6b9d6c4a0ae60c3c0)
670 set(MD5_PPM_3x2_FLOAT_387 bcc5723c61560463ac60f772e742d092)
671 set(MD5_JPEG_3x2_FLOAT_PROG_MSVC e27840755870fa849872e58aa0cd1400)
672 set(MD5_PPM_3x2_FLOAT_MSVC 6c2880b83bb1aa41dfe330e7a9768690)
673
674 set(MD5_JPEG_3x2_IFAST_PROG 1396cc2b7185cfe943d408c9d305339e)
675 set(MD5_PPM_3x2_IFAST 3975985ef6eeb0a2cdc58daa651ccc00)
DRCaee4f722014-08-09 23:06:07 +0000676 set(MD5_PPM_420M_ISLOW_2_1 4ca6be2a6f326ff9eaab63e70a8259c0)
677 set(MD5_PPM_420M_ISLOW_15_8 12aa9f9534c1b3d7ba047322226365eb)
678 set(MD5_PPM_420M_ISLOW_13_8 f7e22817c7b25e1393e4ec101e9d4e96)
679 set(MD5_PPM_420M_ISLOW_11_8 800a16f9f4dc9b293197bfe11be10a82)
680 set(MD5_PPM_420M_ISLOW_9_8 06b7a92a9bc69f4dc36ec40f1937d55c)
681 set(MD5_PPM_420M_ISLOW_7_8 3ec444a14a4ab4eab88ffc49c48eca43)
682 set(MD5_PPM_420M_ISLOW_3_4 3e726b7ea872445b19437d1c1d4f0d93)
683 set(MD5_PPM_420M_ISLOW_5_8 a8a771abdc94301d20ffac119b2caccd)
684 set(MD5_PPM_420M_ISLOW_1_2 b419124dd5568b085787234866102866)
685 set(MD5_PPM_420M_ISLOW_3_8 343d19015531b7bbe746124127244fa8)
686 set(MD5_PPM_420M_ISLOW_1_4 35fd59d866e44659edfa3c18db2a3edb)
687 set(MD5_PPM_420M_ISLOW_1_8 ccaed48ac0aedefda5d4abe4013f4ad7)
DRC7a7da942015-06-27 08:10:31 +0000688 set(MD5_PPM_420_ISLOW_SKIP15_31 86664cd9dc956536409e44e244d20a97)
DRC3ab68cf2016-02-19 18:32:10 -0600689 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 452a21656115a163029cfba5c04fa76a)
DRC7a7da942015-06-27 08:10:31 +0000690 set(MD5_PPM_444_ISLOW_SKIP1_6 ef63901f71ef7a75cd78253fc0914f84)
DRC3ab68cf2016-02-19 18:32:10 -0600691 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 15b173fb5872d9575572fbcc1b05956f)
DRCaee4f722014-08-09 23:06:07 +0000692 set(MD5_JPEG_CROP cdb35ff4b4519392690ea040c56ea99c)
DRC35db75e2014-05-06 22:44:46 +0000693else()
DRCaee4f722014-08-09 23:06:07 +0000694 set(TESTORIG testorig.jpg)
695 set(MD5_JPEG_RGB_ISLOW 768e970dd57b340ff1b83c9d3d47c77b)
696 set(MD5_PPM_RGB_ISLOW 00a257f5393fef8821f2b88ac7421291)
697 set(MD5_BMP_RGB_ISLOW_565 f07d2e75073e4bb10f6c6f4d36e2e3be)
698 set(MD5_BMP_RGB_ISLOW_565D 4cfa0928ef3e6bb626d7728c924cfda4)
699 set(MD5_JPEG_422_IFAST_OPT 2540287b79d913f91665e660303ab2c8)
700 set(MD5_PPM_422_IFAST 35bd6b3f833bad23de82acea847129fa)
701 set(MD5_PPM_422M_IFAST 8dbc65323d62cca7c91ba02dd1cfa81d)
702 set(MD5_BMP_422M_IFAST_565 3294bd4d9a1f2b3d08ea6020d0db7065)
703 set(MD5_BMP_422M_IFAST_565D da98c9c7b6039511be4a79a878a9abc1)
704 set(MD5_JPEG_420_IFAST_Q100_PROG 990cbe0329c882420a2094da7e5adade)
705 set(MD5_PPM_420_Q100_IFAST 5a732542015c278ff43635e473a8a294)
706 set(MD5_PPM_420M_Q100_IFAST ff692ee9323a3b424894862557c092f1)
707 set(MD5_JPEG_GRAY_ISLOW 72b51f894b8f4a10b3ee3066770aa38d)
708 set(MD5_PPM_GRAY_ISLOW 8d3596c56eace32f205deccc229aa5ed)
709 set(MD5_PPM_GRAY_ISLOW_RGB 116424ac07b79e5e801f00508eab48ec)
710 set(MD5_BMP_GRAY_ISLOW_565 12f78118e56a2f48b966f792fedf23cc)
711 set(MD5_BMP_GRAY_ISLOW_565D bdbbd616441a24354c98553df5dc82db)
712 set(MD5_JPEG_420S_IFAST_OPT 388708217ac46273ca33086b22827ed8)
DRC6abd3912016-11-15 08:47:43 -0600713
714 set(MD5_JPEG_3x2_FLOAT_PROG_SSE 343e3f8caf8af5986ebaf0bdc13b5c71)
715 set(MD5_PPM_3x2_FLOAT_SSE 1a75f36e5904d6fc3a85a43da9ad89bb)
716 set(MD5_JPEG_3x2_FLOAT_PROG_32BIT 9bca803d2042bd1eb03819e2bf92b3e5)
717 set(MD5_PPM_3x2_FLOAT_32BIT f6bfab038438ed8f5522fbd33595dcdc)
718 set(MD5_JPEG_3x2_FLOAT_PROG_64BIT ${MD5_JPEG_3x2_FLOAT_PROG_32BIT})
719 set(MD5_PPM_3x2_FLOAT_64BIT 0e917a34193ef976b679a6b069b1be26)
720 set(MD5_JPEG_3x2_FLOAT_PROG_387 1657664a410e0822c924b54f6f65e6e9)
721 set(MD5_PPM_3x2_FLOAT_387 cb0a1f027f3d2917c902b5640214e025)
722 set(MD5_JPEG_3x2_FLOAT_PROG_MSVC 7999ce9cd0ee9b6c7043b7351ab7639d)
723 set(MD5_PPM_3x2_FLOAT_MSVC 28cdc448a6b75e97892f0e0f8d4b21f3)
724
725 set(MD5_JPEG_3x2_IFAST_PROG 1ee5d2c1a77f2da495f993c8c7cceca5)
726 set(MD5_PPM_3x2_IFAST fd283664b3b49127984af0a7f118fccd)
DRCaee4f722014-08-09 23:06:07 +0000727 set(MD5_JPEG_420_ISLOW_ARI e986fb0a637a8d833d96e8a6d6d84ea1)
728 set(MD5_JPEG_444_ISLOW_PROGARI 0a8f1c8f66e113c3cf635df0a475a617)
729 set(MD5_PPM_420M_IFAST_ARI 72b59a99bcf1de24c5b27d151bde2437)
730 set(MD5_JPEG_420_ISLOW 9a68f56bc76e466aa7e52f415d0f4a5f)
731 set(MD5_PPM_420M_ISLOW_2_1 9f9de8c0612f8d06869b960b05abf9c9)
732 set(MD5_PPM_420M_ISLOW_15_8 b6875bc070720b899566cc06459b63b7)
733 set(MD5_PPM_420M_ISLOW_13_8 bc3452573c8152f6ae552939ee19f82f)
734 set(MD5_PPM_420M_ISLOW_11_8 d8cc73c0aaacd4556569b59437ba00a5)
735 set(MD5_PPM_420M_ISLOW_9_8 d25e61bc7eac0002f5b393aa223747b6)
736 set(MD5_PPM_420M_ISLOW_7_8 ddb564b7c74a09494016d6cd7502a946)
737 set(MD5_PPM_420M_ISLOW_3_4 8ed8e68808c3fbc4ea764fc9d2968646)
738 set(MD5_PPM_420M_ISLOW_5_8 a3363274999da2366a024efae6d16c9b)
739 set(MD5_PPM_420M_ISLOW_1_2 e692a315cea26b988c8e8b29a5dbcd81)
740 set(MD5_PPM_420M_ISLOW_3_8 79eca9175652ced755155c90e785a996)
741 set(MD5_PPM_420M_ISLOW_1_4 79cd778f8bf1a117690052cacdd54eca)
742 set(MD5_PPM_420M_ISLOW_1_8 391b3d4aca640c8567d6f8745eb2142f)
743 set(MD5_BMP_420_ISLOW_256 4980185e3776e89bd931736e1cddeee6)
744 set(MD5_BMP_420_ISLOW_565 bf9d13e16c4923b92e1faa604d7922cb)
745 set(MD5_BMP_420_ISLOW_565D 6bde71526acc44bcff76f696df8638d2)
746 set(MD5_BMP_420M_ISLOW_565 8dc0185245353cfa32ad97027342216f)
747 set(MD5_BMP_420M_ISLOW_565D d1be3a3339166255e76fa50a0d70d73e)
DRC7a7da942015-06-27 08:10:31 +0000748 set(MD5_PPM_420_ISLOW_SKIP15_31 c4c65c1e43d7275cd50328a61e6534f0)
749 set(MD5_PPM_420_ISLOW_ARI_SKIP16_139 087c6b123db16ac00cb88c5b590bb74a)
DRC3ab68cf2016-02-19 18:32:10 -0600750 set(MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71 26eb36ccc7d1f0cb80cdabb0ac8b5d99)
751 set(MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4 886c6775af22370257122f8b16207e6d)
DRC7a7da942015-06-27 08:10:31 +0000752 set(MD5_PPM_444_ISLOW_SKIP1_6 5606f86874cf26b8fcee1117a0a436a6)
DRC3ab68cf2016-02-19 18:32:10 -0600753 set(MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13 db87dc7ce26bcdc7a6b56239ce2b9d6c)
754 set(MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0 cb57b32bd6d03e35432362f7bf184b6d)
DRCaee4f722014-08-09 23:06:07 +0000755 set(MD5_JPEG_CROP b4197f377e621c4e9b1d20471432610d)
DRC35db75e2014-05-06 22:44:46 +0000756endif()
DRC211d1e72013-01-13 11:25:20 +0000757
DRC957d6232011-04-01 11:13:11 +0000758if(WITH_JAVA)
DRC35db75e2014-05-06 22:44:46 +0000759 add_test(TJUnitTest
DRC6abd3912016-11-15 08:47:43 -0600760 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
DRC35db75e2014-05-06 22:44:46 +0000761 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
762 TJUnitTest)
763 add_test(TJUnitTest-yuv
DRC6abd3912016-11-15 08:47:43 -0600764 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
DRC35db75e2014-05-06 22:44:46 +0000765 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
766 TJUnitTest -yuv)
767 add_test(TJUnitTest-yuv-nopad
DRC6abd3912016-11-15 08:47:43 -0600768 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
DRC35db75e2014-05-06 22:44:46 +0000769 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
770 TJUnitTest -yuv -noyuvpad)
771 add_test(TJUnitTest-bi
DRC6abd3912016-11-15 08:47:43 -0600772 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
DRC35db75e2014-05-06 22:44:46 +0000773 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
774 TJUnitTest -bi)
775 add_test(TJUnitTest-bi-yuv
DRC6abd3912016-11-15 08:47:43 -0600776 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
DRC35db75e2014-05-06 22:44:46 +0000777 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
778 TJUnitTest -bi -yuv)
779 add_test(TJUnitTest-bi-yuv-nopad
DRC6abd3912016-11-15 08:47:43 -0600780 ${Java_JAVA_EXECUTABLE} ${JAVAARGS} -cp java/turbojpeg.jar
DRC35db75e2014-05-06 22:44:46 +0000781 -Djava.library.path=${CMAKE_CURRENT_BINARY_DIR}/${OBJDIR}
782 TJUnitTest -bi -yuv -noyuvpad)
DRC957d6232011-04-01 11:13:11 +0000783endif()
DRC84697032010-10-15 03:43:24 +0000784
DRC665c96e2015-05-15 22:08:21 +0000785set(TEST_LIBTYPES "")
786if(ENABLE_SHARED)
787 set(TEST_LIBTYPES ${TEST_LIBTYPES} shared)
788endif()
789if(ENABLE_STATIC)
790 set(TEST_LIBTYPES ${TEST_LIBTYPES} static)
791endif()
792
DRC952191d2016-12-03 14:21:11 -0600793set(TESTIMAGES ${CMAKE_CURRENT_SOURCE_DIR}/testimages)
DRCf9134382016-02-06 14:09:20 -0600794set(MD5CMP ${CMAKE_CURRENT_BINARY_DIR}/md5/md5cmp)
795if(CMAKE_CROSSCOMPILING)
796 file(RELATIVE_PATH TESTIMAGES ${CMAKE_CURRENT_BINARY_DIR} ${TESTIMAGES})
797 file(RELATIVE_PATH MD5CMP ${CMAKE_CURRENT_BINARY_DIR} ${MD5CMP})
798endif()
799
DRC6abd3912016-11-15 08:47:43 -0600800# The output of the floating point DCT/IDCT algorithms differs depending on the
801# type of floating point math used, so the FLOATTEST CMake variable must be
802# set in order to tell the testing system which floating point results it
803# should expect:
804#
805# sse = validate against the expected results from the libjpeg-turbo SSE SIMD
806# extensions
807# 32bit = validate against the expected results from the C code when running on
808# a 32-bit FPU (or when SSE is being used for floating point math,
809# which is generally the default with x86-64 compilers)
810# 64bit = validate against the expected results from the C code when running
811# on a 64-bit FPU
812# 387 = validate against the expected results from the C code when the 387 FPU
813# is being used for floating point math (which is generally the default
814# with x86 compilers)
815# msvc = validate against the expected results from the C code when compiled
816# with a 32-bit version of Visual C++
817
818if(CPU_TYPE STREQUAL "x86_64" OR CPU_TYPE STREQUAL "i386")
819 if(WITH_SIMD)
820 set(DEFAULT_FLOATTEST sse)
821 elseif(CPU_TYPE STREQUAL "x86_64")
822 set(DEFAULT_FLOATTEST 32bit)
823 elseif(CPU_TYPE STREQUAL "i386" AND MSVC)
824 set(DEFAULT_FLOATTEST msvc)
825 endif()
826else()
827 if(BITS EQUAL 64)
828 set(DEFAULT_FLOATTEST 64bit)
829 elseif(BITS EQUAL 32)
830 set(DEFAULT_FLOATTEST 32bit)
831 endif()
832endif()
833
834# This causes FLOATTEST to reset to the default value if WITH_SIMD has
835# changed.
836if(DEFINED WITH_SIMD_INT AND NOT WITH_SIMD EQUAL WITH_SIMD_INT)
837 set(FORCE_FLOATTEST "FORCE")
838endif()
839set(WITH_SIMD_INT ${WITH_SIMD} CACHE INTERNAL "")
840set(FLOATTEST ${DEFAULT_FLOATTEST} CACHE STRING
841 "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})"
842 ${FORCE_FLOATTEST})
843message(STATUS "FLOATTEST = ${FLOATTEST}")
844
845if(FLOATTEST)
846 string(TOUPPER ${FLOATTEST} FLOATTEST_UC)
847 string(TOLOWER ${FLOATTEST} FLOATTEST)
848 if(NOT FLOATTEST STREQUAL "sse" AND NOT FLOATTEST STREQUAL "32bit" AND
849 NOT FLOATTEST STREQUAL "64bit" AND NOT FLOATTEST STREQUAL "387" AND
850 NOT FLOATTEST STREQUAL "msvc")
851 message(FATAL_ERROR "\"${FLOATTEST}\" is not a valid value for FLOATTEST.")
852 endif()
853endif()
854
DRC665c96e2015-05-15 22:08:21 +0000855foreach(libtype ${TEST_LIBTYPES})
DRC6abd3912016-11-15 08:47:43 -0600856 if(libtype STREQUAL "static")
DRC35db75e2014-05-06 22:44:46 +0000857 set(suffix -static)
858 endif()
DRCaee4f722014-08-09 23:06:07 +0000859 if(WITH_TURBOJPEG)
DRC6abd3912016-11-15 08:47:43 -0600860 add_test(tjunittest-${libtype} tjunittest${suffix})
861 add_test(tjunittest-${libtype}-alloc tjunittest${suffix} -alloc)
862 add_test(tjunittest-${libtype}-yuv tjunittest${suffix} -yuv)
863 add_test(tjunittest-${libtype}-yuv-alloc tjunittest${suffix} -yuv -alloc)
864 add_test(tjunittest-${libtype}-yuv-nopad tjunittest${suffix} -yuv -noyuvpad)
865
866 set(MD5_PPM_GRAY_TILE 89d3ca21213d9d864b50b4e4e7de4ca6)
867 set(MD5_PPM_420_8x8_TILE 847fceab15c5b7b911cb986cf0f71de3)
868 set(MD5_PPM_420_16x16_TILE ca45552a93687e078f7137cc4126a7b0)
869 set(MD5_PPM_420_32x32_TILE d8676f1d6b68df358353bba9844f4a00)
870 set(MD5_PPM_420_64x64_TILE 4e4c1a3d7ea4bace4f868bcbe83b7050)
871 set(MD5_PPM_420_128x128_TILE f24c3429c52265832beab9df72a0ceae)
872 set(MD5_PPM_420M_8x8_TILE bc25320e1f4c31ce2e610e43e9fd173c)
873 set(MD5_PPM_420M_TILE 75ffdf14602258c5c189522af57fa605)
874 set(MD5_PPM_422_8x8_TILE d83dacd9fc73b0a6f10c09acad64eb1e)
875 set(MD5_PPM_422_16x16_TILE 35077fb610d72dd743b1eb0cbcfe10fb)
876 set(MD5_PPM_422_32x32_TILE e6902ed8a449ecc0f0d6f2bf945f65f7)
877 set(MD5_PPM_422_64x64_TILE 2b4502a8f316cedbde1da7bce3d2231e)
878 set(MD5_PPM_422_128x128_TILE f0b5617d578f5e13c8eee215d64d4877)
879 set(MD5_PPM_422M_8x8_TILE 828941d7f41cd6283abd6beffb7fd51d)
880 set(MD5_PPM_422M_TILE e877ae1324c4a280b95376f7f018172f)
881 set(MD5_PPM_444_TILE 7964e41e67cfb8d0a587c0aa4798f9c3)
882
883 # Test compressing from/decompressing to an arbitrary subregion of a larger
884 # image buffer
885 add_test(tjbench-${libtype}-tile-cp
886 ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
887 testout_tile.ppm)
888 add_test(tjbench-${libtype}-tile
889 tjbench${suffix} testout_tile.ppm 95 -rgb -quiet -tile -benchtime 0.01)
890 set_tests_properties(tjbench-${libtype}-tile
891 PROPERTIES DEPENDS tjbench-${libtype}-tile-cp)
892
893 foreach(tile 8 16 32 64 128)
894 add_test(tjbench-${libtype}-tile-gray-${tile}x${tile}-cmp
895 ${MD5CMP} ${MD5_PPM_GRAY_TILE}
896 testout_tile_GRAY_Q95_${tile}x${tile}.ppm)
897 foreach(subsamp 420 422)
898 add_test(tjbench-${libtype}-tile-${subsamp}-${tile}x${tile}-cmp
899 ${MD5CMP} ${MD5_PPM_${subsamp}_${tile}x${tile}_TILE}
900 testout_tile_${subsamp}_Q95_${tile}x${tile}.ppm)
901 endforeach()
902 add_test(tjbench-${libtype}-tile-444-${tile}x${tile}-cmp
903 ${MD5CMP} ${MD5_PPM_444_TILE}
904 testout_tile_444_Q95_${tile}x${tile}.ppm)
905 foreach(subsamp gray 420 422 444)
906 set_tests_properties(tjbench-${libtype}-tile-${subsamp}-${tile}x${tile}-cmp
907 PROPERTIES DEPENDS tjbench-${libtype}-tile)
908 endforeach()
909 endforeach()
910
911 add_test(tjbench-${libtype}-tilem-cp
912 ${CMAKE_COMMAND} -E copy_if_different ${TESTIMAGES}/testorig.ppm
913 testout_tilem.ppm)
914 add_test(tjbench-${libtype}-tilem
915 tjbench${suffix} testout_tilem.ppm 95 -rgb -fastupsample -quiet -tile
916 -benchtime 0.01)
917 set_tests_properties(tjbench-${libtype}-tilem
918 PROPERTIES DEPENDS tjbench-${libtype}-tilem-cp)
919
920 add_test(tjbench-${libtype}-tile-420m-8x8-cmp
921 ${MD5CMP} ${MD5_PPM_420M_8x8_TILE} testout_tilem_420_Q95_8x8.ppm)
922 add_test(tjbench-${libtype}-tile-422m-8x8-cmp
923 ${MD5CMP} ${MD5_PPM_422M_8x8_TILE} testout_tilem_422_Q95_8x8.ppm)
924 foreach(tile 16 32 64 128)
925 foreach(subsamp 420 422)
926 add_test(tjbench-${libtype}-tile-${subsamp}m-${tile}x${tile}-cmp
927 ${MD5CMP} ${MD5_PPM_${subsamp}M_TILE}
928 testout_tilem_${subsamp}_Q95_${tile}x${tile}.ppm)
929 endforeach()
930 endforeach()
931 foreach(tile 8 16 32 64 128)
932 foreach(subsamp 420 422)
933 set_tests_properties(tjbench-${libtype}-tile-${subsamp}m-${tile}x${tile}-cmp
934 PROPERTIES DEPENDS tjbench-${libtype}-tilem)
935 endforeach()
936 endforeach()
DRCaee4f722014-08-09 23:06:07 +0000937 endif()
DRC35db75e2014-05-06 22:44:46 +0000938
DRC6abd3912016-11-15 08:47:43 -0600939 # These tests are carefully crafted to provide full coverage of as many of
940 # the underlying algorithms as possible (including all of the
941 # SIMD-accelerated ones.)
942
943 macro(add_bittest PROG NAME ARGS OUTFILE INFILE MD5SUM)
944 add_test(${PROG}-${libtype}-${NAME}
945 ${PROG}${suffix} ${ARGS} -outfile ${OUTFILE} ${INFILE})
946 add_test(${PROG}-${libtype}-${NAME}-cmp
947 ${MD5CMP} ${MD5SUM} ${OUTFILE})
948 set_tests_properties(${PROG}-${libtype}-${NAME}-cmp PROPERTIES
949 DEPENDS ${PROG}-${libtype}-${NAME})
950 if(${ARGC} GREATER 6)
951 set(DEPENDS ${ARGN})
952 set_tests_properties(${PROG}-${libtype}-${NAME} PROPERTIES
953 DEPENDS ${DEPENDS})
954 endif()
955 endmacro()
DRC35db75e2014-05-06 22:44:46 +0000956
957 # CC: null SAMP: fullsize FDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -0600958 add_bittest(cjpeg rgb-islow "-rgb;-dct;int"
959 testout_rgb_islow.jpg ${TESTIMAGES}/testorig.ppm
960 ${MD5_JPEG_RGB_ISLOW})
DRCf9134382016-02-06 14:09:20 -0600961
DRC35db75e2014-05-06 22:44:46 +0000962 # CC: null SAMP: fullsize IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -0600963 add_bittest(djpeg rgb-islow "-dct;int;-ppm"
964 testout_rgb_islow.ppm testout_rgb_islow.jpg
965 ${MD5_PPM_RGB_ISLOW} cjpeg-${libtype}-rgb-islow)
DRCf9134382016-02-06 14:09:20 -0600966
DRCaee4f722014-08-09 23:06:07 +0000967 if(NOT WITH_12BIT)
968 # CC: RGB->RGB565 SAMP: fullsize IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -0600969 add_bittest(djpeg rgb-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
970 testout_rgb_islow_565.bmp testout_rgb_islow.jpg
971 ${MD5_BMP_RGB_ISLOW_565} cjpeg-${libtype}-rgb-islow)
DRCf9134382016-02-06 14:09:20 -0600972
DRCaee4f722014-08-09 23:06:07 +0000973 # CC: RGB->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -0600974 add_bittest(djpeg rgb-islow-565D "-dct;int;-rgb565;-bmp"
975 testout_rgb_islow_565D.bmp testout_rgb_islow.jpg
976 ${MD5_BMP_RGB_ISLOW_565D} cjpeg-${libtype}-rgb-islow)
DRCaee4f722014-08-09 23:06:07 +0000977 endif()
DRC35db75e2014-05-06 22:44:46 +0000978
979 # CC: RGB->YCC SAMP: fullsize/h2v1 FDCT: ifast ENT: 2-pass huff
DRC6abd3912016-11-15 08:47:43 -0600980 add_bittest(cjpeg 422-ifast-opt "-sample;2x1;-dct;fast;-opt"
981 testout_422_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
982 ${MD5_JPEG_422_IFAST_OPT})
DRCf9134382016-02-06 14:09:20 -0600983
DRC35db75e2014-05-06 22:44:46 +0000984 # CC: YCC->RGB SAMP: fullsize/h2v1 fancy IDCT: ifast ENT: huff
DRC6abd3912016-11-15 08:47:43 -0600985 add_bittest(djpeg 422-ifast "-dct;fast"
986 testout_422_ifast.ppm testout_422_ifast_opt.jpg
987 ${MD5_PPM_422_IFAST} cjpeg-${libtype}-422-ifast-opt)
DRCf9134382016-02-06 14:09:20 -0600988
DRC35db75e2014-05-06 22:44:46 +0000989 # CC: YCC->RGB SAMP: h2v1 merged IDCT: ifast ENT: huff
DRC6abd3912016-11-15 08:47:43 -0600990 add_bittest(djpeg 422m-ifast "-dct;fast;-nosmooth"
991 testout_422m_ifast.ppm testout_422_ifast_opt.jpg
992 ${MD5_PPM_422M_IFAST} cjpeg-${libtype}-422-ifast-opt)
DRCf9134382016-02-06 14:09:20 -0600993
DRCaee4f722014-08-09 23:06:07 +0000994 if(NOT WITH_12BIT)
995 # CC: YCC->RGB565 SAMP: h2v1 merged IDCT: ifast ENT: huff
DRC6abd3912016-11-15 08:47:43 -0600996 add_bittest(djpeg 422m-ifast-565
997 "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
998 testout_422m_ifast_565.bmp testout_422_ifast_opt.jpg
999 ${MD5_BMP_422M_IFAST_565} cjpeg-${libtype}-422-ifast-opt)
DRCf9134382016-02-06 14:09:20 -06001000
DRCaee4f722014-08-09 23:06:07 +00001001 # CC: YCC->RGB565 (dithered) SAMP: h2v1 merged IDCT: ifast ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001002 add_bittest(djpeg 422m-ifast-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1003 testout_422m_ifast_565D.bmp testout_422_ifast_opt.jpg
1004 ${MD5_BMP_422M_IFAST_565D} cjpeg-${libtype}-422-ifast-opt)
DRCaee4f722014-08-09 23:06:07 +00001005 endif()
DRC35db75e2014-05-06 22:44:46 +00001006
1007 # CC: RGB->YCC SAMP: fullsize/h2v2 FDCT: ifast ENT: prog huff
DRC6abd3912016-11-15 08:47:43 -06001008 add_bittest(cjpeg 420-q100-ifast-prog
1009 "-sample;2x2;-quality;100;-dct;fast;-prog"
1010 testout_420_q100_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1011 ${MD5_JPEG_420_IFAST_Q100_PROG})
DRCf9134382016-02-06 14:09:20 -06001012
DRC35db75e2014-05-06 22:44:46 +00001013 # CC: YCC->RGB SAMP: fullsize/h2v2 fancy IDCT: ifast ENT: prog huff
DRC6abd3912016-11-15 08:47:43 -06001014 add_bittest(djpeg 420-q100-ifast-prog "-dct;fast"
1015 testout_420_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1016 ${MD5_PPM_420_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
DRCf9134382016-02-06 14:09:20 -06001017
DRC35db75e2014-05-06 22:44:46 +00001018 # CC: YCC->RGB SAMP: h2v2 merged IDCT: ifast ENT: prog huff
DRC6abd3912016-11-15 08:47:43 -06001019 add_bittest(djpeg 420m-q100-ifast-prog "-dct;fast;-nosmooth"
1020 testout_420m_q100_ifast.ppm testout_420_q100_ifast_prog.jpg
1021 ${MD5_PPM_420M_Q100_IFAST} cjpeg-${libtype}-420-q100-ifast-prog)
DRC35db75e2014-05-06 22:44:46 +00001022
1023 # CC: RGB->Gray SAMP: fullsize FDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001024 add_bittest(cjpeg gray-islow "-gray;-dct;int"
1025 testout_gray_islow.jpg ${TESTIMAGES}/testorig.ppm
1026 ${MD5_JPEG_GRAY_ISLOW})
DRCf9134382016-02-06 14:09:20 -06001027
DRC78df2e62014-05-12 09:23:57 +00001028 # CC: Gray->Gray SAMP: fullsize IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001029 add_bittest(djpeg gray-islow "-dct;int"
1030 testout_gray_islow.ppm testout_gray_islow.jpg
1031 ${MD5_PPM_GRAY_ISLOW} cjpeg-${libtype}-gray-islow)
DRCf9134382016-02-06 14:09:20 -06001032
DRC78df2e62014-05-12 09:23:57 +00001033 # CC: Gray->RGB SAMP: fullsize IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001034 add_bittest(djpeg gray-islow-rgb "-dct;int;-rgb"
1035 testout_gray_islow_rgb.ppm testout_gray_islow.jpg
1036 ${MD5_PPM_GRAY_ISLOW_RGB} cjpeg-${libtype}-gray-islow)
DRCf9134382016-02-06 14:09:20 -06001037
DRCaee4f722014-08-09 23:06:07 +00001038 if(NOT WITH_12BIT)
1039 # CC: Gray->RGB565 SAMP: fullsize IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001040 add_bittest(djpeg gray-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1041 testout_gray_islow_565.bmp testout_gray_islow.jpg
1042 ${MD5_BMP_GRAY_ISLOW_565} cjpeg-${libtype}-gray-islow)
DRCf9134382016-02-06 14:09:20 -06001043
DRCaee4f722014-08-09 23:06:07 +00001044 # CC: Gray->RGB565 (dithered) SAMP: fullsize IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001045 add_bittest(djpeg gray-islow-565D "-dct;int;-rgb565;-bmp"
1046 testout_gray_islow_565D.bmp testout_gray_islow.jpg
1047 ${MD5_BMP_GRAY_ISLOW_565D} cjpeg-${libtype}-gray-islow)
DRCaee4f722014-08-09 23:06:07 +00001048 endif()
DRC35db75e2014-05-06 22:44:46 +00001049
1050 # CC: RGB->YCC SAMP: fullsize smooth/h2v2 smooth FDCT: islow
1051 # ENT: 2-pass huff
DRC6abd3912016-11-15 08:47:43 -06001052 add_bittest(cjpeg 420s-ifast-opt "-sample;2x2;-smooth;1;-dct;int;-opt"
1053 testout_420s_ifast_opt.jpg ${TESTIMAGES}/testorig.ppm
1054 ${MD5_JPEG_420S_IFAST_OPT})
DRC35db75e2014-05-06 22:44:46 +00001055
DRC6abd3912016-11-15 08:47:43 -06001056 if(FLOATTEST)
1057 # CC: RGB->YCC SAMP: fullsize/int FDCT: float ENT: prog huff
1058 add_bittest(cjpeg 3x2-float-prog "-sample;3x2;-dct;float;-prog"
1059 testout_3x2_float_prog.jpg ${TESTIMAGES}/testorig.ppm
1060 ${MD5_JPEG_3x2_FLOAT_PROG_${FLOATTEST_UC}})
DRCf9134382016-02-06 14:09:20 -06001061
DRC6abd3912016-11-15 08:47:43 -06001062 # CC: YCC->RGB SAMP: fullsize/int IDCT: float ENT: prog huff
1063 add_bittest(djpeg 3x2-float-prog "-dct;float"
1064 testout_3x2_float.ppm testout_3x2_float_prog.jpg
1065 ${MD5_PPM_3x2_FLOAT_${FLOATTEST_UC}} cjpeg-${libtype}-3x2-float-prog)
1066 endif()
1067
1068 # CC: RGB->YCC SAMP: fullsize/int FDCT: ifast ENT: prog huff
1069 add_bittest(cjpeg 3x2-ifast-prog "-sample;3x2;-dct;fast;-prog"
1070 testout_3x2_ifast_prog.jpg ${TESTIMAGES}/testorig.ppm
1071 ${MD5_JPEG_3x2_IFAST_PROG})
1072
1073 # CC: YCC->RGB SAMP: fullsize/int IDCT: ifast ENT: prog huff
1074 add_bittest(djpeg 3x2-ifast-prog "-dct;fast"
1075 testout_3x2_ifast.ppm testout_3x2_ifast_prog.jpg
1076 ${MD5_PPM_3x2_IFAST} cjpeg-${libtype}-3x2-ifast-prog)
DRC35db75e2014-05-06 22:44:46 +00001077
1078 if(WITH_ARITH_ENC)
1079 # CC: YCC->RGB SAMP: fullsize/h2v2 FDCT: islow ENT: arith
DRC6abd3912016-11-15 08:47:43 -06001080 add_bittest(cjpeg 420-islow-ari "-dct;int;-arithmetic"
1081 testout_420_islow_ari.jpg ${TESTIMAGES}/testorig.ppm
1082 ${MD5_JPEG_420_ISLOW_ARI})
DRCf9134382016-02-06 14:09:20 -06001083
DRC6abd3912016-11-15 08:47:43 -06001084 add_bittest(jpegtran 420-islow-ari "-arithmetic"
1085 testout_420_islow_ari2.jpg ${TESTIMAGES}/testimgint.jpg
1086 ${MD5_JPEG_420_ISLOW_ARI})
DRCf9134382016-02-06 14:09:20 -06001087
DRC35db75e2014-05-06 22:44:46 +00001088 # CC: YCC->RGB SAMP: fullsize FDCT: islow ENT: prog arith
DRC6abd3912016-11-15 08:47:43 -06001089 add_bittest(cjpeg 444-islow-progari
1090 "-sample;1x1;-dct;int;-prog;-arithmetic"
1091 testout_444_islow_progari.jpg ${TESTIMAGES}/testorig.ppm
1092 ${MD5_JPEG_444_ISLOW_PROGARI})
DRC35db75e2014-05-06 22:44:46 +00001093 endif()
DRCf9134382016-02-06 14:09:20 -06001094
DRC35db75e2014-05-06 22:44:46 +00001095 if(WITH_ARITH_DEC)
1096 # CC: RGB->YCC SAMP: h2v2 merged IDCT: ifast ENT: arith
DRC6abd3912016-11-15 08:47:43 -06001097 add_bittest(djpeg 420m-ifast-ari "-fast;-ppm"
1098 testout_420m_ifast_ari.ppm ${TESTIMAGES}/testimgari.jpg
1099 ${MD5_PPM_420M_IFAST_ARI})
DRCf9134382016-02-06 14:09:20 -06001100
DRC6abd3912016-11-15 08:47:43 -06001101 add_bittest(jpegtran 420-islow ""
1102 testout_420_islow.jpg ${TESTIMAGES}/testimgari.jpg
1103 ${MD5_JPEG_420_ISLOW})
DRC35db75e2014-05-06 22:44:46 +00001104 endif()
1105
1106 # 2/1-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 16x16 islow ENT: huff
1107 # 15/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 15x15 islow ENT: huff
1108 # 13/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 13x13 islow ENT: huff
1109 # 11/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 11x11 islow ENT: huff
1110 # 9/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 9x9 islow ENT: huff
1111 # 7/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 7x7 islow/14x14 islow
1112 # ENT: huff
1113 # 3/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 6x6 islow/12x12 islow
1114 # ENT: huff
1115 # 5/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 5x5 islow/10x10 islow
1116 # ENT: huff
1117 # 1/2-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 4x4 islow/8x8 islow
1118 # ENT: huff
1119 # 3/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 3x3 islow/6x6 islow
1120 # ENT: huff
1121 # 1/4-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 2x2 islow/4x4 islow
1122 # ENT: huff
1123 # 1/8-- CC: YCC->RGB SAMP: h2v2 merged IDCT: 1x1 islow/2x2 islow
1124 # ENT: huff
1125 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)
1126 string(REGEX REPLACE "_" "/" scalearg ${scale})
DRC6abd3912016-11-15 08:47:43 -06001127 add_bittest(djpeg 420m-islow-${scale}
1128 "-dct;int;-scale;${scalearg};-nosmooth;-ppm"
1129 testout_420m_islow_${scale}.ppm ${TESTIMAGES}/${TESTORIG}
1130 ${MD5_PPM_420M_ISLOW_${scale}})
DRC35db75e2014-05-06 22:44:46 +00001131 endforeach()
1132
DRCaee4f722014-08-09 23:06:07 +00001133 if(NOT WITH_12BIT)
1134 # CC: YCC->RGB (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001135 add_bittest(djpeg 420-islow-256 "-dct;int;-colors;256;-bmp"
1136 testout_420_islow_256.bmp ${TESTIMAGES}/${TESTORIG}
1137 ${MD5_BMP_420_ISLOW_256})
DRCf9134382016-02-06 14:09:20 -06001138
DRCaee4f722014-08-09 23:06:07 +00001139 # CC: YCC->RGB565 SAMP: h2v2 fancy IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001140 add_bittest(djpeg 420-islow-565 "-dct;int;-rgb565;-dither;none;-bmp"
1141 testout_420_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1142 ${MD5_BMP_420_ISLOW_565})
DRCf9134382016-02-06 14:09:20 -06001143
DRCaee4f722014-08-09 23:06:07 +00001144 # CC: YCC->RGB565 (dithered) SAMP: h2v2 fancy IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001145 add_bittest(djpeg 420-islow-565D "-dct;int;-rgb565;-bmp"
1146 testout_420_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1147 ${MD5_BMP_420_ISLOW_565D})
DRCf9134382016-02-06 14:09:20 -06001148
DRCaee4f722014-08-09 23:06:07 +00001149 # CC: YCC->RGB565 SAMP: h2v2 merged IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001150 add_bittest(djpeg 420m-islow-565
1151 "-dct;int;-nosmooth;-rgb565;-dither;none;-bmp"
1152 testout_420m_islow_565.bmp ${TESTIMAGES}/${TESTORIG}
1153 ${MD5_BMP_420M_ISLOW_565})
DRCf9134382016-02-06 14:09:20 -06001154
DRCaee4f722014-08-09 23:06:07 +00001155 # CC: YCC->RGB565 (dithered) SAMP: h2v2 merged IDCT: islow ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001156 add_bittest(djpeg 420m-islow-565D "-dct;int;-nosmooth;-rgb565;-bmp"
1157 testout_420m_islow_565D.bmp ${TESTIMAGES}/${TESTORIG}
1158 ${MD5_BMP_420M_ISLOW_565D})
DRCaee4f722014-08-09 23:06:07 +00001159 endif()
DRC7a7da942015-06-27 08:10:31 +00001160
1161 # Partial decode tests. These tests are designed to cover all of the
1162 # possible code paths in jpeg_skip_scanlines().
1163
1164 # Context rows: Yes Intra-iMCU row: Yes iMCU row prefetch: No ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001165 add_bittest(djpeg 420-islow-skip15_31 "-dct;int;-skip;15,31;-ppm"
1166 testout_420_islow_skip15,31.ppm ${TESTIMAGES}/${TESTORIG}
1167 ${MD5_PPM_420_ISLOW_SKIP15_31})
DRCf9134382016-02-06 14:09:20 -06001168
DRC7a7da942015-06-27 08:10:31 +00001169 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: Yes ENT: arith
1170 if(WITH_ARITH_DEC)
DRC6abd3912016-11-15 08:47:43 -06001171 add_bittest(djpeg 420-islow-ari-skip16_139 "-dct;int;-skip;16,139;-ppm"
1172 testout_420_islow_ari_skip16,139.ppm ${TESTIMAGES}/testimgari.jpg
1173 ${MD5_PPM_420_ISLOW_ARI_SKIP16_139})
DRC7a7da942015-06-27 08:10:31 +00001174 endif()
DRCf9134382016-02-06 14:09:20 -06001175
DRC7a7da942015-06-27 08:10:31 +00001176 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: prog huff
DRC6abd3912016-11-15 08:47:43 -06001177 add_test(cjpeg-${libtype}-420-islow-prog
1178 cjpeg${suffix} -dct int -prog
DRCf9134382016-02-06 14:09:20 -06001179 -outfile testout_420_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
DRC6abd3912016-11-15 08:47:43 -06001180 add_bittest(djpeg 420-islow-prog-crop62x62_71_71
1181 "-dct;int;-crop;62x62+71+71;-ppm"
1182 testout_420_islow_prog_crop62x62,71,71.ppm testout_420_islow_prog.jpg
1183 ${MD5_PPM_420_ISLOW_PROG_CROP62x62_71_71} cjpeg-${libtype}-420-islow-prog)
DRCf9134382016-02-06 14:09:20 -06001184
DRC7a7da942015-06-27 08:10:31 +00001185 # Context rows: Yes Intra-iMCU row: No iMCU row prefetch: No ENT: arith
1186 if(WITH_ARITH_DEC)
DRC6abd3912016-11-15 08:47:43 -06001187 add_bittest(djpeg 420-islow-ari-crop53x53_4_4
1188 "-dct;int;-crop;53x53+4+4;-ppm"
1189 testout_420_islow_ari_crop53x53,4,4.ppm ${TESTIMAGES}/testimgari.jpg
1190 ${MD5_PPM_420_ISLOW_ARI_CROP53x53_4_4})
DRC7a7da942015-06-27 08:10:31 +00001191 endif()
DRCf9134382016-02-06 14:09:20 -06001192
DRC7a7da942015-06-27 08:10:31 +00001193 # Context rows: No Intra-iMCU row: Yes ENT: huff
DRC6abd3912016-11-15 08:47:43 -06001194 add_test(cjpeg-${libtype}-444-islow
1195 cjpeg${suffix} -dct int -sample 1x1
DRCf9134382016-02-06 14:09:20 -06001196 -outfile testout_444_islow.jpg ${TESTIMAGES}/testorig.ppm)
DRC6abd3912016-11-15 08:47:43 -06001197 add_bittest(djpeg 444-islow-skip1_6 "-dct;int;-skip;1,6;-ppm"
1198 testout_444_islow_skip1,6.ppm testout_444_islow.jpg
1199 ${MD5_PPM_444_ISLOW_SKIP1_6} cjpeg-${libtype}-444-islow)
DRCf9134382016-02-06 14:09:20 -06001200
DRC7a7da942015-06-27 08:10:31 +00001201 # Context rows: No Intra-iMCU row: No ENT: prog huff
DRC6abd3912016-11-15 08:47:43 -06001202 add_test(cjpeg-${libtype}-444-islow-prog
1203 cjpeg${suffix} -dct int -prog -sample 1x1
DRCf9134382016-02-06 14:09:20 -06001204 -outfile testout_444_islow_prog.jpg ${TESTIMAGES}/testorig.ppm)
DRC6abd3912016-11-15 08:47:43 -06001205 add_bittest(djpeg 444-islow-prog-crop98x98_13_13
1206 "-dct;int;-crop;98x98+13+13;-ppm"
1207 testout_444_islow_prog_crop98x98,13,13.ppm testout_444_islow_prog.jpg
1208 ${MD5_PPM_444_ISLOW_PROG_CROP98x98_13_13} cjpeg-${libtype}-444-islow-prog)
DRCf9134382016-02-06 14:09:20 -06001209
DRC7a7da942015-06-27 08:10:31 +00001210 # Context rows: No Intra-iMCU row: No ENT: arith
1211 if(WITH_ARITH_ENC)
DRC6abd3912016-11-15 08:47:43 -06001212 add_test(cjpeg-${libtype}-444-islow-ari
1213 cjpeg${suffix} -dct int -arithmetic -sample 1x1
DRCf9134382016-02-06 14:09:20 -06001214 -outfile testout_444_islow_ari.jpg ${TESTIMAGES}/testorig.ppm)
DRC7a7da942015-06-27 08:10:31 +00001215 if(WITH_ARITH_DEC)
DRC6abd3912016-11-15 08:47:43 -06001216 add_bittest(djpeg 444-islow-ari-crop37x37_0_0
1217 "-dct;int;-crop;37x37+0+0;-ppm"
1218 testout_444_islow_ari_crop37x37,0,0.ppm testout_444_islow_ari.jpg
1219 ${MD5_PPM_444_ISLOW_ARI_CROP37x37_0_0} cjpeg-${libtype}-444-islow-ari)
DRC7a7da942015-06-27 08:10:31 +00001220 endif()
1221 endif()
1222
DRC6abd3912016-11-15 08:47:43 -06001223 add_bittest(jpegtran crop "-crop;120x90+20+50;-transpose;-perfect"
1224 testout_crop.jpg ${TESTIMAGES}/${TESTORIG}
1225 ${MD5_JPEG_CROP})
DRC35db75e2014-05-06 22:44:46 +00001226
DRC0af8d672012-01-31 11:09:11 +00001227endforeach()
DRC2c0a4e12010-10-16 08:51:43 +00001228
DRC6aae0072016-11-15 08:37:04 -06001229add_custom_target(testclean COMMAND ${CMAKE_COMMAND} -P
DRC952191d2016-12-03 14:21:11 -06001230 ${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/testclean.cmake)
DRCa0f878a2011-04-02 04:43:14 +00001231
DRC6abd3912016-11-15 08:47:43 -06001232if(WITH_TURBOJPEG)
1233 configure_file(tjbenchtest.in tjbenchtest @ONLY)
1234 if(WITH_JAVA)
1235 configure_file(tjbenchtest.java.in tjbenchtest.java @ONLY)
1236 configure_file(tjexampletest.in tjexampletest @ONLY)
1237 add_custom_target(tjtest
1238 echo ./tjbenchtest COMMAND ./tjbenchtest
DRCd642da72016-12-03 13:38:21 -06001239 COMMAND echo ./tjbenchtest -alloc COMMAND ./tjbenchtest -alloc
DRC6abd3912016-11-15 08:47:43 -06001240 COMMAND echo ./tjbenchtest -yuv COMMAND ./tjbenchtest -yuv
1241 COMMAND echo ./tjbenchtest -yuv -alloc COMMAND ./tjbenchtest -yuv -alloc
1242 COMMAND echo ./tjbenchtest.java COMMAND ./tjbenchtest.java
1243 COMMAND echo ./tjbenchtest.java -yuv COMMAND ./tjbenchtest.java -yuv
1244 COMMAND echo ./tjexampletest COMMAND ./tjexampletest
DRC952191d2016-12-03 14:21:11 -06001245 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest
1246 ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest.java
1247 ${CMAKE_CURRENT_BINARY_DIR}/tjexampletest)
DRC6abd3912016-11-15 08:47:43 -06001248 else()
1249 add_custom_target(tjtest
1250 echo ./tjbenchtest COMMAND ./tjbenchtest
1251 COMMAND echo ./tjbenchtest -alloc COMMAND ./tjbenchtest -alloc
1252 COMMAND echo ./tjbenchtest -yuv COMMAND ./tjbenchtest -yuv
1253 COMMAND echo ./tjbenchtest -yuv -alloc COMMAND ./tjbenchtest -yuv -alloc
DRC952191d2016-12-03 14:21:11 -06001254 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tjbenchtest)
DRC6abd3912016-11-15 08:47:43 -06001255 endif()
DRC2c0a4e12010-10-16 08:51:43 +00001256endif()
1257
DRC6abd3912016-11-15 08:47:43 -06001258
1259###############################################################################
1260# INSTALLATION
1261###############################################################################
1262
1263if(WIN32)
1264 set(EXE ".exe")
DRC2c0a4e12010-10-16 08:51:43 +00001265endif()
DRC7284c9a2010-10-16 21:55:14 +00001266
DRCaee4f722014-08-09 23:06:07 +00001267if(WITH_TURBOJPEG)
DRC665c96e2015-05-15 22:08:21 +00001268 if(ENABLE_SHARED)
1269 install(TARGETS turbojpeg tjbench
DRCd681fa72016-12-07 10:54:54 -06001270 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
1271 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
1272 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
DRC665c96e2015-05-15 22:08:21 +00001273 endif()
1274 if(ENABLE_STATIC)
DRCd681fa72016-12-07 10:54:54 -06001275 install(TARGETS turbojpeg-static ARCHIVE
1276 DESTINATION ${CMAKE_INSTALL_LIBDIR})
DRC665c96e2015-05-15 22:08:21 +00001277 if(NOT ENABLE_SHARED)
DRC6abd3912016-11-15 08:47:43 -06001278 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/tjbench-static${EXE}
DRCd681fa72016-12-07 10:54:54 -06001279 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME tjbench${EXE})
DRC665c96e2015-05-15 22:08:21 +00001280 endif()
1281 endif()
DRC952191d2016-12-03 14:21:11 -06001282 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/turbojpeg.h
DRCd681fa72016-12-07 10:54:54 -06001283 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
DRCaee4f722014-08-09 23:06:07 +00001284endif()
DRC665c96e2015-05-15 22:08:21 +00001285
1286if(ENABLE_STATIC)
DRCd681fa72016-12-07 10:54:54 -06001287 install(TARGETS jpeg-static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
DRC665c96e2015-05-15 22:08:21 +00001288 if(NOT ENABLE_SHARED)
DRC6abd3912016-11-15 08:47:43 -06001289 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cjpeg-static${EXE}
DRCd681fa72016-12-07 10:54:54 -06001290 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME cjpeg${EXE})
DRC6abd3912016-11-15 08:47:43 -06001291 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/djpeg-static${EXE}
DRCd681fa72016-12-07 10:54:54 -06001292 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME djpeg${EXE})
DRC6abd3912016-11-15 08:47:43 -06001293 install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jpegtran-static${EXE}
DRCd681fa72016-12-07 10:54:54 -06001294 DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME jpegtran${EXE})
DRC665c96e2015-05-15 22:08:21 +00001295 endif()
1296endif()
1297
DRCd681fa72016-12-07 10:54:54 -06001298install(TARGETS rdjpgcom wrjpgcom RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
DRC7284c9a2010-10-16 21:55:14 +00001299
DRC952191d2016-12-03 14:21:11 -06001300install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.ijg
1301 ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_SOURCE_DIR}/example.c
1302 ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg.txt
1303 ${CMAKE_CURRENT_SOURCE_DIR}/structure.txt
1304 ${CMAKE_CURRENT_SOURCE_DIR}/usage.txt ${CMAKE_CURRENT_SOURCE_DIR}/wizard.txt
DRCd681fa72016-12-07 10:54:54 -06001305 ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
DRC6abd3912016-11-15 08:47:43 -06001306
1307if(UNIX)
DRC952191d2016-12-03 14:21:11 -06001308 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cjpeg.1
1309 ${CMAKE_CURRENT_SOURCE_DIR}/djpeg.1 ${CMAKE_CURRENT_SOURCE_DIR}/jpegtran.1
1310 ${CMAKE_CURRENT_SOURCE_DIR}/rdjpgcom.1
DRCd681fa72016-12-07 10:54:54 -06001311 ${CMAKE_CURRENT_SOURCE_DIR}/wrjpgcom.1
1312 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
DRC952191d2016-12-03 14:21:11 -06001313 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libjpeg.pc
1314 ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libturbojpeg.pc
DRCd681fa72016-12-07 10:54:54 -06001315 DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
DRC6abd3912016-11-15 08:47:43 -06001316endif()
DRCe2befde2010-10-17 07:28:08 +00001317
DRC952191d2016-12-03 14:21:11 -06001318install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h
1319 ${CMAKE_CURRENT_SOURCE_DIR}/jerror.h ${CMAKE_CURRENT_SOURCE_DIR}/jmorecfg.h
DRCd681fa72016-12-07 10:54:54 -06001320 ${CMAKE_CURRENT_SOURCE_DIR}/jpeglib.h
1321 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
DRC6abd3912016-11-15 08:47:43 -06001322
1323include(cmakescripts/BuildPackages.cmake)
DRC3da94de2016-11-20 19:10:54 -06001324
DRC952191d2016-12-03 14:21:11 -06001325configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmakescripts/cmake_uninstall.cmake.in"
DRC3da94de2016-11-20 19:10:54 -06001326 "cmake_uninstall.cmake" IMMEDIATE @ONLY)
1327
1328add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P cmake_uninstall.cmake)