* commit '73edb3d734a628fd88994bc974dc6737a58bd956': (45 commits) Rename the ARM64 assembly file to match the C file Fix several mathematical issues discovered in the ARM64 NEON code while running the extended regression tests introduced in r1267. Specific comments can be found in the original patches: https://sourceforge.net/p/libjpeg-turbo/patches/64/ Reformat code per Siarhei's original patch (to clearly indicate that the offset instructions are completely independent) and add Siarhei as an individual author (he no longer works for Nokia.) Clarify forward compatibility of iOS/ARM builds ARM64 NEON SIMD support for YCC-to-RGB565 conversion ARM NEON SIMD support for YCC-to-RGB565 conversion, and optimizations to the existing YCC-to-RGB conversion code: Ensure that tjFree() is used for any JPEG buffers that might have been dynamically allocated by the compress/transform functions. To keep things simple, we use tjAlloc() for the statically-allocated buffer as well, so that tjFree() can always be used to free the buffer, regardless of whether it was allocated by tjbench or by the TurboJPEG library. This fixes crashes that occurred on Windows when running tjunittest or tjbench with the -alloc flag. Revert r1335 and r1336. It was a valiant effort, but on Windows, xmm8-xmm15 are non-volatile, and the overhead of pushing them onto the stack at the beginning of each function and popping them at the end was causing worse performance (in the neighborhood of 3-5%) than just using the work areas and limiting the register usage to xmm0-xmm7. Best to leave the SSE2 code alone. We can optimize the register usage for AVX2, once that port takes place. Windows doesn't have setenv(). Go, go Gadget Macros. 1.4 beta1 Fix 'make dist' Don't use sudo when building a Debian package unless the user is non-root Add a set of undocumented environment variables and Java system properties that allow compression features of libjpeg that are not normally exposed in the TurboJPEG API to be enabled. These features are not normally exposed because, for the most part, they aren't "turbo" features, but it is still useful to be able to benchmark them without modifying the code. .func/.endfunc are only necessary when generating STABS debug info, which basically went out of style with parachute pants and Rick Astley. At any rate, none of the platforms for which we're building the ARM code use it (DWARF is the common format these days), and the .func/.endfunc directives cause the clang integrated assembler to fail (http://llvm.org/bugs/show_bug.cgi?id=20424). Extend tjbenchtest so that it tests the dynamic JPEG buffer allocation feature in TurboJPEG. Disable the tiling feature in TJBench whenever dynamic buffer allocation is enabled (because the tiling feature requires a separate buffer for each tile, using it successfully with dynamic buffer allocation would require a separate TurboJPEG compressor instance for each tile, and it's not worth going to that trouble right now.) Run the TurboJPEG conformance tests out of a directory in /tmp (for improved performance, if the source directory is on a remote file share.) Fix an issue in TJBench.java that prevented it from working properly if the source image resided in a directory with a dot in the name. Oops Subtle point, but dest->outbuffer is a pointer to the address of the JPEG buffer, which is stored in the calling program. Thus, *(dest->outbuffer) will always equal *outbuffer. We need to compare *outbuffer with dest->buffer instead to determine if the pointer is being reused. If the output buffer in the TurboJPEG destination manager was allocated by the destination manager and is being reused from a previous compression operation, then we need to get the buffer size from the previous operation, since the calling program doesn't know the actual buffer size. Actually, we need to increase the size of BUFSIZE, not just the size of _buffer. The previous patch might have cause problems if, for instance, state->free_in_buffer was 127 but 129 bytes were compressed. In that case, only 127 of the 129 bytes would have been written to the file. Also document the fix. ... Conflicts: CMakeLists.txt Makefile.am configure.ac jcdctmgr.c release/deb-control.tmpl sharedlib/CMakeLists.txt simd/CMakeLists.txt turbojpeg.c
566 lines
18 KiB
Plaintext
566 lines
18 KiB
Plaintext
# -*- Autoconf -*-
|
|
# Process this file with autoconf to produce a configure script.
|
|
|
|
AC_PREREQ([2.56])
|
|
AC_INIT([libmozjpeg], [2.1])
|
|
BUILD=`date +%Y%m%d`
|
|
|
|
AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
|
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES(yes)])
|
|
AC_PREFIX_DEFAULT(/opt/libmozjpeg)
|
|
|
|
# Checks for programs.
|
|
SAVED_CFLAGS=${CFLAGS}
|
|
SAVED_CPPFLAGS=${CPPFLAGS}
|
|
AC_PROG_CPP
|
|
AC_PROG_CC
|
|
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
|
AM_PROG_AS
|
|
AM_PROG_CC_C_O
|
|
AC_PROG_INSTALL
|
|
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
|
AC_PROG_LIBTOOL
|
|
AC_PROG_LN_S
|
|
|
|
# When the prefix is /opt/libmozjpeg, we assume that an "official" binary is
|
|
# being created, and thus we install things into specific locations.
|
|
|
|
old_prefix=${prefix}
|
|
if test "x$prefix" = "xNONE" -a "x$ac_default_prefix" != "x"; then
|
|
prefix=$ac_default_prefix
|
|
fi
|
|
DATADIR=`eval echo ${datadir}`
|
|
DATADIR=`eval echo $DATADIR`
|
|
if test "$DATADIR" = "/opt/libmozjpeg/share"; then
|
|
datadir='${prefix}'
|
|
fi
|
|
DATADIR=`eval echo ${datarootdir}`
|
|
DATADIR=`eval echo $DATADIR`
|
|
if test "$DATADIR" = "/opt/libmozjpeg/share"; then
|
|
datarootdir='${prefix}'
|
|
fi
|
|
|
|
old_exec_prefix=${exec_prefix}
|
|
if test "x$exec_prefix" = "xNONE"; then
|
|
exec_prefix=${prefix}
|
|
fi
|
|
|
|
if test "x${libdir}" = 'x${exec_prefix}/lib' -o "x${libdir}" = 'x${prefix}/lib'; then
|
|
LIBDIR=`eval echo ${libdir}`
|
|
LIBDIR=`eval echo $LIBDIR`
|
|
if test "$LIBDIR" = "/opt/libmozjpeg/lib"; then
|
|
case $host_os in
|
|
darwin*)
|
|
;;
|
|
*)
|
|
AC_CHECK_SIZEOF(long)
|
|
if test "${ac_cv_sizeof_long}" = "8"; then
|
|
libdir='${exec_prefix}/lib64'
|
|
elif test "${ac_cv_sizeof_long}" = "4"; then
|
|
libdir='${exec_prefix}/lib32'
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
exec_prefix=${old_exec_prefix}
|
|
prefix=${old_prefix}
|
|
|
|
# Check whether compiler supports pointers to undefined structures
|
|
AC_MSG_CHECKING(whether compiler supports pointers to undefined structures)
|
|
AC_TRY_COMPILE([ typedef struct undefined_structure * undef_struct_ptr; ], ,
|
|
AC_MSG_RESULT(yes),
|
|
[AC_MSG_RESULT(no)
|
|
AC_DEFINE([INCOMPLETE_TYPES_BROKEN], [1],
|
|
[Compiler does not support pointers to undefined structures.])])
|
|
|
|
if test "x${GCC}" = "xyes"; then
|
|
if test "x${SAVED_CFLAGS}" = "x"; then
|
|
CFLAGS=-O3
|
|
fi
|
|
if test "x${SAVED_CPPFLAGS}" = "x"; then
|
|
CPPFLAGS=-Wall
|
|
fi
|
|
fi
|
|
|
|
AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
|
|
if test "x${SUNCC}" = "xyes"; then
|
|
if test "x${SAVED_CFLAGS}" = "x"; then
|
|
CFLAGS=-xO5
|
|
fi
|
|
fi
|
|
|
|
# Checks for libraries.
|
|
AC_CHECK_LIB([m],[pow])
|
|
|
|
PKG_CHECK_MODULES([libpng], [libpng], [HAVE_LIBPNG=1], [
|
|
PKG_CHECK_MODULES([libpng], [libpng12], [HAVE_LIBPNG=1], [HAVE_LIBPNG=0])
|
|
])
|
|
AM_CONDITIONAL([HAVE_LIBPNG], [test "$HAVE_LIBPNG" -eq 1])
|
|
|
|
# Checks for header files.
|
|
AC_HEADER_STDC
|
|
AC_CHECK_HEADERS([stddef.h stdlib.h locale.h string.h])
|
|
AC_CHECK_HEADER([sys/types.h],
|
|
AC_DEFINE([NEED_SYS_TYPES_H], 1, [Define if you need to include <sys/types.h> to get size_t.]))
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
AC_C_CONST
|
|
AC_C_CHAR_UNSIGNED
|
|
AC_C_INLINE
|
|
AC_TYPE_SIZE_T
|
|
AC_CHECK_TYPES([unsigned char, unsigned short])
|
|
|
|
AC_MSG_CHECKING([if right shift is signed])
|
|
AC_TRY_RUN(
|
|
[#include <stdio.h>
|
|
int is_shifting_signed (long arg) {
|
|
long res = arg >> 4;
|
|
|
|
if (res == -0x7F7E80CL)
|
|
return 1; /* right shift is signed */
|
|
|
|
/* see if unsigned-shift hack will fix it. */
|
|
/* we can't just test exact value since it depends on width of long... */
|
|
res |= (~0L) << (32-4);
|
|
if (res == -0x7F7E80CL)
|
|
return 0; /* right shift is unsigned */
|
|
|
|
printf("Right shift isn't acting as I expect it to.\n");
|
|
printf("I fear the JPEG software will not work at all.\n\n");
|
|
return 0; /* try it with unsigned anyway */
|
|
}
|
|
int main (void) {
|
|
exit(is_shifting_signed(-0x7F7E80B1L));
|
|
}],
|
|
[AC_MSG_RESULT(no)
|
|
AC_DEFINE([RIGHT_SHIFT_IS_UNSIGNED], 1,
|
|
[Define if your (broken) compiler shifts signed values as if they were unsigned.])],
|
|
[AC_MSG_RESULT(yes)],
|
|
[AC_MSG_RESULT(Assuming that right shift is signed on target machine.)])
|
|
|
|
# Checks for library functions.
|
|
AC_CHECK_FUNCS([memset memcpy], [],
|
|
[AC_DEFINE([NEED_BSD_STRINGS], 1,
|
|
[Define if you have BSD-like bzero and bcopy in <strings.h> rather than memset/memcpy in <string.h>.])])
|
|
|
|
AC_MSG_CHECKING([libjpeg API version])
|
|
AC_ARG_VAR(JPEG_LIB_VERSION, [libjpeg API version (62, 70, or 80)])
|
|
if test "x$JPEG_LIB_VERSION" = "x"; then
|
|
AC_ARG_WITH([jpeg7],
|
|
AC_HELP_STRING([--with-jpeg7],
|
|
[Emulate libjpeg v7 API/ABI (this makes libmozjpeg backward incompatible with libjpeg v6b.)]))
|
|
AC_ARG_WITH([jpeg8],
|
|
AC_HELP_STRING([--with-jpeg8],
|
|
[Emulate libjpeg v8 API/ABI (this makes libmozjpeg backward incompatible with libjpeg v6b.)]))
|
|
if test "x${with_jpeg8}" = "xyes"; then
|
|
JPEG_LIB_VERSION=80
|
|
else
|
|
if test "x${with_jpeg7}" = "xyes"; then
|
|
JPEG_LIB_VERSION=70
|
|
else
|
|
JPEG_LIB_VERSION=62
|
|
fi
|
|
fi
|
|
fi
|
|
JPEG_LIB_VERSION_DECIMAL=`expr $JPEG_LIB_VERSION / 10`.`expr $JPEG_LIB_VERSION % 10`
|
|
AC_SUBST(JPEG_LIB_VERSION_DECIMAL)
|
|
AC_MSG_RESULT([$JPEG_LIB_VERSION_DECIMAL])
|
|
AC_DEFINE_UNQUOTED(JPEG_LIB_VERSION, [$JPEG_LIB_VERSION],
|
|
[libjpeg API version])
|
|
|
|
AC_ARG_VAR(SO_MAJOR_VERSION,
|
|
[Major version of the libmozjpeg shared library (default is determined by the API version)])
|
|
AC_ARG_VAR(SO_MINOR_VERSION,
|
|
[Minor version of the libmozjpeg shared library (default is determined by the API version)])
|
|
if test "x$SO_MAJOR_VERSION" = "x"; then
|
|
case "$JPEG_LIB_VERSION" in
|
|
62) SO_MAJOR_VERSION=$JPEG_LIB_VERSION ;;
|
|
*) SO_MAJOR_VERSION=`expr $JPEG_LIB_VERSION / 10` ;;
|
|
esac
|
|
fi
|
|
if test "x$SO_MINOR_VERSION" = "x"; then
|
|
case "$JPEG_LIB_VERSION" in
|
|
80) SO_MINOR_VERSION=2 ;;
|
|
*) SO_MINOR_VERSION=0 ;;
|
|
esac
|
|
fi
|
|
|
|
RPM_CONFIG_ARGS=
|
|
|
|
# Memory source/destination managers
|
|
SO_AGE=0
|
|
MEM_SRCDST_FUNCTIONS=
|
|
if test "x${with_jpeg8}" != "xyes"; then
|
|
AC_MSG_CHECKING([whether to include in-memory source/destination managers])
|
|
AC_ARG_WITH([mem-srcdst],
|
|
AC_HELP_STRING([--without-mem-srcdst],
|
|
[Do not include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI]))
|
|
if test "x$with_mem_srcdst" != "xno"; then
|
|
AC_MSG_RESULT(yes)
|
|
AC_DEFINE([MEM_SRCDST_SUPPORTED], [1],
|
|
[Support in-memory source/destination managers])
|
|
SO_AGE=1
|
|
MEM_SRCDST_FUNCTIONS="global: jpeg_mem_dest; jpeg_mem_src;";
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-mem-srcdst"
|
|
fi
|
|
fi
|
|
|
|
AC_MSG_CHECKING([libjpeg shared library version])
|
|
AC_MSG_RESULT([$SO_MAJOR_VERSION.$SO_AGE.$SO_MINOR_VERSION])
|
|
LIBTOOL_CURRENT=`expr $SO_MAJOR_VERSION + $SO_AGE`
|
|
AC_SUBST(LIBTOOL_CURRENT)
|
|
AC_SUBST(SO_MAJOR_VERSION)
|
|
AC_SUBST(SO_MINOR_VERSION)
|
|
AC_SUBST(SO_AGE)
|
|
AC_SUBST(MEM_SRCDST_FUNCTIONS)
|
|
|
|
AC_DEFINE_UNQUOTED(LIBMOZJPEG_VERSION, [$VERSION], [libmozjpeg version])
|
|
|
|
VERSION_SCRIPT=yes
|
|
AC_ARG_ENABLE([ld-version-script],
|
|
AS_HELP_STRING([--disable-ld-version-script],
|
|
[Disable linker version script for libmozjpeg (default is to use linker version script if the linker supports it)]),
|
|
[VERSION_SCRIPT=$enableval], [])
|
|
|
|
AC_MSG_CHECKING([whether the linker supports version scripts])
|
|
SAVED_LDFLAGS="$LDFLAGS"
|
|
LDFLAGS="$LDFLAGS -Wl,--version-script,conftest.map"
|
|
cat > conftest.map <<EOF
|
|
VERS_1 {
|
|
global: *;
|
|
};
|
|
EOF
|
|
AC_LINK_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM([], [])])],
|
|
[VERSION_SCRIPT_FLAG=-Wl,--version-script,;
|
|
AC_MSG_RESULT([yes (GNU style)])],
|
|
[])
|
|
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
|
LDFLAGS="$SAVED_LDFLAGS -Wl,-M,conftest.map"
|
|
AC_LINK_IFELSE([AC_LANG_SOURCE([AC_LANG_PROGRAM([], [])])],
|
|
[VERSION_SCRIPT_FLAG=-Wl,-M,;
|
|
AC_MSG_RESULT([yes (Sun style)])],
|
|
[])
|
|
fi
|
|
if test "x$VERSION_SCRIPT_FLAG" = "x"; then
|
|
VERSION_SCRIPT=no
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
LDFLAGS="$SAVED_LDFLAGS"
|
|
|
|
AC_MSG_CHECKING([whether to use version script when building libmozjpeg])
|
|
AC_MSG_RESULT($VERSION_SCRIPT)
|
|
|
|
AM_CONDITIONAL(VERSION_SCRIPT, test "x$VERSION_SCRIPT" = "xyes")
|
|
AC_SUBST(VERSION_SCRIPT_FLAG)
|
|
|
|
# Check for non-broken inline under various spellings
|
|
AC_MSG_CHECKING(for inline)
|
|
ljt_cv_inline=""
|
|
AC_TRY_COMPILE(, [} inline __attribute__((always_inline)) int foo() { return 0; }
|
|
int bar() { return foo();], ljt_cv_inline="inline __attribute__((always_inline))",
|
|
AC_TRY_COMPILE(, [} __inline__ int foo() { return 0; }
|
|
int bar() { return foo();], ljt_cv_inline="__inline__",
|
|
AC_TRY_COMPILE(, [} __inline int foo() { return 0; }
|
|
int bar() { return foo();], ljt_cv_inline="__inline",
|
|
AC_TRY_COMPILE(, [} inline int foo() { return 0; }
|
|
int bar() { return foo();], ljt_cv_inline="inline"))))
|
|
AC_MSG_RESULT($ljt_cv_inline)
|
|
AC_DEFINE_UNQUOTED([INLINE],[$ljt_cv_inline],[How to obtain function inlining.])
|
|
|
|
# Arithmetic coding support
|
|
AC_MSG_CHECKING([whether to include arithmetic encoding support])
|
|
AC_ARG_WITH([arith-enc],
|
|
AC_HELP_STRING([--without-arith-enc],
|
|
[Do not include arithmetic encoding support]))
|
|
if test "x$with_12bit" = "xyes"; then
|
|
with_arith_enc=no
|
|
fi
|
|
if test "x$with_arith_enc" = "xno"; then
|
|
AC_MSG_RESULT(no)
|
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-enc"
|
|
else
|
|
AC_DEFINE([C_ARITH_CODING_SUPPORTED], [1], [Support arithmetic encoding])
|
|
AC_MSG_RESULT(yes)
|
|
fi
|
|
AM_CONDITIONAL([WITH_ARITH_ENC], [test "x$with_arith_enc" != "xno"])
|
|
|
|
AC_MSG_CHECKING([whether to include arithmetic decoding support])
|
|
AC_ARG_WITH([arith-dec],
|
|
AC_HELP_STRING([--without-arith-dec],
|
|
[Do not include arithmetic decoding support]))
|
|
if test "x$with_12bit" = "xyes"; then
|
|
with_arith_dec=no
|
|
fi
|
|
if test "x$with_arith_dec" = "xno"; then
|
|
AC_MSG_RESULT(no)
|
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-arith-dec"
|
|
else
|
|
AC_DEFINE([D_ARITH_CODING_SUPPORTED], [1], [Support arithmetic decoding])
|
|
AC_MSG_RESULT(yes)
|
|
fi
|
|
AM_CONDITIONAL([WITH_ARITH_DEC], [test "x$with_arith_dec" != "xno"])
|
|
|
|
AM_CONDITIONAL([WITH_ARITH],
|
|
[test "x$with_arith_dec" != "xno" -o "x$with_arith_enc" != "xno"])
|
|
|
|
# 12-bit component support
|
|
AC_MSG_CHECKING([whether to use 12-bit samples])
|
|
AC_ARG_WITH([12bit],
|
|
AC_HELP_STRING([--with-12bit], [Encode/decode JPEG images with 12-bit samples (implies --without-simd --without-turbojpeg --without-arith-dec --without-arith-enc)]))
|
|
if test "x$with_12bit" = "xyes"; then
|
|
AC_DEFINE([BITS_IN_JSAMPLE], [12], [use 8 or 12])
|
|
AC_MSG_RESULT(yes)
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
AM_CONDITIONAL([WITH_12BIT], [test "x$with_12bit" = "xyes"])
|
|
|
|
# TurboJPEG support
|
|
AC_MSG_CHECKING([whether to build TurboJPEG C wrapper])
|
|
AC_ARG_WITH([turbojpeg],
|
|
AC_HELP_STRING([--without-turbojpeg],
|
|
[Do not include the TurboJPEG wrapper library and associated test programs]))
|
|
if test "x$with_12bit" = "xyes"; then
|
|
with_turbojpeg=no
|
|
fi
|
|
if test "x$with_turbojpeg" = "xno"; then
|
|
AC_MSG_RESULT(no)
|
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-turbojpeg"
|
|
else
|
|
AC_MSG_RESULT(yes)
|
|
fi
|
|
|
|
# Java support
|
|
AC_ARG_VAR(JAVAC, [Java compiler command (default: javac)])
|
|
if test "x$JAVAC" = "x"; then
|
|
JAVAC=javac
|
|
fi
|
|
AC_SUBST(JAVAC)
|
|
AC_ARG_VAR(JAVACFLAGS, [Java compiler flags])
|
|
AC_SUBST(JAVACFLAGS)
|
|
AC_ARG_VAR(JAR, [Java archive command (default: jar)])
|
|
if test "x$JAR" = "x"; then
|
|
JAR=jar
|
|
fi
|
|
AC_SUBST(JAR)
|
|
AC_ARG_VAR(JAVA, [Java runtime command (default: java)])
|
|
if test "x$JAVA" = "x"; then
|
|
JAVA=java
|
|
fi
|
|
AC_SUBST(JAVA)
|
|
AC_ARG_VAR(JNI_CFLAGS,
|
|
[C compiler flags needed to include jni.h (default: -I/System/Library/Frameworks/JavaVM.framework/Headers on OS X, '-I/usr/java/include -I/usr/java/include/solaris' on Solaris, and '-I/usr/java/default/include -I/usr/java/default/include/linux' on Linux)])
|
|
|
|
AC_MSG_CHECKING([whether to build TurboJPEG Java wrapper])
|
|
AC_ARG_WITH([java],
|
|
AC_HELP_STRING([--with-java], [Build Java wrapper for the TurboJPEG library]))
|
|
if test "x$with_12bit" = "xyes" -o "x$with_turbojpeg" = "xno"; then
|
|
with_java=no
|
|
fi
|
|
|
|
WITH_JAVA=0
|
|
if test "x$with_java" = "xyes"; then
|
|
AC_MSG_RESULT(yes)
|
|
|
|
case $host_os in
|
|
darwin*)
|
|
DEFAULT_JNI_CFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Headers
|
|
;;
|
|
solaris*)
|
|
DEFAULT_JNI_CFLAGS='-I/usr/java/include -I/usr/java/include/solaris'
|
|
;;
|
|
linux*)
|
|
DEFAULT_JNI_CFLAGS='-I/usr/java/default/include -I/usr/java/default/include/linux'
|
|
;;
|
|
esac
|
|
if test "x$JNI_CFLAGS" = "x"; then
|
|
JNI_CFLAGS=$DEFAULT_JNI_CFLAGS
|
|
fi
|
|
|
|
SAVE_CPPFLAGS=${CPPFLAGS}
|
|
CPPFLAGS="${CPPFLAGS} ${JNI_CFLAGS}"
|
|
AC_CHECK_HEADERS([jni.h], [DUMMY=1],
|
|
[AC_MSG_ERROR([Could not find JNI header file])])
|
|
CPPFLAGS=${SAVE_CPPFLAGS}
|
|
AC_SUBST(JNI_CFLAGS)
|
|
|
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --with-java"
|
|
JAVA_RPM_CONTENTS_1='%dir %{_datadir}/classes'
|
|
JAVA_RPM_CONTENTS_2=%{_datadir}/classes/turbojpeg.jar
|
|
WITH_JAVA=1
|
|
else
|
|
AC_MSG_RESULT(no)
|
|
fi
|
|
AM_CONDITIONAL([WITH_JAVA], [test "x$with_java" = "xyes"])
|
|
AC_SUBST(WITH_JAVA)
|
|
AC_SUBST(JAVA_RPM_CONTENTS_1)
|
|
AC_SUBST(JAVA_RPM_CONTENTS_2)
|
|
|
|
# optionally force using gas-preprocessor.pl for compatibility testing
|
|
AC_ARG_WITH([gas-preprocessor],
|
|
AC_HELP_STRING([--with-gas-preprocessor],
|
|
[Force using gas-preprocessor.pl on ARM.]))
|
|
if test "x${with_gas_preprocessor}" = "xyes"; then
|
|
case $host_os in
|
|
darwin*)
|
|
CCAS="gas-preprocessor.pl -fix-unreq $CC"
|
|
;;
|
|
*)
|
|
CCAS="gas-preprocessor.pl -no-fix-unreq $CC"
|
|
;;
|
|
esac
|
|
AC_SUBST([CCAS])
|
|
fi
|
|
|
|
# SIMD is optional
|
|
AC_ARG_WITH([simd],
|
|
AC_HELP_STRING([--without-simd], [Do not include SIMD extensions]))
|
|
if test "x$with_12bit" = "xyes"; then
|
|
with_simd=no
|
|
fi
|
|
if test "x${with_simd}" != "xno"; then
|
|
require_simd=no
|
|
if test "x${with_simd}" = "xyes"; then
|
|
require_simd=yes
|
|
fi
|
|
# Check if we're on a supported CPU
|
|
AC_MSG_CHECKING([if we have SIMD optimisations for cpu type])
|
|
case "$host_cpu" in
|
|
x86_64 | amd64)
|
|
AC_MSG_RESULT([yes (x86_64)])
|
|
AC_PROG_NASM
|
|
simd_arch=x86_64
|
|
;;
|
|
i*86 | x86 | ia32)
|
|
AC_MSG_RESULT([yes (i386)])
|
|
AC_PROG_NASM
|
|
simd_arch=i386
|
|
;;
|
|
arm*)
|
|
AC_MSG_RESULT([yes (arm)])
|
|
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
|
AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE(
|
|
[AC_MSG_RESULT([yes])
|
|
simd_arch=arm],
|
|
[AC_MSG_RESULT([no])
|
|
with_simd=no])
|
|
if test "x${with_simd}" = "xno"; then
|
|
if test "x${require_simd}" = "xyes"; then
|
|
AC_MSG_ERROR([SIMD support can't be enabled.])
|
|
else
|
|
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
|
fi
|
|
fi
|
|
;;
|
|
aarch64*)
|
|
AC_MSG_RESULT([yes (arm64)])
|
|
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
|
AC_CHECK_COMPATIBLE_ARM64_ASSEMBLER_IFELSE(
|
|
[AC_MSG_RESULT([yes])
|
|
simd_arch=aarch64],
|
|
[AC_MSG_RESULT([no])
|
|
with_simd=no])
|
|
if test "x${with_simd}" = "xno"; then
|
|
if test "x${require_simd}" = "xyes"; then
|
|
AC_MSG_ERROR([SIMD support can't be enabled.])
|
|
else
|
|
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
|
fi
|
|
fi
|
|
;;
|
|
mips*)
|
|
AC_MSG_RESULT([yes (mips)])
|
|
AC_MSG_CHECKING([if the assembler is GNU-compatible and can be used])
|
|
AC_CHECK_COMPATIBLE_MIPS_ASSEMBLER_IFELSE(
|
|
[AC_MSG_RESULT([yes])
|
|
simd_arch=mips],
|
|
[AC_MSG_RESULT([no])
|
|
with_simd=no])
|
|
if test "x${with_simd}" = "xno"; then
|
|
if test "x${require_simd}" = "xyes"; then
|
|
AC_MSG_ERROR([SIMD support can't be enabled.])
|
|
else
|
|
AC_MSG_WARN([SIMD support can't be enabled. Performance will suffer.])
|
|
fi
|
|
fi
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([no ("$host_cpu")])
|
|
with_simd=no;
|
|
if test "x${require_simd}" = "xyes"; then
|
|
AC_MSG_ERROR([SIMD support not available for this CPU.])
|
|
else
|
|
AC_MSG_WARN([SIMD support not available for this CPU. Performance will suffer.])
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if test "x${with_simd}" != "xno"; then
|
|
AC_DEFINE([WITH_SIMD], [1], [Use accelerated SIMD routines.])
|
|
fi
|
|
else
|
|
RPM_CONFIG_ARGS="$RPM_CONFIG_ARGS --without-simd"
|
|
fi
|
|
|
|
AM_CONDITIONAL([WITH_SIMD], [test "x$with_simd" != "xno"])
|
|
AM_CONDITIONAL([WITH_SSE_FLOAT_DCT], [test "x$simd_arch" = "xx86_64" -o "x$simd_arch" = "xi386"])
|
|
AM_CONDITIONAL([SIMD_I386], [test "x$simd_arch" = "xi386"])
|
|
AM_CONDITIONAL([SIMD_X86_64], [test "x$simd_arch" = "xx86_64"])
|
|
AM_CONDITIONAL([SIMD_ARM], [test "x$simd_arch" = "xarm"])
|
|
AM_CONDITIONAL([SIMD_ARM_64], [test "x$simd_arch" = "xaarch64"])
|
|
AM_CONDITIONAL([SIMD_MIPS], [test "x$simd_arch" = "xmips"])
|
|
AM_CONDITIONAL([X86_64], [test "x$host_cpu" = "xx86_64" -o "x$host_cpu" = "xamd64"])
|
|
AM_CONDITIONAL([WITH_TURBOJPEG], [test "x$with_turbojpeg" != "xno"])
|
|
|
|
AC_ARG_VAR(PKGNAME, [distribution package name (default: libmozjpeg)])
|
|
if test "x$PKGNAME" = "x"; then
|
|
PKGNAME=$PACKAGE_NAME
|
|
fi
|
|
AC_SUBST(PKGNAME)
|
|
|
|
case "$host_cpu" in
|
|
x86_64)
|
|
RPMARCH=x86_64
|
|
DEBARCH=amd64
|
|
;;
|
|
i*86 | x86 | ia32)
|
|
RPMARCH=i386
|
|
DEBARCH=i386
|
|
;;
|
|
esac
|
|
|
|
AC_SUBST(RPMARCH)
|
|
AC_SUBST(RPM_CONFIG_ARGS)
|
|
AC_SUBST(DEBARCH)
|
|
AC_SUBST(BUILD)
|
|
AC_DEFINE_UNQUOTED([BUILD], "$BUILD", [libjpeg-turbo build number])
|
|
|
|
# NOTE: autoheader automatically modifies the input file of the first
|
|
# invocation of AC_CONFIG_HEADERS, so we put config.h first to prevent
|
|
# jconfig.h.in from being clobbered. config.h is used only internally, whereas
|
|
# jconfig.h contains macros that are relevant to external programs (macros that
|
|
# specify which features were built into the library.)
|
|
AC_CONFIG_HEADERS([config.h])
|
|
AC_CONFIG_HEADERS([jconfig.h])
|
|
AC_CONFIG_HEADERS([jconfigint.h])
|
|
AC_CONFIG_FILES([pkgscripts/libmozjpeg.spec.tmpl:release/libmozjpeg.spec.in])
|
|
AC_CONFIG_FILES([pkgscripts/makecygwinpkg.tmpl:release/makecygwinpkg.in])
|
|
AC_CONFIG_FILES([pkgscripts/makedpkg.tmpl:release/makedpkg.in])
|
|
AC_CONFIG_FILES([pkgscripts/makemacpkg.tmpl:release/makemacpkg.in])
|
|
AC_CONFIG_FILES([pkgscripts/uninstall.tmpl:release/uninstall.in])
|
|
if test "x$with_turbojpeg" != "xno"; then
|
|
AC_CONFIG_FILES([tjbenchtest])
|
|
fi
|
|
if test "x$with_java" = "xyes"; then
|
|
AC_CONFIG_FILES([tjbenchtest.java])
|
|
AC_CONFIG_FILES([tjexampletest])
|
|
fi
|
|
AC_CONFIG_FILES([libjpeg.map])
|
|
AC_CONFIG_FILES([Makefile simd/Makefile])
|
|
AC_CONFIG_FILES([java/Makefile])
|
|
AC_CONFIG_FILES([md5/Makefile])
|
|
AC_OUTPUT
|