Don't bother with the RDO search if we can't beat the skip distortion
[daala.git] / configure.ac
1 # autoconf source script for generating configure
2
3 dnl The package_version file will be automatically synced to the git revision
4 dnl by the update_version script when configured in the repository, but will
5 dnl remain constant in tarball releases unless it is manually edited.
6 m4_define([CURRENT_VERSION],
7           m4_esyscmd([ if test -e package_version || ./update_version; then
8                            . ./package_version
9                            printf "$PACKAGE_VERSION"
10                        else
11                            printf "unknown"
12                        fi ]))
13
14 AC_INIT([daala],[CURRENT_VERSION],[daala@xiph.org])
15 AC_CONFIG_SRCDIR([src/decode.c])
16 AC_CONFIG_MACRO_DIR([m4])
17 AC_CONFIG_AUX_DIR([build-aux])
18
19 AC_USE_SYSTEM_EXTENSIONS
20 AC_SYS_LARGEFILE
21
22 AC_PROG_CXX
23
24 AM_INIT_AUTOMAKE([1.11 foreign no-define subdir-objects])
25 AM_MAINTAINER_MODE([enable])
26 LT_INIT
27
28 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
29
30 dnl Library versioning for libtool.
31 dnl Please update these for releases.
32 dnl CURRENT, REVISION, AGE
33 dnl - library source changed -> increment REVISION
34 dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
35 dnl - interfaces added -> increment AGE
36 dnl - interfaces removed -> AGE = 0
37
38 OD_LT_CURRENT=0
39 OD_LT_REVISION=1
40 OD_LT_AGE=0
41
42 AC_SUBST(OD_LT_CURRENT)
43 AC_SUBST(OD_LT_REVISION)
44 AC_SUBST(OD_LT_AGE)
45
46 CFLAGS="-std=c89 -pedantic -Wall -Wextra -Wno-long-long \
47         -Wshadow -Wno-overlength-strings $CFLAGS $OD_CFLAGS"
48
49 # Platform-specific tweaks
50 case $host in
51   *-mingw*)
52     # -std=c89 causes some warnings under mingw.
53     CC_CHECK_CFLAGS_APPEND([-U__STRICT_ANSI__])
54     # We need WINNT>=0x501 (WindowsXP) for getaddrinfo/freeaddrinfo.
55     # It's okay to define this even when HTTP support is disabled, as it only
56     #  affects header declarations, not linking (unless we actually use some
57     #  XP-only functions).
58     AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x501,
59      [We need at least WindowsXP for getaddrinfo/freaddrinfo])
60     host_mingw=true
61     ;;
62   *-*-darwin*)
63     os_darwin=true
64     ;;
65 esac
66 dnl These two are entirely unused at present.
67 dnl AM_CONDITIONAL(OD_WIN32, test "$host_mingw" = "true")
68 dnl AM_CONDITIONAL(OD_OS_DARWIN, test "$os_darwin" = "true")
69
70 AC_ARG_ENABLE([assertions],
71   AS_HELP_STRING([--enable-assertions], [Enable assertions in code]),,
72   enable_assertions=no)
73 AM_CONDITIONAL([ENABLE_ASSERTIONS], [test "$enable_assertions" = "yes"])
74 AS_IF([test "$enable_assertions" = "yes"], [
75   AC_DEFINE([OD_ENABLE_ASSERTIONS], [1], [Enable assertions in code])
76 ])
77
78 AC_ARG_ENABLE([logging],
79   AS_HELP_STRING([--enable-logging], [Enable logging]),,
80   enable_logging=no)
81
82 AS_IF([test "$enable_logging" = "yes"], [
83   AC_DEFINE([OD_LOGGING_ENABLED], [1], [Enable logging])
84 ])
85 dnl Check for examples
86 AC_ARG_ENABLE([examples],
87   AC_HELP_STRING([--disable-examples], [Disable the basic examples]),,
88   [enable_examples=yes])
89
90 AS_IF([test "$enable_examples" = "yes"], [
91     PKG_CHECK_MODULES([OGG], [ogg >= 1.3])
92 ])
93
94 AM_CONDITIONAL(ENABLE_EXAMPLES, [test $enable_examples = "yes"])
95
96 AC_ARG_ENABLE([player],
97   AS_HELP_STRING([--disable-player], [Disable the example player]),,
98   enable_player=yes)
99
100 AS_IF([test "$enable_examples" = "no"],
101       [enable_player = no])
102
103 dnl Set LIBM to the math library if needed.
104 LT_LIB_M
105
106 AC_CHECK_FUNCS([gettimeofday ftime],[break])
107
108 AS_IF([test "$enable_player" = "yes"], [
109   PKG_CHECK_MODULES([SDL], [sdl2])
110   PKG_CHECK_MODULES([OGG], [ogg >= 1.3])
111 ])
112 AM_CONDITIONAL([ENABLE_PLAYER_EXAMPLE], [test "$enable_player" = "yes"])
113
114 #CC_ATTRIBUTE_VISIBILITY([default], [
115 #  CC_FLAG_VISIBILITY([CFLAGS="${CFLAGS} -fvisibility=hidden"])
116 #])
117
118 dnl Check for tools
119 AC_ARG_ENABLE([tools],
120   AC_HELP_STRING([--disable-tools], [Disable the tools]),,
121   [enable_tools=yes])
122
123 if test "$enable_tools" = "yes" ; then
124    AC_CHECK_LIB([jpeg],[jpeg_start_compress],[JPEG_LIBS="-ljpeg"],[AC_MSG_ERROR([libjpeg needed for building tools])])
125    AC_SUBST([JPEG_LIBS])
126    PKG_CHECK_MODULES([PNG], [libpng])
127    PKG_CHECK_MODULES([OGG], [ogg >= 1.3])
128
129    AC_OPENMP
130 fi
131
132 AM_CONDITIONAL(ENABLE_TOOLS, [test $enable_tools = "yes"])
133
134 dnl Check for check
135 AC_ARG_ENABLE([unit-tests],
136   AS_HELP_STRING([--disable-unit-tests], [Do not build unit tests]),,
137   [enable_unit_tests=yes]
138 )
139
140 if test "$enable_unit_tests" = "yes" ; then
141   PKG_CHECK_MODULES([CHECK], [check >= 0.9.8])
142
143   dnl As of version 0.9.10, check does not include -pthread in its Cflags or
144   dnl Libs even though it does depend on it. Assuming that check.pc may one day
145   dnl be fixed for that, only add it here if it's not there already.  It really
146   dnl belongs in LDFLAGS here (since check is a static lib and doesn't expose
147   dnl pthread functions in its header), but it can't be added to CHECK_LIBS,
148   dnl since automake 1.13 will barf about adding -pthread to *_LDADD rather
149   dnl than *_LDFLAGS.  However libtool does also include CFLAGS when linking.
150   case $CHECK_CFLAGS in
151     *-pthread*)
152       ;;
153     *)
154       CHECK_CFLAGS="-pthread $CHECK_CFLAGS"
155       ;;
156   esac
157 fi
158 AM_CONDITIONAL(ENABLE_UNIT_TESTS, [test $enable_unit_tests = "yes"])
159
160 AC_ARG_ENABLE([doc],
161   AS_HELP_STRING([--disable-doc], [Do not build API documentation]),,
162   [enable_doc=yes]
163 )
164 AS_IF([test "$enable_doc" = "yes"], [
165   AC_CHECK_PROG([HAVE_DOXYGEN], [doxygen], [yes], [no])
166   AC_CHECK_PROG([HAVE_FIG2DEV], [fig2dev], [yes], [no])
167 ],[
168   HAVE_DOXYGEN=no
169   HAVE_FIG2DEV=no
170 ])
171 AM_CONDITIONAL([HAVE_DOXYGEN], [test "$HAVE_DOXYGEN" = "yes"])
172 AM_CONDITIONAL([HAVE_FIG2DEV], [test "$HAVE_FIG2DEV" = "yes"])
173
174 AC_ARG_ENABLE([asm],
175   AS_HELP_STRING([--disable-asm], [Do not compile assembly versions]),,
176   [enable_asm=yes]
177 )
178
179 case $host_cpu in
180   i[3456]86)
181     cpu_x86=true
182     ;;
183   x86_64)
184     cpu_x86=true
185     ;;
186   arm*)
187     cpu_arm=true
188     ;;
189 esac
190
191 TMP_CFLAGS="$CFLAGS"
192
193 AS_IF([test "$enable_asm" = "yes" -a "$cpu_x86" = "true"], [
194   AC_DEFINE([OD_X86ASM], [1], [Enable asm optimisations])
195   enable_gcc_inline_assembly=yes
196   AC_DEFINE([OD_GCC_INLINE_ASSEMBLY], [1],
197    [Enable gcc inline assembly optimisations])
198   CFLAGS="$CFLAGS -msse2"
199   AC_TRY_LINK([
200 #include <xmmintrin.h>
201    ], [
202     return _mm_cvtsi128_si32(_mm_setzero_si128());
203    ], [
204     enable_sse2_intrinsics=yes
205     AC_DEFINE([OD_SSE2_INTRINSICS], [1],
206      [Enable SSE2 intrinsics optimisations])
207     CFLAGS="$CFLAGS -msse4.1"
208     AC_TRY_LINK([
209 #include <smmintrin.h>
210      ], [
211       return _mm_cvtsi128_si32(_mm_mullo_epi32(_mm_setzero_si128(),
212        _mm_setzero_si128()));
213      ], [
214        enable_sse41_intrinsics=yes
215        AC_DEFINE([OD_SSE41_INTRINSICS], [1],
216         [Enable SSE4.1 intrinsics optimisations])
217        CFLAGS="$CFLAGS -mavx2"
218        AC_TRY_LINK([
219 #include <immintrin.h>
220        ], [
221         return _mm_cvtsi128_si32(_mm_broadcastb_epi8(_mm_setzero_si128()));
222        ], [
223          enable_avx2_intrinsics=yes
224          AC_DEFINE([OD_AVX2_INTRINSICS], [1],
225           [Enable AVX2 intrinsics optimisations])
226        ], [enable_avx2_intrinsics=no]
227       )
228      ], [enable_sse41_intrinsics=no]
229     )
230    ], [enable_sse2_intrinsics=no]
231   )
232 ])
233 CFLAGS="$TMP_CFLAGS"
234 AM_CONDITIONAL([ENABLE_X86ASM],
235  [test "$enable_asm" = "yes" -a "$cpu_x86" = "true"])
236 AM_CONDITIONAL([ENABLE_GCC_INLINE_ASSEMBLY],
237  [test "$enable_asm" = "yes" -a "$cpu_x86" = "true" -a "$enable_gcc_inline_assembly" = "yes"])
238 AM_CONDITIONAL([ENABLE_SSE2_INTRINSICS],
239  [test "$enable_asm" = "yes" -a "$cpu_x86" = "true" -a "$enable_sse2_intrinsics" = "yes"])
240 AM_CONDITIONAL([ENABLE_SSE41_INTRINSICS],
241  [test "$enable_asm" = "yes" -a "$cpu_x86" = "true" -a "$enable_sse41_intrinsics" = "yes"])
242 AM_CONDITIONAL([ENABLE_AVX2_INTRINSICS],
243  [test "$enable_asm" = "yes" -a "$cpu_x86" = "true" -a "$enable_avx2_intrinsics" = "yes"])
244 AM_CONDITIONAL([ENABLE_ARMASM],
245  [test "$enable_asm" = "yes" -a "$cpu_arm" = "true"])
246
247 AS_IF([test "$enable_asm" = "yes" -a "$cpu_arm" = "true"], [
248   AC_DEFINE([OD_ARMASM], [1], [Enable ARM asm optimisations])
249   AC_DEFINE([OD_ARM_MAY_HAVE_NEON], [1], [Enable ARM NEON optimisations])
250 ])
251
252 AC_ARG_ENABLE([encoder-check],
253   AS_HELP_STRING([--enable-encoder-check], [Compare reconstructed frames]),,
254   [enable_encoder_check=no])
255
256 AS_IF([test "$enable_encoder_check" = "yes"], [
257   AC_DEFINE([OD_ENCODER_CHECK], [1], [Enable comparison of reconstructed frames])
258 ])
259 AM_CONDITIONAL([ENCODER_CHECK], [test "$enable_encoder_check" = "yes"])
260
261 AC_ARG_ENABLE([float-pvq],
262   AS_HELP_STRING([--enable-float-pvq], [Enable double precision PVQ]),,
263   [enable_float_pvq=no])
264
265 AS_IF([test "$enable_float_pvq" = "yes"], [
266   AC_DEFINE([OD_FLOAT_PVQ], [1], [Enable double precision PVQ])
267 ])
268
269 AC_ARG_ENABLE([dct-check-overflow],
270   AS_HELP_STRING([--enable-dct-check-overflow], [Check for DCT overflow]),,
271   [enable_dct_check_overflow=no])
272
273 AS_IF([test "$enable_dct_check_overflow" = "yes"], [
274   AC_DEFINE([OD_DCT_CHECK_OVERFLOW], [1], [Check for DCT overflow])
275 ])
276
277 AC_ARG_ENABLE([check-asm],
278   AS_HELP_STRING([--enable-check-asm], [Validate assembly code]),,
279   [enable_check_asm=no])
280
281 AS_IF([test "$enable_check_asm" = "yes"], [
282   AC_DEFINE([OD_CHECKASM], [1], [Validate assembly code])
283 ])
284
285 AC_ARG_ENABLE([mc-animate],
286   AS_HELP_STRING([--enable-mc-animate],
287     [Animate mc. ./configure ANIFRAME=12 --enable-dump-images --enable-mc-animate
288      animates the frame pointed by ANIFRAME]),,
289   [enable_mc_animate=no])
290 AS_IF([test "$enable_mc_animate" = "yes"], [
291   AC_DEFINE([OD_ANIMATE], [1], [Enable MC frame animation])
292   AC_ARG_VAR([ANIFRAME],[the frame to be set to animate])
293   if test "x$ANIFRAME" = "x" ; then
294     AC_MSG_NOTICE([==> ANI FRAME IS NOT Set, defaulting to 69])
295     AC_DEFINE([ANI_FRAME],[69], [Frame to animate])
296   else
297     AC_MSG_NOTICE([==> ANI FRAME IS Set to $ANIFRAME])
298     AC_DEFINE_UNQUOTED([ANI_FRAME], [$ANIFRAME], [Frame to animate])
299   fi
300 ])
301
302 AC_ARG_ENABLE([dump-images],
303   AS_HELP_STRING([--enable-dump-images], [Dump debugging images]),,
304   [enable_dump_images=no])
305 AS_IF([test "$enable_dump_images" = "yes"], [
306   AC_DEFINE([OD_DUMP_IMAGES], [1], [Enable image dumping])
307   if test "$enable_tools" != "yes" ; then
308     PKG_CHECK_MODULES([PNG], [libpng])
309   fi
310   PC_PNG_REQUIRES="libpng"
311   PC_PNG_LIBS="$PNG_LIBS"
312 ])
313 AM_CONDITIONAL([DUMP_IMAGES], [test "$enable_dump_images" = "yes"])
314 AC_SUBST([PC_PNG_REQUIRES])
315 AC_SUBST([PC_PNG_LIBS])
316
317 AC_ARG_ENABLE([dump-recons],
318   AS_HELP_STRING([--enable-dump-recons], [Dump reconstructed video]),,
319   [enable_dump_recons=no])
320 AS_IF([test "$enable_dump_recons" = "yes"], [
321   AC_DEFINE([OD_DUMP_RECONS], [1], [Enable reconstructed video dumping])
322 ])
323
324 AC_ARG_ENABLE([dump-bsize-dist],
325   AS_HELP_STRING([--enable-dump-bsize-dist],
326    [Dump block size RDO distortion]),, [enable_dump_bsize_dist=no])
327 AS_IF([test "$enable_dump_bsize_dist" = "yes"], [
328   AC_DEFINE([OD_DUMP_BSIZE_DIST], [1],
329    [Enable block size RDO distortion dumping])
330 ])
331
332 AC_ARG_ENABLE([accounting],
333   AS_HELP_STRING([--enable-accounting], [Enable bit accounting]),
334   [if test "$host_mingw" = "true"; then AC_MSG_ERROR([accounting not supported on Windows]); fi],
335   [enable_accounting=yes])
336 AS_IF([test "$enable_accounting" = "yes"], [
337   AC_DEFINE([OD_ACCOUNTING], [1], [Enable bit accounting])])
338
339 AC_ARG_ENABLE([ec-accounting],
340   AS_HELP_STRING([--enable-ec-accounting], [Enable entropy coder accounting]),,
341   [enable_ec_accounting=no])
342 AS_IF([test "$enable_ec_accounting" = "yes"], [
343   AC_DEFINE([OD_EC_ACCOUNTING], [1], [Enable entropy coder accounting])])
344
345 AC_ARG_ENABLE([analyzer],
346   AS_HELP_STRING([--enable-analyzer], [Enable the stream analyzer]),,
347   enable_analyzer=no)
348
349 AS_IF([test "$enable_analyzer" = "yes"], [
350   PKG_CHECK_MODULES([OGG], [ogg >= 1.3])
351   WX_CONFIG_OPTIONS
352   WX_CONFIG_CHECK([2.8.0], [wxWin=1])
353   if test "$wxWin" != 1 || test "$wx_ver_ok" != "yes"; then
354     AC_MSG_ERROR([
355       wxWidgets 2.8.0 must be installed on your system to build the stream
356       analyzer. Please install or update your wxWidgets.
357     ])
358   fi
359   if test "$enable_accounting" != "yes"; then
360     AC_MSG_ERROR([
361       The analyzer requires --enable-accounting to function properly.
362     ])
363   fi
364 ])
365 AM_CONDITIONAL([ENABLE_ANALYZER], [test "$enable_analyzer" = "yes"])
366
367 AC_CONFIG_FILES([
368   Makefile
369   daalaenc.pc
370   daaladec.pc
371   daalaenc-uninstalled.pc
372   daaladec-uninstalled.pc
373   doc/Doxyfile
374   doc/Makefile
375 ])
376 AC_CONFIG_HEADERS([config.h])
377 AC_OUTPUT
378
379 AC_MSG_NOTICE([
380 ------------------------------------------------------------------------
381   $PACKAGE_NAME $PACKAGE_VERSION: Automatic configuration OK.
382
383     Assertions ................... ${enable_assertions}
384     Logging ...................... ${enable_logging}
385     API documentation ............ ${enable_doc}
386     Assembly optimizations ....... ${enable_asm}
387     Image dumping ................ ${enable_dump_images}
388     MC Animation  ................ ${enable_mc_animate}
389     Reconstructed video dumping .. ${enable_dump_recons}
390     Check encoder ................ ${enable_encoder_check}
391     Float PVQ .................... ${enable_float_pvq}
392     Check DCT overflow............ ${enable_dct_check_overflow}
393     Check assembly................ ${enable_check_asm}
394     Bit accounting ............... ${enable_accounting}
395     Entropy coder accounting ..... ${enable_ec_accounting}
396     Tools ........................ ${enable_tools}
397     Unit tests ................... ${enable_unit_tests}
398     Examples...................... ${enable_examples}
399     Example Player................ ${enable_player}
400     Stream Analyzer .............. ${enable_analyzer}
401 ------------------------------------------------------------------------
402
403  Use "make tools" to compile the tools.
404  Use "make clean && make debug" to enable assertions and logging
405  without needing to reconfigure the source tree.
406 ])