]> git.sesse.net Git - ffmpeg/blob - configure
Merge commit 'fe1c1198e670242f3cf9e3e1eef27cff77f3ee23'
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
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" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
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
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Help options:
63   --help                   print this message
64   --list-decoders          show all available decoders
65   --list-encoders          show all available encoders
66   --list-hwaccels          show all available hardware accelerators
67   --list-demuxers          show all available demuxers
68   --list-muxers            show all available muxers
69   --list-parsers           show all available parsers
70   --list-protocols         show all available protocols
71   --list-bsfs              show all available bitstream filters
72   --list-indevs            show all available input devices
73   --list-outdevs           show all available output devices
74   --list-filters           show all available filters
75
76 Standard options:
77   --logfile=FILE           log tests and output to FILE [config.log]
78   --disable-logging        do not log configure debug information
79   --prefix=PREFIX          install in PREFIX [$prefix]
80   --bindir=DIR             install binaries in DIR [PREFIX/bin]
81   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
82   --libdir=DIR             install libs in DIR [PREFIX/lib]
83   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
84   --incdir=DIR             install includes in DIR [PREFIX/include]
85   --mandir=DIR             install man page in DIR [PREFIX/share/man]
86
87 Licensing options:
88   --enable-gpl             allow use of GPL code, the resulting libs
89                            and binaries will be under GPL [no]
90   --enable-version3        upgrade (L)GPL to version 3 [no]
91   --enable-nonfree         allow use of nonfree code, the resulting libs
92                            and binaries will be unredistributable [no]
93
94 Configuration options:
95   --disable-static         do not build static libraries [no]
96   --enable-shared          build shared libraries [no]
97   --enable-small           optimize for size instead of speed
98   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101
102 Component options:
103   --disable-doc            do not build documentation
104   --disable-ffmpeg         disable ffmpeg build
105   --disable-ffplay         disable ffplay build
106   --disable-ffprobe        disable ffprobe build
107   --disable-ffserver       disable ffserver build
108   --disable-avdevice       disable libavdevice build
109   --disable-avcodec        disable libavcodec build
110   --disable-avformat       disable libavformat build
111   --disable-swresample     disable libswresample build
112   --disable-swscale        disable libswscale build
113   --disable-postproc       disable libpostproc build
114   --disable-avfilter       disable libavfilter build
115   --enable-avresample      enable libavresample build [no]
116   --disable-pthreads       disable pthreads [auto]
117   --disable-w32threads     disable Win32 threads [auto]
118   --disable-os2threads     disable OS/2 threads [auto]
119   --enable-x11grab         enable X11 grabbing [no]
120   --disable-network        disable network support [no]
121   --disable-dct            disable DCT code
122   --disable-mdct           disable MDCT code
123   --disable-rdft           disable RDFT code
124   --disable-fft            disable FFT code
125   --enable-dxva2           enable DXVA2 code
126   --enable-vaapi           enable VAAPI code [autodetect]
127   --enable-vda             enable VDA code   [autodetect]
128   --enable-vdpau           enable VDPAU code [autodetect]
129
130 Individual component options:
131   --disable-everything     disable all components listed below
132   --disable-encoder=NAME   disable encoder NAME
133   --enable-encoder=NAME    enable encoder NAME
134   --disable-encoders       disable all encoders
135   --disable-decoder=NAME   disable decoder NAME
136   --enable-decoder=NAME    enable decoder NAME
137   --disable-decoders       disable all decoders
138   --disable-hwaccel=NAME   disable hwaccel NAME
139   --enable-hwaccel=NAME    enable hwaccel NAME
140   --disable-hwaccels       disable all hwaccels
141   --disable-muxer=NAME     disable muxer NAME
142   --enable-muxer=NAME      enable muxer NAME
143   --disable-muxers         disable all muxers
144   --disable-demuxer=NAME   disable demuxer NAME
145   --enable-demuxer=NAME    enable demuxer NAME
146   --disable-demuxers       disable all demuxers
147   --enable-parser=NAME     enable parser NAME
148   --disable-parser=NAME    disable parser NAME
149   --disable-parsers        disable all parsers
150   --enable-bsf=NAME        enable bitstream filter NAME
151   --disable-bsf=NAME       disable bitstream filter NAME
152   --disable-bsfs           disable all bitstream filters
153   --enable-protocol=NAME   enable protocol NAME
154   --disable-protocol=NAME  disable protocol NAME
155   --disable-protocols      disable all protocols
156   --enable-indev=NAME      enable input device NAME
157   --disable-indev=NAME     disable input device NAME
158   --disable-indevs         disable input devices
159   --enable-outdev=NAME     enable output device NAME
160   --disable-outdev=NAME    disable output device NAME
161   --disable-outdevs        disable output devices
162   --disable-devices        disable all devices
163   --enable-filter=NAME     enable filter NAME
164   --disable-filter=NAME    disable filter NAME
165   --disable-filters        disable all filters
166
167 External library support:
168   --enable-avisynth        enable reading of AVISynth script files [no]
169   --enable-bzlib           enable bzlib [autodetect]
170   --enable-fontconfig      enable fontconfig
171   --enable-frei0r          enable frei0r video filtering
172   --enable-gnutls          enable gnutls [no]
173   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
174   --enable-libass          enable libass subtitles rendering [no]
175   --enable-libbluray       enable BluRay reading using libbluray [no]
176   --enable-libcaca         enable textual display using libcaca
177   --enable-libcelt         enable CELT decoding via libcelt [no]
178   --enable-libcdio         enable audio CD grabbing with libcdio
179   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
180                            and libraw1394 [no]
181   --enable-libfaac         enable AAC encoding via libfaac [no]
182   --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
183   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
184   --enable-libfreetype     enable libfreetype [no]
185   --enable-libgsm          enable GSM de/encoding via libgsm [no]
186   --enable-libiec61883     enable iec61883 via libiec61883 [no]
187   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
188   --enable-libmodplug      enable ModPlug via libmodplug [no]
189   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
190   --enable-libnut          enable NUT (de)muxing via libnut,
191                            native (de)muxer exists [no]
192   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
193   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
194   --enable-libopencv       enable video filtering via libopencv [no]
195   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
196   --enable-libopus         enable Opus decoding via libopus [no]
197   --enable-libpulse        enable Pulseaudio input via libpulse [no]
198   --enable-librtmp         enable RTMP[E] support via librtmp [no]
199   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
200   --enable-libspeex        enable Speex de/encoding via libspeex [no]
201   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
202   --enable-libtheora       enable Theora encoding via libtheora [no]
203   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
204   --enable-libv4l2         enable libv4l2/v4l-utils [no]
205   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
206   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
207   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
208                            native implementation exists [no]
209   --enable-libvpx          enable VP8 de/encoding via libvpx [no]
210   --enable-libx264         enable H.264 encoding via x264 [no]
211   --enable-libxavs         enable AVS encoding via xavs [no]
212   --enable-libxvid         enable Xvid encoding via xvidcore,
213                            native MPEG-4/Xvid encoder exists [no]
214   --enable-openal          enable OpenAL 1.1 capture support [no]
215   --enable-openssl         enable openssl [no]
216   --enable-zlib            enable zlib [autodetect]
217
218 Advanced options (experts only):
219   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
220   --enable-cross-compile   assume a cross-compiler is used
221   --sysroot=PATH           root of cross-build tree
222   --sysinclude=PATH        location of cross-build system headers
223   --target-os=OS           compiler targets OS [$target_os]
224   --target-exec=CMD        command to run executables on target
225   --target-path=DIR        path to view of build directory on target
226   --nm=NM                  use nm tool NM [$nm_default]
227   --ar=AR                  use archive tool AR [$ar_default]
228   --as=AS                  use assembler AS [$as_default]
229   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
230   --cc=CC                  use C compiler CC [$cc_default]
231   --cxx=CXX                use C compiler CXX [$cxx_default]
232   --ld=LD                  use linker LD [$ld_default]
233   --host-cc=HOSTCC         use host C compiler HOSTCC
234   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
235   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
236   --host-libs=HLIBS        use libs HLIBS when linking for host
237   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
238   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
239   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
240   --extra-libs=ELIBS       add ELIBS [$ELIBS]
241   --extra-version=STRING   version string suffix []
242   --optflags               override optimization-related compiler flags
243   --build-suffix=SUFFIX    library name suffix []
244   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
245   --progs-suffix=SUFFIX    program name suffix []
246   --arch=ARCH              select architecture [$arch]
247   --cpu=CPU                select the minimum required CPU (affects
248                            instruction selection, may crash on older CPUs)
249   --enable-pic             build position-independent code
250   --enable-sram            allow use of on-chip SRAM
251   --disable-symver         disable symbol versioning
252   --disable-fastdiv        disable table-based division
253   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
254   --disable-safe-bitstream-reader
255                            disable buffer boundary checking in bitreaders
256                            (faster, but may crash)
257   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
258
259 Optimization options (experts only):
260   --disable-asm            disable all assembler optimizations
261   --disable-altivec        disable AltiVec optimizations
262   --disable-amd3dnow       disable 3DNow! optimizations
263   --disable-amd3dnowext    disable 3DNow! extended optimizations
264   --disable-mmx            disable MMX optimizations
265   --disable-mmx2           disable MMX2 optimizations
266   --disable-sse            disable SSE optimizations
267   --disable-ssse3          disable SSSE3 optimizations
268   --disable-avx            disable AVX optimizations
269   --disable-fma4           disable FMA4 optimizations
270   --disable-armv5te        disable armv5te optimizations
271   --disable-armv6          disable armv6 optimizations
272   --disable-armv6t2        disable armv6t2 optimizations
273   --disable-armvfp         disable ARM VFP optimizations
274   --disable-mmi            disable MMI optimizations
275   --disable-neon           disable NEON optimizations
276   --disable-vis            disable VIS optimizations
277   --disable-yasm           disable use of yasm assembler
278   --disable-mips32r2       disable MIPS32R2 optimizations
279   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
280   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
281   --disable-mipsfpu        disable floating point MIPS optimizations
282   --disable-fast-unaligned consider unaligned accesses slow
283   --postproc-version=V     build libpostproc version V.
284                            Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
285
286 Developer options (useful when working on FFmpeg itself):
287   --enable-coverage        build with test coverage instrumentation
288   --disable-debug          disable debugging symbols
289   --enable-debug=LEVEL     set the debug level [$debuglevel]
290   --disable-optimizations  disable compiler optimizations
291   --enable-extra-warnings  enable more compiler warnings
292   --disable-stripping      disable stripping of executables and shared libraries
293   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
294                            2 causes a slowdown at runtime.
295   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
296   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
297                            leaks and errors, using the specified valgrind binary.
298                            Cannot be combined with --target-exec
299   --samples=PATH           location of test samples for FATE, if not set use
300                            \$FATE_SAMPLES at make invocation time.
301   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
302                            should be used only for debugging purposes)
303   --enable-random          randomly enable/disable components
304   --disable-random
305   --enable-random=LIST     randomly enable/disable specific components or
306   --disable-random=LIST    component groups. LIST is a comma-separated list
307                            of NAME[:PROB] entries where NAME is a component
308                            (group) and PROB the probability associated with
309                            NAME (default 0.5).
310   --random-seed=VALUE      seed value for --enable/disable-random
311
312 NOTE: Object files are built at the place where configure is launched.
313 EOF
314   exit 0
315 }
316
317 quotes='""'
318
319 log(){
320     echo "$@" >> $logfile
321 }
322
323 log_file(){
324     log BEGIN $1
325     pr -n -t $1 >> $logfile
326     log END $1
327 }
328
329 echolog(){
330     log "$@"
331     echo "$@"
332 }
333
334 warn(){
335     log "WARNING: $*"
336     WARNINGS="${WARNINGS}WARNING: $*\n"
337 }
338
339 die(){
340     echolog "$@"
341     cat <<EOF
342
343 If you think configure made a mistake, make sure you are using the latest
344 version from Git.  If the latest version fails, report the problem to the
345 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
346 EOF
347     if disabled logging; then
348         cat <<EOF
349 Rerun configure with logging enabled (do not use --disable-logging), and
350 include the log this produces with your report.
351 EOF
352     else
353 cat <<EOF
354 Include the log file "$logfile" produced by configure as this will help
355 solving the problem.
356 EOF
357     fi
358     exit 1
359 }
360
361 # Avoid locale weirdness, besides we really just want to translate ASCII.
362 toupper(){
363     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
364 }
365
366 tolower(){
367     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
368 }
369
370 c_escape(){
371     echo "$*" | sed 's/["\\]/\\\0/g'
372 }
373
374 sh_quote(){
375     v=$(echo "$1" | sed "s/'/'\\\\''/g")
376     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
377     echo "$v"
378 }
379
380 cleanws(){
381     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
382 }
383
384 filter(){
385     pat=$1
386     shift
387     for v; do
388         eval "case $v in $pat) echo $v ;; esac"
389     done
390 }
391
392 filter_out(){
393     pat=$1
394     shift
395     for v; do
396         eval "case $v in $pat) ;; *) echo $v ;; esac"
397     done
398 }
399
400 map(){
401     m=$1
402     shift
403     for v; do eval $m; done
404 }
405
406 set_all(){
407     value=$1
408     shift
409     for var in $*; do
410         eval $var=$value
411     done
412 }
413
414 set_weak(){
415     value=$1
416     shift
417     for var; do
418         eval : \${$var:=$value}
419     done
420 }
421
422 set_safe(){
423     var=$1
424     shift
425     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
426 }
427
428 get_safe(){
429     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
430 }
431
432 pushvar(){
433     for var in $*; do
434         eval level=\${${var}_level:=0}
435         eval ${var}_${level}="\$$var"
436         eval ${var}_level=$(($level+1))
437     done
438 }
439
440 popvar(){
441     for var in $*; do
442         eval level=\${${var}_level:-0}
443         test $level = 0 && continue
444         eval level=$(($level-1))
445         eval $var="\${${var}_${level}}"
446         eval ${var}_level=$level
447         eval unset ${var}_${level}
448     done
449 }
450
451 enable(){
452     set_all yes $*
453 }
454
455 disable(){
456     set_all no $*
457 }
458
459 enable_weak(){
460     set_weak yes $*
461 }
462
463 disable_weak(){
464     set_weak no $*
465 }
466
467 enable_safe(){
468     for var; do
469         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
470     done
471 }
472
473 disable_safe(){
474     for var; do
475         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
476     done
477 }
478
479 do_enable_deep(){
480     for var; do
481         enabled $var && continue
482         eval sel="\$${var}_select"
483         eval sgs="\$${var}_suggest"
484         pushvar var sgs
485         enable_deep $sel
486         popvar sgs
487         enable_deep_weak $sgs
488         popvar var
489     done
490 }
491
492 enable_deep(){
493     do_enable_deep $*
494     enable $*
495 }
496
497 enable_deep_weak(){
498     do_enable_deep $*
499     enable_weak $*
500 }
501
502 enabled(){
503     test "${1#!}" = "$1" && op== || op=!=
504     eval test "x\$${1#!}" $op "xyes"
505 }
506
507 disabled(){
508     test "${1#!}" = "$1" && op== || op=!=
509     eval test "x\$${1#!}" $op "xno"
510 }
511
512 enabled_all(){
513     for opt; do
514         enabled $opt || return 1
515     done
516 }
517
518 disabled_all(){
519     for opt; do
520         disabled $opt || return 1
521     done
522 }
523
524 enabled_any(){
525     for opt; do
526         enabled $opt && return 0
527     done
528 }
529
530 disabled_any(){
531     for opt; do
532         disabled $opt && return 0
533     done
534     return 1
535 }
536
537 set_default(){
538     for opt; do
539         eval : \${$opt:=\$${opt}_default}
540     done
541 }
542
543 is_in(){
544     value=$1
545     shift
546     for var in $*; do
547         [ $var = $value ] && return 0
548     done
549     return 1
550 }
551
552 check_deps(){
553     for cfg; do
554         cfg="${cfg#!}"
555         enabled ${cfg}_checking && die "Circular dependency for $cfg."
556         disabled ${cfg}_checking && continue
557         enable ${cfg}_checking
558
559         eval dep_all="\$${cfg}_deps"
560         eval dep_any="\$${cfg}_deps_any"
561         eval dep_sel="\$${cfg}_select"
562         eval dep_sgs="\$${cfg}_suggest"
563         eval dep_ifa="\$${cfg}_if"
564         eval dep_ifn="\$${cfg}_if_any"
565
566         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
567         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
568         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
569
570         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
571         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
572         enabled_all  $dep_all || disable $cfg
573         enabled_any  $dep_any || disable $cfg
574         disabled_any $dep_sel && disable $cfg
575
576         if enabled $cfg; then
577             eval dep_extralibs="\$${cfg}_extralibs"
578             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
579             enable_deep $dep_sel
580             enable_deep_weak $dep_sgs
581         fi
582
583         disable ${cfg}_checking
584     done
585 }
586
587 print_config_h(){
588     enabled $1 && v=1 || v=0
589     echo "#define $2 $v"
590 }
591
592 print_config_mak(){
593     enabled $1 && v= || v=!
594     echo "$v$2=yes"
595 }
596
597 print_config_asm(){
598     enabled $1 && v=1 || v=0
599     echo "%define $2 $v"
600 }
601
602 print_config(){
603     pfx=$1
604     files=$2
605     shift 2
606     for cfg; do
607         ucname="$(toupper $cfg)"
608         for f in $files; do
609             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
610         done
611     done
612 }
613
614 print_enabled(){
615     test "$1" = -n && end=" " && shift || end="\n"
616     suf=$1
617     shift
618     for v; do
619         enabled $v && printf "%s$end" ${v%$suf};
620     done
621 }
622
623 append(){
624     var=$1
625     shift
626     eval "$var=\"\$$var $*\""
627 }
628
629 prepend(){
630     var=$1
631     shift
632     eval "$var=\"$* \$$var\""
633 }
634
635 add_cppflags(){
636     append CPPFLAGS "$@"
637 }
638
639 add_cflags(){
640     append CFLAGS $($cflags_filter "$@")
641 }
642
643 add_cxxflags(){
644     append CXXFLAGS $($cflags_filter "$@")
645 }
646
647 add_asflags(){
648     append ASFLAGS $($asflags_filter "$@")
649 }
650
651 add_ldflags(){
652     append LDFLAGS $($ldflags_filter "$@")
653 }
654
655 add_extralibs(){
656     prepend extralibs $($ldflags_filter "$@")
657 }
658
659 add_host_cflags(){
660     append host_cflags $($host_cflags_filter "$@")
661 }
662
663 add_host_ldflags(){
664     append host_ldflags $($host_ldflags_filter "$@")
665 }
666
667 check_cmd(){
668     log "$@"
669     "$@" >> $logfile 2>&1
670 }
671
672 cc_o(){
673     eval printf '%s\\n' $CC_O
674 }
675
676 cc_e(){
677     eval printf '%s\\n' $CC_E
678 }
679
680 check_cc(){
681     log check_cc "$@"
682     cat > $TMPC
683     log_file $TMPC
684     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
685 }
686
687 check_cxx(){
688     log check_cxx "$@"
689     cat > $TMPCPP
690     log_file $TMPCPP
691     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" -c -o $TMPO $TMPCPP
692 }
693
694 check_cpp(){
695     log check_cpp "$@"
696     cat > $TMPC
697     log_file $TMPC
698     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
699 }
700
701 check_as(){
702     log check_as "$@"
703     cat > $TMPC
704     log_file $TMPC
705     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C -o $TMPO $TMPC
706 }
707
708 check_asm(){
709     log check_asm "$@"
710     name="$1"
711     code="$2"
712     shift 2
713     disable $name
714     check_as "$@" <<EOF && enable $name
715 void foo(void){ __asm__ volatile($code); }
716 EOF
717 }
718
719 check_yasm(){
720     log check_yasm "$@"
721     echo "$1" > $TMPS
722     log_file $TMPS
723     shift 1
724     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
725 }
726
727 check_ld(){
728     log check_ld "$@"
729     type=$1
730     shift 1
731     flags=''
732     libs=''
733     for f; do
734         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
735     done
736     check_$type $($cflags_filter $flags) || return
737     flags=$($ldflags_filter $flags)
738     libs=$($ldflags_filter $libs)
739     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
740 }
741
742 check_code(){
743     log check_code "$@"
744     check=$1
745     headers=$2
746     code=$3
747     shift 3
748     {
749         for hdr in $headers; do
750             echo "#include <$hdr>"
751         done
752         echo "int main(void) { $code; return 0; }"
753     } | check_$check "$@"
754 }
755
756 check_cppflags(){
757     log check_cppflags "$@"
758     check_cc "$@" <<EOF && append CPPFLAGS "$@"
759 int x;
760 EOF
761 }
762
763 check_cflags(){
764     log check_cflags "$@"
765     set -- $($cflags_filter "$@")
766     check_cc "$@" <<EOF && append CFLAGS "$@"
767 int x;
768 EOF
769 }
770
771 check_cxxflags(){
772     log check_cxxflags "$@"
773     set -- $($cflags_filter "$@")
774     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
775 int x;
776 EOF
777 }
778
779 test_ldflags(){
780     log test_ldflags "$@"
781     check_ld "cc" "$@" <<EOF
782 int main(void){ return 0; }
783 EOF
784 }
785
786 check_ldflags(){
787     log check_ldflags "$@"
788     test_ldflags "$@" && add_ldflags "$@"
789 }
790
791 check_header(){
792     log check_header "$@"
793     header=$1
794     shift
795     disable_safe $header
796     check_cpp "$@" <<EOF && enable_safe $header
797 #include <$header>
798 int x;
799 EOF
800 }
801
802 check_func(){
803     log check_func "$@"
804     func=$1
805     shift
806     disable $func
807     check_ld "cc" "$@" <<EOF && enable $func
808 extern int $func();
809 int main(void){ $func(); }
810 EOF
811 }
812
813 check_mathfunc(){
814     log check_mathfunc "$@"
815     func=$1
816     shift
817     disable $func
818     check_ld "cc" "$@" <<EOF && enable $func
819 #include <math.h>
820 float foo(float f) { return $func(f); }
821 int main(void){ return (int) foo; }
822 EOF
823 }
824
825 check_func_headers(){
826     log check_func_headers "$@"
827     headers=$1
828     funcs=$2
829     shift 2
830     {
831         for hdr in $headers; do
832             echo "#include <$hdr>"
833         done
834         for func in $funcs; do
835             echo "long check_$func(void) { return (long) $func; }"
836         done
837         echo "int main(void) { return 0; }"
838     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
839 }
840
841 check_class_headers_cpp(){
842     log check_class_headers_cpp "$@"
843     headers=$1
844     classes=$2
845     shift 2
846     {
847         for hdr in $headers; do
848             echo "#include <$hdr>"
849         done
850         echo "int main(void) { "
851         i=1
852         for class in $classes; do
853             echo "$class obj$i;"
854             i=$(expr $i + 1)
855         done
856         echo "return 0; }"
857     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
858 }
859
860 check_cpp_condition(){
861     log check_cpp_condition "$@"
862     header=$1
863     condition=$2
864     shift 2
865     check_cpp "$@" <<EOF
866 #include <$header>
867 #if !($condition)
868 #error "unsatisfied condition: $condition"
869 #endif
870 EOF
871 }
872
873 check_lib(){
874     log check_lib "$@"
875     header="$1"
876     func="$2"
877     shift 2
878     check_header $header && check_func $func "$@" && add_extralibs "$@"
879 }
880
881 check_lib2(){
882     log check_lib2 "$@"
883     headers="$1"
884     funcs="$2"
885     shift 2
886     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
887 }
888
889 check_lib_cpp(){
890     log check_lib_cpp "$@"
891     headers="$1"
892     classes="$2"
893     shift 2
894     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
895 }
896
897 check_pkg_config(){
898     log check_pkg_config "$@"
899     pkg="$1"
900     headers="$2"
901     funcs="$3"
902     shift 3
903     $pkg_config --exists $pkg 2>/dev/null || return
904     pkg_cflags=$($pkg_config --cflags $pkg)
905     pkg_libs=$($pkg_config --libs $pkg)
906     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
907         set_safe ${pkg}_cflags $pkg_cflags   &&
908         set_safe ${pkg}_libs   $pkg_libs
909 }
910
911 check_exec(){
912     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
913 }
914
915 check_exec_crash(){
916     code=$(cat)
917
918     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
919     # are safe but may not be available everywhere.  Thus we use
920     # raise(SIGTERM) instead.  The check is run in a subshell so we
921     # can redirect the "Terminated" message from the shell.  SIGBUS
922     # is not defined by standard C so it is used conditionally.
923
924     (check_exec "$@") >> $logfile 2>&1 <<EOF
925 #include <signal.h>
926 static void sighandler(int sig){
927     raise(SIGTERM);
928 }
929 int func(void){
930     $code
931 }
932 int (*func_ptr)(void) = func;
933 int main(void){
934     signal(SIGILL, sighandler);
935     signal(SIGFPE, sighandler);
936     signal(SIGSEGV, sighandler);
937 #ifdef SIGBUS
938     signal(SIGBUS, sighandler);
939 #endif
940     return func_ptr();
941 }
942 EOF
943 }
944
945 check_type(){
946     log check_type "$@"
947     headers=$1
948     type=$2
949     shift 2
950     disable_safe "$type"
951     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
952 }
953
954 check_struct(){
955     log check_type "$@"
956     headers=$1
957     struct=$2
958     member=$3
959     shift 3
960     disable_safe "${struct}_${member}"
961     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
962         enable_safe "${struct}_${member}"
963 }
964
965 require(){
966     name="$1"
967     header="$2"
968     func="$3"
969     shift 3
970     check_lib $header $func "$@" || die "ERROR: $name not found"
971 }
972
973 require2(){
974     name="$1"
975     headers="$2"
976     func="$3"
977     shift 3
978     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
979 }
980
981 require_cpp(){
982     name="$1"
983     headers="$2"
984     classes="$3"
985     shift 3
986     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
987 }
988
989 require_pkg_config(){
990     pkg="$1"
991     check_pkg_config "$@" || die "ERROR: $pkg not found"
992     add_cflags    $(get_safe ${pkg}_cflags)
993     add_extralibs $(get_safe ${pkg}_libs)
994 }
995
996 check_host_cc(){
997     log check_host_cc "$@"
998     cat > $TMPC
999     log_file $TMPC
1000     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
1001 }
1002
1003 check_host_cflags(){
1004     log check_host_cflags "$@"
1005     set -- $($host_cflags_filter "$@")
1006     check_host_cc "$@" <<EOF && append host_cflags "$@"
1007 int x;
1008 EOF
1009 }
1010
1011 apply(){
1012     file=$1
1013     shift
1014     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1015 }
1016
1017 cp_if_changed(){
1018     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1019     mkdir -p "$(dirname $2)"
1020     cp -f "$1" "$2"
1021 }
1022
1023 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1024 # system-dependent things.
1025
1026 COMPONENT_LIST="
1027     bsfs
1028     decoders
1029     demuxers
1030     encoders
1031     filters
1032     hwaccels
1033     indevs
1034     muxers
1035     outdevs
1036     parsers
1037     protocols
1038 "
1039
1040 PROGRAM_LIST="
1041     ffplay
1042     ffprobe
1043     ffserver
1044     ffmpeg
1045 "
1046
1047 CONFIG_LIST="
1048     $COMPONENT_LIST
1049     $PROGRAM_LIST
1050     avcodec
1051     avdevice
1052     avfilter
1053     avformat
1054     avresample
1055     avisynth
1056     bzlib
1057     crystalhd
1058     dct
1059     doc
1060     dwt
1061     dxva2
1062     fast_unaligned
1063     fastdiv
1064     fft
1065     fontconfig
1066     frei0r
1067     gnutls
1068     gpl
1069     gray
1070     hardcoded_tables
1071     libaacplus
1072     libass
1073     libbluray
1074     libcaca
1075     libcdio
1076     libcelt
1077     libdc1394
1078     libfaac
1079     libfdk_aac
1080     libflite
1081     libfreetype
1082     libgsm
1083     libiec61883
1084     libilbc
1085     libmodplug
1086     libmp3lame
1087     libnut
1088     libopencore_amrnb
1089     libopencore_amrwb
1090     libopencv
1091     libopenjpeg
1092     libopus
1093     libpulse
1094     librtmp
1095     libschroedinger
1096     libspeex
1097     libstagefright_h264
1098     libtheora
1099     libutvideo
1100     libv4l2
1101     libvo_aacenc
1102     libvo_amrwbenc
1103     libvorbis
1104     libvpx
1105     libx264
1106     libxavs
1107     libxvid
1108     lsp
1109     mdct
1110     memalign_hack
1111     memory_poisoning
1112     network
1113     nonfree
1114     openal
1115     openssl
1116     pic
1117     postproc
1118     rdft
1119     runtime_cpudetect
1120     safe_bitstream_reader
1121     shared
1122     small
1123     sram
1124     static
1125     swresample
1126     swscale
1127     swscale_alpha
1128     thumb
1129     vaapi
1130     vda
1131     vdpau
1132     version3
1133     xmm_clobber_test
1134     x11grab
1135     zlib
1136 "
1137
1138 THREADS_LIST='
1139     pthreads
1140     w32threads
1141     os2threads
1142 '
1143
1144 ARCH_LIST='
1145     alpha
1146     arm
1147     avr32
1148     avr32_ap
1149     avr32_uc
1150     bfin
1151     ia64
1152     m68k
1153     mips
1154     mips64
1155     parisc
1156     ppc
1157     ppc64
1158     s390
1159     sh4
1160     sparc
1161     sparc64
1162     tomi
1163     x86
1164     x86_32
1165     x86_64
1166 '
1167
1168 ARCH_EXT_LIST='
1169     altivec
1170     amd3dnow
1171     amd3dnowext
1172     armv5te
1173     armv6
1174     armv6t2
1175     armvfp
1176     avx
1177     fma4
1178     mmi
1179     mmx
1180     mmx2
1181     neon
1182     ppc4xx
1183     sse
1184     ssse3
1185     vfpv3
1186     vis
1187     mipsfpu
1188     mips32r2
1189     mipsdspr1
1190     mipsdspr2
1191 '
1192
1193 HAVE_LIST_PUB='
1194     bigendian
1195     fast_unaligned
1196 '
1197
1198 HAVE_LIST="
1199     $ARCH_EXT_LIST
1200     $HAVE_LIST_PUB
1201     $THREADS_LIST
1202     aligned_malloc
1203     aligned_stack
1204     alsa_asoundlib_h
1205     altivec_h
1206     arpa_inet_h
1207     asm_mod_y
1208     asm_types_h
1209     attribute_may_alias
1210     attribute_packed
1211     cbrtf
1212     clock_gettime
1213     closesocket
1214     cmov
1215     cpuid
1216     dcbzl
1217     dev_bktr_ioctl_bt848_h
1218     dev_bktr_ioctl_meteor_h
1219     dev_ic_bt8xx_h
1220     dev_video_bktr_ioctl_bt848_h
1221     dev_video_meteor_ioctl_meteor_h
1222     dlfcn_h
1223     dlopen
1224     dos_paths
1225     dxva_h
1226     ebp_available
1227     ebx_available
1228     exp2
1229     exp2f
1230     fast_64bit
1231     fast_clz
1232     fast_cmov
1233     fcntl
1234     fork
1235     getaddrinfo
1236     gethrtime
1237     getopt
1238     GetProcessAffinityMask
1239     GetProcessMemoryInfo
1240     GetProcessTimes
1241     GetSystemTimeAsFileTime
1242     getrusage
1243     gettimeofday
1244     glob
1245     gnu_as
1246     ibm_asm
1247     inet_aton
1248     inline_asm
1249     isatty
1250     isinf
1251     isnan
1252     jack_port_get_latency_range
1253     kbhit
1254     ldbrx
1255     libdc1394_1
1256     libdc1394_2
1257     llrint
1258     llrintf
1259     local_aligned_16
1260     local_aligned_8
1261     localtime_r
1262     log2
1263     log2f
1264     loongson
1265     lrint
1266     lrintf
1267     lzo1x_999_compress
1268     machine_ioctl_bt848_h
1269     machine_ioctl_meteor_h
1270     makeinfo
1271     malloc_h
1272     MapViewOfFile
1273     memalign
1274     mkstemp
1275     mm_empty
1276     mmap
1277     nanosleep
1278     netinet_sctp_h
1279     PeekNamedPipe
1280     pod2man
1281     poll_h
1282     posix_memalign
1283     pthread_cancel
1284     rdtsc
1285     rint
1286     round
1287     roundf
1288     rweflags
1289     sched_getaffinity
1290     sdl
1291     sdl_video_size
1292     setmode
1293     setrlimit
1294     Sleep
1295     sndio_h
1296     socklen_t
1297     soundcard_h
1298     strerror_r
1299     strptime
1300     struct_addrinfo
1301     struct_group_source_req
1302     struct_ip_mreq_source
1303     struct_ipv6_mreq
1304     struct_pollfd
1305     struct_rusage_ru_maxrss
1306     struct_sockaddr_in6
1307     struct_sockaddr_sa_len
1308     struct_sockaddr_storage
1309     struct_v4l2_frmivalenum_discrete
1310     symver
1311     symver_asm_label
1312     symver_gnu_asm
1313     sysconf
1314     sysctl
1315     sys_mman_h
1316     sys_param_h
1317     sys_resource_h
1318     sys_select_h
1319     sys_soundcard_h
1320     sys_time_h
1321     sys_videoio_h
1322     termios_h
1323     texi2html
1324     threads
1325     trunc
1326     truncf
1327     unistd_h
1328     usleep
1329     vfp_args
1330     VirtualAlloc
1331     windows_h
1332     winsock2_h
1333     xform_asm
1334     xgetbv
1335     xmm_clobbers
1336     yasm
1337 "
1338
1339 # options emitted with CONFIG_ prefix but not available on command line
1340 CONFIG_EXTRA="
1341     aandcttables
1342     ac3dsp
1343     avutil
1344     gcrypt
1345     golomb
1346     gplv3
1347     h264chroma
1348     h264dsp
1349     h264pred
1350     h264qpel
1351     huffman
1352     lgplv3
1353     lpc
1354     mpegaudiodsp
1355     nettle
1356     rtpdec
1357     sinewin
1358     vp3dsp
1359 "
1360
1361 CMDLINE_SELECT="
1362     $ARCH_EXT_LIST
1363     $CONFIG_LIST
1364     $THREADS_LIST
1365     asm
1366     coverage
1367     cross_compile
1368     debug
1369     extra_warnings
1370     logging
1371     optimizations
1372     stripping
1373     symver
1374     yasm
1375 "
1376
1377 PATHS_LIST='
1378     bindir
1379     datadir
1380     incdir
1381     libdir
1382     mandir
1383     prefix
1384     shlibdir
1385 '
1386
1387 CMDLINE_SET="
1388     $PATHS_LIST
1389     ar
1390     arch
1391     as
1392     assert_level
1393     build_suffix
1394     cc
1395     cpu
1396     cross_prefix
1397     cxx
1398     dep_cc
1399     extra_version
1400     host_cc
1401     host_cflags
1402     host_ldflags
1403     host_libs
1404     host_os
1405     install
1406     ld
1407     logfile
1408     malloc_prefix
1409     nm
1410     optflags
1411     pkg_config
1412     postproc_version
1413     progs_suffix
1414     random_seed
1415     samples
1416     strip
1417     sysinclude
1418     sysroot
1419     target_exec
1420     target_os
1421     target_path
1422     valgrind
1423     yasmexe
1424 "
1425
1426 CMDLINE_APPEND="
1427     extra_cflags
1428     extra_cxxflags
1429 "
1430
1431 # code dependency declarations
1432
1433 # architecture extensions
1434
1435 armv5te_deps="arm"
1436 armv6_deps="arm"
1437 armv6t2_deps="arm"
1438 armvfp_deps="arm"
1439 neon_deps="arm"
1440 vfpv3_deps="armvfp"
1441
1442 mipsfpu_deps="mips"
1443 mips32r2_deps="mips"
1444 mipsdspr1_deps="mips"
1445 mipsdspr2_deps="mips"
1446 mmi_deps="mips"
1447
1448 altivec_deps="ppc"
1449 ppc4xx_deps="ppc"
1450
1451 vis_deps="sparc"
1452
1453 x86_64_suggest="cmov fast_cmov"
1454 amd3dnow_deps="mmx"
1455 amd3dnowext_deps="amd3dnow"
1456 mmx_deps="x86"
1457 mmx2_deps="mmx"
1458 sse_deps="mmx"
1459 ssse3_deps="sse"
1460 avx_deps="ssse3"
1461 fma4_deps="avx"
1462
1463 aligned_stack_if_any="ppc x86"
1464 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1465 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1466 fast_unaligned_if_any="armv6 ppc x86"
1467
1468 inline_asm_deps="!tms470"
1469 need_memalign="altivec neon sse"
1470
1471 symver_if_any="symver_asm_label symver_gnu_asm"
1472
1473 # subsystems
1474 dct_select="rdft"
1475 mdct_select="fft"
1476 rdft_select="fft"
1477 mpegaudiodsp_select="dct"
1478
1479 # decoders / encoders / hardware accelerators
1480 aac_decoder_select="mdct sinewin"
1481 aac_encoder_select="mdct sinewin"
1482 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1483 ac3_decoder_select="mdct ac3dsp ac3_parser"
1484 ac3_encoder_select="mdct ac3dsp"
1485 ac3_fixed_encoder_select="mdct ac3dsp"
1486 alac_encoder_select="lpc"
1487 amrnb_decoder_select="lsp"
1488 amrwb_decoder_select="lsp"
1489 amv_encoder_select="aandcttables"
1490 atrac1_decoder_select="mdct sinewin"
1491 atrac3_decoder_select="mdct"
1492 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1493 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1494 cavs_decoder_select="golomb"
1495 cook_decoder_select="mdct sinewin"
1496 cscd_decoder_suggest="zlib"
1497 dca_decoder_select="mdct"
1498 dirac_decoder_select="dwt golomb"
1499 dnxhd_encoder_select="aandcttables"
1500 dxa_decoder_select="zlib"
1501 eac3_decoder_select="ac3_decoder"
1502 eac3_encoder_select="mdct ac3dsp"
1503 eamad_decoder_select="aandcttables"
1504 eatgq_decoder_select="aandcttables"
1505 eatqi_decoder_select="aandcttables"
1506 exr_decoder_select="zlib"
1507 ffv1_decoder_select="golomb"
1508 flac_decoder_select="golomb"
1509 flac_encoder_select="golomb lpc"
1510 flashsv_decoder_select="zlib"
1511 flashsv_encoder_select="zlib"
1512 flashsv2_encoder_select="zlib"
1513 flashsv2_decoder_select="zlib"
1514 flv_decoder_select="h263_decoder"
1515 flv_encoder_select="h263_encoder"
1516 fraps_decoder_select="huffman"
1517 h261_encoder_select="aandcttables"
1518 h263_decoder_select="h263_parser"
1519 h263_encoder_select="aandcttables"
1520 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1521 h263i_decoder_select="h263_decoder"
1522 h263p_encoder_select="h263_encoder"
1523 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1524 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1525 h264_dxva2_hwaccel_deps="dxva2api_h"
1526 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1527 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1528 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1529 h264_vda_hwaccel_select="vda h264_decoder"
1530 h264_vdpau_decoder_select="vdpau h264_decoder"
1531 iac_decoder_select="fft mdct sinewin"
1532 imc_decoder_select="fft mdct sinewin"
1533 jpegls_decoder_select="golomb"
1534 jpegls_encoder_select="golomb"
1535 ljpeg_encoder_select="aandcttables"
1536 loco_decoder_select="golomb"
1537 mjpeg_encoder_select="aandcttables"
1538 mlp_decoder_select="mlp_parser"
1539 mp1_decoder_select="mpegaudiodsp"
1540 mp1float_decoder_select="mpegaudiodsp"
1541 mp2_decoder_select="mpegaudiodsp"
1542 mp2float_decoder_select="mpegaudiodsp"
1543 mp3_decoder_select="mpegaudiodsp"
1544 mp3adu_decoder_select="mpegaudiodsp"
1545 mp3adufloat_decoder_select="mpegaudiodsp"
1546 mp3float_decoder_select="mpegaudiodsp"
1547 mp3on4_decoder_select="mpegaudiodsp"
1548 mp3on4float_decoder_select="mpegaudiodsp"
1549 mpc7_decoder_select="mpegaudiodsp"
1550 mpc8_decoder_select="mpegaudiodsp"
1551 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1552 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1553 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1554 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1555 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1556 mpeg1video_encoder_select="aandcttables"
1557 mpeg2_crystalhd_decoder_select="crystalhd"
1558 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1559 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1560 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1561 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1562 mpeg2video_encoder_select="aandcttables"
1563 mpeg4_crystalhd_decoder_select="crystalhd"
1564 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1565 mpeg4_encoder_select="h263_encoder"
1566 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1567 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1568 msmpeg4_crystalhd_decoder_select="crystalhd"
1569 msmpeg4v1_decoder_select="h263_decoder"
1570 msmpeg4v1_encoder_select="h263_encoder"
1571 msmpeg4v2_decoder_select="h263_decoder"
1572 msmpeg4v2_encoder_select="h263_encoder"
1573 msmpeg4v3_decoder_select="h263_decoder"
1574 msmpeg4v3_encoder_select="h263_encoder"
1575 nellymoser_decoder_select="mdct sinewin"
1576 nellymoser_encoder_select="mdct sinewin"
1577 png_decoder_select="zlib"
1578 png_encoder_select="zlib"
1579 qcelp_decoder_select="lsp"
1580 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1581 ra_144_encoder_select="lpc"
1582 ralf_decoder_select="golomb"
1583 rv10_decoder_select="h263_decoder"
1584 rv10_encoder_select="h263_encoder"
1585 rv20_decoder_select="h263_decoder"
1586 rv20_encoder_select="h263_encoder"
1587 rv30_decoder_select="golomb h264chroma h264pred h264qpel"
1588 rv40_decoder_select="golomb h264chroma h264pred h264qpel"
1589 shorten_decoder_select="golomb"
1590 sipr_decoder_select="lsp"
1591 snow_decoder_select="dwt"
1592 snow_encoder_select="aandcttables dwt"
1593 sonic_decoder_select="golomb"
1594 sonic_encoder_select="golomb"
1595 sonic_ls_encoder_select="golomb"
1596 svq1_encoder_select="aandcttables"
1597 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1598 svq3_decoder_suggest="zlib"
1599 theora_decoder_select="vp3_decoder"
1600 tiff_decoder_suggest="zlib"
1601 tiff_encoder_suggest="zlib"
1602 tscc_decoder_select="zlib"
1603 twinvq_decoder_select="mdct lsp sinewin"
1604 vc1_crystalhd_decoder_select="crystalhd"
1605 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1606 vc1_dxva2_hwaccel_deps="dxva2api_h"
1607 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1608 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1609 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1610 vc1image_decoder_select="vc1_decoder"
1611 vorbis_decoder_select="mdct"
1612 vorbis_encoder_select="mdct"
1613 vp3_decoder_select="vp3dsp"
1614 vp5_decoder_select="vp3dsp"
1615 vp6_decoder_select="huffman vp3dsp"
1616 vp6a_decoder_select="vp6_decoder"
1617 vp6f_decoder_select="vp6_decoder"
1618 vp8_decoder_select="h264pred h264qpel"
1619 wmapro_decoder_select="mdct sinewin"
1620 wmav1_decoder_select="mdct sinewin"
1621 wmav1_encoder_select="mdct sinewin"
1622 wmav2_decoder_select="mdct sinewin"
1623 wmav2_encoder_select="mdct sinewin"
1624 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1625 wmv1_decoder_select="h263_decoder"
1626 wmv1_encoder_select="h263_encoder"
1627 wmv2_decoder_select="h263_decoder"
1628 wmv2_encoder_select="h263_encoder"
1629 wmv3_decoder_select="vc1_decoder"
1630 wmv3_crystalhd_decoder_select="crystalhd"
1631 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1632 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1633 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1634 wmv3image_decoder_select="wmv3_decoder"
1635 zerocodec_decoder_select="zlib"
1636 zlib_decoder_select="zlib"
1637 zlib_encoder_select="zlib"
1638 zmbv_decoder_select="zlib"
1639 zmbv_encoder_select="zlib"
1640
1641 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1642 vaapi_deps="va_va_h"
1643 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1644 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1645
1646 # parsers
1647 h264_parser_select="golomb h264dsp h264pred"
1648
1649 # external libraries
1650 libaacplus_encoder_deps="libaacplus"
1651 libcelt_decoder_deps="libcelt"
1652 libfaac_encoder_deps="libfaac"
1653 libfdk_aac_encoder_deps="libfdk_aac"
1654 libgsm_decoder_deps="libgsm"
1655 libgsm_encoder_deps="libgsm"
1656 libgsm_ms_decoder_deps="libgsm"
1657 libgsm_ms_encoder_deps="libgsm"
1658 libilbc_decoder_deps="libilbc"
1659 libilbc_encoder_deps="libilbc"
1660 libmodplug_demuxer_deps="libmodplug"
1661 libmp3lame_encoder_deps="libmp3lame"
1662 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1663 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1664 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1665 libopenjpeg_decoder_deps="libopenjpeg"
1666 libopenjpeg_encoder_deps="libopenjpeg"
1667 libopus_decoder_deps="libopus"
1668 libschroedinger_decoder_deps="libschroedinger"
1669 libschroedinger_encoder_deps="libschroedinger"
1670 libspeex_decoder_deps="libspeex"
1671 libspeex_encoder_deps="libspeex"
1672 libstagefright_h264_decoder_deps="libstagefright_h264"
1673 libtheora_encoder_deps="libtheora"
1674 libvo_aacenc_encoder_deps="libvo_aacenc"
1675 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1676 libvorbis_decoder_deps="libvorbis"
1677 libvorbis_encoder_deps="libvorbis"
1678 libvpx_decoder_deps="libvpx"
1679 libvpx_encoder_deps="libvpx"
1680 libx264_encoder_deps="libx264"
1681 libx264rgb_encoder_deps="libx264"
1682 libxavs_encoder_deps="libxavs"
1683 libxvid_encoder_deps="libxvid"
1684 libutvideo_decoder_deps="libutvideo"
1685 libutvideo_encoder_deps="libutvideo"
1686
1687 # demuxers / muxers
1688 ac3_demuxer_select="ac3_parser"
1689 asf_stream_muxer_select="asf_muxer"
1690 avisynth_demuxer_deps="avisynth"
1691 dirac_demuxer_select="dirac_parser"
1692 eac3_demuxer_select="ac3_parser"
1693 flac_demuxer_select="flac_parser"
1694 ipod_muxer_select="mov_muxer"
1695 libnut_demuxer_deps="libnut"
1696 libnut_muxer_deps="libnut"
1697 matroska_audio_muxer_select="matroska_muxer"
1698 matroska_demuxer_suggest="zlib bzlib"
1699 mov_demuxer_suggest="zlib"
1700 mp3_demuxer_select="mpegaudio_parser"
1701 mp4_muxer_select="mov_muxer"
1702 mpegts_muxer_select="adts_muxer latm_muxer"
1703 mpegtsraw_demuxer_select="mpegts_demuxer"
1704 mxf_d10_muxer_select="mxf_muxer"
1705 ogg_demuxer_select="golomb"
1706 psp_muxer_select="mov_muxer"
1707 rtp_demuxer_select="sdp_demuxer"
1708 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1709 rtsp_demuxer_select="http_protocol rtpdec"
1710 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1711 sap_demuxer_select="sdp_demuxer"
1712 sap_muxer_select="rtp_muxer rtp_protocol"
1713 sdp_demuxer_select="rtpdec"
1714 spdif_muxer_select="aac_parser"
1715 tg2_muxer_select="mov_muxer"
1716 tgp_muxer_select="mov_muxer"
1717 w64_demuxer_deps="wav_demuxer"
1718
1719 # indevs / outdevs
1720 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1721 alsa_outdev_deps="alsa_asoundlib_h"
1722 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1723 caca_outdev_deps="libcaca"
1724 dshow_indev_deps="IBaseFilter"
1725 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1726 dv1394_indev_deps="dv1394 dv_demuxer"
1727 fbdev_indev_deps="linux_fb_h"
1728 iec61883_indev_deps="libiec61883"
1729 jack_indev_deps="jack_jack_h sem_timedwait"
1730 lavfi_indev_deps="avfilter"
1731 libcdio_indev_deps="libcdio"
1732 libdc1394_indev_deps="libdc1394"
1733 libv4l2_indev_deps="libv4l2"
1734 openal_indev_deps="openal"
1735 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1736 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1737 pulse_indev_deps="libpulse"
1738 sdl_outdev_deps="sdl"
1739 sndio_indev_deps="sndio_h"
1740 sndio_outdev_deps="sndio_h"
1741 v4l_indev_deps="linux_videodev_h"
1742 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1743 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1744 vfwcap_indev_extralibs="-lavicap32"
1745 x11grab_indev_deps="x11grab"
1746
1747 # protocols
1748 bluray_protocol_deps="libbluray"
1749 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1750 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1751 ffrtmpcrypt_protocol_select="tcp_protocol"
1752 ffrtmphttp_protocol_deps="!librtmp_protocol"
1753 ffrtmphttp_protocol_select="http_protocol"
1754 gopher_protocol_deps="network"
1755 httpproxy_protocol_deps="network"
1756 httpproxy_protocol_select="tcp_protocol"
1757 http_protocol_deps="network"
1758 http_protocol_select="tcp_protocol"
1759 https_protocol_select="tls_protocol"
1760 librtmp_protocol_deps="librtmp"
1761 librtmpe_protocol_deps="librtmp"
1762 librtmps_protocol_deps="librtmp"
1763 librtmpt_protocol_deps="librtmp"
1764 librtmpte_protocol_deps="librtmp"
1765 mmsh_protocol_select="http_protocol"
1766 mmst_protocol_deps="network"
1767 rtmp_protocol_deps="!librtmp_protocol"
1768 rtmp_protocol_select="tcp_protocol"
1769 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1770 rtmps_protocol_deps="!librtmp_protocol"
1771 rtmps_protocol_select="tls_protocol"
1772 rtmpt_protocol_select="ffrtmphttp_protocol"
1773 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1774 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1775 rtp_protocol_select="udp_protocol"
1776 sctp_protocol_deps="network netinet_sctp_h"
1777 tcp_protocol_deps="network"
1778 tls_protocol_deps_any="openssl gnutls"
1779 tls_protocol_select="tcp_protocol"
1780 udp_protocol_deps="network"
1781
1782 # filters
1783 aconvert_filter_deps="swresample"
1784 amovie_filter_deps="avcodec avformat"
1785 aresample_filter_deps="swresample"
1786 ass_filter_deps="libass"
1787 asyncts_filter_deps="avresample"
1788 atempo_filter_deps="avcodec rdft"
1789 blackframe_filter_deps="gpl"
1790 boxblur_filter_deps="gpl"
1791 colormatrix_filter_deps="gpl"
1792 cropdetect_filter_deps="gpl"
1793 delogo_filter_deps="gpl"
1794 deshake_filter_deps="avcodec"
1795 drawtext_filter_deps="libfreetype"
1796 flite_filter_deps="libflite"
1797 frei0r_filter_deps="frei0r dlopen"
1798 frei0r_filter_extralibs='$ldl'
1799 frei0r_src_filter_deps="frei0r dlopen"
1800 frei0r_src_filter_extralibs='$ldl'
1801 hqdn3d_filter_deps="gpl"
1802 movie_filter_deps="avcodec avformat"
1803 mp_filter_deps="gpl avcodec swscale postproc"
1804 mptestsrc_filter_deps="gpl"
1805 negate_filter_deps="lut_filter"
1806 resample_filter_deps="avresample"
1807 ocv_filter_deps="libopencv"
1808 pan_filter_deps="swresample"
1809 removelogo_filter_deps="avcodec avformat swscale"
1810 scale_filter_deps="swscale"
1811 select_filter_deps="avcodec"
1812 super2xsai_filter_deps="gpl"
1813 tinterlace_filter_deps="gpl"
1814 yadif_filter_deps="gpl"
1815
1816 # libraries
1817 avdevice_deps="avcodec avformat"
1818 avformat_deps="avcodec"
1819 postproc_deps="gpl"
1820
1821 # programs
1822 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1823 ffmpeg_select="buffersink_filter format_filter aformat_filter
1824                setpts_filter null_filter anull_filter abuffersink_filter"
1825 ffplay_deps="avcodec avformat swscale swresample sdl"
1826 ffplay_select="buffersink_filter rdft"
1827 ffprobe_deps="avcodec avformat"
1828 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1829 ffserver_extralibs='$ldl'
1830
1831 doc_deps_any="texi2html makeinfo pod2man"
1832
1833 # tests
1834 colormatrix1_test_deps="colormatrix_filter"
1835 colormatrix2_test_deps="colormatrix_filter"
1836 flashsv2_test_deps="zlib"
1837 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1838 mpng_test_deps="zlib"
1839 pp_test_deps="mp_filter"
1840 pp2_test_deps="mp_filter"
1841 pp3_test_deps="mp_filter"
1842 pp4_test_deps="mp_filter"
1843 pp5_test_deps="mp_filter"
1844 pp6_test_deps="mp_filter"
1845 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1846 zlib_test_deps="zlib"
1847 zmbv_test_deps="zlib"
1848
1849 test_deps(){
1850     suf1=$1
1851     suf2=$2
1852     shift 2
1853     for v; do
1854         dep=${v%=*}
1855         tests=${v#*=}
1856         for name in ${tests}; do
1857             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1858         done
1859     done
1860 }
1861
1862 test_deps _muxer _demuxer                                               \
1863     aiff                                                                \
1864     pcm_alaw=alaw                                                       \
1865     asf                                                                 \
1866     au                                                                  \
1867     avi                                                                 \
1868     dv=dv_fmt                                                           \
1869     ffm                                                                 \
1870     flv=flv_fmt                                                         \
1871     gxf                                                                 \
1872     matroska=mkv                                                        \
1873     mmf                                                                 \
1874     mov="mov ismv"                                                      \
1875     pcm_mulaw=mulaw                                                     \
1876     mxf="mxf mxf_d10"                                                   \
1877     nut                                                                 \
1878     ogg="ogg ogg_vp3"                                                   \
1879     rawvideo=pixfmt                                                     \
1880     rm                                                                  \
1881     swf                                                                 \
1882     mpegts=ts                                                           \
1883     voc                                                                 \
1884     wav                                                                 \
1885     yuv4mpegpipe=yuv4mpeg                                               \
1886
1887 # default parameters
1888
1889 logfile="config.log"
1890
1891 # installation paths
1892 prefix_default="/usr/local"
1893 bindir_default='${prefix}/bin'
1894 datadir_default='${prefix}/share/ffmpeg'
1895 incdir_default='${prefix}/include'
1896 libdir_default='${prefix}/lib'
1897 mandir_default='${prefix}/share/man'
1898 shlibdir_default="$libdir_default"
1899 postproc_version_default="current"
1900
1901 # toolchain
1902 ar_default="ar"
1903 cc_default="gcc"
1904 cxx_default="g++"
1905 host_cc_default="gcc"
1906 install="install"
1907 ln_s="ln -sf"
1908 nm_default="nm"
1909 objformat="elf"
1910 pkg_config_default=pkg-config
1911 ranlib="ranlib"
1912 strip_default="strip"
1913 yasmexe_default="yasm"
1914
1915 nm_opts='-g'
1916 nogas=":"
1917
1918 # machine
1919 arch_default=$(uname -m)
1920 cpu="generic"
1921
1922 # OS
1923 target_os_default=$(tolower $(uname -s))
1924 host_os=$target_os_default
1925
1926 # alternative libpostproc version
1927 ALT_PP_VER_MAJOR=51
1928 ALT_PP_VER_MINOR=2
1929 ALT_PP_VER_MICRO=101
1930 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
1931
1932 # configurable options
1933 enable $PROGRAM_LIST
1934
1935 enable avcodec
1936 enable avdevice
1937 enable avfilter
1938 enable avformat
1939 enable avutil
1940 enable postproc
1941 enable stripping
1942 enable swresample
1943 enable swscale
1944
1945 enable asm
1946 enable debug
1947 enable doc
1948 enable fastdiv
1949 enable network
1950 enable optimizations
1951 enable safe_bitstream_reader
1952 enable static
1953 enable swscale_alpha
1954
1955 # build settings
1956 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1957 FFSERVERLDFLAGS=-Wl,-E
1958 LIBPREF="lib"
1959 LIBSUF=".a"
1960 FULLNAME='$(NAME)$(BUILDSUF)'
1961 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1962 SLIBPREF="lib"
1963 SLIBSUF=".so"
1964 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1965 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1966 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1967 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1968 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1969 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1970
1971 asflags_filter=echo
1972 cflags_filter=echo
1973 ldflags_filter=echo
1974
1975 AS_C='-c'
1976 AS_O='-o $@'
1977 CC_C='-c'
1978 CC_E='-E -o $@'
1979 CC_O='-o $@'
1980 CXX_O='-o $@'
1981 LD_O='-o $@'
1982 HOSTCC_C='-c'
1983 HOSTCC_O='-o $@'
1984
1985 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
1986 host_libs='-lm'
1987 host_cflags_filter=echo
1988 host_ldflags_filter=echo
1989
1990 target_path='$(CURDIR)'
1991
1992 # since the object filename is not given with the -MM flag, the compiler
1993 # is only able to print the basename, and we must add the path ourselves
1994 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1995 DEPFLAGS='-MM'
1996
1997 # find source path
1998 if test -f configure; then
1999     source_path=.
2000 else
2001     source_path=$(cd $(dirname "$0"); pwd)
2002     echo "$source_path" | grep -q '[[:blank:]]' &&
2003         die "Out of tree builds are impossible with whitespace in source path."
2004     test -e "$source_path/config.h" &&
2005         die "Out of tree builds are impossible with config.h in source dir."
2006 fi
2007
2008 for v in "$@"; do
2009     r=${v#*=}
2010     l=${v%"$r"}
2011     r=$(sh_quote "$r")
2012     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2013 done
2014
2015 find_things(){
2016     thing=$1
2017     pattern=$2
2018     file=$source_path/$3
2019     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2020 }
2021
2022 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2023 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2024 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2025 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2026 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2027 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2028 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2029 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2030 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2031 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2032 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2033
2034 ALL_COMPONENTS="
2035     $BSF_LIST
2036     $DECODER_LIST
2037     $DEMUXER_LIST
2038     $ENCODER_LIST
2039     $FILTER_LIST
2040     $HWACCEL_LIST
2041     $INDEV_LIST
2042     $MUXER_LIST
2043     $OUTDEV_LIST
2044     $PARSER_LIST
2045     $PROTOCOL_LIST
2046 "
2047
2048 find_tests(){
2049     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
2050 }
2051
2052 LAVF_FATE_TESTS=$(find_tests lavf-fate)
2053 LAVF_TESTS=$(find_tests lavf)
2054 LAVFI_TESTS=$(find_tests lavfi)
2055 SEEK_TESTS=$(find_tests seek seek_)
2056
2057 ALL_TESTS="$LAVF_FATE_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
2058
2059 for n in $COMPONENT_LIST; do
2060     v=$(toupper ${n%s})_LIST
2061     eval enable \$$v
2062     eval ${n}_if_any="\$$v"
2063 done
2064
2065 enable $ARCH_EXT_LIST $ALL_TESTS
2066
2067 die_unknown(){
2068     echo "Unknown option \"$1\"."
2069     echo "See $0 --help for available options."
2070     exit 1
2071 }
2072
2073 show_list() {
2074     suffix=_$1
2075     shift
2076     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2077     exit 0
2078 }
2079
2080 rand_list(){
2081     IFS=', '
2082     set -- $*
2083     unset IFS
2084     for thing; do
2085         comp=${thing%:*}
2086         prob=${thing#$comp}
2087         prob=${prob#:}
2088         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2089         echo "prob ${prob:-0.5}"
2090         printf '%s\n' $comp
2091     done
2092 }
2093
2094 do_random(){
2095     action=$1
2096     shift
2097     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2098     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2099 }
2100
2101 for opt do
2102     optval="${opt#*=}"
2103     case "$opt" in
2104     --extra-ldflags=*) add_ldflags $optval
2105     ;;
2106     --extra-libs=*) add_extralibs $optval
2107     ;;
2108     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2109     ;;
2110     --enable-debug=*) debuglevel="$optval"
2111     ;;
2112     --disable-everything)
2113     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2114     ;;
2115     --enable-random|--disable-random)
2116     action=${opt%%-random}
2117     do_random ${action#--} $COMPONENT_LIST
2118     ;;
2119     --enable-random=*|--disable-random=*)
2120     action=${opt%%-random=*}
2121     do_random ${action#--} $optval
2122     ;;
2123     --enable-*=*|--disable-*=*)
2124     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2125     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2126     eval list=\$$(toupper $thing)_LIST
2127     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2128     $action $(filter "$name" $list)
2129     ;;
2130     --enable-?*|--disable-?*)
2131     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2132     if is_in $option $COMPONENT_LIST; then
2133         test $action = disable && action=unset
2134         eval $action \$$(toupper ${option%s})_LIST
2135     elif is_in $option $CMDLINE_SELECT; then
2136         $action $option
2137     else
2138         die_unknown $opt
2139     fi
2140     ;;
2141     --list-*)
2142         NAME="${opt#--list-}"
2143         is_in $NAME $COMPONENT_LIST || die_unknown $opt
2144         NAME=${NAME%s}
2145         eval show_list $NAME \$$(toupper $NAME)_LIST
2146     ;;
2147     --help|-h) show_help
2148     ;;
2149     *)
2150     optname="${opt%%=*}"
2151     optname="${optname#--}"
2152     optname=$(echo "$optname" | sed 's/-/_/g')
2153     if is_in $optname $CMDLINE_SET; then
2154         eval $optname='$optval'
2155     elif is_in $optname $CMDLINE_APPEND; then
2156         append $optname "$optval"
2157     else
2158          die_unknown $opt
2159     fi
2160     ;;
2161     esac
2162 done
2163
2164 disabled logging && logfile=/dev/null
2165
2166 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2167 set >> $logfile
2168
2169 test -n "$cross_prefix" && enable cross_compile
2170
2171 if enabled cross_compile; then
2172     test -n "$arch" && test -n "$target_os" ||
2173         die "Must specify target arch and OS when cross-compiling"
2174 fi
2175
2176 set_default arch target_os postproc_version
2177
2178 # Check if we should build alternative libpostproc version instead of current
2179 if   test "$postproc_version" = $ALT_PP_VER; then
2180   LIBPOSTPROC_VERSION=$ALT_PP_VER
2181   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2182   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2183   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2184 elif test "$postproc_version" != current; then
2185   die "Invalid argument to --postproc-version. See --help output."
2186 fi
2187
2188 ar_default="${cross_prefix}${ar_default}"
2189 cc_default="${cross_prefix}${cc_default}"
2190 cxx_default="${cross_prefix}${cxx_default}"
2191 nm_default="${cross_prefix}${nm_default}"
2192 pkg_config_default="${cross_prefix}${pkg_config_default}"
2193 ranlib="${cross_prefix}${ranlib}"
2194 strip_default="${cross_prefix}${strip_default}"
2195
2196 sysinclude_default="${sysroot}/usr/include"
2197
2198 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2199 enabled cross_compile || host_cc_default=$cc
2200 set_default host_cc
2201
2202 if ! $pkg_config --version >/dev/null 2>&1; then
2203     warn "$pkg_config not found, library detection may fail."
2204     pkg_config=false
2205 fi
2206
2207 exesuf() {
2208     case $1 in
2209         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2210     esac
2211 }
2212
2213 EXESUF=$(exesuf $target_os)
2214 HOSTEXESUF=$(exesuf $host_os)
2215
2216 # set temporary file name
2217 : ${TMPDIR:=$TEMPDIR}
2218 : ${TMPDIR:=$TMP}
2219 : ${TMPDIR:=/tmp}
2220
2221 if ! check_cmd mktemp -u XXXXXX; then
2222     # simple replacement for missing mktemp
2223     # NOT SAFE FOR GENERAL USE
2224     mktemp(){
2225         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2226     }
2227 fi
2228
2229 tmpfile(){
2230     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2231         (set -C; exec > $tmp) 2>/dev/null ||
2232         die "Unable to create temporary file in $TMPDIR."
2233     append TMPFILES $tmp
2234     eval $1=$tmp
2235 }
2236
2237 trap 'rm -f -- $TMPFILES' EXIT
2238
2239 tmpfile TMPASM .asm
2240 tmpfile TMPC   .c
2241 tmpfile TMPCPP .cpp
2242 tmpfile TMPE   $EXESUF
2243 tmpfile TMPH   .h
2244 tmpfile TMPO   .o
2245 tmpfile TMPS   .S
2246 tmpfile TMPSH  .sh
2247 tmpfile TMPV   .ver
2248
2249 unset -f mktemp
2250
2251 chmod +x $TMPE
2252
2253 # make sure we can execute files in $TMPDIR
2254 cat > $TMPSH 2>> $logfile <<EOF
2255 #! /bin/sh
2256 EOF
2257 chmod +x $TMPSH >> $logfile 2>&1
2258 if ! $TMPSH >> $logfile 2>&1; then
2259     cat <<EOF
2260 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2261 variable to another directory and make sure that it is not mounted noexec.
2262 EOF
2263     die "Sanity test failed."
2264 fi
2265
2266 pgi_flags(){
2267     for flag; do
2268         case $flag in
2269             -fomit-frame-pointer) echo -Mnoframe ;;
2270             -g)                   echo -gopt ;;
2271             *)                    echo $flag ;;
2272         esac
2273     done
2274 }
2275
2276 suncc_flags(){
2277     for flag; do
2278         case $flag in
2279             -march=*|-mcpu=*)
2280                 case "${flag#*=}" in
2281                     native)                   echo -xtarget=native       ;;
2282                     v9|niagara)               echo -xarch=sparc          ;;
2283                     ultrasparc)               echo -xarch=sparcvis       ;;
2284                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2285                     i586|pentium)             echo -xchip=pentium        ;;
2286                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2287                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2288                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2289                     pentium4*)          echo -xtarget=pentium4           ;;
2290                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2291                     *-sse3)             echo -xarch=sse3                 ;;
2292                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2293                     amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2294                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2295                     k8|opteron|athlon64|athlon-fx)
2296                                               echo -xarch=sse2a          ;;
2297                     athlon*)                  echo -xarch=pentium_proa   ;;
2298                 esac
2299                 ;;
2300             -std=c99)             echo -xc99              ;;
2301             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2302             -fPIC)                echo -KPIC -xcode=pic32 ;;
2303             -W*,*)                echo $flag              ;;
2304             -f*-*|-W*)                                    ;;
2305             *)                    echo $flag              ;;
2306         esac
2307     done
2308 }
2309
2310 tms470_flags(){
2311     for flag; do
2312         case $flag in
2313             -march=*|-mcpu=*)
2314                 case "${flag#*=}" in
2315                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2316                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2317                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2318                     armv6*|arm11*)          echo -mv=6   ;;
2319                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2320                                             echo -mv=5e  ;;
2321                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2322                 esac
2323                 ;;
2324             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2325             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2326             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2327             -msoft-float)   echo --float_support=vfplib       ;;
2328             -O[0-3]|-mf=*)  echo $flag                        ;;
2329             -g)             echo -g -mn                       ;;
2330             -pds=*)         echo $flag                        ;;
2331             -D*|-I*)        echo $flag                        ;;
2332             --gcc|--abi=*)  echo $flag                        ;;
2333             -me)            echo $flag                        ;;
2334         esac
2335     done
2336 }
2337
2338 probe_cc(){
2339     pfx=$1
2340     _cc=$2
2341
2342     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags _ldflags
2343     unset _depflags _DEPCMD _DEPFLAGS
2344     _flags_filter=echo
2345
2346     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2347         _type=llvm_gcc
2348         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2349         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2350         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2351         _cflags_speed='-O3'
2352         _cflags_size='-Os'
2353     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2354         _type=gcc
2355         gcc_version=$($_cc --version | head -n1)
2356         gcc_basever=$($_cc -dumpversion)
2357         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2358         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2359         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2360         if ! $_cc -dumpversion | grep -q '^2\.'; then
2361             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2362         fi
2363         _cflags_speed='-O3'
2364         _cflags_size='-Os'
2365     elif $_cc --version 2>/dev/null | grep -q Intel; then
2366         _type=icc
2367         _ident=$($_cc --version | head -n1)
2368         _depflags='-MMD'
2369         _cflags_speed='-O3'
2370         _cflags_size='-Os'
2371         _cflags_noopt='-O1'
2372     elif $_cc -v 2>&1 | grep -q xlc; then
2373         _type=xlc
2374         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2375         _cflags_speed='-O5'
2376         _cflags_size='-O5 -qcompact'
2377     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2378         _type=ccc
2379         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2380         _DEPFLAGS='-M'
2381         debuglevel=3
2382         _ldflags='-Wl,-z,now' # calls to libots crash without this
2383         _cflags_speed='-fast'
2384         _cflags_size='-O1'
2385     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2386         test -d "$sysroot" || die "No valid sysroot specified."
2387         _type=armcc
2388         _ident=$($_cc --vsn | head -n1)
2389         armcc_conf="$PWD/armcc.conf"
2390         $_cc --arm_linux_configure                 \
2391              --arm_linux_config_file="$armcc_conf" \
2392              --configure_sysroot="$sysroot"        \
2393              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2394              die "Error creating armcc configuration file."
2395         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2396         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2397         as_default="${cross_prefix}gcc"
2398         _depflags='-MMD'
2399         _cflags_speed='-O3'
2400         _cflags_size='-Os'
2401     elif $_cc -version 2>/dev/null | grep -q TMS470; then
2402         _type=tms470
2403         _ident=$($_cc -version | head -n1 | tr -s ' ')
2404         _flags='--gcc --abi=eabi -me'
2405         _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
2406         _cc_e='-ppl -fe=$@'
2407         _cc_o='-fe=$@'
2408         as_default="${cross_prefix}gcc"
2409         ld_default="${cross_prefix}gcc"
2410         _depflags='-ppa -ppd=$(@:.o=.d)'
2411         _cflags_speed='-O3 -mf=5'
2412         _cflags_size='-O3 -mf=2'
2413         _flags_filter=tms470_flags
2414     elif $_cc -v 2>&1 | grep -q clang; then
2415         _type=clang
2416         _ident=$($_cc --version | head -n1)
2417         _depflags='-MMD'
2418         _cflags_speed='-O3'
2419         _cflags_size='-Os'
2420     elif $_cc -V 2>&1 | grep -q Sun; then
2421         _type=suncc
2422         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2423         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2424         _DEPFLAGS='-xM1'
2425         _ldflags='-std=c99'
2426         _cflags_speed='-O5'
2427         _cflags_size='-O5 -xspace'
2428         _flags_filter=suncc_flags
2429     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2430         _type=pathscale
2431         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2432         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2433         _cflags_speed='-O2'
2434         _cflags_size='-Os'
2435         _flags_filter='filter_out -Wdisabled-optimization'
2436     elif $_cc -v 2>&1 | grep -q Open64; then
2437         _type=open64
2438         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2439         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2440         _cflags_speed='-O2'
2441         _cflags_size='-Os'
2442         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2443     elif $_cc -V 2>&1 | grep -q Portland; then
2444         _type=pgi
2445         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2446         opt_common='-alias=ansi -Mlre -Mpre'
2447         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2448         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2449         _cflags_noopt="-O1"
2450         _flags_filter=pgi_flags
2451     fi
2452
2453     eval ${pfx}_type=\$_type
2454     eval ${pfx}_ident=\$_ident
2455 }
2456
2457 set_ccvars(){
2458     eval ${1}_C=\${_cc_c-\${${1}_C}}
2459     eval ${1}_E=\${_cc_e-\${${1}_E}}
2460     eval ${1}_O=\${_cc_o-\${${1}_O}}
2461
2462     if [ -n "$_depflags" ]; then
2463         eval ${1}_DEPFLAGS=\$_depflags
2464     else
2465         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2466         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2467         eval DEP${1}FLAGS=\$_flags
2468     fi
2469 }
2470
2471 probe_cc cc "$cc"
2472 cflags_filter=$_flags_filter
2473 cflags_speed=$_cflags_speed
2474 cflags_size=$_cflags_size
2475 cflags_noopt=$_cflags_noopt
2476 add_cflags $_flags $_cflags
2477 cc_ldflags=$_ldflags
2478 set_ccvars CC
2479
2480 probe_cc hostcc "$host_cc"
2481 host_cflags_filter=$_flags_filter
2482 host_ldflags_filter=$_flags_filter
2483 add_host_cflags  $_flags $_cflags
2484 add_host_ldflags $_flags $_ldflags
2485 set_ccvars HOSTCC
2486
2487 test -n "$cc_type" && enable $cc_type ||
2488     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2489
2490 : ${as_default:=$cc}
2491 : ${dep_cc_default:=$cc}
2492 : ${ld_default:=$cc}
2493 set_default ar as dep_cc ld
2494
2495 probe_cc as "$as"
2496 asflags_filter=$_flags_filter
2497 add_asflags $_flags $_cflags
2498 set_ccvars AS
2499
2500 probe_cc ld "$ld"
2501 ldflags_filter=$_flags_filter
2502 add_ldflags $_flags $_ldflags
2503 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2504 LD_O=${_cc_o-$LD_O}
2505
2506 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2507     probe_cc depcc "$dep_cc"
2508     CCDEP=${_DEPCMD:-$DEPCMD}
2509     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2510     DEPCCFLAGS=$_flags
2511 fi
2512
2513 add_cflags $extra_cflags
2514 add_cxxflags $extra_cxxflags
2515 add_asflags $extra_cflags
2516
2517 if test -n "$sysroot"; then
2518     case "$cc_type" in
2519         gcc|llvm_gcc|clang)
2520             add_cppflags --sysroot="$sysroot"
2521             add_ldflags --sysroot="$sysroot"
2522         ;;
2523         tms470)
2524             add_cppflags -I"$sysinclude"
2525             add_ldflags  --sysroot="$sysroot"
2526         ;;
2527     esac
2528 fi
2529
2530 if test "$cpu" = host; then
2531     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2532
2533     case "$cc_type" in
2534         gcc|llvm_gcc)
2535             check_native(){
2536                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2537                 sed -n "/cc1.*$1=/{
2538                             s/.*$1=\\([^ ]*\\).*/\\1/
2539                             p
2540                             q
2541                         }" $TMPE
2542             }
2543             cpu=$(check_native -march || check_native -mcpu)
2544         ;;
2545     esac
2546
2547     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2548 fi
2549
2550 # Deal with common $arch aliases
2551 case "$arch" in
2552     arm*|iPad*)
2553         arch="arm"
2554     ;;
2555     mips|mipsel|IP*)
2556         arch="mips"
2557     ;;
2558     mips64*)
2559         arch="mips"
2560         subarch="mips64"
2561     ;;
2562     parisc|hppa)
2563         arch="parisc"
2564     ;;
2565     parisc64|hppa64)
2566         arch="parisc"
2567         subarch="parisc64"
2568     ;;
2569     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2570         arch="ppc"
2571     ;;
2572     s390|s390x)
2573         arch="s390"
2574     ;;
2575     sh4|sh)
2576         arch="sh4"
2577     ;;
2578     sun4u|sparc64)
2579         arch="sparc"
2580         subarch="sparc64"
2581     ;;
2582     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2583         arch="x86"
2584     ;;
2585 esac
2586
2587 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2588 enable $arch
2589
2590 # Add processor-specific flags
2591 if test "$cpu" = generic; then
2592     : do nothing
2593 elif enabled ppc; then
2594
2595     case $(tolower $cpu) in
2596         601|ppc601|powerpc601)
2597             cpuflags="-mcpu=601"
2598             disable altivec
2599         ;;
2600         603*|ppc603*|powerpc603*)
2601             cpuflags="-mcpu=603"
2602             disable altivec
2603         ;;
2604         604*|ppc604*|powerpc604*)
2605             cpuflags="-mcpu=604"
2606             disable altivec
2607         ;;
2608         g3|75*|ppc75*|powerpc75*)
2609             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2610             disable altivec
2611         ;;
2612         g4|745*|ppc745*|powerpc745*)
2613             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2614         ;;
2615         74*|ppc74*|powerpc74*)
2616             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2617         ;;
2618         g5|970|ppc970|powerpc970)
2619             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2620         ;;
2621         power[3-7]*)
2622             cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2623         ;;
2624         cell)
2625             cpuflags="-mcpu=cell"
2626             enable ldbrx
2627         ;;
2628         e500v2)
2629             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2630             disable altivec
2631         ;;
2632         e500)
2633             cpuflags="-mcpu=8540 -mhard-float"
2634             disable altivec
2635         ;;
2636     esac
2637
2638 elif enabled x86; then
2639
2640     case $cpu in
2641         i[345]86|pentium)
2642             cpuflags="-march=$cpu"
2643             disable mmx
2644         ;;
2645         # targets that do NOT support conditional mov (cmov)
2646         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2647             cpuflags="-march=$cpu"
2648             disable cmov
2649         ;;
2650         # targets that do support conditional mov (cmov)
2651         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2652             cpuflags="-march=$cpu"
2653             enable cmov
2654             enable fast_cmov
2655         ;;
2656         # targets that do support conditional mov but on which it's slow
2657         pentium4|pentium4m|prescott|nocona)
2658             cpuflags="-march=$cpu"
2659             enable cmov
2660             disable fast_cmov
2661         ;;
2662     esac
2663
2664 elif enabled sparc; then
2665
2666     case $cpu in
2667         niagara)
2668             cpuflags="-mcpu=$cpu"
2669             disable vis
2670         ;;
2671         sparc64)
2672             cpuflags="-mcpu=v9"
2673         ;;
2674     esac
2675
2676 elif enabled arm; then
2677
2678     case $cpu in
2679         armv*)
2680             cpuflags="-march=$cpu"
2681             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2682         ;;
2683         *)
2684             cpuflags="-mcpu=$cpu"
2685             case $cpu in
2686                 cortex-a*)                               subarch=armv7a  ;;
2687                 cortex-r*)                               subarch=armv7r  ;;
2688                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2689                 arm11*)                                  subarch=armv6   ;;
2690                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2691                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2692             esac
2693         ;;
2694     esac
2695
2696 elif enabled alpha; then
2697
2698     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2699
2700 elif enabled bfin; then
2701
2702     cpuflags="-mcpu=$cpu"
2703
2704 elif enabled mips; then
2705
2706     cpuflags="-march=$cpu"
2707
2708     case $cpu in
2709         24kc)
2710             disable mipsfpu
2711             disable mipsdspr1
2712             disable mipsdspr2
2713         ;;
2714         24kf*)
2715             disable mipsdspr1
2716             disable mipsdspr2
2717         ;;
2718         24kec|34kc|1004kc)
2719             disable mipsfpu
2720             disable mipsdspr2
2721         ;;
2722         24kef*|34kf*|1004kf*)
2723             disable mipsdspr2
2724         ;;
2725         74kc)
2726             disable mipsfpu
2727         ;;
2728     esac
2729
2730 elif enabled avr32; then
2731
2732     case $cpu in
2733         ap7[02]0[0-2])
2734             subarch="avr32_ap"
2735             cpuflags="-mpart=$cpu"
2736         ;;
2737         ap)
2738             subarch="avr32_ap"
2739             cpuflags="-march=$cpu"
2740         ;;
2741         uc3[ab]*)
2742             subarch="avr32_uc"
2743             cpuflags="-mcpu=$cpu"
2744         ;;
2745         uc)
2746             subarch="avr32_uc"
2747             cpuflags="-march=$cpu"
2748         ;;
2749     esac
2750
2751 fi
2752
2753 add_cflags $cpuflags
2754 add_asflags $cpuflags
2755
2756 # compiler sanity check
2757 check_exec <<EOF
2758 int main(void){ return 0; }
2759 EOF
2760 if test "$?" != 0; then
2761     echo "$cc is unable to create an executable file."
2762     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2763         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2764         echo "Only do this if you know what cross compiling means."
2765     fi
2766     die "C compiler test failed."
2767 fi
2768
2769 add_cppflags -D_ISOC99_SOURCE
2770 add_cxxflags -D__STDC_CONSTANT_MACROS
2771 check_cflags -std=c99
2772 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2773 #include <stdlib.h>
2774 EOF
2775 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2776 #include <stdlib.h>
2777 EOF
2778
2779 check_host_cflags -std=c99
2780 check_host_cflags -Wall
2781
2782 case "$arch" in
2783     alpha|ia64|mips|parisc|sparc)
2784         spic=$shared
2785     ;;
2786     x86)
2787         subarch="x86_32"
2788         check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
2789         if test "$subarch" = "x86_64"; then
2790             spic=$shared
2791         fi
2792     ;;
2793     ppc)
2794         check_cc <<EOF && subarch="ppc64"
2795         int test[(int)sizeof(char*) - 7];
2796 EOF
2797     ;;
2798 esac
2799
2800 enable $subarch
2801 enabled spic && enable pic
2802
2803 # OS specific
2804 case $target_os in
2805     haiku)
2806         prefix_default="/boot/common"
2807         network_extralibs="-lnetwork"
2808         host_libs=
2809         ;;
2810     sunos)
2811         FFSERVERLDFLAGS=""
2812         SHFLAGS='-shared -Wl,-h,$$(@F)'
2813         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2814         network_extralibs="-lsocket -lnsl"
2815         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2816         # When using suncc to build, the Solaris linker will mark
2817         # an executable with each instruction set encountered by
2818         # the Solaris assembler.  As our libraries contain their own
2819         # guards for processor-specific code, instead suppress
2820         # generation of the HWCAPS ELF section on Solaris x86 only.
2821         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2822         nm_opts='-P -g'
2823         ;;
2824     netbsd)
2825         disable symver
2826         oss_indev_extralibs="-lossaudio"
2827         oss_outdev_extralibs="-lossaudio"
2828         ;;
2829     openbsd|bitrig)
2830         # On OpenBSD 4.5. the compiler does not use PIC unless
2831         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2832         # however the generated executable will not do anything
2833         # (simply quits with exit-code 1, no crash, no output).
2834         # Thus explicitly enable PIC here.
2835         enable pic
2836         disable symver
2837         SHFLAGS='-shared'
2838         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
2839         oss_indev_extralibs="-lossaudio"
2840         oss_outdev_extralibs="-lossaudio"
2841         ;;
2842     dragonfly)
2843         disable symver
2844         ;;
2845     freebsd)
2846         ;;
2847     bsd/os)
2848         add_extralibs -lpoll -lgnugetopt
2849         strip="strip -d"
2850         ;;
2851     darwin)
2852         gas="gas-preprocessor.pl $cc"
2853         enabled ppc && add_asflags -force_cpusubtype_ALL
2854         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2855         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2856         strip="${strip} -x"
2857         add_ldflags -Wl,-dynamic,-search_paths_first
2858         SLIBSUF=".dylib"
2859         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2860         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2861         FFSERVERLDFLAGS=-Wl,-bind_at_load
2862         objformat="macho"
2863         enabled x86_64 && objformat="macho64"
2864         enabled_any pic shared ||
2865             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2866         ;;
2867     mingw32*)
2868         if test $target_os = "mingw32ce"; then
2869             disable network
2870         else
2871             target_os=mingw32
2872         fi
2873         LIBTARGET=i386
2874         if enabled x86_64; then
2875             LIBTARGET=x64
2876         elif enabled arm; then
2877             LIBTARGET=arm-wince
2878         fi
2879         shlibdir_default="$bindir_default"
2880         SLIBPREF=""
2881         SLIBSUF=".dll"
2882         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2883         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2884         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2885         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2886         SLIB_INSTALL_LINKS=
2887         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2888         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2889         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'
2890         objformat="win32"
2891         enable dos_paths
2892         check_cflags -fno-common
2893         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2894                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2895                 die "ERROR: MinGW runtime version must be >= 3.15."
2896         add_cppflags -U__STRICT_ANSI__
2897         ;;
2898     cygwin*)
2899         target_os=cygwin
2900         shlibdir_default="$bindir_default"
2901         SLIBPREF="cyg"
2902         SLIBSUF=".dll"
2903         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2904         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2905         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2906         objformat="win32"
2907         enable dos_paths
2908         check_cflags -fno-common
2909         add_cppflags -U__STRICT_ANSI__
2910         ;;
2911     *-dos|freedos|opendos)
2912         network_extralibs="-lsocket"
2913         objformat="coff"
2914         enable dos_paths
2915         add_cppflags -U__STRICT_ANSI__
2916         ;;
2917     linux)
2918         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2919         enable dv1394
2920         ;;
2921     irix*)
2922         target_os=irix
2923         ranlib="echo ignoring ranlib"
2924         ;;
2925     os/2*)
2926         strip="lxlite -CS"
2927         ln_s="cp -f"
2928         objformat="aout"
2929         add_cppflags -D_GNU_SOURCE
2930         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2931         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2932         FFSERVERLDFLAGS=""
2933         LIBSUF="_s.a"
2934         SLIBPREF=""
2935         SLIBSUF=".dll"
2936         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2937         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2938         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2939           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2940           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2941           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2942           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2943           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2944         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2945           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2946         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2947         enable dos_paths
2948         enable_weak os2threads
2949         ;;
2950     gnu/kfreebsd)
2951         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2952         ;;
2953     gnu)
2954         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2955         ;;
2956     qnx)
2957         add_cppflags -D_QNX_SOURCE
2958         network_extralibs="-lsocket"
2959         ;;
2960     symbian)
2961         SLIBSUF=".dll"
2962         enable dos_paths
2963         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2964         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2965         add_ldflags -Wl,--target1-abs,--no-undefined \
2966                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2967                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2968         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2969                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2970                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2971         ;;
2972     none)
2973         ;;
2974     *)
2975         die "Unknown OS '$target_os'."
2976         ;;
2977 esac
2978
2979 esc(){
2980     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
2981 }
2982
2983 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
2984
2985 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2986
2987 set_default $PATHS_LIST
2988
2989 # we need to build at least one lib type
2990 if ! enabled_any static shared; then
2991     cat <<EOF
2992 At least one library type must be built.
2993 Specify --enable-static to build the static libraries or --enable-shared to
2994 build the shared libraries as well. To only build the shared libraries specify
2995 --disable-static in addition to --enable-shared.
2996 EOF
2997     exit 1;
2998 fi
2999
3000 die_license_disabled() {
3001     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3002 }
3003
3004 die_license_disabled_gpl() {
3005     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3006 }
3007
3008 die_license_disabled gpl libcdio
3009 die_license_disabled gpl libutvideo
3010 die_license_disabled gpl libx264
3011 die_license_disabled gpl libxavs
3012 die_license_disabled gpl libxvid
3013 die_license_disabled gpl x11grab
3014
3015 die_license_disabled nonfree libaacplus
3016 die_license_disabled nonfree libfaac
3017 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3018 enabled gpl && die_license_disabled_gpl nonfree openssl
3019
3020 die_license_disabled version3 libopencore_amrnb
3021 die_license_disabled version3 libopencore_amrwb
3022 die_license_disabled version3 libvo_aacenc
3023 die_license_disabled version3 libvo_amrwbenc
3024
3025 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3026
3027 disabled optimizations || check_cflags -fomit-frame-pointer
3028
3029 enable_pic() {
3030     enable pic
3031     add_cppflags -DPIC
3032     add_cflags   -fPIC
3033     add_asflags  -fPIC
3034 }
3035
3036 enabled pic && enable_pic
3037
3038 check_cc <<EOF || die "Symbol mangling check failed."
3039 int ff_extern;
3040 EOF
3041 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3042 extern_prefix=${sym%%ff_extern*}
3043
3044 check_cc <<EOF && enable inline_asm
3045 void foo(void) { __asm__ volatile ("" ::); }
3046 EOF
3047
3048 _restrict=
3049 for restrict_keyword in restrict __restrict__ __restrict; do
3050     check_cc <<EOF && _restrict=$restrict_keyword && break
3051 void foo(char * $restrict_keyword p);
3052 EOF
3053 done
3054
3055 check_cc <<EOF && enable attribute_packed
3056 struct { int x; } __attribute__((packed)) x;
3057 EOF
3058
3059 check_cc <<EOF && enable attribute_may_alias
3060 union { int x; } __attribute__((may_alias)) x;
3061 EOF
3062
3063 check_cc <<EOF || die "endian test failed"
3064 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3065 EOF
3066 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3067
3068 if enabled alpha; then
3069
3070     check_cflags -mieee
3071
3072 elif enabled arm; then
3073
3074     enabled thumb && check_cflags -mthumb || check_cflags -marm
3075     nogas=die
3076
3077     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3078         enable vfp_args
3079     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3080         case "${cross_prefix:-$cc}" in
3081             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3082             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3083 __asm__ (".eabi_attribute 28, 1");
3084 int main(void) { return 0; }
3085 EOF
3086         esac
3087         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3088     fi
3089
3090     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
3091     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
3092     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
3093     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
3094     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
3095     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
3096
3097     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3098
3099     enabled_all armv6t2 shared !pic && enable_pic
3100
3101 elif enabled mips; then
3102
3103     check_asm loongson '"dmult.g $1, $2, $3"'
3104     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
3105     enabled mips32r2  && add_cflags "-mips32r2" &&
3106      check_asm mips32r2  '"rotr $t0, $t1, 1"'
3107     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3108      check_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3109     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3110      check_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3111     enabled mipsfpu   && add_cflags "-mhard-float" &&
3112      check_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3113
3114
3115 elif enabled ppc; then
3116
3117     enable local_aligned_8 local_aligned_16
3118
3119     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3120     check_asm ibm_asm   '"add 0, 0, 0"'
3121     check_asm ppc4xx    '"maclhw r10, r11, r12"'
3122     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3123
3124     # AltiVec flags: The FSF version of GCC differs from the Apple version
3125     if enabled altivec; then
3126         nogas=warn
3127         check_cflags -maltivec -mabi=altivec &&
3128         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3129         check_cflags -faltivec
3130
3131         # check if our compiler supports Motorola AltiVec C API
3132         check_cc <<EOF || disable altivec
3133 $inc_altivec_h
3134 int main(void) {
3135     vector signed int v1, v2, v3;
3136     v1 = vec_add(v2,v3);
3137     return 0;
3138 }
3139 EOF
3140
3141         # check if our compiler supports braces for vector declarations
3142         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
3143 $inc_altivec_h
3144 int main (void) { (vector int) {1}; return 0; }
3145 EOF
3146     fi
3147
3148 elif enabled sparc; then
3149
3150     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
3151         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
3152
3153 elif enabled x86; then
3154
3155     check_code ld immintrin.h "__xgetbv(0)" "cc" && enable xgetbv
3156     check_code ld intrin.h "int info[4]; __cpuid(info, 0)" "cc" && enable cpuid
3157     check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3158     check_code ld intrin.h "unsigned int x = __readeflags()" "cc" && enable rweflags
3159
3160     check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3161
3162     enable local_aligned_8 local_aligned_16
3163
3164     # check whether EBP is available on x86
3165     # As 'i' is stored on the stack, this program will crash
3166     # if the base pointer is used to access it because the
3167     # base pointer is cleared in the inline assembly code.
3168     check_exec_crash <<EOF && enable ebp_available
3169     volatile int i=0;
3170     __asm__ volatile (
3171         "xorl %%ebp, %%ebp"
3172     ::: "%ebp");
3173     return i;
3174 EOF
3175
3176     # check whether EBX is available on x86
3177     check_asm ebx_available '""::"b"(0)' &&
3178         check_asm ebx_available '"":::"%ebx"'
3179
3180     # check whether xmm clobbers are supported
3181     check_asm xmm_clobbers '"":::"%xmm0"'
3182
3183     # check whether binutils is new enough to compile SSSE3/MMX2
3184     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
3185     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
3186
3187     if ! disabled_any asm mmx yasm; then
3188         if check_cmd $yasmexe --version; then
3189             enabled x86_64 && yasm_extra="-m amd64"
3190             yasm_debug="-g dwarf2"
3191         elif check_cmd nasm -v; then
3192             yasmexe=nasm
3193             yasm_debug="-g -F dwarf"
3194             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3195         fi
3196
3197         YASMFLAGS="-f $objformat $yasm_extra"
3198         enabled pic               && append YASMFLAGS "-DPIC"
3199         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3200         case "$objformat" in
3201             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3202         esac
3203
3204         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3205             die "yasm not found, use --disable-yasm for a crippled build"
3206         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
3207         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
3208     fi
3209
3210     case "$cpu" in
3211         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3212             disable fast_clz
3213         ;;
3214     esac
3215
3216 fi
3217
3218 if enabled asm; then
3219     as=${gas:=$as}
3220     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3221         $nogas "GNU assembler not found, install gas-preprocessor"
3222 fi
3223
3224 check_ldflags -Wl,--as-needed
3225
3226 if check_func dlopen; then
3227     ldl=
3228 elif check_func dlopen -ldl; then
3229     ldl=-ldl
3230 fi
3231
3232 if enabled network; then
3233     check_type "sys/types.h sys/socket.h" socklen_t
3234     check_type netdb.h "struct addrinfo"
3235     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3236     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3237     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3238     check_type netinet/in.h "struct sockaddr_in6"
3239     check_type poll.h "struct pollfd"
3240     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3241     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3242     check_header netinet/sctp.h
3243     check_func getaddrinfo $network_extralibs
3244     # Prefer arpa/inet.h over winsock2
3245     if check_header arpa/inet.h ; then
3246         check_func closesocket
3247     elif check_header winsock2.h ; then
3248         check_func_headers winsock2.h closesocket -lws2 &&
3249             network_extralibs="-lws2" ||
3250         { check_func_headers winsock2.h closesocket -lws2_32 &&
3251             network_extralibs="-lws2_32"; }
3252         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3253         check_type ws2tcpip.h socklen_t
3254         check_type ws2tcpip.h "struct addrinfo"
3255         check_type ws2tcpip.h "struct group_source_req"
3256         check_type ws2tcpip.h "struct ip_mreq_source"
3257         check_type ws2tcpip.h "struct ipv6_mreq"
3258         check_type winsock2.h "struct pollfd"
3259         check_type ws2tcpip.h "struct sockaddr_in6"
3260         check_type ws2tcpip.h "struct sockaddr_storage"
3261         check_struct winsock2.h "struct sockaddr" sa_len
3262     else
3263         disable network
3264     fi
3265 fi
3266
3267 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3268 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3269
3270 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3271 check_func  fcntl
3272 check_func  fork
3273 check_func  gethrtime
3274 check_func  getopt
3275 check_func  getrusage
3276 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3277 check_func  gettimeofday
3278 check_func  inet_aton $network_extralibs
3279 check_func  isatty
3280 check_func  localtime_r
3281 check_func  ${malloc_prefix}memalign            && enable memalign
3282 check_func  mkstemp
3283 check_func  mmap
3284 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3285 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3286 check_func  setrlimit
3287 check_func  strerror_r
3288 check_func  strptime
3289 check_func  sched_getaffinity
3290 check_func  sysconf
3291 check_func  sysctl
3292 check_func  usleep
3293 check_func_headers conio.h kbhit
3294 check_func_headers windows.h PeekNamedPipe
3295 check_func_headers io.h setmode
3296 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3297 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3298 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3299 check_func_headers windows.h GetProcessAffinityMask
3300 check_func_headers windows.h GetProcessTimes
3301 check_func_headers windows.h GetSystemTimeAsFileTime
3302 check_func_headers windows.h MapViewOfFile
3303 check_func_headers windows.h Sleep
3304 check_func_headers windows.h VirtualAlloc
3305 check_func_headers glob.h glob
3306
3307 check_header dlfcn.h
3308 check_header dxva.h
3309 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3310 check_header libcrystalhd/libcrystalhd_if.h
3311 check_header malloc.h
3312 check_header poll.h
3313 check_header sys/mman.h
3314 check_header sys/param.h
3315 check_header sys/resource.h
3316 check_header sys/select.h
3317 check_header sys/time.h
3318 check_header termios.h
3319 check_header unistd.h
3320 check_header vdpau/vdpau.h
3321 check_header vdpau/vdpau_x11.h
3322 check_header windows.h
3323 check_header X11/extensions/XvMClib.h
3324 check_header asm/types.h
3325
3326 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3327 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3328
3329 # check for VDA header
3330 if ! disabled vda; then
3331     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3332         enable vda
3333         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3334     fi
3335 fi
3336
3337 if ! disabled w32threads && ! enabled pthreads; then
3338     check_func _beginthreadex && enable w32threads
3339 fi
3340
3341 # check for some common methods of building with pthread support
3342 # do this before the optional library checks as some of them require pthreads
3343 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3344     enable pthreads
3345     if check_func pthread_create; then
3346         :
3347     elif check_func pthread_create -pthread; then
3348         add_cflags -pthread
3349         add_extralibs -pthread
3350     elif check_func pthread_create -pthreads; then
3351         add_cflags -pthreads
3352         add_extralibs -pthreads
3353     elif check_func pthread_create -lpthreadGC2; then
3354         add_extralibs -lpthreadGC2
3355     elif ! check_lib pthread.h pthread_create -lpthread; then
3356         disable pthreads
3357     fi
3358 fi
3359
3360 for thread in $THREADS_LIST; do
3361     if enabled $thread; then
3362         test -n "$thread_type" &&
3363             die "ERROR: Only one thread type must be selected." ||
3364             thread_type="$thread"
3365     fi
3366 done
3367
3368 if enabled pthreads; then
3369   check_func pthread_cancel
3370 fi
3371
3372 check_lib math.h sin -lm && LIBM="-lm"
3373 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3374 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3375
3376 check_mathfunc cbrtf
3377 check_mathfunc exp2
3378 check_mathfunc exp2f
3379 check_mathfunc isinf
3380 check_mathfunc isnan
3381 check_mathfunc llrint
3382 check_mathfunc llrintf
3383 check_mathfunc log2
3384 check_mathfunc log2f
3385 check_mathfunc lrint
3386 check_mathfunc lrintf
3387 check_mathfunc rint
3388 check_mathfunc round
3389 check_mathfunc roundf
3390 check_mathfunc trunc
3391 check_mathfunc truncf
3392
3393 # these are off by default, so fail if requested and not available
3394 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3395 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3396 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3397 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3398 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3399 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3400 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3401 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3402 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3403                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3404                         die "ERROR: libcelt version must be >= 0.11.0."; }
3405 enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
3406 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3407 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3408 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
3409 enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
3410 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3411 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3412 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3413 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3414 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3415 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3416 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3417 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3418 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3419 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3420 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3421 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3422 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3423 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3424 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3425 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3426     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3427     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3428 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3429 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3430 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3431 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3432 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3433 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3434 enabled libvpx     && {
3435     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3436                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3437     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3438                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3439 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3440                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3441                         die "ERROR: libx264 version must be >= 0.118."; }
3442 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3443 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3444 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3445                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3446                         die "ERROR: openal not found"; } &&
3447                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3448                         die "ERROR: openal version must be 1.1 or compatible"; }
3449 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3450                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3451                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3452                         die "ERROR: openssl not found"; }
3453
3454 if enabled gnutls; then
3455     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3456     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3457 fi
3458
3459 # libdc1394 check
3460 if enabled libdc1394; then
3461     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3462         enable libdc1394_2; } ||
3463     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3464         enable libdc1394_1; } ||
3465     die "ERROR: No version of libdc1394 found "
3466 fi
3467
3468 SDL_CONFIG="${cross_prefix}sdl-config"
3469 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3470     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3471     enable sdl &&
3472     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3473 else
3474   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3475     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3476     sdl_libs=$("${SDL_CONFIG}" --libs)
3477     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3478     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3479     enable sdl &&
3480     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3481   fi
3482 fi
3483 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3484
3485 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3486 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3487 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3488
3489 check_header linux/fb.h
3490 check_header linux/videodev.h
3491 check_header linux/videodev2.h
3492 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3493
3494 check_header sys/videoio.h
3495
3496 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3497 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3498 # w32api 3.12 had it defined wrong
3499 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3500
3501 check_type "dshow.h" IBaseFilter
3502
3503 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3504 { check_header dev/bktr/ioctl_meteor.h &&
3505   check_header dev/bktr/ioctl_bt848.h; } ||
3506 { check_header machine/ioctl_meteor.h &&
3507   check_header machine/ioctl_bt848.h; } ||
3508 { check_header dev/video/meteor/ioctl_meteor.h &&
3509   check_header dev/video/bktr/ioctl_bt848.h; } ||
3510 check_header dev/ic/bt8xx.h
3511
3512 check_header sndio.h
3513 if check_struct sys/soundcard.h audio_buf_info bytes; then
3514     enable_safe sys/soundcard.h
3515 else
3516     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3517     #include <sys/soundcard.h>
3518     audio_buf_info abc;
3519 EOF
3520 fi
3521 check_header soundcard.h
3522
3523 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3524
3525 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3526     check_func jack_port_get_latency_range -ljack
3527
3528 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3529
3530 enabled libcdio &&
3531     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3532
3533 enabled x11grab                                           &&
3534 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3535 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3536 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3537
3538 if ! disabled vaapi; then
3539     check_lib va/va.h vaInitialize -lva && {
3540         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3541         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3542     } || disable vaapi
3543 fi
3544
3545 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3546 check_cpp_condition \
3547     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3548     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3549       disable vdpau; }
3550 fi
3551
3552 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3553 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3554 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3555
3556 # add some useful compiler flags if supported
3557 check_cflags -Wdeclaration-after-statement
3558 check_cflags -Wall
3559 check_cflags -Wno-parentheses
3560 check_cflags -Wno-switch
3561 check_cflags -Wno-format-zero-length
3562 check_cflags -Wdisabled-optimization
3563 check_cflags -Wpointer-arith
3564 check_cflags -Wredundant-decls
3565 check_cflags -Wno-pointer-sign
3566 check_cflags -Wwrite-strings
3567 check_cflags -Wtype-limits
3568 check_cflags -Wundef
3569 check_cflags -Wmissing-prototypes
3570 check_cflags -Wno-pointer-to-int-cast
3571 check_cflags -Wstrict-prototypes
3572 enabled extra_warnings && check_cflags -Winline
3573
3574 # add some linker flags
3575 check_ldflags -Wl,--warn-common
3576 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3577 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3578
3579 enabled xmm_clobber_test &&
3580     check_ldflags -Wl,--wrap,avcodec_open2              \
3581                   -Wl,--wrap,avcodec_decode_audio4      \
3582                   -Wl,--wrap,avcodec_decode_video2      \
3583                   -Wl,--wrap,avcodec_decode_subtitle2   \
3584                   -Wl,--wrap,avcodec_encode_audio2      \
3585                   -Wl,--wrap,avcodec_encode_video       \
3586                   -Wl,--wrap,avcodec_encode_subtitle    \
3587                   -Wl,--wrap,sws_scale ||
3588     disable xmm_clobber_test
3589
3590 echo "X{};" > $TMPV
3591 if test_ldflags -Wl,--version-script,$TMPV; then
3592     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3593     check_cc <<EOF && enable symver_asm_label
3594 void ff_foo(void) __asm__ ("av_foo@VERSION");
3595 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3596 EOF
3597     check_cc <<EOF && enable symver_gnu_asm
3598 __asm__(".symver ff_foo,av_foo@VERSION");
3599 void ff_foo(void) {}
3600 EOF
3601 fi
3602
3603 if [ -n "$optflags" ]; then
3604     add_cflags $optflags
3605 elif enabled small; then
3606     add_cflags $cflags_size
3607 elif enabled optimizations; then
3608     add_cflags $cflags_speed
3609 else
3610     add_cflags $cflags_noopt
3611 fi
3612 check_cflags -fno-math-errno
3613 check_cflags -fno-signed-zeros
3614 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3615 int x;
3616 EOF
3617
3618
3619 if enabled icc; then
3620     # Just warnings, no remarks
3621     check_cflags -w1
3622     # -wd: Disable following warnings
3623     # 144, 167, 556: -Wno-pointer-sign
3624     # 1292: attribute "foo" ignored
3625     # 1419: external declaration in primary source file
3626     # 10006: ignoring unknown option -fno-signed-zeros
3627     # 10148: ignoring unknown option -Wno-parentheses
3628     # 10156: ignoring option '-W'; no argument required
3629     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3630     # 11030: Warning unknown option --as-needed
3631     # 10156: ignoring option '-export'; no argument required
3632     check_ldflags -wd10156,11030
3633     # Allow to compile with optimizations
3634     check_ldflags -march=$cpu
3635     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3636     enable ebp_available
3637     if enabled x86_32; then
3638         icc_version=$($cc -dumpversion)
3639         test ${icc_version%%.*} -ge 11 &&
3640             check_cflags -falign-stack=maintain-16-byte ||
3641             disable aligned_stack
3642     fi
3643 elif enabled ccc; then
3644     # disable some annoying warnings
3645     add_cflags -msg_disable cvtu32to64
3646     add_cflags -msg_disable embedcomment
3647     add_cflags -msg_disable needconstext
3648     add_cflags -msg_disable nomainieee
3649     add_cflags -msg_disable ptrmismatch1
3650     add_cflags -msg_disable unreachcode
3651 elif enabled gcc; then
3652     check_cflags -fno-tree-vectorize
3653     check_cflags -Werror=implicit-function-declaration
3654     check_cflags -Werror=missing-prototypes
3655 elif enabled llvm_gcc; then
3656     check_cflags -mllvm -stack-alignment=16
3657 elif enabled clang; then
3658     check_cflags -mllvm -stack-alignment=16
3659     check_cflags -Qunused-arguments
3660 elif enabled armcc; then
3661     # 2523: use of inline assembler is deprecated
3662     add_cflags -W${armcc_opt},--diag_suppress=2523
3663     add_cflags -W${armcc_opt},--diag_suppress=1207
3664     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3665     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3666     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3667     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3668 elif enabled tms470; then
3669     add_cflags -pds=824 -pds=837
3670 elif enabled pathscale; then
3671     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3672 fi
3673
3674 enabled_any $THREADS_LIST      && enable threads
3675
3676 check_deps $CONFIG_LIST       \
3677            $CONFIG_EXTRA      \
3678            $HAVE_LIST         \
3679            $ALL_COMPONENTS    \
3680            $ALL_TESTS         \
3681
3682 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3683
3684 if test $target_os = "haiku"; then
3685     disable memalign
3686     disable posix_memalign
3687 fi
3688
3689 ! enabled_any memalign posix_memalign aligned_malloc &&
3690     enabled_any $need_memalign && enable memalign_hack
3691
3692 # add_dep lib dep
3693 # -> enable ${lib}_deps_${dep}
3694 # -> add $dep to ${lib}_deps only once
3695 add_dep() {
3696     lib=$1
3697     dep=$2
3698     enabled "${lib}_deps_${dep}" && return 0
3699     enable  "${lib}_deps_${dep}"
3700     prepend "${lib}_deps" $dep
3701 }
3702
3703 # merge deps lib components
3704 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
3705 merge_deps() {
3706     lib=$1
3707     shift
3708     for comp in $*; do
3709         enabled $comp || continue
3710         eval "dep=\"\$${comp}_deps\""
3711         for d in $dep; do
3712             add_dep $lib $d
3713         done
3714     done
3715 }
3716
3717 merge_deps libavfilter $FILTER_LIST
3718
3719 echo "install prefix            $prefix"
3720 echo "source path               $source_path"
3721 echo "C compiler                $cc"
3722 echo "ARCH                      $arch ($cpu)"
3723 if test "$build_suffix" != ""; then
3724     echo "build suffix              $build_suffix"
3725 fi
3726 if test "$progs_suffix" != ""; then
3727     echo "progs suffix              $progs_suffix"
3728 fi
3729 if test "$extra_version" != ""; then
3730     echo "version string suffix     $extra_version"
3731 fi
3732 echo "big-endian                ${bigendian-no}"
3733 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3734 if enabled x86; then
3735     echo "${yasmexe}                      ${yasm-no}"
3736     echo "MMX enabled               ${mmx-no}"
3737     echo "MMX2 enabled              ${mmx2-no}"
3738     echo "3DNow! enabled            ${amd3dnow-no}"
3739     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3740     echo "SSE enabled               ${sse-no}"
3741     echo "SSSE3 enabled             ${ssse3-no}"
3742     echo "AVX enabled               ${avx-no}"
3743     echo "FMA4 enabled              ${fma4-no}"
3744     echo "CMOV enabled              ${cmov-no}"
3745     echo "CMOV is fast              ${fast_cmov-no}"
3746     echo "EBX available             ${ebx_available-no}"
3747     echo "EBP available             ${ebp_available-no}"
3748 fi
3749 if enabled arm; then
3750     echo "ARMv5TE enabled           ${armv5te-no}"
3751     echo "ARMv6 enabled             ${armv6-no}"
3752     echo "ARMv6T2 enabled           ${armv6t2-no}"
3753     echo "ARM VFP enabled           ${armvfp-no}"
3754     echo "NEON enabled              ${neon-no}"
3755 fi
3756 if enabled mips; then
3757     echo "MMI enabled               ${mmi-no}"
3758     echo "MIPS FPU enabled          ${mipsfpu-no}"
3759     echo "MIPS32R2 enabled          ${mips32r2-no}"
3760     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
3761     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
3762 fi
3763 if enabled ppc; then
3764     echo "AltiVec enabled           ${altivec-no}"
3765     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3766     echo "dcbzl available           ${dcbzl-no}"
3767 fi
3768 if enabled sparc; then
3769     echo "VIS enabled               ${vis-no}"
3770 fi
3771 echo "debug symbols             ${debug-no}"
3772 echo "strip symbols             ${stripping-no}"
3773 echo "optimize for size         ${small-no}"
3774 echo "optimizations             ${optimizations-no}"
3775 echo "static                    ${static-no}"
3776 echo "shared                    ${shared-no}"
3777 echo "postprocessing support    ${postproc-no}"
3778 echo "new filter support        ${avfilter-no}"
3779 echo "network support           ${network-no}"
3780 echo "threading support         ${thread_type-no}"
3781 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3782 echo "SDL support               ${sdl-no}"
3783 echo "libdxva2 enabled          ${dxva2-no}"
3784 echo "libva enabled             ${vaapi-no}"
3785 echo "libvdpau enabled          ${vdpau-no}"
3786 echo "AVISynth enabled          ${avisynth-no}"
3787 echo "frei0r enabled            ${frei0r-no}"
3788 echo "gnutls enabled            ${gnutls-no}"
3789 echo "libaacplus enabled        ${libaacplus-no}"
3790 echo "libass enabled            ${libass-no}"
3791 echo "libcaca enabled           ${libcaca-no}"
3792 echo "libcdio support           ${libcdio-no}"
3793 echo "libcelt enabled           ${libcelt-no}"
3794 echo "libdc1394 support         ${libdc1394-no}"
3795 echo "libfaac enabled           ${libfaac-no}"
3796 echo "libfdk-aac enabled        ${libfdk_aac-no}"
3797 echo "libgsm enabled            ${libgsm-no}"
3798 echo "libiec61883 support       ${libiec61883-no}"
3799 echo "libilbc enabled           ${libilbc-no}"
3800 echo "libmodplug enabled        ${libmodplug-no}"
3801 echo "libmp3lame enabled        ${libmp3lame-no}"
3802 echo "libnut enabled            ${libnut-no}"
3803 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3804 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3805 echo "libopencv support         ${libopencv-no}"
3806 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3807 echo "libopus enabled           ${libopus-no}"
3808 echo "libpulse enabled          ${libpulse-no}"
3809 echo "librtmp enabled           ${librtmp-no}"
3810 echo "libschroedinger enabled   ${libschroedinger-no}"
3811 echo "libspeex enabled          ${libspeex-no}"
3812 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3813 echo "libtheora enabled         ${libtheora-no}"
3814 echo "libutvideo enabled        ${libutvideo-no}"
3815 echo "libv4l2 enabled           ${libv4l2-no}"
3816 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3817 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3818 echo "libvorbis enabled         ${libvorbis-no}"
3819 echo "libvpx enabled            ${libvpx-no}"
3820 echo "libx264 enabled           ${libx264-no}"
3821 echo "libxavs enabled           ${libxavs-no}"
3822 echo "libxvid enabled           ${libxvid-no}"
3823 echo "openal enabled            ${openal-no}"
3824 echo "openssl enabled           ${openssl-no}"
3825 echo "zlib enabled              ${zlib-no}"
3826 echo "bzlib enabled             ${bzlib-no}"
3827 echo "texi2html enabled         ${texi2html-no}"
3828 echo "pod2man enabled           ${pod2man-no}"
3829 echo "makeinfo enabled          ${makeinfo-no}"
3830 test -n "$random_seed" &&
3831     echo "random seed               ${random_seed}"
3832 echo
3833
3834 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3835     echo "Enabled ${type}s:"
3836     eval list=\$$(toupper $type)_LIST
3837     print_enabled '_*' $list | sort | pr -r -3 -t
3838     echo
3839 done
3840
3841 license="LGPL version 2.1 or later"
3842 if enabled nonfree; then
3843     license="nonfree and unredistributable"
3844 elif enabled gplv3; then
3845     license="GPL version 3 or later"
3846 elif enabled lgplv3; then
3847     license="LGPL version 3 or later"
3848 elif enabled gpl; then
3849     license="GPL version 2 or later"
3850 fi
3851
3852 echo "License: $license"
3853
3854 echo "Creating config.mak and config.h..."
3855
3856 test -e Makefile || $ln_s "$source_path/Makefile" .
3857
3858 enabled stripping || strip="echo skipping strip"
3859
3860 config_files="$TMPH config.mak"
3861
3862 cat > config.mak <<EOF
3863 # Automatically generated by configure - do not modify!
3864 ifndef FFMPEG_CONFIG_MAK
3865 FFMPEG_CONFIG_MAK=1
3866 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3867 prefix=$prefix
3868 LIBDIR=\$(DESTDIR)$libdir
3869 SHLIBDIR=\$(DESTDIR)$shlibdir
3870 INCDIR=\$(DESTDIR)$incdir
3871 BINDIR=\$(DESTDIR)$bindir
3872 DATADIR=\$(DESTDIR)$datadir
3873 MANDIR=\$(DESTDIR)$mandir
3874 SRC_PATH=$source_path
3875 ifndef MAIN_MAKEFILE
3876 SRC_PATH:=\$(SRC_PATH:.%=..%)
3877 endif
3878 CC_IDENT=$cc_ident
3879 ARCH=$arch
3880 CC=$cc
3881 CXX=$cxx
3882 AS=$as
3883 LD=$ld
3884 DEPCC=$dep_cc
3885 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3886 DEPAS=$as
3887 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3888 YASM=$yasmexe
3889 DEPYASM=$yasmexe
3890 AR=$ar
3891 RANLIB=$ranlib
3892 CP=cp -p
3893 LN_S=$ln_s
3894 STRIP=$strip
3895 CPPFLAGS=$CPPFLAGS
3896 CFLAGS=$CFLAGS
3897 CXXFLAGS=$CXXFLAGS
3898 ASFLAGS=$ASFLAGS
3899 AS_C=$AS_C
3900 AS_O=$AS_O
3901 CC_C=$CC_C
3902 CC_O=$CC_O
3903 CXX_O=$CXX_O
3904 LD_O=$LD_O
3905 LDFLAGS=$LDFLAGS
3906 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3907 SHFLAGS=$SHFLAGS
3908 YASMFLAGS=$YASMFLAGS
3909 BUILDSUF=$build_suffix
3910 PROGSSUF=$progs_suffix
3911 FULLNAME=$FULLNAME
3912 LIBPREF=$LIBPREF
3913 LIBSUF=$LIBSUF
3914 LIBNAME=$LIBNAME
3915 SLIBPREF=$SLIBPREF
3916 SLIBSUF=$SLIBSUF
3917 EXESUF=$EXESUF
3918 EXTRA_VERSION=$extra_version
3919 CCDEP=$CCDEP
3920 CXXDEP=$CXXDEP
3921 CCDEP_FLAGS=$CCDEP_FLAGS
3922 ASDEP=$ASDEP
3923 ASDEP_FLAGS=$ASDEP_FLAGS
3924 CC_DEPFLAGS=$CC_DEPFLAGS
3925 AS_DEPFLAGS=$AS_DEPFLAGS
3926 HOSTCC=$host_cc
3927 HOSTCFLAGS=$host_cflags
3928 HOSTEXESUF=$HOSTEXESUF
3929 HOSTLDFLAGS=$host_ldflags
3930 HOSTLIBS=$host_libs
3931 DEPHOSTCC=$host_cc
3932 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3933 HOSTCCDEP=$HOSTCCDEP
3934 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3935 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3936 HOSTCC_C=$HOSTCC_C
3937 HOSTCC_O=$HOSTCC_O
3938 TARGET_EXEC=$target_exec
3939 TARGET_PATH=$target_path
3940 SDL_LIBS=$sdl_libs
3941 SDL_CFLAGS=$sdl_cflags
3942 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3943 EXTRALIBS=$extralibs
3944 INSTALL=$install
3945 LIBTARGET=${LIBTARGET}
3946 SLIBNAME=${SLIBNAME}
3947 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3948 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3949 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3950 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3951 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3952 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3953 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3954 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3955 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3956 NOREDZONE_FLAGS=$noredzone_flags
3957 EOF
3958
3959 get_version(){
3960     lcname=$1
3961     name=$(toupper $lcname)
3962     file=$source_path/$lcname/version.h
3963     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3964     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3965     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3966     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3967 }
3968
3969 get_version_old(){
3970     name=$1
3971     file=$source_path/$2
3972 # This condition will be removed when we stop supporting old libpostproc versions
3973 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
3974     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3975     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3976 fi
3977     lcname=$(tolower $name)
3978     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3979     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3980 }
3981
3982 get_version_old LIBPOSTPROC libpostproc/postprocess.h
3983 get_version_old LIBSWRESAMPLE libswresample/swresample.h
3984
3985 get_version libavcodec
3986 get_version libavdevice
3987 get_version libavfilter
3988 get_version libavformat
3989 get_version libavresample
3990 get_version libavutil
3991 get_version libswscale
3992
3993 cat > $TMPH <<EOF
3994 /* Automatically generated by configure - do not modify! */
3995 #ifndef FFMPEG_CONFIG_H
3996 #define FFMPEG_CONFIG_H
3997 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3998 #define FFMPEG_LICENSE "$(c_escape $license)"
3999 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4000 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4001 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4002 #define av_restrict $_restrict
4003 #define EXTERN_PREFIX "${extern_prefix}"
4004 #define EXTERN_ASM ${extern_prefix}
4005 #define SLIBSUF "$SLIBSUF"
4006 EOF
4007
4008 test -n "$assert_level" &&
4009     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4010
4011 test -n "$malloc_prefix" &&
4012     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4013
4014 if enabled yasm; then
4015     append config_files $TMPASM
4016     printf '' >$TMPASM
4017 fi
4018
4019 print_config ARCH_   "$config_files" $ARCH_LIST
4020 print_config HAVE_   "$config_files" $HAVE_LIST
4021 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4022                                      $CONFIG_EXTRA      \
4023                                      $ALL_COMPONENTS    \
4024
4025 cat >>config.mak <<EOF
4026 LAVF_FATE_TESTS=$(print_enabled -n _test $LAVF_FATE_TESTS)
4027 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
4028 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
4029 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
4030 EOF
4031
4032 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4033 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4034
4035 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4036 cp_if_changed $TMPH config.h
4037 touch .config
4038
4039 enabled yasm && cp_if_changed $TMPASM config.asm
4040
4041 cat > $TMPH <<EOF
4042 /* Generated by ffconf */
4043 #ifndef AVUTIL_AVCONFIG_H
4044 #define AVUTIL_AVCONFIG_H
4045 EOF
4046
4047 test "$postproc_version" != current && cat >> $TMPH <<EOF
4048 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
4049 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
4050 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
4051 EOF
4052
4053 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4054
4055 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4056
4057 cp_if_changed $TMPH libavutil/avconfig.h
4058
4059 test -n "$WARNINGS" && printf "\n$WARNINGS"
4060
4061 # build pkg-config files
4062
4063 pkgconfig_generate(){
4064 name=$1
4065 shortname=${name#lib}${build_suffix}
4066 comment=$2
4067 version=$3
4068 libs=$4
4069 requires=$5
4070 enabled ${name#lib} || return 0
4071 mkdir -p $name
4072 cat <<EOF > $name/$name.pc
4073 prefix=$prefix
4074 exec_prefix=\${prefix}
4075 libdir=$libdir
4076 includedir=$incdir
4077
4078 Name: $name
4079 Description: $comment
4080 Version: $version
4081 Requires: $(enabled shared || echo $requires)
4082 Requires.private: $(enabled shared && echo $requires)
4083 Conflicts:
4084 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4085 Libs.private: $(enabled shared && echo $libs)
4086 Cflags: -I\${includedir}
4087 EOF
4088
4089 mkdir -p doc/examples/pc-uninstalled
4090 includedir=${source_path}
4091 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4092 cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4093 prefix=
4094 exec_prefix=
4095 libdir=\${pcfiledir}/../../../$name
4096 includedir=${includedir}
4097
4098 Name: $name
4099 Description: $comment
4100 Version: $version
4101 Requires: $requires
4102 Conflicts:
4103 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4104 Cflags: -I\${includedir}
4105 EOF
4106 }
4107
4108 libavfilter_pc_deps=""
4109 enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4110 enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4111 enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4112 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4113 enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4114 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4115
4116 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4117 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4118
4119 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4120 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4121 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4122 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4123 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4124 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4125 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs"
4126 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4127 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"