libavdevice: Define _XOPEN_SOURCE for usleep
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
070c5d0f 3# Libav configure script
f57620d5 4#
949906ea
DB
5# Copyright (c) 2000-2002 Fabrice Bellard
6# Copyright (c) 2005-2008 Diego Biurrun
7# Copyright (c) 2005-2008 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
31e647f8 10# Prevent locale nonsense from breaking basic text processing.
79ab96ba
DB
11LC_ALL=C
12export LC_ALL
31e647f8 13
cde2d79a 14# make sure we are running under a compatible shell
c21d6325
MR
15# try to make this part work with most shells
16
17try_exec(){
0dbe81bb 18 echo "Trying shell $1"
2270b4b2 19 type "$1" > /dev/null 2>&1 && exec "$@"
c21d6325
MR
20}
21
5237ce67 22unset foo
2270b4b2 23(: ${foo%%bar}) 2> /dev/null
0dbe81bb
MR
24E1="$?"
25
2270b4b2 26(: ${foo?}) 2> /dev/null
0dbe81bb
MR
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
cde2d79a
MR
43 fi
44 echo "No compatible shell script interpreter found."
fc53da20 45 echo "This configure script requires a POSIX-compatible shell"
c21d6325 46 echo "such as bash or ksh."
070c5d0f 47 echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
505dfb09 48 echo "Instead, install a working POSIX-compatible shell."
070c5d0f 49 echo "Disabling this configure test will create a broken Libav."
c21d6325
MR
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
53 fi
cde2d79a
MR
54 exit 1
55fi
56
74c53c2d 57show_help(){
06454877
MR
58cat <<EOF
59Usage: configure [options]
60Options: [defaults in brackets after descriptions]
61
62Standard options:
63 --help print this message
19bd477d 64 --logfile=FILE log tests and output to FILE [config.log]
06454877
MR
65 --disable-logging do not log configure debug information
66 --prefix=PREFIX install in PREFIX [$prefix]
67 --bindir=DIR install binaries in DIR [PREFIX/bin]
68 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
69 --libdir=DIR install libs in DIR [PREFIX/lib]
70 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
71 --incdir=DIR install includes in DIR [PREFIX/include]
72 --mandir=DIR install man page in DIR [PREFIX/share/man]
73
74Configuration options:
75 --disable-static do not build static libraries [no]
76 --enable-shared build shared libraries [no]
77 --enable-gpl allow use of GPL code, the resulting libs
78 and binaries will be under GPL [no]
79 --enable-version3 upgrade (L)GPL to version 3 [no]
80 --enable-nonfree allow use of nonfree code, the resulting libs
81 and binaries will be unredistributable [no]
82 --disable-doc do not build documentation
83 --disable-ffmpeg disable ffmpeg build
84 --disable-ffplay disable ffplay build
336ce917 85 --disable-ffprobe disable ffprobe build
06454877 86 --disable-ffserver disable ffserver build
5a0f7131
MR
87 --disable-avdevice disable libavdevice build
88 --disable-avcodec disable libavcodec build
89 --disable-avformat disable libavformat build
90 --disable-swscale disable libswscale build
06454877 91 --enable-postproc enable GPLed postprocessing support [no]
cccc039f 92 --disable-avfilter disable video filter support [no]
0dbfc1db 93 --disable-pthreads disable pthreads [auto]
06454877
MR
94 --enable-w32threads use Win32 threads [no]
95 --enable-x11grab enable X11 grabbing [no]
96 --disable-network disable network support [no]
06454877
MR
97 --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
98 --enable-gray enable full grayscale support (slower color)
99 --disable-swscale-alpha disable alpha channel support in swscale
100 --disable-fastdiv disable table-based division
101 --enable-small optimize for size instead of speed
102 --disable-aandct disable AAN DCT code
7f3f5f46 103 --disable-dct disable DCT code
06454877
MR
104 --disable-fft disable FFT code
105 --disable-golomb disable Golomb code
3447f12d 106 --disable-huffman disable Huffman code
06454877
MR
107 --disable-lpc disable LPC code
108 --disable-mdct disable MDCT code
109 --disable-rdft disable RDFT code
110 --disable-vaapi disable VAAPI code
111 --disable-vdpau disable VDPAU code
92c6a099 112 --disable-dxva2 disable DXVA2 code
06454877
MR
113 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
114 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
115 --enable-memalign-hack emulate memalign, interferes with memory debuggers
bb55e3a3 116 --disable-everything disable all components listed below
06454877
MR
117 --disable-encoder=NAME disable encoder NAME
118 --enable-encoder=NAME enable encoder NAME
119 --disable-encoders disable all encoders
120 --disable-decoder=NAME disable decoder NAME
121 --enable-decoder=NAME enable decoder NAME
122 --disable-decoders disable all decoders
123 --disable-hwaccel=NAME disable hwaccel NAME
124 --enable-hwaccel=NAME enable hwaccel NAME
125 --disable-hwaccels disable all hwaccels
126 --disable-muxer=NAME disable muxer NAME
127 --enable-muxer=NAME enable muxer NAME
128 --disable-muxers disable all muxers
129 --disable-demuxer=NAME disable demuxer NAME
130 --enable-demuxer=NAME enable demuxer NAME
131 --disable-demuxers disable all demuxers
132 --enable-parser=NAME enable parser NAME
133 --disable-parser=NAME disable parser NAME
134 --disable-parsers disable all parsers
135 --enable-bsf=NAME enable bitstream filter NAME
136 --disable-bsf=NAME disable bitstream filter NAME
137 --disable-bsfs disable all bitstream filters
138 --enable-protocol=NAME enable protocol NAME
139 --disable-protocol=NAME disable protocol NAME
140 --disable-protocols disable all protocols
141 --disable-indev=NAME disable input device NAME
142 --disable-outdev=NAME disable output device NAME
143 --disable-indevs disable input devices
144 --disable-outdevs disable output devices
145 --disable-devices disable all devices
146 --enable-filter=NAME enable filter NAME
147 --disable-filter=NAME disable filter NAME
148 --disable-filters disable all filters
149 --list-decoders show all available decoders
150 --list-encoders show all available encoders
151 --list-hwaccels show all available hardware accelerators
152 --list-muxers show all available muxers
153 --list-demuxers show all available demuxers
154 --list-parsers show all available parsers
155 --list-protocols show all available protocols
156 --list-bsfs show all available bitstream filters
157 --list-indevs show all available input devices
158 --list-outdevs show all available output devices
159 --list-filters show all available filters
160
161External library support:
162 --enable-avisynth enable reading of AVISynth script files [no]
163 --enable-bzlib enable bzlib [autodetect]
47941088 164 --enable-frei0r enable frei0r video filtering
06454877
MR
165 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
166 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
6ebf0bfc 167 --enable-libopencv enable video filtering via libopencv [no]
06454877
MR
168 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
169 and libraw1394 [no]
170 --enable-libdirac enable Dirac support via libdirac [no]
171 --enable-libfaac enable FAAC support via libfaac [no]
06454877
MR
172 --enable-libgsm enable GSM support via libgsm [no]
173 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
174 --enable-libnut enable NUT (de)muxing via libnut,
175 native (de)muxer exists [no]
176 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
0f943ce6 177 --enable-librtmp enable RTMP[E] support via librtmp [no]
06454877
MR
178 --enable-libschroedinger enable Dirac support via libschroedinger [no]
179 --enable-libspeex enable Speex decoding via libspeex [no]
180 --enable-libtheora enable Theora encoding via libtheora [no]
d89e738a 181 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
f502ff3f 182 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
06454877
MR
183 --enable-libvorbis enable Vorbis encoding via libvorbis,
184 native implementation exists [no]
8299a7f8 185 --enable-libvpx enable VP8 support via libvpx [no]
06454877 186 --enable-libx264 enable H.264 encoding via x264 [no]
de295976 187 --enable-libxavs enable AVS encoding via xavs [no]
06454877
MR
188 --enable-libxvid enable Xvid encoding via xvidcore,
189 native MPEG-4/Xvid encoder exists [no]
190 --enable-mlib enable Sun medialib [no]
191 --enable-zlib enable zlib [autodetect]
192
193Advanced options (experts only):
194 --source-path=PATH path to source code [$source_path]
195 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
196 --enable-cross-compile assume a cross-compiler is used
197 --sysroot=PATH root of cross-build tree
198 --sysinclude=PATH location of cross-build system headers
199 --target-os=OS compiler targets OS [$target_os]
200 --target-exec=CMD command to run executables on target
201 --target-path=DIR path to view of build directory on target
202 --nm=NM use nm tool
121d78d0 203 --ar=AR use archive tool AR [$ar_default]
06454877
MR
204 --as=AS use assembler AS [$as_default]
205 --cc=CC use C compiler CC [$cc_default]
206 --ld=LD use linker LD
207 --host-cc=HOSTCC use host C compiler HOSTCC
208 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
209 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
210 --host-libs=HLIBS use libs HLIBS when linking for host
211 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
212 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
213 --extra-libs=ELIBS add ELIBS [$ELIBS]
214 --extra-version=STRING version string suffix []
215 --build-suffix=SUFFIX library name suffix []
216 --arch=ARCH select architecture [$arch]
217 --cpu=CPU select the minimum required CPU (affects
218 instruction selection, may crash on older CPUs)
c8a4ae00 219 --disable-asm disable all assembler optimizations
06454877
MR
220 --disable-altivec disable AltiVec optimizations
221 --disable-amd3dnow disable 3DNow! optimizations
222 --disable-amd3dnowext disable 3DNow! extended optimizations
223 --disable-mmx disable MMX optimizations
224 --disable-mmx2 disable MMX2 optimizations
225 --disable-sse disable SSE optimizations
226 --disable-ssse3 disable SSSE3 optimizations
87f1355f 227 --disable-avx disable AVX optimizations
06454877
MR
228 --disable-armv5te disable armv5te optimizations
229 --disable-armv6 disable armv6 optimizations
230 --disable-armv6t2 disable armv6t2 optimizations
231 --disable-armvfp disable ARM VFP optimizations
232 --disable-iwmmxt disable iwmmxt optimizations
233 --disable-mmi disable MMI optimizations
234 --disable-neon disable neon optimizations
235 --disable-vis disable VIS optimizations
236 --disable-yasm disable use of yasm assembler
237 --enable-pic build position-independent code
4ae40685 238 --malloc-prefix=PFX prefix malloc and related names with PFX
6b35d421 239 --enable-sram allow use of on-chip SRAM
9baec618 240 --disable-symver disable symbol versioning
06454877 241
070c5d0f 242Developer options (useful when working on Libav itself):
06454877
MR
243 --disable-debug disable debugging symbols
244 --enable-debug=LEVEL set the debug level [$debuglevel]
06454877
MR
245 --disable-optimizations disable compiler optimizations
246 --enable-extra-warnings enable more compiler warnings
52b3cc60
RD
247 --samples=PATH location of test samples for FATE, if not set use
248 \$FATE_SAMPLES at make invocation time.
06454877
MR
249
250NOTE: Object files are built at the place where configure is launched.
251EOF
60e8bc13 252 exit 0
74c53c2d 253}
cf9d24ad 254
0884fadf
MR
255quotes='""'
256
57bd82d4 257log(){
2270b4b2 258 echo "$@" >> $logfile
57bd82d4
MR
259}
260
720c69da 261log_file(){
c8e9f801 262 log BEGIN $1
2270b4b2 263 pr -n -t $1 >> $logfile
c8e9f801
MR
264 log END $1
265}
266
2ba042a7 267echolog(){
c8e9f801 268 log "$@"
57bd82d4 269 echo "$@"
2ba042a7
MR
270}
271
7bfc8ae6
MR
272warn(){
273 log "WARNING: $*"
274 WARNINGS="${WARNINGS}WARNING: $*\n"
275}
276
2ba042a7
MR
277die(){
278 echolog "$@"
279 cat <<EOF
d326cf7f 280
2ba042a7 281If you think configure made a mistake, make sure you are using the latest
4a6a21f5 282version from Git. If the latest version fails, report the problem to the
070c5d0f 283libav-user@libav.org mailing list or IRC #libav on irc.freenode.net.
2ba042a7 284EOF
e155a21a 285 if disabled logging; then
2ba042a7 286 cat <<EOF
e155a21a
DB
287Rerun configure with logging enabled (do not use --disable-logging), and
288include the log this produces with your report.
2ba042a7
MR
289EOF
290 else
291cat <<EOF
e155a21a
DB
292Include the log file "$logfile" produced by configure as this will help
293solving the problem.
2ba042a7
MR
294EOF
295 fi
57bd82d4
MR
296 exit 1
297}
298
6c6007d6 299# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 300toupper(){
6c6007d6 301 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
302}
303
4a5444db 304tolower(){
6c6007d6 305 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
306}
307
14a8acf1
MR
308c_escape(){
309 echo "$*" | sed 's/["\\]/\\\0/g'
310}
311
b04251c5
MR
312sh_quote(){
313 v=$(echo "$1" | sed "s/'/'\\\\''/g")
d72c981c 314 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
b04251c5
MR
315 echo "$v"
316}
317
bb7a22b5
MR
318cleanws(){
319 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
320}
321
be8f2501
MR
322filter(){
323 pat=$1
324 shift
325 for v; do
98ef6079 326 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
327 done
328}
329
9d201b26
MR
330filter_out(){
331 pat=$1
332 shift
333 for v; do
334 eval "case $v in $pat) ;; *) echo $v ;; esac"
335 done
336}
337
36e2dea0
MR
338map(){
339 m=$1
340 shift
e0e335a0 341 for v; do eval $m; done
36e2dea0
MR
342}
343
a8d04fba
MR
344set_all(){
345 value=$1
346 shift
347 for var in $*; do
348 eval $var=$value
349 done
350}
351
72a43668
MR
352set_weak(){
353 value=$1
354 shift
355 for var; do
356 eval : \${$var:=$value}
357 done
358}
359
3f8040db
MR
360set_safe(){
361 var=$1
362 shift
363 eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
364}
365
366get_safe(){
367 eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
368}
369
799c9e9b
MR
370pushvar(){
371 for var in $*; do
372 eval level=\${${var}_level:=0}
373 eval ${var}_${level}="\$$var"
374 eval ${var}_level=$(($level+1))
375 done
376}
377
378popvar(){
379 for var in $*; do
380 eval level=\${${var}_level:-0}
381 test $level = 0 && continue
382 eval level=$(($level-1))
383 eval $var="\${${var}_${level}}"
384 eval ${var}_level=$level
385 eval unset ${var}_${level}
386 done
387}
388
a8d04fba
MR
389enable(){
390 set_all yes $*
391}
392
393disable(){
394 set_all no $*
395}
396
72a43668
MR
397enable_weak(){
398 set_weak yes $*
399}
400
401disable_weak(){
402 set_weak no $*
403}
404
72702705 405enable_safe(){
fd07f803
MR
406 for var; do
407 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
408 done
72702705
MR
409}
410
411disable_safe(){
fd07f803
MR
412 for var; do
413 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
414 done
72702705
MR
415}
416
f9d328da
MR
417do_enable_deep(){
418 for var; do
419 enabled $var && continue
420 eval sel="\$${var}_select"
c510c7b5
MR
421 eval sgs="\$${var}_suggest"
422 pushvar var sgs
f9d328da 423 enable_deep $sel
c510c7b5
MR
424 popvar sgs
425 enable_deep_weak $sgs
f9d328da
MR
426 popvar var
427 done
428}
429
430enable_deep(){
431 do_enable_deep $*
432 enable $*
433}
434
72a43668
MR
435enable_deep_weak(){
436 do_enable_deep $*
437 enable_weak $*
438}
439
57bd82d4 440enabled(){
3250003c
MR
441 test "${1#!}" = "$1" && op== || op=!=
442 eval test "x\$${1#!}" $op "xyes"
44161118
MR
443}
444
37970ebf 445disabled(){
3250003c
MR
446 test "${1#!}" = "$1" && op== || op=!=
447 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
448}
449
44161118
MR
450enabled_all(){
451 for opt; do
452 enabled $opt || return 1
453 done
454}
455
85bca2c5
DB
456disabled_all(){
457 for opt; do
458 disabled $opt || return 1
459 done
460}
461
44161118
MR
462enabled_any(){
463 for opt; do
464 enabled $opt && return 0
465 done
466}
467
85bca2c5
DB
468disabled_any(){
469 for opt; do
470 disabled $opt && return 0
471 done
f7b230a7 472 return 1
85bca2c5
DB
473}
474
c9d19248
MR
475set_default(){
476 for opt; do
88268e94 477 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
478 done
479}
480
4a0d6686
AJ
481is_in(){
482 value=$1
483 shift
484 for var in $*; do
485 [ $var = $value ] && return 0
486 done
487 return 1
488}
489
30fd06be
MR
490check_deps(){
491 for cfg; do
3250003c 492 cfg="${cfg#!}"
799c9e9b
MR
493 enabled ${cfg}_checking && die "Circular dependency for $cfg."
494 disabled ${cfg}_checking && continue
495 enable ${cfg}_checking
496
30fd06be
MR
497 eval dep_all="\$${cfg}_deps"
498 eval dep_any="\$${cfg}_deps_any"
7ef3425f 499 eval dep_sel="\$${cfg}_select"
c510c7b5 500 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
501 eval dep_ifa="\$${cfg}_if"
502 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 503
3d7453e0
MR
504 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
505 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
506 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 507
3d7453e0
MR
508 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
509 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
510 enabled_all $dep_all || disable $cfg
511 enabled_any $dep_any || disable $cfg
7ef3425f 512 disabled_any $dep_sel && disable $cfg
799c9e9b 513
4ec45764
RP
514 if enabled $cfg; then
515 eval dep_extralibs="\$${cfg}_extralibs"
516 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 517 enable_deep $dep_sel
c510c7b5 518 enable_deep_weak $dep_sgs
4ec45764
RP
519 fi
520
799c9e9b 521 disable ${cfg}_checking
30fd06be
MR
522 done
523}
524
72cfcf41
MR
525print_config_h(){
526 enabled $1 && v=1 || v=0
527 echo "#define $2 $v"
528}
529
530print_config_mak(){
531 enabled $1 && v= || v=!
532 echo "$v$2=yes"
533}
534
55127e7b
MR
535print_config_asm(){
536 enabled $1 && echo "%define $2"
537}
538
44161118
MR
539print_config(){
540 pfx=$1
72cfcf41
MR
541 files=$2
542 shift 2
44161118 543 for cfg; do
5e622c40 544 ucname="$(toupper $cfg)"
72cfcf41
MR
545 for f in $files; do
546 "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
547 done
44161118 548 done
57bd82d4
MR
549}
550
31c0121d
MR
551print_enabled(){
552 test "$1" = -n && end=" " && shift || end="\n"
553 suf=$1
554 shift
555 for v; do
556 enabled $v && printf "%s$end" ${v%$suf};
557 done
558}
559
57bd82d4
MR
560append(){
561 var=$1
562 shift
57bd82d4
MR
563 eval "$var=\"\$$var $*\""
564}
565
60361817
MR
566prepend(){
567 var=$1
568 shift
569 eval "$var=\"$* \$$var\""
570}
571
50a334e4 572add_cppflags(){
caf458dd 573 append CPPFLAGS $($filter_cppflags "$@")
50a334e4
MR
574}
575
57bd82d4 576add_cflags(){
caf458dd 577 append CFLAGS $($filter_cflags "$@")
57bd82d4
MR
578}
579
2f2e6c7c 580add_asflags(){
caf458dd 581 append ASFLAGS $($filter_asflags "$@")
2f2e6c7c
MR
582}
583
57bd82d4
MR
584add_ldflags(){
585 append LDFLAGS "$@"
586}
587
588add_extralibs(){
60361817 589 prepend extralibs "$@"
57bd82d4
MR
590}
591
b0cfb663 592check_cmd(){
b3cb5d51 593 log "$@"
2270b4b2 594 "$@" >> $logfile 2>&1
b0cfb663
MR
595}
596
dcd479c0 597check_cc(){
57bd82d4 598 log check_cc "$@"
2270b4b2 599 cat > $TMPC
720c69da 600 log_file $TMPC
50a334e4 601 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
602}
603
604check_cpp(){
605 log check_cpp "$@"
2270b4b2 606 cat > $TMPC
720c69da 607 log_file $TMPC
9e7f3277 608 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
609}
610
f65883c8
MR
611check_as(){
612 log check_as "$@"
613 cat > $TMPC
614 log_file $TMPC
2f2e6c7c 615 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
f65883c8
MR
616}
617
940f335a
MR
618check_asm(){
619 log check_asm "$@"
620 name="$1"
3784e82e 621 code="$2"
940f335a 622 shift 2
49214f61
MR
623 disable $name
624 check_as "$@" <<EOF && enable $name
3784e82e 625void foo(void){ __asm__ volatile($code); }
940f335a
MR
626EOF
627}
628
304d586d
LM
629check_yasm(){
630 log check_yasm "$@"
631 echo "$1" > $TMPS
632 log_file $TMPS
633 shift 1
634 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
635}
636
dcd479c0 637check_ld(){
57bd82d4 638 log check_ld "$@"
3155a644
MR
639 flags=''
640 libs=''
641 for f; do
642 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
643 done
2a194acd 644 check_cc $($filter_cflags $flags) || return
7e75f9fe 645 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
dcd479c0
MR
646}
647
50a334e4
MR
648check_cppflags(){
649 log check_cppflags "$@"
caf458dd
MR
650 set -- $($filter_cppflags "$@")
651 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
652int x;
653EOF
654}
655
dcd479c0 656check_cflags(){
57bd82d4 657 log check_cflags "$@"
caf458dd
MR
658 set -- $($filter_cflags "$@")
659 check_cc "$@" <<EOF && append CFLAGS "$@"
dcd479c0
MR
660int x;
661EOF
662}
663
2ed46eea
MR
664test_ldflags(){
665 log test_ldflags "$@"
666 check_ld "$@" <<EOF
c23a0ac8 667int main(void){ return 0; }
dcd479c0
MR
668EOF
669}
670
2ed46eea
MR
671check_ldflags(){
672 log check_ldflags "$@"
673 test_ldflags "$@" && add_ldflags "$@"
674}
675
dcd479c0 676check_header(){
57bd82d4 677 log check_header "$@"
dcd479c0
MR
678 header=$1
679 shift
b77df637
MR
680 disable_safe $header
681 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
682#include <$header>
683int x;
684EOF
685}
686
687check_func(){
57bd82d4 688 log check_func "$@"
dcd479c0
MR
689 func=$1
690 shift
d8bc5f06
MR
691 disable $func
692 check_ld "$@" <<EOF && enable $func
dcd479c0 693extern int $func();
c23a0ac8 694int main(void){ $func(); }
dcd479c0
MR
695EOF
696}
697
645d2652 698check_mathfunc(){
6b73c0ae 699 log check_mathfunc "$@"
645d2652
MR
700 func=$1
701 shift
702 disable $func
703 check_ld "$@" <<EOF && enable $func
704#include <math.h>
33bd38db
MR
705float foo(float f) { return $func(f); }
706int main(void){ return 0; }
645d2652
MR
707EOF
708}
709
2446d3d6
DB
710check_func_headers(){
711 log check_func_headers "$@"
f8d7b072 712 headers=$1
edaf1ae2 713 funcs=$2
f8d7b072 714 shift 2
edaf1ae2
MR
715 {
716 for hdr in $headers; do
717 echo "#include <$hdr>"
718 done
719 for func in $funcs; do
720 echo "long check_$func(void) { return (long) $func; }"
721 done
722 echo "int main(void) { return 0; }"
723 } | check_ld "$@" && enable $funcs && enable_safe $headers
f8d7b072
MR
724}
725
a5344cf7
SS
726check_cpp_condition(){
727 log check_cpp_condition "$@"
728 header=$1
729 condition=$2
f855b7b9
MR
730 shift 2
731 check_cpp $($filter_cppflags "$@") <<EOF
a5344cf7
SS
732#include <$header>
733#if !($condition)
734#error "unsatisfied condition: $condition"
735#endif
736EOF
737}
738
57bd82d4
MR
739check_lib(){
740 log check_lib "$@"
741 header="$1"
742 func="$2"
743 shift 2
84400e9d 744 check_header $header && check_func $func "$@" && add_extralibs "$@"
57bd82d4
MR
745}
746
f8d7b072
MR
747check_lib2(){
748 log check_lib2 "$@"
749 headers="$1"
edaf1ae2 750 funcs="$2"
f8d7b072 751 shift 2
edaf1ae2 752 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
f8d7b072
MR
753}
754
3f8040db
MR
755check_pkg_config(){
756 log check_pkg_config "$@"
757 pkg="$1"
758 headers="$2"
759 funcs="$3"
760 shift 3
761 $pkg_config --exists $pkg || return
762 pkg_cflags=$($pkg_config --cflags $pkg)
763 pkg_libs=$($pkg_config --libs $pkg)
764 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
765 set_safe ${pkg}_cflags $pkg_cflags &&
766 set_safe ${pkg}_libs $pkg_libs
767}
768
dcd479c0 769check_exec(){
2270b4b2 770 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
771}
772
7dfef245 773check_exec_crash(){
5e622c40 774 code=$(cat)
7dfef245
MR
775
776 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
777 # are safe but may not be available everywhere. Thus we use
778 # raise(SIGTERM) instead. The check is run in a subshell so we
779 # can redirect the "Terminated" message from the shell. SIGBUS
780 # is not defined by standard C so it is used conditionally.
781
2270b4b2 782 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
783#include <signal.h>
784static void sighandler(int sig){
785 raise(SIGTERM);
786}
e5af4a11 787int main(void){
7dfef245
MR
788 signal(SIGILL, sighandler);
789 signal(SIGFPE, sighandler);
790 signal(SIGSEGV, sighandler);
791#ifdef SIGBUS
792 signal(SIGBUS, sighandler);
793#endif
794 { $code }
795}
796EOF
797}
798
72be9e73
DY
799check_type(){
800 log check_type "$@"
801 headers=$1
802 type=$2
803 shift 2
ae550ce9 804 disable_safe "$type"
72be9e73
DY
805 incs=""
806 for hdr in $headers; do
807 incs="$incs
808#include <$hdr>"
809 done
ae550ce9 810 check_cc "$@" <<EOF && enable_safe "$type"
72be9e73
DY
811$incs
812$type v;
813EOF
814}
815
14d36751
MR
816check_struct(){
817 log check_type "$@"
818 headers=$1
819 struct=$2
820 member=$3
821 shift 3
822 disable_safe "${struct}_${member}"
823 incs=""
824 for hdr in $headers; do
825 incs="$incs
826#include <$hdr>"
827 done
828 check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
829$incs
830const void *p = &(($struct *)0)->$member;
831EOF
832}
833
57bd82d4
MR
834require(){
835 name="$1"
836 header="$2"
837 func="$3"
838 shift 3
839 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
840}
841
f8d7b072
MR
842require2(){
843 name="$1"
844 headers="$2"
845 func="$3"
846 shift 3
847 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
848}
849
3f8040db
MR
850require_pkg_config(){
851 pkg="$1"
852 check_pkg_config "$@" || die "ERROR: $pkg not found"
853 add_cflags $(get_safe ${pkg}_cflags)
854 add_extralibs $(get_safe ${pkg}_libs)
855}
856
f0125de9
MR
857check_host_cc(){
858 log check_host_cc "$@"
859 cat > $TMPC
860 log_file $TMPC
861 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
862}
863
864check_host_cflags(){
865 log check_host_cflags "$@"
866 check_host_cc "$@" <<EOF && append host_cflags "$@"
867int x;
868EOF
869}
870
c505dd31
MR
871apply(){
872 file=$1
873 shift
874 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
875}
876
c34681df
MR
877cp_if_changed(){
878 cmp -s "$1" "$2" &&
879 echo "$2 is unchanged" ||
880 cp -f "$1" "$2"
881}
882
dcd61286
DB
883# CONFIG_LIST contains configurable options, while HAVE_LIST is for
884# system-dependent things.
885
4a0d6686
AJ
886COMPONENT_LIST="
887 bsfs
888 decoders
889 demuxers
890 encoders
3cde40aa 891 filters
5666fd73 892 hwaccels
c552605c 893 indevs
4a0d6686 894 muxers
c552605c 895 outdevs
4a0d6686
AJ
896 parsers
897 protocols
898"
899
900CONFIG_LIST="
901 $COMPONENT_LIST
e8ed9b7a 902 aandct
a5444fee 903 ac3dsp
5a0f7131
MR
904 avcodec
905 avdevice
f7679c54 906 avfilter
5a0f7131 907 avformat
c88f5d72 908 avisynth
f402916e 909 bzlib
7f3f5f46 910 dct
c73f65d9 911 doc
05aec7bb 912 dwt
92c6a099 913 dxva2
27a9466b 914 fastdiv
c88f5d72
MR
915 ffmpeg
916 ffplay
336ce917 917 ffprobe
c88f5d72 918 ffserver
1848f7d9 919 fft
47941088 920 frei0r
4f034993 921 golomb
c88f5d72 922 gpl
d8d0d0b2 923 gray
4693b031 924 h264dsp
4a384de5 925 h264pred
3abe5fbd 926 hardcoded_tables
3447f12d 927 huffman
f7b8bffe 928 libdc1394
690bfceb 929 libdirac
2eed5a46 930 libfaac
c88f5d72 931 libgsm
6ebe07fb 932 libmp3lame
c88f5d72 933 libnut
0b175caa
DB
934 libopencore_amrnb
935 libopencore_amrwb
6ebf0bfc 936 libopencv
9a77d59a 937 libopenjpeg
0f943ce6 938 librtmp
f7cd9eed 939 libschroedinger
ae14f311 940 libspeex
150d2772 941 libtheora
d89e738a 942 libvo_aacenc
f502ff3f 943 libvo_amrwbenc
c88f5d72 944 libvorbis
8299a7f8 945 libvpx
1cc60c47 946 libx264
de295976 947 libxavs
1cc60c47 948 libxvid
f4d608e3 949 lpc
b781cc12 950 lsp
47a158cb 951 mdct
c88f5d72 952 memalign_hack
a8150374 953 mlib
c88f5d72
MR
954 mpegaudio_hp
955 network
3fe142e2 956 nonfree
8a3c8627 957 pic
4a24ab64 958 postproc
68602540 959 rdft
44b70ce5 960 rtpdec
e90f5b5a 961 runtime_cpudetect
2e35e684 962 shared
4538729a 963 sinewin
bd2216e4 964 small
6b35d421 965 sram
2e35e684 966 static
5a0f7131 967 swscale
a9ddb5b1 968 swscale_alpha
17492d5e
DB
969 vaapi
970 vdpau
9cad0e4e 971 version3
56a059ac 972 x11grab
c88f5d72 973 zlib
4a0d6686 974"
c88f5d72 975
8eee7025 976THREADS_LIST='
8eee7025
DB
977 pthreads
978 w32threads
979'
980
3f5b56e5
MR
981ARCH_LIST='
982 alpha
a2fc0f6a 983 arm
fdcd782d
MR
984 avr32
985 avr32_ap
986 avr32_uc
3f5b56e5
MR
987 bfin
988 ia64
989 m68k
990 mips
bae3abb0 991 mips64
3f5b56e5 992 parisc
79cb09b2 993 ppc
34d11b87 994 ppc64
3f5b56e5
MR
995 s390
996 sh4
997 sparc
998 sparc64
0844bae1 999 tomi
3f5b56e5
MR
1000 x86
1001 x86_32
1002 x86_64
1003'
1004
1005ARCH_EXT_LIST='
1ac9331a 1006 altivec
3bf96eec 1007 amd3dnow
a1ef9f08 1008 amd3dnowext
1ac9331a 1009 armv5te
edab3048 1010 armv6
ab5cb084 1011 armv6t2
f55b299a 1012 armvfp
87f1355f 1013 avx
3f5b56e5
MR
1014 iwmmxt
1015 mmi
1016 mmx
d7f0920b 1017 mmx2
6b18d278 1018 neon
799fde37 1019 ppc4xx
1bb04d5a 1020 sse
9eeed841 1021 ssse3
bd9d34a0 1022 vis
3f5b56e5
MR
1023'
1024
a3e02a8c
MR
1025HAVE_LIST_PUB='
1026 bigendian
d268eee9 1027 fast_unaligned
a3e02a8c
MR
1028'
1029
3f5b56e5
MR
1030HAVE_LIST="
1031 $ARCH_EXT_LIST
a3e02a8c 1032 $HAVE_LIST_PUB
3f5b56e5 1033 $THREADS_LIST
59782b82 1034 aligned_stack
35fd8122 1035 alsa_asoundlib_h
3f5b56e5 1036 altivec_h
c9fdab0d 1037 arpa_inet_h
dffb41b9 1038 attribute_may_alias
e7ea5e3d 1039 attribute_packed
6bd859d6 1040 bswap
ecf97f22 1041 closesocket
1ac9331a 1042 cmov
c88f5d72 1043 dcbzl
f8aa696f
DB
1044 dev_bktr_ioctl_bt848_h
1045 dev_bktr_ioctl_meteor_h
1046 dev_ic_bt8xx_h
1047 dev_video_meteor_ioctl_meteor_h
1048 dev_video_bktr_ioctl_bt848_h
18b67ae5 1049 dlfcn_h
c88f5d72 1050 dlopen
bc574408 1051 dos_paths
245626d0
DB
1052 ebp_available
1053 ebx_available
6b7c7703
VS
1054 exp2
1055 exp2f
c2a29455 1056 fast_64bit
669b5583 1057 fast_clz
7073e9fc 1058 fast_cmov
534a2231 1059 fcntl
9d99cc5a 1060 fork
84882df6 1061 getaddrinfo
da9e86f8 1062 gethrtime
fc5607f8 1063 GetProcessMemoryInfo
4e68cb8a 1064 GetProcessTimes
66be5b45 1065 getrusage
a49d3025 1066 gnu_as
fc5607f8 1067 struct_rusage_ru_maxrss
2f0c136e 1068 ibm_asm
2e1913b1 1069 inet_aton
61d251db 1070 inline_asm
abfc8d05 1071 isatty
b58b9fa3 1072 kbhit
9f5ff83f 1073 ldbrx
0b4a1821
AS
1074 libdc1394_1
1075 libdc1394_2
a33cab3a 1076 llrint
07876e25 1077 llrintf
d96cd429
MR
1078 local_aligned_16
1079 local_aligned_8
291fd18a 1080 log2
6b7c7703 1081 log2f
85dd97ad 1082 loongson
a33cab3a 1083 lrint
c88f5d72 1084 lrintf
e4673692 1085 lzo1x_999_compress
f8aa696f
DB
1086 machine_ioctl_bt848_h
1087 machine_ioctl_meteor_h
c88f5d72 1088 malloc_h
73f6d31e 1089 MapViewOfFile
c88f5d72 1090 memalign
6ffa87d3 1091 mkstemp
0328b9ea 1092 mmap
b4e806b2 1093 pld
1f91cdce 1094 posix_memalign
a33cab3a
MK
1095 round
1096 roundf
c88f5d72
MR
1097 sdl
1098 sdl_video_size
b507ebd1 1099 setmode
15d59d2c 1100 sndio_h
72be9e73 1101 socklen_t
deb29777 1102 soundcard_h
f8cda19e 1103 poll_h
0104b608 1104 setrlimit
87958234 1105 strerror_r
47941088 1106 strtok_r
c0018613 1107 struct_addrinfo
b4d68544
MS
1108 struct_ipv6_mreq
1109 struct_sockaddr_in6
3b2372bf 1110 struct_sockaddr_sa_len
33a4dbdd 1111 struct_sockaddr_storage
b462d132
MR
1112 symver
1113 symver_gnu_asm
1114 symver_asm_label
b58412f1 1115 sys_mman_h
b091aa44 1116 sys_resource_h
81644c2e 1117 sys_select_h
deb29777 1118 sys_soundcard_h
1b6e8b73 1119 sys_videoio_h
d3a4b4e0 1120 ten_operands
b265431e 1121 threads
7b04b8a0 1122 truncf
ce742de2 1123 vfp_args
7c5bfe7a 1124 VirtualAlloc
6ff3f3e7 1125 winsock2_h
cc078b5d 1126 xform_asm
6f74fb03 1127 xmm_clobbers
304d586d 1128 yasm
0cb78cef 1129"
44161118 1130
b6bb00b0
MR
1131# options emitted with CONFIG_ prefix but not available on command line
1132CONFIG_EXTRA="
dc4f5a1c 1133 avutil
9cad0e4e
DB
1134 gplv3
1135 lgplv3
b6bb00b0
MR
1136"
1137
520cc7f1 1138CMDLINE_SELECT="
3f5b56e5 1139 $ARCH_EXT_LIST
520cc7f1 1140 $CONFIG_LIST
8eee7025 1141 $THREADS_LIST
c8a4ae00 1142 asm
db6107b6 1143 cross_compile
520cc7f1
MR
1144 debug
1145 extra_warnings
8c6afa4d 1146 logging
d2bbb2f7 1147 optimizations
9baec618 1148 symver
7595a5e4 1149 yasm
520cc7f1 1150"
426be5dc
DB
1151
1152PATHS_LIST='
d156bede 1153 bindir
14a8acf1 1154 datadir
26759c44
MR
1155 incdir
1156 libdir
26759c44
MR
1157 mandir
1158 prefix
1159 shlibdir
426be5dc
DB
1160'
1161
1162CMDLINE_SET="
1163 $PATHS_LIST
121d78d0 1164 ar
426be5dc 1165 arch
313c46a6 1166 as
426be5dc
DB
1167 build_suffix
1168 cc
1169 cpu
1170 cross_prefix
50567afa 1171 dep_cc
ac63af34 1172 extra_version
9da6609f
MR
1173 host_cc
1174 host_cflags
1175 host_ldflags
1176 host_libs
82bb3329 1177 host_os
684b28e0 1178 ld
426be5dc 1179 logfile
4ae40685 1180 malloc_prefix
89641463 1181 nm
3f8040db 1182 pkg_config
2fad0977 1183 samples
26759c44 1184 source_path
c5200f17
MR
1185 sysinclude
1186 sysroot
a7ada2ba 1187 target_exec
26759c44 1188 target_os
a7ada2ba 1189 target_path
426be5dc 1190"
520cc7f1 1191
89f2932b
MR
1192CMDLINE_APPEND="
1193 extra_cflags
1194"
1195
912f3148
DB
1196# code dependency declarations
1197
9eeed841 1198# architecture extensions
808fa33c 1199
a2fc0f6a
MR
1200armv5te_deps="arm"
1201armv6_deps="arm"
ab5cb084 1202armv6t2_deps="arm"
a2fc0f6a
MR
1203armvfp_deps="arm"
1204iwmmxt_deps="arm"
808fa33c
MR
1205neon_deps="arm"
1206
e241ba14 1207mmi_deps="mips"
808fa33c
MR
1208
1209altivec_deps="ppc"
1210ppc4xx_deps="ppc"
1211
1212vis_deps="sparc"
1213
7f8c3d1f 1214x86_64_suggest="cmov fast_cmov"
808fa33c
MR
1215amd3dnow_deps="mmx"
1216amd3dnowext_deps="amd3dnow"
9eeed841 1217mmx_deps="x86"
75aa95a6 1218mmx2_deps="mmx"
75aa95a6
DB
1219sse_deps="mmx"
1220ssse3_deps="sse"
87f1355f 1221avx_deps="ssse3"
9eeed841 1222
59782b82 1223aligned_stack_if_any="ppc x86"
e939cedd 1224fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
669b5583 1225fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
e939cedd 1226fast_unaligned_if_any="armv6 ppc x86"
669b5583 1227
89e053f8 1228need_memalign="altivec neon sse"
6fec122a 1229inline_asm_deps="!tms470"
89e053f8 1230
b462d132
MR
1231symver_if_any="symver_asm_label symver_gnu_asm"
1232
26fbcc85 1233# subsystems
dc609252 1234dct_select="rdft"
26fbcc85
MR
1235mdct_select="fft"
1236rdft_select="fft"
1237
5666fd73 1238# decoders / encoders / hardware accelerators
4538729a
MR
1239aac_decoder_select="mdct rdft sinewin"
1240aac_encoder_select="mdct sinewin"
136e19e1 1241aac_latm_decoder_select="aac_decoder aac_latm_parser"
6d9f52b2 1242ac3_decoder_select="mdct ac3dsp ac3_parser"
a5444fee
MR
1243ac3_encoder_select="mdct ac3dsp"
1244ac3_fixed_encoder_select="ac3dsp"
f4d608e3 1245alac_encoder_select="lpc"
b781cc12 1246amrnb_decoder_select="lsp"
2b2a597e 1247amrwb_decoder_select="lsp"
4538729a 1248atrac1_decoder_select="mdct sinewin"
26fbcc85
MR
1249atrac3_decoder_select="mdct"
1250binkaudio_dct_decoder_select="mdct rdft dct"
1251binkaudio_rdft_decoder_select="mdct rdft"
4f034993 1252cavs_decoder_select="golomb"
4538729a 1253cook_decoder_select="mdct sinewin"
2eef7c62 1254cscd_decoder_suggest="zlib"
26fbcc85 1255dca_decoder_select="mdct"
e8ed9b7a 1256dnxhd_encoder_select="aandct"
2eef7c62 1257dxa_decoder_select="zlib"
baf91bb9 1258eac3_decoder_select="ac3_decoder"
84c04e25 1259eamad_decoder_select="aandct"
e8ed9b7a 1260eatgq_decoder_select="aandct"
d52b39c7 1261eatqi_decoder_select="aandct"
4f034993
MR
1262ffv1_decoder_select="golomb"
1263flac_decoder_select="golomb"
f4d608e3 1264flac_encoder_select="golomb lpc"
2eef7c62
AJ
1265flashsv_decoder_select="zlib"
1266flashsv_encoder_select="zlib"
4414137e 1267flv_decoder_select="h263_decoder"
4d4b4bd1 1268flv_encoder_select="h263_encoder"
3447f12d 1269fraps_decoder_select="huffman"
e8ed9b7a 1270h261_encoder_select="aandct"
7f647ae0 1271h263_decoder_select="h263_parser"
e8ed9b7a 1272h263_encoder_select="aandct"
95a61cfc 1273h263_vaapi_hwaccel_select="vaapi h263_decoder"
4414137e 1274h263i_decoder_select="h263_decoder"
fe629c2d 1275h263p_encoder_select="h263_encoder"
4a384de5 1276h264_decoder_select="golomb h264dsp h264pred"
92c6a099
LA
1277h264_dxva2_hwaccel_deps="dxva2api_h"
1278h264_dxva2_hwaccel_select="dxva2 h264_decoder"
17492d5e 1279h264_vaapi_hwaccel_select="vaapi"
95a61cfc 1280h264_vdpau_decoder_select="vdpau h264_decoder"
47a158cb 1281imc_decoder_select="fft mdct"
4f034993
MR
1282jpegls_decoder_select="golomb"
1283jpegls_encoder_select="golomb"
e8ed9b7a 1284ljpeg_encoder_select="aandct"
4f034993 1285loco_decoder_select="golomb"
e8ed9b7a 1286mjpeg_encoder_select="aandct"
2cca233b 1287mlp_decoder_select="mlp_parser"
d9da8f10
AJ
1288mp1float_decoder_select="dct"
1289mp2float_decoder_select="dct"
1290mp3adufloat_decoder_select="dct"
1291mp3float_decoder_select="dct"
1292mp3on4float_decoder_select="dct"
e8ed9b7a
DB
1293mpeg1video_encoder_select="aandct"
1294mpeg2video_encoder_select="aandct"
4414137e 1295mpeg4_decoder_select="h263_decoder mpeg4video_parser"
c37de5e1 1296mpeg4_encoder_select="h263_encoder"
95a61cfc 1297mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
95a61cfc 1298mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
164aab02
LA
1299mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1300mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
95a61cfc 1301mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
95a61cfc 1302mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
70e0c871 1303mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
8f6f050a 1304mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
4d8eecf4 1305mpeg_xvmc_decoder_select="mpegvideo_decoder"
4414137e 1306msmpeg4v1_decoder_select="h263_decoder"
4e169d89 1307msmpeg4v1_encoder_select="h263_encoder"
4414137e 1308msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1309msmpeg4v2_encoder_select="h263_encoder"
4414137e 1310msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1311msmpeg4v3_encoder_select="h263_encoder"
4538729a
MR
1312nellymoser_decoder_select="mdct sinewin"
1313nellymoser_encoder_select="mdct sinewin"
2eef7c62
AJ
1314png_decoder_select="zlib"
1315png_encoder_select="zlib"
b781cc12 1316qcelp_decoder_select="lsp"
26fbcc85 1317qdm2_decoder_select="mdct rdft"
31ed3f1f 1318ra_144_encoder_select="lpc"
a8beb22f 1319rv10_decoder_select="h263_decoder"
b2bf38b4 1320rv10_encoder_select="h263_encoder"
a8beb22f 1321rv20_decoder_select="h263_decoder"
b2bf38b4 1322rv20_encoder_select="h263_encoder"
4a384de5
JGG
1323rv30_decoder_select="golomb h264pred"
1324rv40_decoder_select="golomb h264pred"
4f034993 1325shorten_decoder_select="golomb"
b781cc12 1326sipr_decoder_select="lsp"
05aec7bb
MR
1327snow_decoder_select="dwt"
1328snow_encoder_select="aandct dwt"
19ecfb8a 1329svq1_encoder_select="aandct"
4a384de5 1330svq3_decoder_select="golomb h264dsp h264pred"
bee2eac5 1331svq3_decoder_suggest="zlib"
4eef77c1 1332theora_decoder_select="vp3_decoder"
2eef7c62
AJ
1333tiff_decoder_suggest="zlib"
1334tiff_encoder_suggest="zlib"
aec09a00 1335truehd_decoder_select="mlp_decoder"
2eef7c62 1336tscc_decoder_select="zlib"
4538729a 1337twinvq_decoder_select="mdct lsp sinewin"
f95bfab0 1338vc1_decoder_select="h263_decoder"
9104cd51 1339vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
f0f86627 1340vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
95a61cfc 1341vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
95a61cfc 1342vc1_vdpau_decoder_select="vdpau vc1_decoder"
26fbcc85
MR
1343vorbis_decoder_select="mdct"
1344vorbis_encoder_select="mdct"
3447f12d 1345vp6_decoder_select="huffman"
e82dc4c9
DB
1346vp6a_decoder_select="vp6_decoder"
1347vp6f_decoder_select="vp6_decoder"
4a384de5 1348vp8_decoder_select="h264pred"
4538729a
MR
1349wmapro_decoder_select="mdct sinewin"
1350wmav1_decoder_select="mdct sinewin"
1351wmav1_encoder_select="mdct sinewin"
1352wmav2_decoder_select="mdct sinewin"
1353wmav2_encoder_select="mdct sinewin"
1354wmavoice_decoder_select="lsp rdft dct mdct sinewin"
f95bfab0 1355wmv1_decoder_select="h263_decoder"
665507aa 1356wmv1_encoder_select="h263_encoder"
f95bfab0 1357wmv2_decoder_select="h263_decoder"
1746e2a9 1358wmv2_encoder_select="h263_encoder"
015f8ee0 1359wmv3_decoder_select="vc1_decoder"
f0f86627 1360wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
015f8ee0
DB
1361wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1362wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2eef7c62
AJ
1363zlib_decoder_select="zlib"
1364zlib_encoder_select="zlib"
1365zmbv_decoder_select="zlib"
1366zmbv_encoder_select="zlib"
30fd06be 1367
0afab17e 1368vaapi_deps="va_va_h"
c89c96e9
MR
1369vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1370
28b80940 1371# parsers
4a384de5 1372h264_parser_select="golomb h264dsp h264pred"
28b80940 1373
912f3148 1374# external libraries
1b71f045 1375libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1376libdirac_encoder_deps="libdirac"
c9171a83 1377libfaac_encoder_deps="libfaac"
299c77d5
MR
1378libgsm_decoder_deps="libgsm"
1379libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1380libgsm_ms_decoder_deps="libgsm"
1381libgsm_ms_encoder_deps="libgsm"
1cc60c47 1382libmp3lame_encoder_deps="libmp3lame"
0b175caa
DB
1383libopencore_amrnb_decoder_deps="libopencore_amrnb"
1384libopencore_amrnb_encoder_deps="libopencore_amrnb"
1385libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1386libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1387libschroedinger_decoder_deps="libschroedinger"
1388libschroedinger_encoder_deps="libschroedinger"
ae14f311 1389libspeex_decoder_deps="libspeex"
150d2772 1390libtheora_encoder_deps="libtheora"
d89e738a 1391libvo_aacenc_encoder_deps="libvo_aacenc"
f502ff3f 1392libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
b0caf888 1393libvorbis_encoder_deps="libvorbis"
8299a7f8 1394libvpx_decoder_deps="libvpx"
ee0e9146 1395libvpx_encoder_deps="libvpx"
1cc60c47 1396libx264_encoder_deps="libx264"
de295976 1397libxavs_encoder_deps="libxavs"
1cc60c47 1398libxvid_encoder_deps="libxvid"
30fd06be 1399
912f3148 1400# demuxers / muxers
c2dd0e9e 1401ac3_demuxer_select="ac3_parser"
647c2356 1402asf_stream_muxer_select="asf_muxer"
4e622dea 1403avisynth_demuxer_deps="avisynth"
c2dd0e9e 1404dirac_demuxer_select="dirac_parser"
5b423887 1405eac3_demuxer_select="ac3_parser"
c2dd0e9e 1406flac_demuxer_select="flac_parser"
647c2356 1407ipod_muxer_select="mov_muxer"
4e622dea
SS
1408libnut_demuxer_deps="libnut"
1409libnut_muxer_deps="libnut"
647c2356 1410matroska_audio_muxer_select="matroska_muxer"
4e622dea
SS
1411matroska_demuxer_suggest="zlib bzlib"
1412mov_demuxer_suggest="zlib"
c2dd0e9e 1413mp3_demuxer_select="mpegaudio_parser"
647c2356
DB
1414mp4_muxer_select="mov_muxer"
1415mpegtsraw_demuxer_select="mpegts_demuxer"
1416mxf_d10_muxer_select="mxf_muxer"
24ca518b 1417ogg_demuxer_select="golomb"
647c2356 1418psp_muxer_select="mov_muxer"
44594cc7 1419rtp_demuxer_select="sdp_demuxer"
44b70ce5
MS
1420rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1421rtsp_demuxer_select="http_protocol rtpdec"
1422rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
01c8d258 1423sap_demuxer_select="sdp_demuxer"
2aab70c4 1424sap_muxer_select="rtp_muxer rtp_protocol"
44b70ce5 1425sdp_demuxer_select="rtpdec"
f1e94694 1426spdif_muxer_select="aac_parser"
647c2356
DB
1427tg2_muxer_select="mov_muxer"
1428tgp_muxer_select="mov_muxer"
6bdaa5f4 1429w64_demuxer_deps="wav_demuxer"
4e622dea
SS
1430
1431# indevs / outdevs
38e54a75 1432alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
38e54a75 1433alsa_outdev_deps="alsa_asoundlib_h"
38e54a75 1434bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
38e54a75 1435dv1394_indev_deps="dv1394 dv_demuxer"
c6f95144 1436fbdev_indev_deps="linux_fb_h"
38e54a75 1437jack_indev_deps="jack_jack_h"
38e54a75 1438libdc1394_indev_deps="libdc1394"
38e54a75
SS
1439oss_indev_deps_any="soundcard_h sys_soundcard_h"
1440oss_outdev_deps_any="soundcard_h sys_soundcard_h"
15d59d2c
B
1441sndio_indev_deps="sndio_h"
1442sndio_outdev_deps="sndio_h"
38e54a75
SS
1443v4l_indev_deps="linux_videodev_h"
1444v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
ec1ee802 1445vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
a1b3c5a3 1446vfwcap_indev_extralibs="-lavicap32"
38e54a75 1447x11_grab_device_indev_deps="x11grab XShmCreateImage"
781c1aa6 1448x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
30fd06be 1449
912f3148 1450# protocols
3fff6382 1451gopher_protocol_deps="network"
c08fb000 1452http_protocol_deps="network"
279a0c97 1453http_protocol_select="tcp_protocol"
c60a2d70 1454mmsh_protocol_select="http_protocol"
b4cf3f6c 1455mmst_protocol_deps="network"
deeb7012
MS
1456rtmp_protocol_select="tcp_protocol"
1457rtp_protocol_select="udp_protocol"
c08fb000
AB
1458tcp_protocol_deps="network"
1459udp_protocol_deps="network"
1460
6ebf0bfc 1461# filters
13fabd7a 1462blackframe_filter_deps="gpl"
68b79bfc 1463cropdetect_filter_deps="gpl"
2e5ff4d0 1464frei0r_filter_deps="frei0r dlopen strtok_r"
a42bb9d6 1465frei0r_src_filter_deps="frei0r dlopen strtok_r"
a4dc7aa5 1466hqdn3d_filter_deps="gpl"
ba763783 1467scale_filter_deps="swscale"
cf69ad35 1468ocv_filter_deps="libopencv"
acbac567 1469yadif_filter_deps="gpl"
6ebf0bfc 1470
5a0f7131
MR
1471# libraries
1472avdevice_deps="avcodec avformat"
1473avformat_deps="avcodec"
f7679c54 1474
912f3148 1475# programs
5a0f7131 1476ffmpeg_deps="avcodec avformat swscale"
21ae6790 1477ffmpeg_select="buffer_filter"
5a0f7131 1478ffplay_deps="avcodec avformat swscale sdl"
43689902 1479ffplay_select="rdft"
44b2784f 1480ffprobe_deps="avcodec avformat"
1ff49c23 1481ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
4ec45764 1482ffserver_extralibs='$ldl'
a2830dca 1483
c73f65d9 1484doc_deps="texi2html"
912f3148 1485
57442411
MR
1486# tests
1487
1488test_deps(){
1489 suf1=$1
1490 suf2=$2
1491 shift 2
1492 for v; do
1493 dep=${v%=*}
1494 tests=${v#*=}
1495 for name in ${tests}; do
1496 eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1497 done
1498 done
1499}
1500
9c261f83
SS
1501set_ne_test_deps(){
1502 eval ${1}_be_test_deps="bigendian"
1503 eval ${1}_le_test_deps="!bigendian"
1504}
1505
57442411 1506test_deps _encoder _decoder \
57442411
MR
1507 adpcm_g726=g726 \
1508 adpcm_ima_qt \
1509 adpcm_ima_wav \
1510 adpcm_ms \
1511 adpcm_swf \
1512 adpcm_yamaha=adpcm_yam \
1513 alac \
1514 asv1 \
1515 asv2 \
1516 bmp \
a7638957 1517 dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd" \
57442411
MR
1518 dvvideo="dv dv50" \
1519 ffv1 \
1520 flac \
1521 flashsv \
1522 flv \
1523 gif \
1524 h261 \
1525 h263="h263 h263p" \
1526 huffyuv \
1527 jpegls \
1528 mjpeg="jpg mjpeg ljpeg" \
1529 mp2 \
1530 mpeg1video="mpeg mpeg1b" \
1531 mpeg2video="mpeg2 mpeg2thread" \
1532 mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc" \
c0b16605 1533 msmpeg4v3=msmpeg4 \
57442411
MR
1534 msmpeg4v2 \
1535 pbm=pbmpipe \
1536 pcx \
1537 pgm="pgm pgmpipe" \
f0f54c29 1538 png \
57442411
MR
1539 ppm="ppm ppmpipe" \
1540 rawvideo="rgb yuv" \
1541 roq \
1542 rv10 \
1543 rv20 \
1544 sgi \
1545 snow="snow snowll" \
1546 svq1 \
1547 targa=tga \
1548 tiff \
1549 wmav1 \
1550 wmav2 \
1551 wmv1 \
1552 wmv2 \
1553
1554test_deps _muxer _demuxer \
1555 aiff \
1556 pcm_alaw=alaw \
1557 asf \
1558 au \
1559 avi \
1560 dv=dv_fmt \
1561 ffm \
1562 flv=flv_fmt \
1563 gxf \
1564 matroska=mkv \
1565 mmf \
1566 mov \
1567 pcm_mulaw=mulaw \
1568 mxf \
1569 nut \
1570 ogg \
1571 rawvideo=pixfmt \
1572 rm \
1573 swf \
1574 mpegts=ts \
1575 voc \
1576 wav \
1577 yuv4mpegpipe=yuv4mpeg \
1578
6fd96d1a 1579ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
57442411 1580mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
9c261f83
SS
1581
1582set_ne_test_deps pixdesc
b5670209 1583set_ne_test_deps pixfmts_copy
213a4cbb 1584set_ne_test_deps pixfmts_crop
a1e171df 1585set_ne_test_deps pixfmts_hflip
213a4cbb
SS
1586set_ne_test_deps pixfmts_null
1587set_ne_test_deps pixfmts_pad
1588set_ne_test_deps pixfmts_scale
1589set_ne_test_deps pixfmts_vflip
57442411 1590
de6d9b64 1591# default parameters
8a608357 1592
19bd477d 1593logfile="config.log"
8a608357
MR
1594
1595# installation paths
c9d19248
MR
1596prefix_default="/usr/local"
1597bindir_default='${prefix}/bin'
14a8acf1 1598datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1599incdir_default='${prefix}/include'
1600libdir_default='${prefix}/lib'
1601mandir_default='${prefix}/share/man'
1602shlibdir_default="$libdir_default"
8a608357
MR
1603
1604# toolchain
121d78d0 1605ar_default="ar"
13c7df3d 1606cc_default="gcc"
a3d7c197 1607cc_version=\"unknown\"
9da6609f 1608host_cc_default="gcc"
11e6d03a 1609ln_s="ln -sf"
89641463 1610nm_default="nm"
11e6d03a 1611objformat="elf"
3f8040db 1612pkg_config_default=pkg-config
be7109c1 1613ranlib="ranlib"
11e6d03a 1614yasmexe="yasm"
301ab19d 1615nogas=":"
8a608357 1616
8182dc34
MR
1617nm_opts='-g'
1618
8a608357 1619# machine
8d4c00ed 1620arch_default=$(uname -m)
38d0a8aa 1621cpu="generic"
8a608357 1622
8a608357 1623# OS
8d4c00ed
MR
1624target_os_default=$(tolower $(uname -s))
1625host_os=$target_os_default
8a608357 1626
8a608357 1627# configurable options
5a0f7131
MR
1628enable avcodec
1629enable avdevice
cccc039f 1630enable avfilter
5a0f7131 1631enable avformat
dc4f5a1c 1632enable avutil
c8a4ae00 1633enable asm
497237c7 1634enable debug
c73f65d9 1635enable doc
aa033b1e 1636enable fastdiv
497237c7
RP
1637enable ffmpeg
1638enable ffplay
336ce917 1639enable ffprobe
497237c7 1640enable ffserver
497237c7
RP
1641enable mpegaudio_hp
1642enable network
8400d6b8 1643enable optimizations
497237c7 1644enable protocols
530dc538 1645enable static
5a0f7131 1646enable swscale
a9ddb5b1 1647enable swscale_alpha
8a608357 1648
8a608357 1649# build settings
9987769a 1650SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1651FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1652LIBPREF="lib"
1653LIBSUF=".a"
c5f14466
RP
1654FULLNAME='$(NAME)$(BUILDSUF)'
1655LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1656SLIBPREF="lib"
1657SLIBSUF=".so"
c5f14466 1658SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1659SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1660SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
6cfac0e9 1661LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1662
7e6c86e6
MR
1663CC_O='-o $@'
1664
f0125de9 1665host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
9da6609f
MR
1666host_libs='-lm'
1667
9b861379 1668target_path='$(CURDIR)'
a7ada2ba 1669
a158446b
MR
1670# since the object filename is not given with the -MM flag, the compiler
1671# is only able to print the basename, and we must add the path ourselves
c1c3933a 1672DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
d8059267 1673DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
315c741d 1674
c597172e 1675# find source path
5e622c40 1676source_path="$(dirname "$0")"
497237c7 1677enable source_path_used
24524f36 1678if test -f configure; then
5e622c40 1679 source_path="$(pwd)"
497237c7 1680 disable source_path_used
c597172e 1681else
5e622c40 1682 source_path="$(cd "$source_path"; pwd)"
c597172e 1683 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1684 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1685 test -e "$source_path/config.h" &&
1686 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1687fi
1688
13cbe2c0 1689for v in "$@"; do
b04251c5
MR
1690 r=${v#*=}
1691 l=${v%"$r"}
1692 r=$(sh_quote "$r")
29ba0911 1693 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
13cbe2c0 1694done
c597172e 1695
73ef8980
MR
1696find_things(){
1697 thing=$1
1698 pattern=$2
1699 file=$source_path/$3
932ccf39 1700 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1701}
1702
1703ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1704DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1705HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1706PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1707BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1708MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1709DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
1710OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1711INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 1712PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1713FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1714
57442411 1715find_tests(){
b9d5f1b7 1716 map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
57442411
MR
1717}
1718
1719ACODEC_TESTS=$(find_tests acodec)
1720VCODEC_TESTS=$(find_tests vsynth1)
1721LAVF_TESTS=$(find_tests lavf)
48c28162 1722LAVFI_TESTS=$(find_tests lavfi)
b9d5f1b7 1723SEEK_TESTS=$(find_tests seek seek_)
57442411 1724
40fe5019
MR
1725pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1726
8469ae22
MR
1727for n in $COMPONENT_LIST; do
1728 v=$(toupper ${n%s})_LIST
1729 eval enable \$$v
1730 eval ${n}_if_any="\$$v"
1731done
1732
b9d5f1b7 1733enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
c597172e
MR
1734
1735die_unknown(){
1736 echo "Unknown option \"$1\"."
1737 echo "See $0 --help for available options."
1738 exit 1
1739}
1740
794f8e97 1741show_list() {
bf0c4afa
RP
1742 suffix=_$1
1743 shift
2b444ea7 1744 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
794f8e97
PI
1745 exit 0
1746}
1747
c597172e 1748for opt do
7483e694
DB
1749 optval="${opt#*=}"
1750 case "$opt" in
0f010b2f 1751 --extra-ldflags=*) add_ldflags $optval
7483e694 1752 ;;
0f010b2f 1753 --extra-libs=*) add_extralibs $optval
7483e694 1754 ;;
8fb1cb58 1755 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1756 ;;
40bcf4c7
BL
1757 --enable-debug=*) debuglevel="$optval"
1758 ;;
36e2dea0 1759 --disable-everything)
1b15dc3c 1760 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
36e2dea0 1761 ;;
7483e694 1762 --enable-*=*|--disable-*=*)
8b93ddc3 1763 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
be8f2501
MR
1764 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1765 eval list=\$$(toupper $thing)_LIST
8b93ddc3
MR
1766 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1767 $action $(filter "$name" $list)
7483e694
DB
1768 ;;
1769 --enable-?*|--disable-?*)
5e622c40 1770 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55 1771 if is_in $option $COMPONENT_LIST; then
fed5d54b 1772 test $action = disable && action=unset
e3773a55
MR
1773 eval $action \$$(toupper ${option%s})_LIST
1774 elif is_in $option $CMDLINE_SELECT; then
1775 $action $option
1776 else
1777 die_unknown $opt
1778 fi
7483e694
DB
1779 ;;
1780 --list-*)
1781 NAME="${opt#--list-}"
1782 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1783 NAME=${NAME%s}
1784 eval show_list $NAME \$$(toupper $NAME)_LIST
1785 ;;
1786 --help|-h) show_help
1787 ;;
1788 *)
884a36a7 1789 optname="${opt%%=*}"
26759c44
MR
1790 optname="${optname#--}"
1791 optname=$(echo "$optname" | sed 's/-/_/g')
89f2932b
MR
1792 if is_in $optname $CMDLINE_SET; then
1793 eval $optname='$optval'
1794 elif is_in $optname $CMDLINE_APPEND; then
1795 append $optname "$optval"
1796 else
1797 die_unknown $opt
1798 fi
7483e694
DB
1799 ;;
1800 esac
c597172e
MR
1801done
1802
bcea99bb
MR
1803disabled logging && logfile=/dev/null
1804
29ba0911 1805echo "# $0 $LIBAV_CONFIGURATION" > $logfile
bcea99bb
MR
1806set >> $logfile
1807
9da6609f
MR
1808test -n "$cross_prefix" && enable cross_compile
1809
8d4c00ed
MR
1810if enabled cross_compile; then
1811 test -n "$arch" && test -n "$target_os" ||
1812 die "Must specify target arch and OS when cross-compiling"
1813fi
1814
1815set_default arch target_os
1816
121d78d0 1817ar_default="${cross_prefix}${ar_default}"
11e6d03a 1818cc_default="${cross_prefix}${cc_default}"
20e0ed95 1819nm_default="${cross_prefix}${nm_default}"
3f8040db 1820pkg_config_default="${cross_prefix}${pkg_config_default}"
adb2b908 1821ranlib="${cross_prefix}${ranlib}"
adb2b908 1822
c5200f17
MR
1823sysinclude_default="${sysroot}/usr/include"
1824
e0be794a 1825set_default cc nm pkg_config sysinclude
9da6609f
MR
1826enabled cross_compile || host_cc_default=$cc
1827set_default host_cc
13c7df3d 1828
82bb3329
MR
1829exesuf() {
1830 case $1 in
1c69c79f 1831 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
82bb3329
MR
1832 esac
1833}
1834
1835EXESUF=$(exesuf $target_os)
1836HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1837
e4e69e0b 1838# set temporary file name
a49d42c2 1839: ${TMPDIR:=$TEMPDIR}
c51fafa1 1840: ${TMPDIR:=$TMP}
a49d42c2 1841: ${TMPDIR:=/tmp}
e4e69e0b 1842
a210bce2 1843if ! check_cmd mktemp -u XXXXXX; then
54460a83
MR
1844 # simple replacement for missing mktemp
1845 # NOT SAFE FOR GENERAL USE
1846 mktemp(){
09a5c245 1847 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
54460a83
MR
1848 }
1849fi
1850
1851tmpfile(){
1852 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1853 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 1854 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
1855 append TMPFILES $tmp
1856 eval $1=$tmp
1857}
1858
1859trap 'rm -f -- $TMPFILES' EXIT
54460a83
MR
1860
1861tmpfile TMPC .c
1862tmpfile TMPE $EXESUF
1863tmpfile TMPH .h
1864tmpfile TMPO .o
1865tmpfile TMPS .S
a482e61b 1866tmpfile TMPV .ver
54460a83 1867tmpfile TMPSH .sh
55127e7b 1868tmpfile TMPASM .asm
54460a83
MR
1869
1870unset -f mktemp
e4e69e0b 1871
fb3c4ffc
MR
1872chmod +x $TMPE
1873
993f2d0f
MR
1874# make sure we can execute files in $TMPDIR
1875cat > $TMPSH 2>> $logfile <<EOF
1876#! /bin/sh
1877EOF
1878chmod +x $TMPSH >> $logfile 2>&1
1879if ! $TMPSH >> $logfile 2>&1; then
1880 cat <<EOF
1881Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1882variable to another directory and make sure that it is not mounted noexec.
1883EOF
1884 die "Sanity test failed."
1885fi
993f2d0f 1886
19b4c628
MR
1887filter_cflags=echo
1888filter_cppflags=echo
1889filter_asflags=echo
1890
613a4e3f
MR
1891if $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1892 cc_type=llvm_gcc
1893 cc_version=__VERSION__
1894 gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1895 cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1896 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1897 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1898 speed_cflags='-O3'
1899 size_cflags='-Os'
1900elif $cc -v 2>&1 | grep -qi ^gcc; then
629687f6 1901 cc_type=gcc
a3d7c197 1902 cc_version=__VERSION__
5d57846b
MR
1903 gcc_version=$($cc --version | head -n1)
1904 gcc_basever=$($cc -dumpversion)
3ad464bf 1905 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
5d57846b
MR
1906 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
1907 cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
aef6bd1b
MR
1908 if ! $cc -dumpversion | grep -q '^2\.'; then
1909 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1910 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1911 fi
14ca9cd0
MR
1912 speed_cflags='-O3'
1913 size_cflags='-Os'
629687f6
MR
1914elif $cc --version 2>/dev/null | grep -q Intel; then
1915 cc_type=icc
6e3fa35d 1916 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
bb5cecdc 1917 cc_ident=$($cc --version | head -n1)
bdefad73 1918 icc_version=$($cc -dumpversion)
07dec06e
MR
1919 CC_DEPFLAGS='-MMD'
1920 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1921 speed_cflags='-O3'
1922 size_cflags='-Os'
b05394a0 1923 noopt_cflags='-O1'
629687f6
MR
1924elif $cc -v 2>&1 | grep -q xlc; then
1925 cc_type=xlc
6e3fa35d 1926 cc_version="AV_STRINGIFY(__IBMC__)"
bb5cecdc 1927 cc_ident=$($cc -qversion 2>/dev/null | head -n1)
14ca9cd0
MR
1928 speed_cflags='-O5'
1929 size_cflags='-O5 -qcompact'
df442a8d
MR
1930elif $cc -V 2>/dev/null | grep -q Compaq; then
1931 cc_type=ccc
6e3fa35d 1932 cc_version="AV_STRINGIFY(__DECC_VER)"
bb5cecdc 1933 cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
d8059267 1934 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
03754fcd 1935 debuglevel=3
df442a8d 1936 add_ldflags -Wl,-z,now # calls to libots crash without this
14ca9cd0
MR
1937 speed_cflags='-fast'
1938 size_cflags='-O1'
6a0d5493 1939elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
03e37762
MR
1940 test -d "$sysroot" || die "No valid sysroot specified."
1941 cc_type=armcc
6e3fa35d 1942 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
bb5cecdc 1943 cc_ident=$($cc --vsn | head -n1)
03e37762
MR
1944 armcc_conf="$PWD/armcc.conf"
1945 $cc --arm_linux_configure \
1946 --arm_linux_config_file="$armcc_conf" \
1947 --configure_sysroot="$sysroot" \
1948 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1949 die "Error creating armcc configuration file."
bcafde61 1950 $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
03e37762 1951 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1952 as_default="${cross_prefix}gcc"
07dec06e
MR
1953 CC_DEPFLAGS='-MMD'
1954 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1955 speed_cflags='-O3'
1956 size_cflags='-Os'
d0f0f628 1957 filter_asflags="filter_out -W${armcc_opt}*"
6fec122a
MR
1958elif $cc -version 2>/dev/null | grep -q TMS470; then
1959 cc_type=tms470
6e3fa35d 1960 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
bb5cecdc 1961 cc_ident=$($cc -version | head -n1 | tr -s ' ')
6fec122a
MR
1962 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1963 CC_O='-fr=$(@D)'
1964 as_default="${cross_prefix}gcc"
1965 ld_default="${cross_prefix}gcc"
6fec122a
MR
1966 TMPO=$(basename $TMPC .c).o
1967 append TMPFILES $TMPO
1968 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
07dec06e
MR
1969 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1970 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
1971 speed_cflags='-O3 -mf=5'
1972 size_cflags='-O3 -mf=2'
6fec122a
MR
1973 filter_cflags=tms470_flags
1974 tms470_flags(){
1975 for flag; do
1976 case $flag in
1977 -march=*|-mcpu=*)
1978 case "${flag#*=}" in
1979 armv7-a|cortex-a*) echo -mv=7a8 ;;
1980 armv7-r|cortex-r*) echo -mv=7r4 ;;
1981 armv7-m|cortex-m*) echo -mv=7m3 ;;
1982 armv6*|arm11*) echo -mv=6 ;;
1983 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1984 echo -mv=5e ;;
1985 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1986 esac
1987 ;;
1988 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1989 -mfpu=vfp) echo --float_support=vfpv2 ;;
5fcb865b 1990 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
a2709020 1991 -msoft-float) echo --float_support=vfplib ;;
14ca9cd0 1992 -O[0-3]|-mf=*) echo $flag ;;
6fec122a 1993 -g) echo -g -mn ;;
587d24ff 1994 -pds=*) echo $flag ;;
6fec122a
MR
1995 esac
1996 done
1997 }
06da6943
DC
1998elif $cc -v 2>&1 | grep -q clang; then
1999 cc_type=clang
b67a8f49
DC
2000 $cc -dM -E $TMPC | grep -q __clang_version__ &&
2001 cc_version=__clang_version__ || cc_version=__VERSION__
bb5cecdc 2002 cc_ident=$($cc --version | head -n1)
06da6943
DC
2003 CC_DEPFLAGS='-MMD'
2004 AS_DEPFLAGS='-MMD'
14ca9cd0
MR
2005 speed_cflags='-O3'
2006 size_cflags='-Os'
2a472e9c
MK
2007elif $cc -V 2>&1 | grep -q Sun; then
2008 cc_type=suncc
2009 cc_version="AV_STRINGIFY(__SUNPRO_C)"
448f5b83 2010 cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
faa374b7 2011 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2a472e9c 2012 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
14ca9cd0
MR
2013 speed_cflags='-O5'
2014 size_cflags='-O5 -xspace'
03279bbe
MK
2015 filter_cflags=suncc_flags
2016 suncc_flags(){
2017 for flag; do
2018 case $flag in
2019 -march=*|-mcpu=*)
2020 case "${flag#*=}" in
2021 native) echo -xtarget=native ;;
87ddc38b 2022 v9|niagara) echo -xarch=sparc ;;
03279bbe 2023 ultrasparc) echo -xarch=sparcvis ;;
87ddc38b 2024 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
03279bbe
MK
2025 i586|pentium) echo -xchip=pentium ;;
2026 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2027 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2028 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2029 pentium4*) echo -xtarget=pentium4 ;;
2030 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2031 *-sse3) echo -xarch=sse3 ;;
2032 core2) echo -xarch=ssse3 -xchip=core2 ;;
2033 amdfam10|barcelona) echo -xarch=sse4_1 ;;
2034 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2035 k8|opteron|athlon64|athlon-fx)
2036 echo -xarch=sse2a ;;
2037 athlon*) echo -xarch=pentium_proa ;;
2038 esac
2039 ;;
2040 -std=c99) echo -xc99 ;;
2041 -fomit-frame-pointer) echo -xregs=frameptr ;;
2042 -fPIC) echo -KPIC -xcode=pic32 ;;
03279bbe
MK
2043 -W*,*) echo $flag ;;
2044 -f*-*|-W*) ;;
2045 *) echo $flag ;;
2046 esac
2047 done
2048 }
180ec37d 2049elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
349d78fe
MR
2050 cc_type=pathscale
2051 cc_version=__PATHSCALE__
2052 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2053 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2054 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2055 speed_cflags='-O2'
2056 size_cflags='-Os'
6de163e9
MR
2057elif $cc -v 2>&1 | grep -q Open64; then
2058 cc_type=open64
2059 cc_version=__OPEN64__
2060 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2061 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2062 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2063 speed_cflags='-O2'
2064 size_cflags='-Os'
629687f6
MR
2065fi
2066
851ffa80
MR
2067test -n "$cc_type" && enable $cc_type ||
2068 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
629687f6 2069
75bafbac 2070: ${as_default:=$cc}
50567afa 2071: ${dep_cc_default:=$cc}
684b28e0 2072: ${ld_default:=$cc}
121d78d0 2073set_default ar as dep_cc ld
75800dce 2074
07dec06e
MR
2075test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2076test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2077
7f32f40c 2078add_cflags $extra_cflags
2f2e6c7c 2079add_asflags $extra_cflags
7f32f40c 2080
154d432c
MR
2081if test -n "$sysroot"; then
2082 case "$cc_type" in
00ba041c 2083 gcc|llvm_gcc|clang)
467256f2 2084 add_cppflags --sysroot="$sysroot"
154d432c
MR
2085 add_ldflags --sysroot="$sysroot"
2086 ;;
6fec122a
MR
2087 tms470)
2088 add_cppflags -I"$sysinclude"
2089 add_ldflags --sysroot="$sysroot"
2090 ;;
154d432c
MR
2091 esac
2092fi
2093
d22c13a8
MR
2094if test "$cpu" = host; then
2095 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2096
2097 case "$cc_type" in
613a4e3f 2098 gcc|llvm_gcc)
d22c13a8
MR
2099 check_native(){
2100 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
27ce1be8
MR
2101 sed -n "/$1=/{
2102 s/.*$1=\\([^ ]*\\).*/\\1/
2103 p
2104 q
2105 }" $TMPE
d22c13a8
MR
2106 }
2107 cpu=$(check_native -march || check_native -mcpu)
2108 ;;
2109 esac
2110
2111 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2112fi
2113
e939cedd
MR
2114# Deal with common $arch aliases
2115case "$arch" in
2116 arm*)
2117 arch="arm"
2118 ;;
2119 mips|mipsel|IP*)
2120 arch="mips"
2121 ;;
47b1860e 2122 mips64*)
e939cedd
MR
2123 arch="mips"
2124 subarch="mips64"
2125 ;;
2126 parisc|hppa)
2127 arch="parisc"
2128 ;;
2129 parisc64|hppa64)
2130 arch="parisc"
2131 subarch="parisc64"
2132 ;;
2133 "Power Macintosh"|ppc|powerpc)
2134 arch="ppc"
2135 ;;
47b1860e 2136 ppc64|powerpc64)
e939cedd
MR
2137 arch="ppc"
2138 subarch="ppc64"
2139 ;;
2140 s390|s390x)
2141 arch="s390"
2142 ;;
2143 sh4|sh)
2144 arch="sh4"
2145 ;;
2146 sun4u|sparc64)
2147 arch="sparc"
2148 subarch="sparc64"
2149 ;;
d33ed7b3 2150 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
e939cedd
MR
2151 arch="x86"
2152 ;;
2153esac
2154
851ffa80 2155is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
343aef9b 2156enable $arch
e939cedd 2157
df5cdc24 2158# Add processor-specific flags
5d54c126
MR
2159if test "$cpu" = generic; then
2160 : do nothing
2161elif enabled ppc; then
343aef9b 2162
56348891
MR
2163 case $(tolower $cpu) in
2164 601|ppc601|powerpc601)
9dbd5c3d 2165 cpuflags="-mcpu=601"
64ad53ff 2166 disable altivec
9dbd5c3d 2167 ;;
56348891 2168 603*|ppc603*|powerpc603*)
9dbd5c3d 2169 cpuflags="-mcpu=603"
64ad53ff 2170 disable altivec
9dbd5c3d 2171 ;;
56348891 2172 604*|ppc604*|powerpc604*)
9dbd5c3d 2173 cpuflags="-mcpu=604"
64ad53ff 2174 disable altivec
9dbd5c3d 2175 ;;
56348891 2176 g3|75*|ppc75*|powerpc75*)
9dbd5c3d 2177 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
64ad53ff 2178 disable altivec
9dbd5c3d 2179 ;;
56348891 2180 g4|745*|ppc745*|powerpc745*)
9dbd5c3d
MR
2181 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2182 ;;
56348891 2183 74*|ppc74*|powerpc74*)
9dbd5c3d
MR
2184 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2185 ;;
56348891 2186 g5|970|ppc970|powerpc970|power4*)
9dbd5c3d
MR
2187 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2188 ;;
56348891 2189 cell)
9dbd5c3d
MR
2190 cpuflags="-mcpu=cell"
2191 enable ldbrx
2192 ;;
7b0b81a1
AL
2193 e500v2)
2194 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2195 disable altivec
2196 ;;
2197 e500)
2198 cpuflags="-mcpu=8540 -mhard-float"
2199 disable altivec
2200 ;;
9dbd5c3d 2201 esac
343aef9b
MR
2202
2203elif enabled x86; then
2204
9dbd5c3d
MR
2205 case $cpu in
2206 i[345]86|pentium)
2207 cpuflags="-march=$cpu"
2208 disable mmx
2209 ;;
2210 # targets that do NOT support conditional mov (cmov)
2211 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2212 cpuflags="-march=$cpu"
2213 disable cmov
2214 ;;
2215 # targets that do support conditional mov (cmov)
e90aa6ed 2216 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
9dbd5c3d
MR
2217 cpuflags="-march=$cpu"
2218 enable cmov
2219 enable fast_cmov
2220 ;;
2221 # targets that do support conditional mov but on which it's slow
2222 pentium4|pentium4m|prescott|nocona)
2223 cpuflags="-march=$cpu"
2224 enable cmov
2225 disable fast_cmov
2226 ;;
2227 esac
343aef9b
MR
2228
2229elif enabled sparc; then
2230
9dbd5c3d 2231 case $cpu in
26b7199e
MK
2232 niagara)
2233 cpuflags="-mcpu=$cpu"
2234 disable vis
2235 ;;
9dbd5c3d
MR
2236 sparc64)
2237 cpuflags="-mcpu=v9"
2238 ;;
2239 esac
343aef9b
MR
2240
2241elif enabled arm; then
2242
34ba23c9
MR
2243 case $cpu in
2244 armv*)
2245 cpuflags="-march=$cpu"
c2eae137 2246 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
34ba23c9
MR
2247 ;;
2248 *)
2249 cpuflags="-mcpu=$cpu"
c2eae137
MR
2250 case $cpu in
2251 cortex-a*) subarch=armv7a ;;
2252 cortex-r*) subarch=armv7r ;;
2253 cortex-m*) subarch=armv7m ;;
2254 arm11*) subarch=armv6 ;;
2255 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2256 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2257 esac
34ba23c9
MR
2258 ;;
2259 esac
343aef9b
MR
2260
2261elif enabled alpha; then
2262
34ba23c9 2263 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
343aef9b
MR
2264
2265elif enabled bfin; then
2266
34ba23c9 2267 cpuflags="-mcpu=$cpu"
343aef9b
MR
2268
2269elif enabled mips; then
2270
34ba23c9 2271 cpuflags="-march=$cpu"
343aef9b
MR
2272
2273elif enabled avr32; then
2274
9dbd5c3d
MR
2275 case $cpu in
2276 ap7[02]0[0-2])
2277 subarch="avr32_ap"
2278 cpuflags="-mpart=$cpu"
2279 ;;
2280 ap)
2281 subarch="avr32_ap"
2282 cpuflags="-march=$cpu"
2283 ;;
2284 uc3[ab]*)
2285 subarch="avr32_uc"
2286 cpuflags="-mcpu=$cpu"
2287 ;;
2288 uc)
2289 subarch="avr32_uc"
2290 cpuflags="-march=$cpu"
2291 ;;
2292 esac
df5cdc24 2293
343aef9b
MR
2294fi
2295
df5cdc24
MR
2296add_cflags $cpuflags
2297add_asflags $cpuflags
2298
993f2d0f
MR
2299# compiler sanity check
2300check_exec <<EOF
2301int main(void){ return 0; }
2302EOF
2303if test "$?" != 0; then
2304 echo "$cc is unable to create an executable file."
2305 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2306 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2307 echo "Only do this if you know what cross compiling means."
2308 fi
2309 die "C compiler test failed."
2310fi
2311
38a9c529 2312add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
e9b9a2f8 2313check_cflags -std=c99
50a334e4 2314check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
9d821fc2
DB
2315#include <stdlib.h>
2316EOF
50a334e4 2317check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
9d821fc2
DB
2318#include <stdlib.h>
2319EOF
e9b9a2f8 2320
f0125de9
MR
2321check_host_cflags -std=c99
2322
b24dbcbd 2323case "$arch" in
e939cedd 2324 alpha|ia64|mips|parisc|sparc)
8a3c8627 2325 spic=$shared
b24dbcbd 2326 ;;
e939cedd 2327 x86)
cfdb6148 2328 subarch="x86_32"
e939cedd 2329 check_cc <<EOF && subarch="x86_64"
58b3536d 2330 int test[(int)sizeof(char*) - 7];
cfdb6148 2331EOF
de27f4d9 2332 if test "$subarch" = "x86_64"; then
e939cedd 2333 spic=$shared
de27f4d9 2334 fi
b24dbcbd 2335 ;;
b24dbcbd
RP
2336esac
2337
343aef9b 2338enable $subarch
8a3c8627 2339enabled spic && enable pic
b24dbcbd 2340
7483e694 2341# OS specific
4f854758 2342case $target_os in
a1629e28 2343 haiku)
63ae7e7c 2344 prefix_default="/boot/common"
108caaaa 2345 network_extralibs="-lnetwork"
f59c4bd6 2346 host_libs=
a1629e28 2347 ;;
7483e694
DB
2348 sunos)
2349 FFSERVERLDFLAGS=""
9987769a 2350 SHFLAGS='-shared -Wl,-h,$$(@F)'
0600d30a 2351 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
7483e694 2352 network_extralibs="-lsocket -lnsl"
50a334e4 2353 add_cppflags -D__EXTENSIONS__
8182dc34 2354 nm_opts='-P -g'
7483e694
DB
2355 ;;
2356 netbsd)
a1e4b3f6 2357 disable symver
07a8eef6
MR
2358 oss_indev_extralibs="-lossaudio"
2359 oss_outdev_extralibs="-lossaudio"
2138dc99 2360 add_cppflags -D_XOPEN_SOURCE=600
7483e694
DB
2361 ;;
2362 openbsd)
89e053f8 2363 enable malloc_aligned
7c4a001a 2364 # On OpenBSD 4.5. the compiler does not use PIC unless
070c5d0f 2365 # explicitly using -fPIC. Libav builds fine without PIC,
7c4a001a
MR
2366 # however the generated executable will not do anything
2367 # (simply quits with exit-code 1, no crash, no output).
a7b9c8ae 2368 # Thus explicitly enable PIC here.
cd78208b 2369 enable pic
a1e4b3f6 2370 disable symver
7483e694 2371 SHFLAGS='-shared'
07a8eef6
MR
2372 oss_indev_extralibs="-lossaudio"
2373 oss_outdev_extralibs="-lossaudio"
7483e694 2374 ;;
a1e4b3f6
MR
2375 dragonfly)
2376 enable malloc_aligned
2377 disable symver
2378 ;;
2379 freebsd)
89e053f8 2380 enable malloc_aligned
7483e694
DB
2381 ;;
2382 bsd/os)
355d81df 2383 add_extralibs -lpoll -lgnugetopt
7483e694
DB
2384 ;;
2385 darwin)
89e053f8 2386 enable malloc_aligned
301ab19d 2387 gas="gas-preprocessor.pl $cc"
e08b8239 2388 enabled ppc && add_asflags -force_cpusubtype_ALL
dff68563
SM
2389 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2390 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
355d81df 2391 add_ldflags -Wl,-dynamic,-search_paths_first
7483e694
DB
2392 SLIBSUF=".dylib"
2393 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2394 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2395 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 2396 objformat="macho"
1b0f6fb8 2397 enabled x86_64 && objformat="macho64"
8dfa86f7 2398 enabled_any pic shared ||
2704bd1a 2399 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
7483e694
DB
2400 ;;
2401 mingw32*)
9d3f4f50 2402 if test $target_os = "mingw32ce"; then
1aa71e25
MS
2403 disable network
2404 else
2405 target_os=mingw32
2406 fi
dcc01c06 2407 LIBTARGET=i386
1fc9fb8a 2408 if enabled x86_64; then
89e053f8 2409 enable malloc_aligned
417516f6 2410 LIBTARGET="i386:x86-64"
336cc1b0 2411 elif enabled arm; then
15c5156d 2412 LIBTARGET=arm-wince
dcc01c06 2413 fi
fbd971a4 2414 shlibdir_default="$bindir_default"
7483e694
DB
2415 SLIBPREF=""
2416 SLIBSUF=".dll"
7483e694
DB
2417 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2418 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
77e41e04 2419 SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
4c25d159 2420 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
b9349ff4
MS
2421 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2422 install -d "$(LIBDIR)"; \
2423 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
7483e694 2424 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 2425 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
304d586d 2426 objformat="win32"
ec10a9ab 2427 dlltool="${cross_prefix}dlltool"
bc574408 2428 enable dos_paths
1894e741 2429 check_cflags -fno-common
e26011d0
RP
2430 check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2431 || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
f7ad5aa2 2432 die "ERROR: MinGW runtime version must be >= 3.15."
5666a9f2 2433 add_cppflags -U__STRICT_ANSI__
7483e694
DB
2434 ;;
2435 cygwin*)
4f854758 2436 target_os=cygwin
fbd971a4 2437 shlibdir_default="$bindir_default"
7483e694
DB
2438 SLIBPREF="cyg"
2439 SLIBSUF=".dll"
2440 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2441 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2442 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 2443 objformat="win32"
bc574408 2444 enable dos_paths
1894e741 2445 check_cflags -fno-common
7483e694 2446 ;;
4f365f37 2447 *-dos|freedos|opendos)
4f365f37 2448 network_extralibs="-lsocket"
ff1c015d 2449 objformat="coff"
bc574408 2450 enable dos_paths
4f365f37 2451 ;;
7483e694 2452 linux)
7483e694
DB
2453 enable dv1394
2454 ;;
2455 irix*)
4f854758 2456 target_os=irix
7483e694
DB
2457 ranlib="echo ignoring ranlib"
2458 ;;
d22e8442 2459 os/2*)
d22e8442 2460 ln_s="cp -f"
355d81df 2461 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
71c61f62 2462 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 2463 FFSERVERLDFLAGS=""
287d3b13 2464 LIBSUF="_s.a"
d22e8442
DY
2465 SLIBPREF=""
2466 SLIBSUF=".dll"
2467 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2468 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
2469 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2470 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2471 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2472 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2473 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2474 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2475 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2476 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2477 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 2478 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 2479 enable dos_paths
d22e8442 2480 ;;
83993c1c
AM
2481 gnu/kfreebsd)
2482 ;;
34e82167 2483 gnu)
34e82167 2484 ;;
d33ed7b3
MR
2485 qnx)
2486 add_cppflags -D_QNX_SOURCE
2487 network_extralibs="-lsocket"
2488 ;;
1c69c79f
MS
2489 symbian)
2490 SLIBSUF=".dll"
2491 enable dos_paths
2492 add_cflags --include=$sysinclude/gcce/gcce.h
2493 ;;
614d8911
MR
2494 none)
2495 ;;
7483e694 2496 *)
4f924f9a 2497 die "Unknown OS '$target_os'."
7483e694
DB
2498 ;;
2499esac
2500
29ba0911 2501echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$LIBAV_CONFIGURATION" >config.fate
db7515fd 2502
13cb2187
AS
2503check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2504
c9d19248
MR
2505set_default $PATHS_LIST
2506
320d060a 2507# we need to build at least one lib type
93b3c083 2508if ! enabled_any static shared; then
320d060a
DB
2509 cat <<EOF
2510At least one library type must be built.
2511Specify --enable-static to build the static libraries or --enable-shared to
2512build the shared libraries as well. To only build the shared libraries specify
2513--disable-static in addition to --enable-shared.
2514EOF
2515 exit 1;
2516fi
2517
abc4e572 2518disabled static && LIBNAME=""
2a320695 2519
2184c6f7 2520die_license_disabled() {
4c27207c 2521 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
2522}
2523
2184c6f7 2524die_license_disabled gpl libx264
de295976 2525die_license_disabled gpl libxavs
2184c6f7
DB
2526die_license_disabled gpl libxvid
2527die_license_disabled gpl postproc
2528die_license_disabled gpl x11grab
2529
2f7ae63b 2530die_license_disabled nonfree libfaac
b2e3c528 2531
0b175caa
DB
2532die_license_disabled version3 libopencore_amrnb
2533die_license_disabled version3 libopencore_amrwb
d89e738a 2534die_license_disabled version3 libvo_aacenc
f502ff3f 2535die_license_disabled version3 libvo_amrwbenc
0b175caa 2536
9cad0e4e 2537enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 2538
40617a6d 2539disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 2540
e276d9e8
MR
2541enable_pic() {
2542 enable pic
bce7b696
MR
2543 add_cppflags -DPIC
2544 add_cflags -fPIC
2545 add_asflags -fPIC
e276d9e8
MR
2546}
2547
2548enabled pic && enable_pic
bce7b696 2549
b4d96ba2
MR
2550check_cc <<EOF || die "Symbol mangling check failed."
2551int ff_extern;
2552EOF
8182dc34 2553sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
b4d96ba2
MR
2554extern_prefix=${sym%%ff_extern*}
2555
f65883c8
MR
2556check_cc <<EOF && enable inline_asm
2557void foo(void) { __asm__ volatile ("" ::); }
2558EOF
61d251db 2559
df5e3978
MR
2560_restrict=
2561for restrict_keyword in restrict __restrict__ __restrict; do
2562 check_cc <<EOF && _restrict=$restrict_keyword && break
2563void foo(char * $restrict_keyword p);
2564EOF
2565done
2566
2567check_cc <<EOF && enable attribute_packed
2568struct { int x; } __attribute__((packed)) x;
2569EOF
2570
dffb41b9
MR
2571check_cc <<EOF && enable attribute_may_alias
2572union { int x; } __attribute__((may_alias)) x;
2573EOF
2574
df5e3978
MR
2575check_cc <<EOF || die "endian test failed"
2576unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2577EOF
48fc536a 2578od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
df5e3978 2579
e939cedd
MR
2580if enabled alpha; then
2581
2582 check_cflags -mieee
2583
2584elif enabled arm; then
e45391bb 2585
50fa82e6 2586 check_cflags -marm
301ab19d 2587 nogas=die
50fa82e6 2588
44caaa56
MR
2589 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2590 enable vfp_args
2591 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2592 case "${cross_prefix:-$cc}" in
2593 *hardfloat*) enable vfp_args; fpabi=vfp ;;
2594 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
fa0912fe
MR
2595__asm__ (".eabi_attribute 28, 1");
2596int main(void) { return 0; }
2597EOF
44caaa56
MR
2598 esac
2599 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2600 fi
fa0912fe
MR
2601
2602 # We have to check if pld is a nop and disable it.
2603 check_asm pld '"pld [r0]"'
2604
2605 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2606 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2607 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2608 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2609 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2610 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
e45391bb 2611
e276d9e8
MR
2612 enabled_all armv6t2 shared !pic && enable_pic
2613
fa0912fe 2614elif enabled mips; then
e45391bb 2615
fa0912fe
MR
2616 check_asm loongson '"dmult.g $1, $2, $3"'
2617 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
e45391bb 2618
fa0912fe 2619elif enabled ppc; then
e45391bb 2620
e6a0c354
MR
2621 enable local_aligned_8 local_aligned_16
2622
135448fa 2623 check_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
2f0c136e 2624 check_asm ibm_asm '"add 0, 0, 0"'
fa0912fe 2625 check_asm ppc4xx '"maclhw r10, r11, r12"'
64de20d1 2626 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
fa0912fe
MR
2627
2628 # AltiVec flags: The FSF version of GCC differs from the Apple version
2629 if enabled altivec; then
301ab19d 2630 nogas=warn
fa0912fe
MR
2631 check_cflags -maltivec -mabi=altivec &&
2632 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2633 check_cflags -faltivec
2634
2635 # check if our compiler supports Motorola AltiVec C API
2636 check_cc <<EOF || disable altivec
2637$inc_altivec_h
2638int main(void) {
2639 vector signed int v1, v2, v3;
2640 v1 = vec_add(v2,v3);
2641 return 0;
2642}
2643EOF
2644
2645 # check if our compiler supports braces for vector declarations
2646 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2647$inc_altivec_h
2648int main (void) { (vector int) {1}; return 0; }
2649EOF
2650 fi
e45391bb 2651
fa0912fe 2652elif enabled sparc; then
e45391bb 2653
fa0912fe
MR
2654 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2655 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
e45391bb 2656
fa0912fe 2657elif enabled x86; then
e45391bb 2658
e6a0c354
MR
2659 enable local_aligned_8 local_aligned_16
2660
44965991
PI
2661 # check whether EBP is available on x86
2662 # As 'i' is stored on the stack, this program will crash
2663 # if the base pointer is used to access it because the
2664 # base pointer is cleared in the inline assembly code.
7dfef245 2665 check_exec_crash <<EOF && enable ebp_available
44965991 2666 volatile int i=0;
be449fca 2667 __asm__ volatile (
44965991
PI
2668 "xorl %%ebp, %%ebp"
2669 ::: "%ebp");
2670 return i;
44965991
PI
2671EOF
2672
f494213c 2673 # check whether EBX is available on x86
7cee5421
MR
2674 check_asm ebx_available '""::"b"(0)' &&
2675 check_asm ebx_available '"":::"%ebx"'
8e380710 2676
6f74fb03
RP
2677 # check whether xmm clobbers are supported
2678 check_asm xmm_clobbers '"":::"%xmm0"'
2679
d3a4b4e0
DB
2680 # check whether more than 10 operands are supported
2681 check_cc <<EOF && enable ten_operands
2682int main(void) {
2683 int x=0;
2684 __asm__ volatile(
2685 ""
2686 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2687 );
2688 return 0;
2689}
2690EOF
2691
d7f0920b 2692 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 2693 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 2694 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
2695
2696 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 2697
9cca1e40 2698 if ! disabled_any asm mmx yasm; then
b6c06894
MR
2699 if check_cmd $yasmexe --version; then
2700 enabled x86_64 && yasm_extra="-m amd64"
2701 yasm_debug="-g dwarf2"
2702 elif check_cmd nasm -v; then
2703 yasmexe=nasm
2704 yasm_debug="-g -F dwarf"
2705 enabled x86_64 && test "$objformat" = elf && objformat=elf64
2706 fi
2707
2708 YASMFLAGS="-f $objformat $yasm_extra"
2709 enabled pic && append YASMFLAGS "-DPIC"
2710 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2711 case "$objformat" in
2712 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2713 esac
2714
48545a8f 2715 check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
25432e85 2716 die "yasm not found, use --disable-yasm for a crippled build"
87f1355f 2717 check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
31a0dcb2 2718 fi
e45391bb 2719
669b5583
MR
2720 case "$cpu" in
2721 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2722 disable fast_clz
2723 ;;
2724 esac
2725
44965991
PI
2726fi
2727
301ab19d
MR
2728if enabled asm; then
2729 as=${gas:=$as}
2730 check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2731 $nogas "GNU assembler not found, install gas-preprocessor"
2732fi
2733
4a7e068b
MR
2734check_ldflags -Wl,--as-needed
2735
a98bb16d
RP
2736if check_func dlopen; then
2737 ldl=
2738elif check_func dlopen -ldl; then
2739 ldl=-ldl
8bf5d58f
MN
2740fi
2741
54fe299b
DV
2742if enabled network; then
2743 check_type "sys/types.h sys/socket.h" socklen_t
2744 check_type netdb.h "struct addrinfo"
2745 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2746 check_type netinet/in.h "struct sockaddr_in6"
2747 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2748 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2749 # Prefer arpa/inet.h over winsock2
2750 if check_header arpa/inet.h ; then
2751 check_func closesocket
2752 elif check_header winsock2.h ; then
2753 check_func_headers winsock2.h closesocket -lws2 && \
2754 network_extralibs="-lws2" || \
2755 { check_func_headers winsock2.h closesocket -lws2_32 && \
2756 network_extralibs="-lws2_32"; }
2757 check_type ws2tcpip.h socklen_t
2758 check_type ws2tcpip.h "struct addrinfo"
2759 check_type ws2tcpip.h "struct ipv6_mreq"
2760 check_type ws2tcpip.h "struct sockaddr_in6"
2761 check_type ws2tcpip.h "struct sockaddr_storage"
2762 check_struct winsock2.h "struct sockaddr" sa_len
2763 else
2764 disable network
2765 fi
2766fi
2767
75ecf149
DB
2768# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2769check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2770
534a2231 2771check_func fcntl
7483e694 2772check_func fork
84882df6 2773check_func getaddrinfo $network_extralibs
7483e694
DB
2774check_func gethrtime
2775check_func getrusage
fc5607f8 2776check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
094c09bb 2777check_func inet_aton $network_extralibs
abfc8d05 2778check_func isatty
4ae40685 2779check_func ${malloc_prefix}memalign && enable memalign
7483e694 2780check_func mkstemp
0328b9ea 2781check_func mmap
4ae40685 2782check_func ${malloc_prefix}posix_memalign && enable posix_memalign
0104b608 2783check_func setrlimit
87958234 2784check_func strerror_r
47941088 2785check_func strtok_r
b58b9fa3 2786check_func_headers conio.h kbhit
b507ebd1 2787check_func_headers io.h setmode
e4673692 2788check_func_headers lzo/lzo1x.h lzo1x_999_compress
fc5607f8 2789check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2446d3d6 2790check_func_headers windows.h GetProcessTimes
73f6d31e 2791check_func_headers windows.h MapViewOfFile
7c5bfe7a 2792check_func_headers windows.h VirtualAlloc
6ffa87d3 2793
a98bb16d 2794check_header dlfcn.h
92c6a099 2795check_header dxva2api.h
a98bb16d 2796check_header malloc.h
bf6ce82d 2797check_header poll.h
b58412f1 2798check_header sys/mman.h
b091aa44 2799check_header sys/resource.h
bf6ce82d 2800check_header sys/select.h
272081b0
CEH
2801check_header vdpau/vdpau.h
2802check_header vdpau/vdpau_x11.h
68178ca9 2803check_header X11/extensions/XvMClib.h
a98bb16d 2804
9104cd51
RP
2805check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2806
89e053f8
MR
2807if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2808 enabled_any $need_memalign ; then
1f91cdce 2809 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 2810fi
e16e49ac 2811
a4fa192c 2812disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 2813disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
2814
2815# check for some common methods of building with pthread support
2816# do this before the optional library checks as some of them require pthreads
0dbfc1db
MR
2817if ! disabled pthreads && ! enabled w32threads; then
2818 enable pthreads
9e7fd101
MR
2819 if check_func pthread_create; then
2820 :
2821 elif check_func pthread_create -pthread; then
2822 add_cflags -pthread
afc9aee2 2823 add_extralibs -pthread
9e7fd101
MR
2824 elif check_func pthread_create -pthreads; then
2825 add_cflags -pthreads
afc9aee2 2826 add_extralibs -pthreads
8d94f606
GT
2827 elif check_func pthread_create -lpthreadGC2; then
2828 add_extralibs -lpthreadGC2
9e7fd101 2829 elif ! check_lib pthread.h pthread_create -lpthread; then
0dbfc1db 2830 disable pthreads
9e7fd101 2831 fi
57bd82d4
MR
2832fi
2833
8eee7025 2834for thread in $THREADS_LIST; do
e5f94c2b 2835 if enabled $thread; then
3ae3b721
RP
2836 test -n "$thread_type" &&
2837 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2838 thread_type="$thread"
e5f94c2b
RP
2839 fi
2840done
2841
fdf88598 2842check_lib math.h sin -lm
f3e3f28e 2843enabled vaapi && require vaapi va/va.h vaInitialize -lva
fdf88598 2844
645d2652
MR
2845check_mathfunc exp2
2846check_mathfunc exp2f
2847check_mathfunc llrint
07876e25 2848check_mathfunc llrintf
645d2652
MR
2849check_mathfunc log2
2850check_mathfunc log2f
2851check_mathfunc lrint
2852check_mathfunc lrintf
2853check_mathfunc round
2854check_mathfunc roundf
2855check_mathfunc truncf
f32adb22 2856
57bd82d4 2857# these are off by default, so fail if requested and not available
a1b3c5a3 2858enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
47941088 2859enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4fa18c56
MR
2860enabled libdirac && require_pkg_config dirac \
2861 "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h" \
2862 "dirac_decoder_init dirac_encoder_init"
79fda097 2863enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5af41508 2864enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
9b9d3868 2865enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
7483e694 2866enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
eb7626a3
MR
2867enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2868enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4fa18c56 2869enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3d6fac8c 2870enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
4fa18c56
MR
2871enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
2872enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
ae14f311 2873enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
c261a5d9 2874enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
d89e738a 2875enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
f502ff3f 2876enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
7483e694 2877enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
7d07d6f5
DB
2878enabled libvpx && {
2879 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2880 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2881 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2882 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
eb7626a3 2883enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
5dd97520
JGG
2884 { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2885 die "ERROR: libx264 version must be >= 0.99."; }
de295976 2886enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
2bfecf73 2887enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2888enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2889
0b4a1821
AS
2890# libdc1394 check
2891if enabled libdc1394; then
2892 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2893 enable libdc1394_2; } ||
2894 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2895 enable libdc1394_1; } ||
2896 die "ERROR: No version of libdc1394 found "
2897fi
2898
8f1b06c8 2899if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
aa692d54
MR
2900 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2901 enable sdl &&
2902 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
c3f6b472 2903fi
57bd82d4 2904
2270b4b2 2905texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2906
c6f95144 2907check_header linux/fb.h
06e31011
RP
2908check_header linux/videodev.h
2909check_header linux/videodev2.h
1b6e8b73 2910check_header sys/videoio.h
47f38850 2911
27796dc3 2912check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
ec1ee802
RP
2913# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2914# w32api 3.12 had it defined wrong
2915check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
c2345207 2916
f8aa696f 2917# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2918{ check_header dev/bktr/ioctl_meteor.h &&
2919 check_header dev/bktr/ioctl_bt848.h; } ||
2920{ check_header machine/ioctl_meteor.h &&
2921 check_header machine/ioctl_bt848.h; } ||
2922{ check_header dev/video/meteor/ioctl_meteor.h &&
2923 check_header dev/video/bktr/ioctl_bt848.h; } ||
2924check_header dev/ic/bt8xx.h
f8aa696f 2925
15d59d2c 2926check_header sndio.h
c7682de0
RP
2927check_header sys/soundcard.h
2928check_header soundcard.h
deb29777 2929
b6f3d925 2930enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
35fd8122 2931
0e57fe17 2932enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
80ff8a16 2933
15d59d2c
B
2934enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
2935
56a059ac 2936enabled x11grab &&
f58f4ce1
GP
2937check_header X11/Xlib.h &&
2938check_header X11/extensions/XShm.h &&
0a045661 2939check_header X11/extensions/Xfixes.h &&
f58f4ce1 2940check_func XOpenDisplay -lX11 &&
781c1aa6
R
2941check_func XShmCreateImage -lX11 -lXext &&
2942check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
f58f4ce1 2943
598ef02b 2944if ! disabled vdpau && enabled vdpau_vdpau_h; then
deda2a4a
AC
2945check_cpp_condition \
2946 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
d1ebd4a9
AC
2947 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2948 disable vdpau; }
abf649c7 2949fi
deda2a4a 2950
95e561ec 2951enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
57bd82d4
MR
2952
2953# add some useful compiler flags if supported
2954check_cflags -Wdeclaration-after-statement
dcd479c0 2955check_cflags -Wall
440e3b2f 2956check_cflags -Wno-parentheses
dcd479c0 2957check_cflags -Wno-switch
c07bd6a9
MN
2958check_cflags -Wdisabled-optimization
2959check_cflags -Wpointer-arith
2960check_cflags -Wredundant-decls
cc1fb623 2961check_cflags -Wno-pointer-sign
f4929996 2962check_cflags -Wcast-qual
9aceb3cf 2963check_cflags -Wwrite-strings
652a5bf6 2964check_cflags -Wtype-limits
764551c6 2965check_cflags -Wundef
fc298fd9 2966check_cflags -Wmissing-prototypes
5af4e0cc 2967enabled extra_warnings && check_cflags -Winline
cf9d24ad 2968
57bd82d4 2969# add some linker flags
5c0e9479 2970check_ldflags -Wl,--warn-common
737eb597 2971check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
fef2d661 2972test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
94a3401e 2973
a482e61b 2974echo "X{};" > $TMPV
b462d132 2975if test_ldflags -Wl,--version-script,$TMPV; then
a482e61b 2976 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
b462d132
MR
2977 check_cc <<EOF && enable symver_asm_label
2978void ff_foo(void) __asm__ ("av_foo@VERSION");
0884fadf 2979void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
b462d132
MR
2980EOF
2981 check_cc <<EOF && enable symver_gnu_asm
2982__asm__(".symver ff_foo,av_foo@VERSION");
2983void ff_foo(void) {}
2984EOF
2985fi
a482e61b 2986
bd2216e4 2987if enabled small; then
14ca9cd0 2988 add_cflags $size_cflags
8400d6b8
DB
2989 optimizations="small"
2990elif enabled optimizations; then
14ca9cd0 2991 add_cflags $speed_cflags
b05394a0
MR
2992else
2993 add_cflags $noopt_cflags
cddf3f45 2994fi
11fdbc44 2995check_cflags -fno-math-errno
b2eb2ff0 2996check_cflags -fno-signed-zeros
cddf3f45 2997
629687f6 2998if enabled icc; then
b1598b58
MR
2999 # Just warnings, no remarks
3000 check_cflags -w1
3001 # -wd: Disable following warnings
3002 # 144, 167, 556: -Wno-pointer-sign
91bcad19 3003 # 1292: attribute "foo" ignored
b1598b58 3004 # 10006: ignoring unknown option -fno-signed-zeros
f1c7c6ae 3005 # 10148: ignoring unknown option -Wno-parentheses
b1598b58 3006 # 10156: ignoring option '-W'; no argument required
91bcad19 3007 check_cflags -wd144,167,556,1292,10006,10148,10156
b1598b58
MR
3008 # 11030: Warning unknown option --as-needed
3009 # 10156: ignoring option '-export'; no argument required
3010 check_ldflags -wd10156,11030
3011 # Allow to compile with optimizations
3012 check_ldflags -march=$cpu
be2cf98a
CEH
3013 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3014 enable ebp_available
bdefad73
MR
3015 if enabled x86_32; then
3016 test ${icc_version%%.*} -ge 11 && \
3017 check_cflags -falign-stack=maintain-16-byte || \
3018 disable aligned_stack
3019 fi
df442a8d
MR
3020elif enabled ccc; then
3021 # disable some annoying warnings
3022 add_cflags -msg_disable cvtu32to64
3023 add_cflags -msg_disable embedcomment
3024 add_cflags -msg_disable needconstext
3025 add_cflags -msg_disable nomainieee
3026 add_cflags -msg_disable ptrmismatch1
3027 add_cflags -msg_disable unreachcode
973859f5
MR
3028elif enabled gcc; then
3029 check_cflags -fno-tree-vectorize
765e6134 3030 check_cflags -Werror=implicit-function-declaration
de63bfec 3031 check_cflags -Werror=missing-prototypes
613a4e3f
MR
3032elif enabled llvm_gcc; then
3033 check_cflags -mllvm -stack-alignment=16
06da6943 3034elif enabled clang; then
5c8ef670 3035 check_cflags -mllvm -stack-alignment=16
06da6943 3036 check_cflags -Qunused-arguments
138132be
MR
3037elif enabled armcc; then
3038 # 2523: use of inline assembler is deprecated
bcafde61
MR
3039 add_cflags -W${armcc_opt},--diag_suppress=2523
3040 add_cflags -W${armcc_opt},--diag_suppress=1207
5a92140b 3041 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
b0c1b66a 3042 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
587d24ff
MR
3043elif enabled tms470; then
3044 add_cflags -pds=824 -pds=837
5f3b8314
MR
3045elif enabled pathscale; then
3046 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
504a64b9
CEH
3047fi
3048
7483e694
DB
3049enabled_any $THREADS_LIST && enable threads
3050
3051check_deps $CONFIG_LIST \
b6bb00b0 3052 $CONFIG_EXTRA \
7483e694
DB
3053 $HAVE_LIST \
3054 $DECODER_LIST \
3055 $ENCODER_LIST \
5666fd73 3056 $HWACCEL_LIST \
7483e694
DB
3057 $PARSER_LIST \
3058 $BSF_LIST \
3059 $DEMUXER_LIST \
3060 $MUXER_LIST \
f7679c54 3061 $FILTER_LIST \
7483e694
DB
3062 $INDEV_LIST \
3063 $OUTDEV_LIST \
3064 $PROTOCOL_LIST \
57442411
MR
3065 $ACODEC_TESTS \
3066 $VCODEC_TESTS \
3067 $LAVF_TESTS \
48c28162 3068 $LAVFI_TESTS \
b9d5f1b7 3069 $SEEK_TESTS \
f70f03f6 3070
3bfd582c 3071enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
c8a4ae00 3072
3e89171a 3073echo "install prefix $prefix"
f36958f8
DB
3074echo "source path $source_path"
3075echo "C compiler $cc"
f36958f8 3076echo "ARCH $arch ($cpu)"
ce8871c2
MR
3077if test "$build_suffix" != ""; then
3078 echo "build suffix $build_suffix"
eb94aca9 3079fi
ac63af34
DB
3080if test "$extra_version" != ""; then
3081 echo "version string suffix $extra_version"
3082fi
0db2ce77 3083echo "big-endian ${bigendian-no}"
e90f5b5a 3084echo "runtime cpu detection ${runtime_cpudetect-no}"
5b6c2cbd 3085if enabled x86; then
af44e8e4 3086 echo "yasm ${yasm-no}"
0db2ce77 3087 echo "MMX enabled ${mmx-no}"
30e98e62 3088 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 3089 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 3090 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 3091 echo "SSE enabled ${sse-no}"
30e98e62 3092 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
3093 echo "CMOV enabled ${cmov-no}"
3094 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
3095 echo "EBX available ${ebx_available-no}"
3096 echo "EBP available ${ebp_available-no}"
d3a4b4e0 3097 echo "10 operands supported ${ten_operands-no}"
e41e8342 3098fi
5b6c2cbd 3099if enabled arm; then
0db2ce77
MR
3100 echo "ARMv5TE enabled ${armv5te-no}"
3101 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 3102 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 3103 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 3104 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 3105 echo "NEON enabled ${neon-no}"
eba9ae3c 3106fi
5b6c2cbd 3107if enabled mips; then
0db2ce77 3108 echo "MMI enabled ${mmi-no}"
e41e8342 3109fi
5b6c2cbd 3110if enabled ppc; then
0db2ce77 3111 echo "AltiVec enabled ${altivec-no}"
30e98e62 3112 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 3113 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
3114fi
3115if enabled sparc; then
3116 echo "VIS enabled ${vis-no}"
e41e8342 3117fi
0db2ce77 3118echo "debug symbols ${debug-no}"
8400d6b8 3119echo "optimizations ${optimizations-no}"
0db2ce77
MR
3120echo "static ${static-no}"
3121echo "shared ${shared-no}"
4a24ab64 3122echo "postprocessing support ${postproc-no}"
f7679c54 3123echo "new filter support ${avfilter-no}"
0db2ce77 3124echo "network support ${network-no}"
0db2ce77
MR
3125echo "threading support ${thread_type-no}"
3126echo "SDL support ${sdl-no}"
0db2ce77
MR
3127echo "Sun medialib support ${mlib-no}"
3128echo "AVISynth enabled ${avisynth-no}"
47941088 3129echo "frei0r enabled ${frei0r-no}"
f7b8bffe 3130echo "libdc1394 support ${libdc1394-no}"
690bfceb 3131echo "libdirac enabled ${libdirac-no}"
0db2ce77 3132echo "libfaac enabled ${libfaac-no}"
0db2ce77
MR
3133echo "libgsm enabled ${libgsm-no}"
3134echo "libmp3lame enabled ${libmp3lame-no}"
3135echo "libnut enabled ${libnut-no}"
0b175caa
DB
3136echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3137echo "libopencore-amrwb support ${libopencore_amrwb-no}"
6ebf0bfc 3138echo "libopencv support ${libopencv-no}"
9a77d59a 3139echo "libopenjpeg enabled ${libopenjpeg-no}"
0f943ce6 3140echo "librtmp enabled ${librtmp-no}"
f7cd9eed 3141echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 3142echo "libspeex enabled ${libspeex-no}"
0db2ce77 3143echo "libtheora enabled ${libtheora-no}"
f4f05c45 3144echo "libva enabled ${vaapi-no}"
d89e738a 3145echo "libvo-aacenc support ${libvo_aacenc-no}"
f502ff3f 3146echo "libvo-amrwbenc support ${libvo_amrwbenc-no}"
0db2ce77 3147echo "libvorbis enabled ${libvorbis-no}"
8299a7f8 3148echo "libvpx enabled ${libvpx-no}"
d6bd62db 3149echo "libx264 enabled ${libx264-no}"
de295976 3150echo "libxavs enabled ${libxavs-no}"
d6bd62db 3151echo "libxvid enabled ${libxvid-no}"
0db2ce77 3152echo "zlib enabled ${zlib-no}"
f402916e 3153echo "bzlib enabled ${bzlib-no}"
2c62e737 3154echo
de6d9b64 3155
5666fd73 3156for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 3157 echo "Enabled ${type}s:"
f65c9da1 3158 eval list=\$$(toupper $type)_LIST
fda299f0 3159 print_enabled '_*' $list | sort | pr -r -3 -t
f65c9da1 3160 echo
8138b9db
RP
3161done
3162
ba7a7039 3163license="LGPL version 2.1 or later"
ba321adb 3164if enabled nonfree; then
ba7a7039 3165 license="nonfree and unredistributable"
9cad0e4e
DB
3166elif enabled gplv3; then
3167 license="GPL version 3 or later"
3168elif enabled lgplv3; then
3169 license="LGPL version 3 or later"
ba321adb 3170elif enabled gpl; then
ba7a7039 3171 license="GPL version 2 or later"
ba321adb
JK
3172fi
3173
3174echo "License: $license"
ca5323af 3175
cf1392e9
DB
3176echo "Creating config.mak and config.h..."
3177
df642790
MR
3178# build tree in object directory if source path is different from current one
3179if enabled source_path_used; then
3180 DIRS="
3181 doc
3182 libavcodec
3183 libavcodec/$arch
3184 libavdevice
3185 libavfilter
2c1da681 3186 libavfilter/$arch
df642790
MR
3187 libavformat
3188 libavutil
3189 libavutil/$arch
3190 libpostproc
3191 libswscale
3192 libswscale/$arch
3193 tests
3194 tools
3195 "
3196 FILES="
3197 Makefile
3198 common.mak
3199 subdir.mak
3200 doc/texi2pod.pl
3201 libavcodec/Makefile
43f60eba 3202 libavcodec/${arch}/Makefile
df642790
MR
3203 libavdevice/Makefile
3204 libavfilter/Makefile
483480b5 3205 libavfilter/${arch}/Makefile
df642790
MR
3206 libavformat/Makefile
3207 libavutil/Makefile
3208 libpostproc/Makefile
3209 libswscale/Makefile
3210 "
e0e335a0 3211 map 'mkdir -p $v' $DIRS;
43f60eba 3212 map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
df642790
MR
3213fi
3214
72cfcf41
MR
3215config_files="$TMPH config.mak"
3216
173c983b
MR
3217cat > config.mak <<EOF
3218# Automatically generated by configure - do not modify!
29ba0911
JG
3219ifndef LIBAV_CONFIG_MAK
3220LIBAV_CONFIG_MAK=1
3221LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
173c983b
MR
3222prefix=$prefix
3223LIBDIR=\$(DESTDIR)$libdir
3224SHLIBDIR=\$(DESTDIR)$shlibdir
3225INCDIR=\$(DESTDIR)$incdir
3226BINDIR=\$(DESTDIR)$bindir
3227DATADIR=\$(DESTDIR)$datadir
3228MANDIR=\$(DESTDIR)$mandir
3229SRC_PATH="$source_path"
3230SRC_PATH_BARE=$source_path
3231BUILD_ROOT="$PWD"
bb5cecdc 3232CC_IDENT=$cc_ident
173c983b
MR
3233ARCH=$arch
3234CC=$cc
3235AS=$as
3236LD=$ld
3237DEPCC=$dep_cc
3238YASM=$yasmexe
a4aea515 3239YASMDEP=$yasmexe
173c983b
MR
3240AR=$ar
3241RANLIB=$ranlib
3242LN_S=$ln_s
173c983b
MR
3243CPPFLAGS=$CPPFLAGS
3244CFLAGS=$CFLAGS
3245ASFLAGS=$ASFLAGS
3246CC_O=$CC_O
ec10a9ab 3247DLLTOOL=$dlltool
173c983b
MR
3248LDFLAGS=$LDFLAGS
3249FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3250SHFLAGS=$SHFLAGS
3251YASMFLAGS=$YASMFLAGS
3252BUILDSUF=$build_suffix
3253FULLNAME=$FULLNAME
3254LIBPREF=$LIBPREF
3255LIBSUF=$LIBSUF
3256LIBNAME=$LIBNAME
3257SLIBPREF=$SLIBPREF
3258SLIBSUF=$SLIBSUF