xref: /aosp_15_r20/external/webp/configure.ac (revision b2055c353e87c8814eb2b6b1b11112a1562253bd)
1*b2055c35SXin LiAC_INIT([libwebp], [1.4.0],
2*b2055c35SXin Li        [https://bugs.chromium.org/p/webp],,
3*b2055c35SXin Li        [https://developers.google.com/speed/webp])
4*b2055c35SXin LiAC_CANONICAL_HOST
5*b2055c35SXin LiAC_PREREQ([2.60])
6*b2055c35SXin LiAM_INIT_AUTOMAKE([-Wall foreign subdir-objects])
7*b2055c35SXin Li
8*b2055c35SXin Lidnl === automake >= 1.12 requires this for 'unusual archivers' support.
9*b2055c35SXin Lidnl === it must occur before LT_INIT (AC_PROG_LIBTOOL).
10*b2055c35SXin Lim4_ifdef([AM_PROG_AR], [AM_PROG_AR])
11*b2055c35SXin Li
12*b2055c35SXin Lidnl === AC_PROG_LIBTOOL is deprecated.
13*b2055c35SXin Lim4_ifdef([LT_INIT], [LT_INIT], [AC_PROG_LIBTOOL])
14*b2055c35SXin LiAC_PROG_SED
15*b2055c35SXin LiAM_PROG_CC_C_O
16*b2055c35SXin Li
17*b2055c35SXin Lidnl === Enable less verbose output when building.
18*b2055c35SXin Lim4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
19*b2055c35SXin Li
20*b2055c35SXin Lidnl == test endianness
21*b2055c35SXin LiAC_C_BIGENDIAN
22*b2055c35SXin Li
23*b2055c35SXin Lidnl === SET_IF_UNSET(shell_var, value)
24*b2055c35SXin Lidnl ===   Set the shell variable 'shell_var' to 'value' if it is unset.
25*b2055c35SXin LiAC_DEFUN([SET_IF_UNSET], [test "${$1+set}" = "set" || $1=$2])
26*b2055c35SXin Li
27*b2055c35SXin LiAC_ARG_ENABLE([everything],
28*b2055c35SXin Li              AS_HELP_STRING([--enable-everything],
29*b2055c35SXin Li                             [Enable all optional targets. These can still be
30*b2055c35SXin Li                              disabled with --disable-target]),
31*b2055c35SXin Li              [SET_IF_UNSET([enable_libsharpyuv], [$enableval])
32*b2055c35SXin Li               SET_IF_UNSET([enable_libwebpdecoder], [$enableval])
33*b2055c35SXin Li               SET_IF_UNSET([enable_libwebpdemux], [$enableval])
34*b2055c35SXin Li               SET_IF_UNSET([enable_libwebpextras], [$enableval])
35*b2055c35SXin Li               SET_IF_UNSET([enable_libwebpmux], [$enableval])])
36*b2055c35SXin Li
37*b2055c35SXin Lidnl === Check whether libwebpmux should be built
38*b2055c35SXin LiAC_MSG_CHECKING(whether libwebpmux is to be built)
39*b2055c35SXin LiAC_ARG_ENABLE([libwebpmux],
40*b2055c35SXin Li              AS_HELP_STRING([--disable-libwebpmux],
41*b2055c35SXin Li                             [Disable libwebpmux @<:@default=no@:>@]),
42*b2055c35SXin Li              [], [enable_libwebpmux=yes])
43*b2055c35SXin LiAC_MSG_RESULT(${enable_libwebpmux-no})
44*b2055c35SXin LiAM_CONDITIONAL([BUILD_MUX], [test "$enable_libwebpmux" = "yes"])
45*b2055c35SXin Li
46*b2055c35SXin Lidnl === Check whether libwebpdemux should be built
47*b2055c35SXin LiAC_MSG_CHECKING(whether libwebpdemux is to be built)
48*b2055c35SXin LiAC_ARG_ENABLE([libwebpdemux],
49*b2055c35SXin Li              AS_HELP_STRING([--disable-libwebpdemux],
50*b2055c35SXin Li                             [Disable libwebpdemux @<:@default=no@:>@]),
51*b2055c35SXin Li              [], [enable_libwebpdemux=yes])
52*b2055c35SXin LiAC_MSG_RESULT(${enable_libwebpdemux-no})
53*b2055c35SXin LiAM_CONDITIONAL([BUILD_DEMUX], [test "$enable_libwebpdemux" = "yes"])
54*b2055c35SXin Li
55*b2055c35SXin Lidnl === Check whether decoder library should be built.
56*b2055c35SXin LiAC_MSG_CHECKING(whether decoder library is to be built)
57*b2055c35SXin LiAC_ARG_ENABLE([libwebpdecoder],
58*b2055c35SXin Li              AS_HELP_STRING([--enable-libwebpdecoder],
59*b2055c35SXin Li                             [Build libwebpdecoder @<:@default=no@:>@]))
60*b2055c35SXin LiAC_MSG_RESULT(${enable_libwebpdecoder-no})
61*b2055c35SXin LiAM_CONDITIONAL([BUILD_LIBWEBPDECODER], [test "$enable_libwebpdecoder" = "yes"])
62*b2055c35SXin Li
63*b2055c35SXin Lidnl === Check whether libwebpextras should be built
64*b2055c35SXin LiAC_MSG_CHECKING(whether libwebpextras is to be built)
65*b2055c35SXin LiAC_ARG_ENABLE([libwebpextras],
66*b2055c35SXin Li              AS_HELP_STRING([--enable-libwebpextras],
67*b2055c35SXin Li                             [Build libwebpextras @<:@default=no@:>@]))
68*b2055c35SXin LiAC_MSG_RESULT(${enable_libwebpextras-no})
69*b2055c35SXin LiAM_CONDITIONAL([BUILD_EXTRAS], [test "$enable_libwebpextras" = "yes"])
70*b2055c35SXin Li
71*b2055c35SXin Lidnl === If --enable-asserts is not defined, define NDEBUG
72*b2055c35SXin Li
73*b2055c35SXin LiAC_MSG_CHECKING(whether asserts are enabled)
74*b2055c35SXin LiAC_ARG_ENABLE([asserts],
75*b2055c35SXin Li              AS_HELP_STRING([--enable-asserts],
76*b2055c35SXin Li                             [Enable assert checks]))
77*b2055c35SXin Liif test "x${enable_asserts-no}" = "xno"; then
78*b2055c35SXin Li  AM_CPPFLAGS="${AM_CPPFLAGS} -DNDEBUG"
79*b2055c35SXin Lifi
80*b2055c35SXin LiAC_MSG_RESULT(${enable_asserts-no})
81*b2055c35SXin LiAC_SUBST([AM_CPPFLAGS])
82*b2055c35SXin Li
83*b2055c35SXin LiAC_ARG_WITH([pkgconfigdir], AS_HELP_STRING([--with-pkgconfigdir=DIR],
84*b2055c35SXin Li            [Path to the pkgconfig directory @<:@LIBDIR/pkgconfig@:>@]),
85*b2055c35SXin Li            [pkgconfigdir="$withval"], [pkgconfigdir='${libdir}/pkgconfig'])
86*b2055c35SXin LiAC_SUBST([pkgconfigdir])
87*b2055c35SXin Li
88*b2055c35SXin Lidnl === TEST_AND_ADD_CFLAGS(var, flag)
89*b2055c35SXin Lidnl ===   Checks whether $CC supports 'flag' and adds it to 'var'
90*b2055c35SXin Lidnl ===   on success.
91*b2055c35SXin LiAC_DEFUN([TEST_AND_ADD_CFLAGS],
92*b2055c35SXin Li         [SAVED_CFLAGS="$CFLAGS"
93*b2055c35SXin Li          CFLAGS="-Werror $2"
94*b2055c35SXin Li          AC_MSG_CHECKING([whether $CC supports $2])
95*b2055c35SXin Li          dnl Note AC_LANG_PROGRAM([]) uses an old-style main definition.
96*b2055c35SXin Li          AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])],
97*b2055c35SXin Li                            [AC_MSG_RESULT([yes])]
98*b2055c35SXin Li                            dnl Simply append the variable avoiding a
99*b2055c35SXin Li                            dnl compatibility ifdef for AS_VAR_APPEND as this
100*b2055c35SXin Li                            dnl variable shouldn't grow all that large.
101*b2055c35SXin Li                            [$1="${$1} $2"],
102*b2055c35SXin Li                            [AC_MSG_RESULT([no])])
103*b2055c35SXin Li          CFLAGS="$SAVED_CFLAGS"])
104*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-fvisibility=hidden])
105*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wall])
106*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wconstant-conversion])
107*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wdeclaration-after-statement])
108*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wextra])
109*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wextra-semi-stmt])
110*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wfloat-conversion])
111*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wformat -Wformat-nonliteral])
112*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wformat -Wformat-security])
113*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wmissing-declarations])
114*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wmissing-prototypes])
115*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wold-style-definition])
116*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wparentheses-equality])
117*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wshadow])
118*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wshorten-64-to-32])
119*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wstrict-prototypes])
120*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wundef])
121*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wunreachable-code-aggressive])
122*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wunreachable-code])
123*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wunused-but-set-variable])
124*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wunused])
125*b2055c35SXin LiTEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wvla])
126*b2055c35SXin Li# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62040
127*b2055c35SXin Li# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61622
128*b2055c35SXin LiAS_IF([test "$GCC" = "yes" ], [
129*b2055c35SXin Li       gcc_version=`$CC -dumpversion`
130*b2055c35SXin Li       gcc_wht_bug=""
131*b2055c35SXin Li       case "$host_cpu" in
132*b2055c35SXin Li         aarch64|arm64)
133*b2055c35SXin Li          case "$gcc_version" in
134*b2055c35SXin Li            4.9|4.9.0|4.9.1) gcc_wht_bug=yes ;;
135*b2055c35SXin Li          esac
136*b2055c35SXin Li       esac
137*b2055c35SXin Li       AS_IF([test "$gcc_wht_bug" = "yes"], [
138*b2055c35SXin Li              TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-frename-registers])])])
139*b2055c35SXin Li# Use -flax-vector-conversions, if available, when building intrinsics with
140*b2055c35SXin Li# older versions of gcc. The flag appeared in 4.3.x, but if backported, and
141*b2055c35SXin Li# -fno-lax-vector-conversions is set, errors may occur with the intrinsics
142*b2055c35SXin Li# files along with the older system includes, e.g., emmintrin.h.
143*b2055c35SXin Li# Originally observed with cc (GCC) 4.2.1 20070831 patched [FreeBSD] (9.3).
144*b2055c35SXin Li# https://bugs.chromium.org/p/webp/issues/detail?id=274
145*b2055c35SXin LiAS_IF([test "$GCC" = "yes" ], [
146*b2055c35SXin Li       case "$host_cpu" in
147*b2055c35SXin Li         amd64|i?86|x86_64)
148*b2055c35SXin Li           AC_COMPILE_IFELSE(
149*b2055c35SXin Li             dnl only check for -flax-vector-conversions with older gcc, skip
150*b2055c35SXin Li             dnl clang as it reports itself as 4.2.1, but the flag isn't needed.
151*b2055c35SXin Li             [AC_LANG_SOURCE([#if !defined(__clang__) && defined(__GNUC__) && \
152*b2055c35SXin Li                                  ((__GNUC__ << 8) | __GNUC_MINOR__) < 0x403
153*b2055c35SXin Li                              #error old gcc
154*b2055c35SXin Li                              #endif
155*b2055c35SXin Li                              int main(void) { return 0; }
156*b2055c35SXin Li                             ])],,
157*b2055c35SXin Li              [TEST_AND_ADD_CFLAGS([INTRINSICS_CFLAGS],
158*b2055c35SXin Li                                   [-flax-vector-conversions])])
159*b2055c35SXin Li           ;;
160*b2055c35SXin Li       esac])
161*b2055c35SXin LiAC_SUBST([AM_CFLAGS])
162*b2055c35SXin Li
163*b2055c35SXin Lidnl === Check for machine specific flags
164*b2055c35SXin LiAC_ARG_ENABLE([sse4.1],
165*b2055c35SXin Li              AS_HELP_STRING([--disable-sse4.1],
166*b2055c35SXin Li                             [Disable detection of SSE4.1 support
167*b2055c35SXin Li                              @<:@default=auto@:>@]))
168*b2055c35SXin Li
169*b2055c35SXin LiAS_IF([test "x$enable_sse4_1" != "xno" -a "x$enable_sse2" != "xno"], [
170*b2055c35SXin Li  SSE41_FLAGS="$INTRINSICS_CFLAGS $SSE41_FLAGS"
171*b2055c35SXin Li  TEST_AND_ADD_CFLAGS([SSE41_FLAGS], [-msse4.1])
172*b2055c35SXin Li  AS_IF([test -n "$SSE41_FLAGS"], [
173*b2055c35SXin Li    SAVED_CFLAGS=$CFLAGS
174*b2055c35SXin Li    CFLAGS="$CFLAGS $SSE41_FLAGS"
175*b2055c35SXin Li    AC_CHECK_HEADER([smmintrin.h],
176*b2055c35SXin Li                    [AC_DEFINE(WEBP_HAVE_SSE41, [1],
177*b2055c35SXin Li                     [Set to 1 if SSE4.1 is supported])],
178*b2055c35SXin Li                    [SSE41_FLAGS=""])
179*b2055c35SXin Li    CFLAGS=$SAVED_CFLAGS])
180*b2055c35SXin Li  AC_SUBST([SSE41_FLAGS])])
181*b2055c35SXin Li
182*b2055c35SXin LiAC_ARG_ENABLE([sse2],
183*b2055c35SXin Li              AS_HELP_STRING([--disable-sse2],
184*b2055c35SXin Li                             [Disable detection of SSE2 support
185*b2055c35SXin Li                              @<:@default=auto@:>@]))
186*b2055c35SXin Li
187*b2055c35SXin LiAS_IF([test "x$enable_sse2" != "xno"], [
188*b2055c35SXin Li  SSE2_FLAGS="$INTRINSICS_CFLAGS $SSE2_FLAGS"
189*b2055c35SXin Li  TEST_AND_ADD_CFLAGS([SSE2_FLAGS], [-msse2])
190*b2055c35SXin Li  AS_IF([test -n "$SSE2_FLAGS"], [
191*b2055c35SXin Li    SAVED_CFLAGS=$CFLAGS
192*b2055c35SXin Li    CFLAGS="$CFLAGS $SSE2_FLAGS"
193*b2055c35SXin Li    AC_CHECK_HEADER([emmintrin.h],
194*b2055c35SXin Li                    [AC_DEFINE(WEBP_HAVE_SSE2, [1],
195*b2055c35SXin Li                     [Set to 1 if SSE2 is supported])],
196*b2055c35SXin Li                    [SSE2_FLAGS=""])
197*b2055c35SXin Li    CFLAGS=$SAVED_CFLAGS])
198*b2055c35SXin Li  AC_SUBST([SSE2_FLAGS])])
199*b2055c35SXin Li
200*b2055c35SXin LiAC_ARG_ENABLE([neon],
201*b2055c35SXin Li              AS_HELP_STRING([--disable-neon],
202*b2055c35SXin Li                             [Disable detection of NEON support
203*b2055c35SXin Li                              @<:@default=auto@:>@]))
204*b2055c35SXin Li
205*b2055c35SXin LiAC_ARG_ENABLE([neon_rtcd],
206*b2055c35SXin Li              AS_HELP_STRING([--disable-neon-rtcd],
207*b2055c35SXin Li                             [Disable runtime detection of NEON support via
208*b2055c35SXin Li                              /proc/cpuinfo on Linux hosts
209*b2055c35SXin Li                              @<:@default=auto@:>@]))
210*b2055c35SXin Li# For ARM(7) hosts:
211*b2055c35SXin Li# Both NEON flags unset and NEON support detected = build all modules with NEON
212*b2055c35SXin Li# NEON detected with the use of -mfpu=neon = build only NEON modules with NEON
213*b2055c35SXin LiAS_IF([test "x$enable_neon" != "xno"], [
214*b2055c35SXin Li  case "$host_cpu" in
215*b2055c35SXin Li    arm|armv7*)
216*b2055c35SXin Li      # Test for NEON support without flags before falling back to -mfpu=neon
217*b2055c35SXin Li      for flag in '' '-mfpu=neon'; do
218*b2055c35SXin Li        LOCAL_NEON_FLAGS="$INTRINSICS_CFLAGS $NEON_FLAGS"
219*b2055c35SXin Li        TEST_AND_ADD_CFLAGS([LOCAL_NEON_FLAGS], [$flag])
220*b2055c35SXin Li        SAVED_CFLAGS=$CFLAGS
221*b2055c35SXin Li        CFLAGS="$CFLAGS $LOCAL_NEON_FLAGS"
222*b2055c35SXin Li
223*b2055c35SXin Li        dnl Note AC_LANG_PROGRAM([]) uses an old-style main definition.
224*b2055c35SXin Li        AC_COMPILE_IFELSE([AC_LANG_SOURCE([
225*b2055c35SXin Li          #include <arm_neon.h>
226*b2055c35SXin Li          int main(void) {
227*b2055c35SXin Li            int8x8_t v = vdup_n_s8(0);
228*b2055c35SXin Li            (void)v;
229*b2055c35SXin Li            return 0;
230*b2055c35SXin Li          }])],
231*b2055c35SXin Li          [NEON_FLAGS="$(echo $LOCAL_NEON_FLAGS | $SED 's/^ *//')"
232*b2055c35SXin Li           AS_IF([test -n "$NEON_FLAGS"], [
233*b2055c35SXin Li             AS_IF([test "${host_os%%-*}" = "linux" -o \
234*b2055c35SXin Li                         "x$enable_neon_rtcd" = "xno"], [
235*b2055c35SXin Li               CFLAGS=$SAVED_CFLAGS
236*b2055c35SXin Li               AC_DEFINE(WEBP_HAVE_NEON, [1], [Set to 1 if NEON is supported])
237*b2055c35SXin Li               break
238*b2055c35SXin Li             ],[
239*b2055c35SXin Li               AC_MSG_WARN(m4_normalize([NEON runtime cpu-detection is
240*b2055c35SXin Li                                         unavailable for ${host_os%%-*}. Force
241*b2055c35SXin Li                                         with CFLAGS=-mfpu=neon or
242*b2055c35SXin Li                                         --disable-neon-rtcd.]))
243*b2055c35SXin Li               enable_neon_rtcd=no
244*b2055c35SXin Li               NEON_FLAGS=""
245*b2055c35SXin Li             ])
246*b2055c35SXin Li           ],[
247*b2055c35SXin Li             CFLAGS=$SAVED_CFLAGS
248*b2055c35SXin Li             AC_DEFINE(WEBP_HAVE_NEON, [1], [Set to 1 if NEON is supported])
249*b2055c35SXin Li             break
250*b2055c35SXin Li           ])])
251*b2055c35SXin Li        CFLAGS=$SAVED_CFLAGS
252*b2055c35SXin Li      done
253*b2055c35SXin Li
254*b2055c35SXin Li      AS_IF([test -n "$NEON_FLAGS"], [
255*b2055c35SXin Li        # If NEON is available and rtcd is disabled apply NEON_FLAGS globally.
256*b2055c35SXin Li        AS_IF([test "x$enable_neon_rtcd" = "xno"], [
257*b2055c35SXin Li          AM_CFLAGS="$AM_CFLAGS $NEON_FLAGS"
258*b2055c35SXin Li          NEON_FLAGS=""],
259*b2055c35SXin Li          [AC_DEFINE(WEBP_HAVE_NEON_RTCD, [1],
260*b2055c35SXin Li                     [Set to 1 if runtime detection of NEON is enabled])])])
261*b2055c35SXin Li
262*b2055c35SXin Li      case "$host_os" in
263*b2055c35SXin Li        *android*) AC_CHECK_HEADERS([cpu-features.h]) ;;
264*b2055c35SXin Li      esac
265*b2055c35SXin Li      ;;
266*b2055c35SXin Li    aarch64*|arm64*)
267*b2055c35SXin Li      AC_DEFINE(WEBP_HAVE_NEON, [1], [Set to 1 if NEON is supported])
268*b2055c35SXin Li      ;;
269*b2055c35SXin Li  esac
270*b2055c35SXin Li  AC_SUBST([NEON_FLAGS])])
271*b2055c35SXin Li
272*b2055c35SXin Lidnl === CLEAR_LIBVARS([var_pfx])
273*b2055c35SXin Lidnl ===   Clears <var_pfx>_{INCLUDES,LIBS}.
274*b2055c35SXin LiAC_DEFUN([CLEAR_LIBVARS], [$1_INCLUDES=""; $1_LIBS=""])
275*b2055c35SXin Li
276*b2055c35SXin Lidnl === WITHLIB_OPTION([opt_pfx], [outvar_pfx])
277*b2055c35SXin Lidnl ===   Defines --with-<opt_pfx>{include,lib}dir options which set
278*b2055c35SXin Lidnl ===   the variables <outvar_pfx>_{INCLUDES,LIBS}.
279*b2055c35SXin LiAC_DEFUN([WITHLIB_OPTION],
280*b2055c35SXin Li  [AC_ARG_WITH([$1includedir],
281*b2055c35SXin Li               AS_HELP_STRING([--with-$1includedir=DIR],
282*b2055c35SXin Li                              [use $2 includes from DIR]),
283*b2055c35SXin Li               $2_INCLUDES="-I$withval")
284*b2055c35SXin Li   AC_ARG_WITH([$1libdir],
285*b2055c35SXin Li               AS_HELP_STRING([--with-$1libdir=DIR],
286*b2055c35SXin Li                              [use $2 libraries from DIR]),
287*b2055c35SXin Li               [$2_LIBS="-L$withval"])])
288*b2055c35SXin Li
289*b2055c35SXin Lidnl === LIBCHECK_PROLOGUE([var_pfx])
290*b2055c35SXin Lidnl ===   Caches the current values of CPPFLAGS/LIBS in SAVED_* then
291*b2055c35SXin Lidnl ===   prepends the current values with <var_pfx>_{INCLUDES,LIBS}.
292*b2055c35SXin LiAC_DEFUN([LIBCHECK_PROLOGUE],
293*b2055c35SXin Li         [SAVED_CPPFLAGS=$CPPFLAGS
294*b2055c35SXin Li          SAVED_LIBS=$LIBS
295*b2055c35SXin Li          CPPFLAGS="$$1_INCLUDES $CPPFLAGS"
296*b2055c35SXin Li          LIBS="$$1_LIBS $LIBS"])
297*b2055c35SXin Li
298*b2055c35SXin Lidnl === LIBCHECK_EPILOGUE([var_pfx])
299*b2055c35SXin Lidnl ===   Restores the values of CPPFLAGS/LIBS from SAVED_* and exports
300*b2055c35SXin Lidnl ===   <var_pfx>_{INCLUDES,LIBS} with AC_SUBST.
301*b2055c35SXin LiAC_DEFUN([LIBCHECK_EPILOGUE],
302*b2055c35SXin Li         [AC_SUBST($1_LIBS)
303*b2055c35SXin Li          AC_SUBST($1_INCLUDES)
304*b2055c35SXin Li          CPPFLAGS=$SAVED_CPPFLAGS
305*b2055c35SXin Li          LIBS=$SAVED_LIBS])
306*b2055c35SXin Li
307*b2055c35SXin Lidnl === Check for gcc builtins
308*b2055c35SXin Li
309*b2055c35SXin Lidnl === CHECK_FOR_BUILTIN([builtin], [param], [define])
310*b2055c35SXin Lidnl ===   links a C AC_LANG_PROGRAM, with <builtin>(<param>)
311*b2055c35SXin Lidnl ===   AC_DEFINE'ing <define> if successful.
312*b2055c35SXin LiAC_DEFUN([CHECK_FOR_BUILTIN],
313*b2055c35SXin Li         [AC_LANG_PUSH([C])
314*b2055c35SXin Li          AC_MSG_CHECKING([for $1])
315*b2055c35SXin Li          AC_LINK_IFELSE([AC_LANG_PROGRAM([], [(void)$1($2)])],
316*b2055c35SXin Li                         [AC_MSG_RESULT([yes])
317*b2055c35SXin Li                          AC_DEFINE([$3], [1],
318*b2055c35SXin Li                                    [Set to 1 if $1 is available])],
319*b2055c35SXin Li                         [AC_MSG_RESULT([no])]),
320*b2055c35SXin Li          AC_LANG_POP])
321*b2055c35SXin Li
322*b2055c35SXin Lidnl AC_CHECK_FUNC doesn't work with builtin's.
323*b2055c35SXin LiCHECK_FOR_BUILTIN([__builtin_bswap16], [1u << 15], [HAVE_BUILTIN_BSWAP16])
324*b2055c35SXin LiCHECK_FOR_BUILTIN([__builtin_bswap32], [1u << 31], [HAVE_BUILTIN_BSWAP32])
325*b2055c35SXin LiCHECK_FOR_BUILTIN([__builtin_bswap64], [1ull << 63], [HAVE_BUILTIN_BSWAP64])
326*b2055c35SXin Li
327*b2055c35SXin Lidnl === Check for pthread support
328*b2055c35SXin LiAC_ARG_ENABLE([threading],
329*b2055c35SXin Li              AS_HELP_STRING([--disable-threading],
330*b2055c35SXin Li                             [Disable detection of thread support]),,
331*b2055c35SXin Li              [enable_threading=yes])
332*b2055c35SXin Liif test "$enable_threading" = "yes"; then
333*b2055c35SXin Li  AC_MSG_NOTICE([checking for threading support...])
334*b2055c35SXin Li  AX_PTHREAD([AC_DEFINE([WEBP_USE_THREAD], [1],
335*b2055c35SXin Li                        [Undefine this to disable thread support.])
336*b2055c35SXin Li              LIBS="$PTHREAD_LIBS $LIBS"
337*b2055c35SXin Li              CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
338*b2055c35SXin Li              CC="$PTHREAD_CC"
339*b2055c35SXin Li             ],
340*b2055c35SXin Li             [AC_CHECK_FUNC([_beginthreadex],
341*b2055c35SXin Li                            [AC_DEFINE([WEBP_USE_THREAD], [1],
342*b2055c35SXin Li                                       [Undefine this to disable thread
343*b2055c35SXin Li                                        support.])],
344*b2055c35SXin Li                            [enable_threading=no])])
345*b2055c35SXin Lifi
346*b2055c35SXin LiAC_MSG_NOTICE([checking if threading is enabled... ${enable_threading-no}])
347*b2055c35SXin Li
348*b2055c35SXin Lidnl === check for OpenGL/GLUT support ===
349*b2055c35SXin Li
350*b2055c35SXin LiAC_ARG_ENABLE([gl], AS_HELP_STRING([--disable-gl],
351*b2055c35SXin Li                                   [Disable detection of OpenGL support
352*b2055c35SXin Li                                    @<:@default=auto@:>@]))
353*b2055c35SXin LiAS_IF([test "x$enable_gl" != "xno"], [
354*b2055c35SXin Li  CLEAR_LIBVARS([GL])
355*b2055c35SXin Li  WITHLIB_OPTION([gl], [GL])
356*b2055c35SXin Li
357*b2055c35SXin Li  LIBCHECK_PROLOGUE([GL])
358*b2055c35SXin Li
359*b2055c35SXin Li  glut_cflags="none"
360*b2055c35SXin Li  glut_ldflags="none"
361*b2055c35SXin Li  case $host_os in
362*b2055c35SXin Li    darwin*)
363*b2055c35SXin Li      # Special case for OSX builds. Append these to give the user a chance to
364*b2055c35SXin Li      # override with --with-gl*
365*b2055c35SXin Li      glut_cflags="$glut_cflags|-framework GLUT -framework OpenGL"
366*b2055c35SXin Li      glut_ldflags="$glut_ldflags|-framework GLUT -framework OpenGL"
367*b2055c35SXin Li      # quiet deprecation warnings for glut
368*b2055c35SXin Li      TEST_AND_ADD_CFLAGS([AM_CFLAGS], [-Wno-deprecated-declarations])
369*b2055c35SXin Li      ;;
370*b2055c35SXin Li  esac
371*b2055c35SXin Li
372*b2055c35SXin Li  GLUT_SAVED_CPPFLAGS="$CPPFLAGS"
373*b2055c35SXin Li  SAVED_IFS="$IFS"
374*b2055c35SXin Li  IFS="|"
375*b2055c35SXin Li  for flag in $glut_cflags; do
376*b2055c35SXin Li    # restore IFS immediately as the autoconf macros may need the default.
377*b2055c35SXin Li    IFS="$SAVED_IFS"
378*b2055c35SXin Li    unset ac_cv_header_GL_glut_h
379*b2055c35SXin Li    unset ac_cv_header_OpenGL_glut_h
380*b2055c35SXin Li
381*b2055c35SXin Li    case $flag in
382*b2055c35SXin Li      none) ;;
383*b2055c35SXin Li      *) CPPFLAGS="$flag $CPPFLAGS";;
384*b2055c35SXin Li    esac
385*b2055c35SXin Li    AC_CHECK_HEADERS([GL/glut.h GLUT/glut.h OpenGL/glut.h],
386*b2055c35SXin Li                     [glut_headers=yes;
387*b2055c35SXin Li                      test "$flag" = "none" || GL_INCLUDES="$CPPFLAGS";
388*b2055c35SXin Li                      break])
389*b2055c35SXin Li    CPPFLAGS="$GLUT_SAVED_CPPFLAGS"
390*b2055c35SXin Li    test "$glut_headers" = "yes" && break
391*b2055c35SXin Li  done
392*b2055c35SXin Li  IFS="$SAVED_IFS"
393*b2055c35SXin Li
394*b2055c35SXin Li  if test "$glut_headers" = "yes"; then
395*b2055c35SXin Li    AC_LANG_PUSH([C])
396*b2055c35SXin Li    GLUT_SAVED_LDFLAGS="$LDFLAGS"
397*b2055c35SXin Li    SAVED_IFS="$IFS"
398*b2055c35SXin Li    IFS="|"
399*b2055c35SXin Li    for flag in $glut_ldflags; do
400*b2055c35SXin Li      # restore IFS immediately as the autoconf macros may need the default.
401*b2055c35SXin Li      IFS="$SAVED_IFS"
402*b2055c35SXin Li      unset ac_cv_search_glBegin
403*b2055c35SXin Li
404*b2055c35SXin Li      case $flag in
405*b2055c35SXin Li        none) ;;
406*b2055c35SXin Li        *) LDFLAGS="$flag $LDFLAGS";;
407*b2055c35SXin Li      esac
408*b2055c35SXin Li
409*b2055c35SXin Li      # find libGL
410*b2055c35SXin Li      GL_SAVED_LIBS="$LIBS"
411*b2055c35SXin Li      AC_SEARCH_LIBS([glBegin], [GL OpenGL opengl32])
412*b2055c35SXin Li      LIBS="$GL_SAVED_LIBS"
413*b2055c35SXin Li
414*b2055c35SXin Li      # A direct link to libGL may not be necessary on e.g., linux.
415*b2055c35SXin Li      GLUT_SAVED_LIBS="$LIBS"
416*b2055c35SXin Li      for lib in "" "-lglut" "-lglut $ac_cv_search_glBegin"; do
417*b2055c35SXin Li        LIBS="$lib"
418*b2055c35SXin Li        AC_LINK_IFELSE(
419*b2055c35SXin Li          [AC_LANG_PROGRAM([
420*b2055c35SXin Li             #ifdef __cplusplus
421*b2055c35SXin Li             # define EXTERN_C extern "C"
422*b2055c35SXin Li             #else
423*b2055c35SXin Li             # define EXTERN_C
424*b2055c35SXin Li             #endif
425*b2055c35SXin Li             EXTERN_C char glOrtho();
426*b2055c35SXin Li             EXTERN_C char glutMainLoop();
427*b2055c35SXin Li            ],[
428*b2055c35SXin Li             glOrtho();
429*b2055c35SXin Li             glutMainLoop();
430*b2055c35SXin Li            ])
431*b2055c35SXin Li          ],
432*b2055c35SXin Li          AC_DEFINE(WEBP_HAVE_GL, [1],
433*b2055c35SXin Li                    [Set to 1 if OpenGL is supported])
434*b2055c35SXin Li          [glut_support=yes], []
435*b2055c35SXin Li        )
436*b2055c35SXin Li        if test "$glut_support" = "yes"; then
437*b2055c35SXin Li          GL_LIBS="$LDFLAGS $lib"
438*b2055c35SXin Li          break
439*b2055c35SXin Li        fi
440*b2055c35SXin Li      done
441*b2055c35SXin Li      LIBS="$GLUT_SAVED_LIBS"
442*b2055c35SXin Li      LDFLAGS="$GLUT_SAVED_LDFLAGS"
443*b2055c35SXin Li      test "$glut_support" = "yes" && break
444*b2055c35SXin Li    done
445*b2055c35SXin Li    IFS="$SAVED_IFS"
446*b2055c35SXin Li    AC_LANG_POP
447*b2055c35SXin Li  fi
448*b2055c35SXin Li
449*b2055c35SXin Li  LIBCHECK_EPILOGUE([GL])
450*b2055c35SXin Li
451*b2055c35SXin Li  if test "$glut_support" = "yes" -a "$enable_libwebpdemux" = "yes"; then
452*b2055c35SXin Li    build_vwebp=yes
453*b2055c35SXin Li  else
454*b2055c35SXin Li    AC_MSG_NOTICE(
455*b2055c35SXin Li      m4_normalize([Not building vwebp.
456*b2055c35SXin Li                    OpenGL libraries and --enable-libwebpdemux are required.]))
457*b2055c35SXin Li  fi
458*b2055c35SXin Li])
459*b2055c35SXin LiAM_CONDITIONAL([BUILD_VWEBP], [test "$build_vwebp" = "yes"])
460*b2055c35SXin Li
461*b2055c35SXin Lidnl === check for SDL support ===
462*b2055c35SXin Li
463*b2055c35SXin LiAC_ARG_ENABLE([sdl],
464*b2055c35SXin Li              AS_HELP_STRING([--disable-sdl],
465*b2055c35SXin Li                             [Disable detection of SDL support
466*b2055c35SXin Li                              @<:@default=auto@:>@]))
467*b2055c35SXin LiAS_IF([test "x$enable_sdl" != "xno"], [
468*b2055c35SXin Li  CLEAR_LIBVARS([SDL])
469*b2055c35SXin Li  AC_PATH_PROGS([LIBSDL_CONFIG], [sdl2-config])
470*b2055c35SXin Li  if test -n "$LIBSDL_CONFIG"; then
471*b2055c35SXin Li    SDL_INCLUDES=`$LIBSDL_CONFIG --cflags`
472*b2055c35SXin Li    SDL_LIBS="`$LIBSDL_CONFIG --libs`"
473*b2055c35SXin Li  fi
474*b2055c35SXin Li
475*b2055c35SXin Li  WITHLIB_OPTION([sdl], [SDL])
476*b2055c35SXin Li
477*b2055c35SXin Li  sdl_header="no"
478*b2055c35SXin Li  LIBCHECK_PROLOGUE([SDL])
479*b2055c35SXin Li  AC_CHECK_HEADER([SDL2/SDL.h], [sdl_header="SDL2/SDL.h"],
480*b2055c35SXin Li                  [AC_MSG_WARN(SDL2 library not available - no SDL.h)])
481*b2055c35SXin Li  if test x"$sdl_header" != "xno"; then
482*b2055c35SXin Li    AC_LANG_PUSH(C)
483*b2055c35SXin Li    SDL_SAVED_LIBS="$LIBS"
484*b2055c35SXin Li    for lib in "" "-lSDL2" "-lSDL2main -lSDL2"; do
485*b2055c35SXin Li      LIBS="$SDL_SAVED_LIBS $lib"
486*b2055c35SXin Li      # Perform a full link to ensure SDL_main is resolved if needed.
487*b2055c35SXin Li      AC_LINK_IFELSE(
488*b2055c35SXin Li        [AC_LANG_SOURCE([
489*b2055c35SXin Li           #include <$sdl_header>
490*b2055c35SXin Li           int main(int argc, char** argv) {
491*b2055c35SXin Li             SDL_Init(0);
492*b2055c35SXin Li             return 0;
493*b2055c35SXin Li           }])],
494*b2055c35SXin Li        [SDL_LIBS="$LDFLAGS $LIBS"
495*b2055c35SXin Li         SDL_INCLUDES="$SDL_INCLUDES -DWEBP_HAVE_SDL"
496*b2055c35SXin Li         AC_DEFINE(WEBP_HAVE_SDL, [1],
497*b2055c35SXin Li                   [Set to 1 if SDL library is installed])
498*b2055c35SXin Li         sdl_support=yes]
499*b2055c35SXin Li      )
500*b2055c35SXin Li      if test x"$sdl_support" = "xyes"; then
501*b2055c35SXin Li        break
502*b2055c35SXin Li      fi
503*b2055c35SXin Li    done
504*b2055c35SXin Li    # LIBS is restored by LIBCHECK_EPILOGUE
505*b2055c35SXin Li    AC_LANG_POP
506*b2055c35SXin Li    if test x"$sdl_header" = "xSDL.h"; then
507*b2055c35SXin Li      SDL_INCLUDES="$SDL_INCLUDES -DWEBP_HAVE_JUST_SDL_H"
508*b2055c35SXin Li    fi
509*b2055c35SXin Li  fi
510*b2055c35SXin Li  LIBCHECK_EPILOGUE([SDL])
511*b2055c35SXin Li
512*b2055c35SXin Li  if test x"$sdl_support" = "xyes"; then
513*b2055c35SXin Li    build_vwebp_sdl=yes
514*b2055c35SXin Li  else
515*b2055c35SXin Li    AC_MSG_NOTICE([Not building vwebp-sdl. SDL library is required.])
516*b2055c35SXin Li  fi
517*b2055c35SXin Li])
518*b2055c35SXin Li
519*b2055c35SXin LiAM_CONDITIONAL([BUILD_VWEBP_SDL], [test "$build_vwebp_sdl" = "yes"])
520*b2055c35SXin Li
521*b2055c35SXin Lidnl === check for PNG support ===
522*b2055c35SXin Li
523*b2055c35SXin LiAC_ARG_ENABLE([png], AS_HELP_STRING([--disable-png],
524*b2055c35SXin Li                                    [Disable detection of PNG format support
525*b2055c35SXin Li                                     @<:@default=auto@:>@]))
526*b2055c35SXin LiAS_IF([test "x$enable_png" != "xno"], [
527*b2055c35SXin Li  CLEAR_LIBVARS([PNG])
528*b2055c35SXin Li  AC_PATH_PROGS([LIBPNG_CONFIG],
529*b2055c35SXin Li                [libpng-config libpng16-config libpng15-config libpng14-config \
530*b2055c35SXin Li                 libpng12-config])
531*b2055c35SXin Li  if test -n "$LIBPNG_CONFIG"; then
532*b2055c35SXin Li    PNG_INCLUDES=`$LIBPNG_CONFIG --cflags`
533*b2055c35SXin Li    PNG_LIBS="`$LIBPNG_CONFIG --ldflags`"
534*b2055c35SXin Li  fi
535*b2055c35SXin Li
536*b2055c35SXin Li  WITHLIB_OPTION([png], [PNG])
537*b2055c35SXin Li
538*b2055c35SXin Li  LIBCHECK_PROLOGUE([PNG])
539*b2055c35SXin Li  AC_CHECK_HEADER(png.h,
540*b2055c35SXin Li    AC_SEARCH_LIBS(png_get_libpng_ver, [png],
541*b2055c35SXin Li                   [test "$ac_cv_search_png_get_libpng_ver" = "none required" \
542*b2055c35SXin Li                      || PNG_LIBS="$PNG_LIBS $ac_cv_search_png_get_libpng_ver"
543*b2055c35SXin Li                    PNG_INCLUDES="$PNG_INCLUDES -DWEBP_HAVE_PNG"
544*b2055c35SXin Li                    AC_DEFINE(WEBP_HAVE_PNG, [1],
545*b2055c35SXin Li                              [Set to 1 if PNG library is installed])
546*b2055c35SXin Li                    png_support=yes
547*b2055c35SXin Li                   ],
548*b2055c35SXin Li                   [AC_MSG_WARN(Optional png library not found)
549*b2055c35SXin Li                    PNG_LIBS=""
550*b2055c35SXin Li                    PNG_INCLUDES=""
551*b2055c35SXin Li                   ],
552*b2055c35SXin Li                   [$MATH_LIBS]),
553*b2055c35SXin Li    [AC_MSG_WARN(png library not available - no png.h)
554*b2055c35SXin Li     PNG_LIBS=""
555*b2055c35SXin Li     PNG_INCLUDES=""
556*b2055c35SXin Li    ],
557*b2055c35SXin Li  )
558*b2055c35SXin Li  LIBCHECK_EPILOGUE([PNG])
559*b2055c35SXin Li])
560*b2055c35SXin Li
561*b2055c35SXin Lidnl === check for JPEG support ===
562*b2055c35SXin Li
563*b2055c35SXin LiAC_ARG_ENABLE([jpeg],
564*b2055c35SXin Li              AS_HELP_STRING([--disable-jpeg],
565*b2055c35SXin Li                             [Disable detection of JPEG format support
566*b2055c35SXin Li                              @<:@default=auto@:>@]))
567*b2055c35SXin LiAS_IF([test "x$enable_jpeg" != "xno"], [
568*b2055c35SXin Li  CLEAR_LIBVARS([JPEG])
569*b2055c35SXin Li  WITHLIB_OPTION([jpeg], [JPEG])
570*b2055c35SXin Li
571*b2055c35SXin Li  LIBCHECK_PROLOGUE([JPEG])
572*b2055c35SXin Li  AC_CHECK_HEADER(jpeglib.h,
573*b2055c35SXin Li    AC_CHECK_LIB(jpeg, jpeg_set_defaults,
574*b2055c35SXin Li                 [JPEG_LIBS="$JPEG_LIBS -ljpeg"
575*b2055c35SXin Li                  JPEG_INCLUDES="$JPEG_INCLUDES -DWEBP_HAVE_JPEG"
576*b2055c35SXin Li                  AC_DEFINE(WEBP_HAVE_JPEG, [1],
577*b2055c35SXin Li                            [Set to 1 if JPEG library is installed])
578*b2055c35SXin Li                  jpeg_support=yes
579*b2055c35SXin Li                 ],
580*b2055c35SXin Li                 AC_MSG_WARN(Optional jpeg library not found),
581*b2055c35SXin Li                 [$MATH_LIBS]),
582*b2055c35SXin Li    AC_MSG_WARN(jpeg library not available - no jpeglib.h)
583*b2055c35SXin Li  )
584*b2055c35SXin Li  LIBCHECK_EPILOGUE([JPEG])
585*b2055c35SXin Li])
586*b2055c35SXin Li
587*b2055c35SXin Lidnl === check for TIFF support ===
588*b2055c35SXin Li
589*b2055c35SXin LiAC_ARG_ENABLE([tiff],
590*b2055c35SXin Li              AS_HELP_STRING([--disable-tiff],
591*b2055c35SXin Li                             [Disable detection of TIFF format support
592*b2055c35SXin Li                              @<:@default=auto@:>@]))
593*b2055c35SXin LiAS_IF([test "x$enable_tiff" != "xno"], [
594*b2055c35SXin Li  CLEAR_LIBVARS([TIFF])
595*b2055c35SXin Li  WITHLIB_OPTION([tiff], [TIFF])
596*b2055c35SXin Li
597*b2055c35SXin Li  LIBCHECK_PROLOGUE([TIFF])
598*b2055c35SXin Li  AC_CHECK_HEADER(tiffio.h,
599*b2055c35SXin Li    AC_CHECK_LIB(tiff, TIFFGetVersion,
600*b2055c35SXin Li                 [TIFF_LIBS="$TIFF_LIBS -ltiff"
601*b2055c35SXin Li                  TIFF_INCLUDES="$TIFF_INCLUDES -DWEBP_HAVE_TIFF"
602*b2055c35SXin Li                  AC_DEFINE(WEBP_HAVE_TIFF, [1],
603*b2055c35SXin Li                            [Set to 1 if TIFF library is installed])
604*b2055c35SXin Li                  tiff_support=yes
605*b2055c35SXin Li                 ],
606*b2055c35SXin Li                 AC_MSG_WARN(Optional tiff library not found),
607*b2055c35SXin Li                 [$MATH_LIBS]),
608*b2055c35SXin Li    AC_MSG_WARN(tiff library not available - no tiffio.h)
609*b2055c35SXin Li  )
610*b2055c35SXin Li  LIBCHECK_EPILOGUE([TIFF])
611*b2055c35SXin Li])
612*b2055c35SXin Li
613*b2055c35SXin Lidnl === check for GIF support ===
614*b2055c35SXin Li
615*b2055c35SXin LiAC_ARG_ENABLE([gif], AS_HELP_STRING([--disable-gif],
616*b2055c35SXin Li                                    [Disable detection of GIF format support
617*b2055c35SXin Li                                     @<:@default=auto@:>@]))
618*b2055c35SXin LiAS_IF([test "x$enable_gif" != "xno"], [
619*b2055c35SXin Li  CLEAR_LIBVARS([GIF])
620*b2055c35SXin Li  WITHLIB_OPTION([gif], [GIF])
621*b2055c35SXin Li
622*b2055c35SXin Li  LIBCHECK_PROLOGUE([GIF])
623*b2055c35SXin Li  AC_CHECK_HEADER(gif_lib.h,
624*b2055c35SXin Li    AC_CHECK_LIB([gif], [DGifOpenFileHandle],
625*b2055c35SXin Li                 [GIF_LIBS="$GIF_LIBS -lgif"
626*b2055c35SXin Li                  AC_DEFINE(WEBP_HAVE_GIF, [1],
627*b2055c35SXin Li                            [Set to 1 if GIF library is installed])
628*b2055c35SXin Li                  gif_support=yes
629*b2055c35SXin Li                 ],
630*b2055c35SXin Li                 AC_MSG_WARN(Optional gif library not found),
631*b2055c35SXin Li                 [$MATH_LIBS]),
632*b2055c35SXin Li    AC_MSG_WARN(gif library not available - no gif_lib.h)
633*b2055c35SXin Li  )
634*b2055c35SXin Li  LIBCHECK_EPILOGUE([GIF])
635*b2055c35SXin Li
636*b2055c35SXin Li  if test "$gif_support" = "yes" -a \
637*b2055c35SXin Li          "$enable_libwebpdemux" = "yes"; then
638*b2055c35SXin Li    build_anim_diff=yes
639*b2055c35SXin Li  else
640*b2055c35SXin Li    AC_MSG_NOTICE(
641*b2055c35SXin Li      [Not building anim_diff. libgif and --enable-libwebpdemux are required.])
642*b2055c35SXin Li  fi
643*b2055c35SXin Li
644*b2055c35SXin Li  if test "$gif_support" = "yes" -a \
645*b2055c35SXin Li          "$enable_libwebpmux" = "yes"; then
646*b2055c35SXin Li    build_gif2webp=yes
647*b2055c35SXin Li  else
648*b2055c35SXin Li    AC_MSG_NOTICE(
649*b2055c35SXin Li      [Not building gif2webp. libgif and --enable-libwebpmux are required.])
650*b2055c35SXin Li  fi
651*b2055c35SXin Li])
652*b2055c35SXin LiAM_CONDITIONAL([BUILD_ANIMDIFF], [test "${build_anim_diff}" = "yes"])
653*b2055c35SXin LiAM_CONDITIONAL([BUILD_GIF2WEBP], [test "${build_gif2webp}" = "yes"])
654*b2055c35SXin Li
655*b2055c35SXin Liif test "$enable_libwebpdemux" = "yes" -a "$enable_libwebpmux" = "yes"; then
656*b2055c35SXin Li  build_img2webp=yes
657*b2055c35SXin Lielse
658*b2055c35SXin Li  AC_MSG_NOTICE(
659*b2055c35SXin Li    m4_normalize([Not building img2webp.
660*b2055c35SXin Li                  --enable-libwebpdemux & --enable-libwebpmux are required.]))
661*b2055c35SXin Lifi
662*b2055c35SXin LiAM_CONDITIONAL([BUILD_IMG2WEBP], [test "${build_img2webp}" = "yes"])
663*b2055c35SXin Li
664*b2055c35SXin Liif test "$enable_libwebpmux" = "yes"; then
665*b2055c35SXin Li  build_webpinfo=yes
666*b2055c35SXin Lielse
667*b2055c35SXin Li  AC_MSG_NOTICE([Not building webpinfo. --enable-libwebpdemux is required.])
668*b2055c35SXin Lifi
669*b2055c35SXin LiAM_CONDITIONAL([BUILD_WEBPINFO], [test "${build_webpinfo}" = "yes"])
670*b2055c35SXin Li
671*b2055c35SXin Lidnl === check for WIC support ===
672*b2055c35SXin Li
673*b2055c35SXin LiAC_ARG_ENABLE([wic],
674*b2055c35SXin Li              AS_HELP_STRING([--disable-wic],
675*b2055c35SXin Li                             [Disable Windows Imaging Component (WIC) detection.
676*b2055c35SXin Li                              @<:@default=auto@:>@]),,
677*b2055c35SXin Li              [enable_wic=yes])
678*b2055c35SXin Li
679*b2055c35SXin Licase $host_os in
680*b2055c35SXin Limingw*)
681*b2055c35SXin Liif test "$enable_wic" = "yes"; then
682*b2055c35SXin Li  AC_CHECK_HEADERS([wincodec.h shlwapi.h windows.h])
683*b2055c35SXin Li  if test "$ac_cv_header_wincodec_h" = "yes"; then
684*b2055c35SXin Li    AC_MSG_CHECKING(for Windows Imaging Component support)
685*b2055c35SXin Li    SAVED_LIBS=$LIBS
686*b2055c35SXin Li    LIBS="-lshlwapi -lole32 $LIBS"
687*b2055c35SXin Li    # match include structure from [cd]webp.c
688*b2055c35SXin Li    wic_headers="
689*b2055c35SXin Li      #define INITGUID
690*b2055c35SXin Li      #define CINTERFACE
691*b2055c35SXin Li      #define COBJMACROS
692*b2055c35SXin Li      #define _WIN32_IE 0x500
693*b2055c35SXin Li
694*b2055c35SXin Li      #include <shlwapi.h>
695*b2055c35SXin Li      #include <windows.h>
696*b2055c35SXin Li      #include <wincodec.h>
697*b2055c35SXin Li      "
698*b2055c35SXin Li    # test for functions from each lib and the GUID is created properly
699*b2055c35SXin Li    wic_main="
700*b2055c35SXin Li      int main(void) {
701*b2055c35SXin Li        CLSID_WICImagingFactory;
702*b2055c35SXin Li        CoInitialize(NULL);
703*b2055c35SXin Li        SHCreateStreamOnFile(NULL, 0, NULL);
704*b2055c35SXin Li        return 0;
705*b2055c35SXin Li      }
706*b2055c35SXin Li      "
707*b2055c35SXin Li    AC_LANG_PUSH(C)
708*b2055c35SXin Li    AC_LINK_IFELSE(
709*b2055c35SXin Li      [AC_LANG_SOURCE([
710*b2055c35SXin Li         $wic_headers
711*b2055c35SXin Li         $wic_main])],
712*b2055c35SXin Li      [wic_support=yes],
713*b2055c35SXin Li      [wic_support=no]
714*b2055c35SXin Li    )
715*b2055c35SXin Li    AC_LANG_POP
716*b2055c35SXin Li
717*b2055c35SXin Li    test "$wic_support" = "yes" || LIBS=$SAVED_LIBS
718*b2055c35SXin Li    AC_MSG_RESULT(${wic_support-no})
719*b2055c35SXin Li  fi
720*b2055c35SXin Lifi
721*b2055c35SXin Liesac
722*b2055c35SXin Li
723*b2055c35SXin Lidnl === If --enable-swap-16bit-csp is defined, add -DWEBP_SWAP_16BIT_CSP=1
724*b2055c35SXin Li
725*b2055c35SXin LiUSE_SWAP_16BIT_CSP=""
726*b2055c35SXin LiAC_MSG_CHECKING(if --enable-swap-16bit-csp option is specified)
727*b2055c35SXin LiAC_ARG_ENABLE([swap-16bit-csp],
728*b2055c35SXin Li              AS_HELP_STRING([--enable-swap-16bit-csp],
729*b2055c35SXin Li                             [Enable byte swap for 16 bit colorspaces]))
730*b2055c35SXin Liif test "$enable_swap_16bit_csp" = "yes"; then
731*b2055c35SXin Li  USE_SWAP_16BIT_CSP="-DWEBP_SWAP_16BIT_CSP=1"
732*b2055c35SXin Lifi
733*b2055c35SXin LiAC_MSG_RESULT(${enable_swap_16bit_csp-no})
734*b2055c35SXin LiAC_SUBST(USE_SWAP_16BIT_CSP)
735*b2055c35SXin Li
736*b2055c35SXin Lidnl === If --disable-near-lossless is defined, add -DWEBP_NEAR_LOSSLESS=0
737*b2055c35SXin Li
738*b2055c35SXin LiAC_DEFINE(WEBP_NEAR_LOSSLESS, [1], [Enable near lossless encoding])
739*b2055c35SXin LiAC_MSG_CHECKING(if --disable-near-lossless option is specified)
740*b2055c35SXin LiAC_ARG_ENABLE([near_lossless],
741*b2055c35SXin Li              AS_HELP_STRING([--disable-near-lossless],
742*b2055c35SXin Li                             [Disable near lossless encoding]),
743*b2055c35SXin Li              [], [enable_near_lossless=yes])
744*b2055c35SXin Liif test "$enable_near_lossless" = "no"; then
745*b2055c35SXin Li  AC_DEFINE(WEBP_NEAR_LOSSLESS, [0], [Enable near lossless encoding])
746*b2055c35SXin Li  AC_MSG_RESULT([yes])
747*b2055c35SXin Lielse
748*b2055c35SXin Li  AC_MSG_RESULT([no])
749*b2055c35SXin Lifi
750*b2055c35SXin Li
751*b2055c35SXin Lidnl =========================
752*b2055c35SXin Li
753*b2055c35SXin Lidnl Add an empty webp_libname_prefix variable for use in *.pc.in.
754*b2055c35SXin LiAC_SUBST([webp_libname_prefix])
755*b2055c35SXin LiAC_CONFIG_MACRO_DIR([m4])
756*b2055c35SXin LiAC_CONFIG_HEADERS([src/webp/config.h])
757*b2055c35SXin LiAC_CONFIG_FILES([Makefile src/Makefile man/Makefile \
758*b2055c35SXin Li                 examples/Makefile extras/Makefile imageio/Makefile \
759*b2055c35SXin Li                 sharpyuv/Makefile sharpyuv/libsharpyuv.pc \
760*b2055c35SXin Li                 src/dec/Makefile src/enc/Makefile src/dsp/Makefile \
761*b2055c35SXin Li                 src/demux/Makefile src/mux/Makefile \
762*b2055c35SXin Li                 src/utils/Makefile \
763*b2055c35SXin Li                 src/libwebp.pc src/libwebpdecoder.pc \
764*b2055c35SXin Li                 src/demux/libwebpdemux.pc src/mux/libwebpmux.pc])
765*b2055c35SXin Li
766*b2055c35SXin Lidnl fix exports from MinGW builds
767*b2055c35SXin LiAC_CONFIG_COMMANDS_POST([$SED -i 's/-DDLL_EXPORT/-DWEBP_DLL/' config.status])
768*b2055c35SXin LiAC_OUTPUT
769*b2055c35SXin Li
770*b2055c35SXin LiAC_MSG_NOTICE([
771*b2055c35SXin LiWebP Configuration Summary
772*b2055c35SXin Li--------------------------
773*b2055c35SXin Li
774*b2055c35SXin LiShared libraries: ${enable_shared}
775*b2055c35SXin LiStatic libraries: ${enable_static}
776*b2055c35SXin LiThreading support: ${enable_threading-no}
777*b2055c35SXin Lilibwebp: yes
778*b2055c35SXin Lilibwebpdecoder: ${enable_libwebpdecoder-no}
779*b2055c35SXin Lilibwebpdemux: ${enable_libwebpdemux-no}
780*b2055c35SXin Lilibwebpmux: ${enable_libwebpmux-no}
781*b2055c35SXin Lilibwebpextras: ${enable_libwebpextras-no}
782*b2055c35SXin Li
783*b2055c35SXin LiTools:
784*b2055c35SXin Licwebp : ${enable_libwebpdemux-no}
785*b2055c35SXin Li  Input format support
786*b2055c35SXin Li  ====================
787*b2055c35SXin Li  JPEG : ${jpeg_support-no}
788*b2055c35SXin Li  PNG  : ${png_support-no}
789*b2055c35SXin Li  TIFF : ${tiff_support-no}
790*b2055c35SXin Li  WIC  : ${wic_support-no}
791*b2055c35SXin Lidwebp : ${enable_libwebpdemux-no}
792*b2055c35SXin Li  Output format support
793*b2055c35SXin Li  =====================
794*b2055c35SXin Li  PNG  : ${png_support-no}
795*b2055c35SXin Li  WIC  : ${wic_support-no}
796*b2055c35SXin LiGIF support : ${gif_support-no}
797*b2055c35SXin Lianim_diff   : ${build_anim_diff-no}
798*b2055c35SXin Ligif2webp    : ${build_gif2webp-no}
799*b2055c35SXin Liimg2webp    : ${build_img2webp-no}
800*b2055c35SXin Liwebpmux     : ${enable_libwebpmux-no}
801*b2055c35SXin Livwebp       : ${build_vwebp-no}
802*b2055c35SXin Liwebpinfo    : ${build_webpinfo-no}
803*b2055c35SXin LiSDL support : ${sdl_support-no}
804*b2055c35SXin Livwebp_sdl   : ${build_vwebp_sdl-no}
805*b2055c35SXin Li])
806