76c8bf23afcc4f45bbd94d8df1c196cb09995745
[ffmpeg.git] / 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 Standard options:
63   --help                   print this message
64   --logfile=FILE           log tests and output to FILE [config.log]
65   --disable-logging        do not log configure debug information
66   --prefix=PREFIX          install in PREFIX [$prefix]
67   --bindir=DIR             install binaries in DIR [PREFIX/bin]
68   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
69   --libdir=DIR             install libs in DIR [PREFIX/lib]
70   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
71   --incdir=DIR             install includes in DIR [PREFIX/include]
72   --mandir=DIR             install man page in DIR [PREFIX/share/man]
73
74 Configuration options:
75   --disable-static         do not build static libraries [no]
76   --enable-shared          build shared libraries [no]
77   --enable-gpl             allow use of GPL code, the resulting libs
78                            and binaries will be under GPL [no]
79   --enable-version3        upgrade (L)GPL to version 3 [no]
80   --enable-nonfree         allow use of nonfree code, the resulting libs
81                            and binaries will be unredistributable [no]
82   --disable-doc            do not build documentation
83   --disable-ffmpeg         disable ffmpeg build
84   --disable-ffplay         disable ffplay build
85   --disable-ffprobe        disable ffprobe build
86   --disable-ffserver       disable ffserver build
87   --disable-avdevice       disable libavdevice build
88   --disable-avcodec        disable libavcodec build
89   --disable-avformat       disable libavformat build
90   --disable-swscale        disable libswscale build
91   --enable-postproc        enable GPLed postprocessing support [no]
92   --disable-avfilter       disable video filter support [no]
93   --enable-avfilter-lavf   video filters dependent on avformat [no]
94   --disable-pthreads       disable pthreads [auto]
95   --enable-w32threads      use Win32 threads [no]
96   --enable-x11grab         enable X11 grabbing [no]
97   --disable-network        disable network support [no]
98   --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101   --disable-fastdiv        disable table-based division
102   --enable-small           optimize for size instead of speed
103   --disable-aandct         disable AAN DCT code
104   --disable-dct            disable DCT code
105   --disable-fft            disable FFT code
106   --disable-golomb         disable Golomb code
107   --disable-lpc            disable LPC code
108   --disable-mdct           disable MDCT code
109   --disable-rdft           disable RDFT code
110   --disable-vaapi          disable VAAPI code
111   --disable-vdpau          disable VDPAU code
112   --disable-dxva2          disable DXVA2 code
113   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
114   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
115   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
116   --disable-everything     disable all components listed below
117   --disable-encoder=NAME   disable encoder NAME
118   --enable-encoder=NAME    enable encoder NAME
119   --disable-encoders       disable all encoders
120   --disable-decoder=NAME   disable decoder NAME
121   --enable-decoder=NAME    enable decoder NAME
122   --disable-decoders       disable all decoders
123   --disable-hwaccel=NAME   disable hwaccel NAME
124   --enable-hwaccel=NAME    enable hwaccel NAME
125   --disable-hwaccels       disable all hwaccels
126   --disable-muxer=NAME     disable muxer NAME
127   --enable-muxer=NAME      enable muxer NAME
128   --disable-muxers         disable all muxers
129   --disable-demuxer=NAME   disable demuxer NAME
130   --enable-demuxer=NAME    enable demuxer NAME
131   --disable-demuxers       disable all demuxers
132   --enable-parser=NAME     enable parser NAME
133   --disable-parser=NAME    disable parser NAME
134   --disable-parsers        disable all parsers
135   --enable-bsf=NAME        enable bitstream filter NAME
136   --disable-bsf=NAME       disable bitstream filter NAME
137   --disable-bsfs           disable all bitstream filters
138   --enable-protocol=NAME   enable protocol NAME
139   --disable-protocol=NAME  disable protocol NAME
140   --disable-protocols      disable all protocols
141   --disable-indev=NAME     disable input device NAME
142   --disable-outdev=NAME    disable output device NAME
143   --disable-indevs         disable input devices
144   --disable-outdevs        disable output devices
145   --disable-devices        disable all devices
146   --enable-filter=NAME     enable filter NAME
147   --disable-filter=NAME    disable filter NAME
148   --disable-filters        disable all filters
149   --list-decoders          show all available decoders
150   --list-encoders          show all available encoders
151   --list-hwaccels          show all available hardware accelerators
152   --list-muxers            show all available muxers
153   --list-demuxers          show all available demuxers
154   --list-parsers           show all available parsers
155   --list-protocols         show all available protocols
156   --list-bsfs              show all available bitstream filters
157   --list-indevs            show all available input devices
158   --list-outdevs           show all available output devices
159   --list-filters           show all available filters
160
161 External library support:
162   --enable-avisynth        enable reading of AVISynth script files [no]
163   --enable-bzlib           enable bzlib [autodetect]
164   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
165   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
166   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
167                            and libraw1394 [no]
168   --enable-libdirac        enable Dirac support via libdirac [no]
169   --enable-libfaac         enable FAAC support via libfaac [no]
170   --enable-libgsm          enable GSM support via libgsm [no]
171   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
172   --enable-libnut          enable NUT (de)muxing via libnut,
173                            native (de)muxer exists [no]
174   --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
175   --enable-librtmp         enable RTMP[E] support via librtmp [no]
176   --enable-libschroedinger enable Dirac support via libschroedinger [no]
177   --enable-libspeex        enable Speex decoding via libspeex [no]
178   --enable-libtheora       enable Theora encoding via libtheora [no]
179   --enable-libvorbis       enable Vorbis encoding via libvorbis,
180                            native implementation exists [no]
181   --enable-libvpx          enable VP8 support via libvpx [no]
182   --enable-libx264         enable H.264 encoding via x264 [no]
183   --enable-libxvid         enable Xvid encoding via xvidcore,
184                            native MPEG-4/Xvid encoder exists [no]
185   --enable-mlib            enable Sun medialib [no]
186   --enable-zlib            enable zlib [autodetect]
187
188 Advanced options (experts only):
189   --source-path=PATH       path to source code [$source_path]
190   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
191   --enable-cross-compile   assume a cross-compiler is used
192   --sysroot=PATH           root of cross-build tree
193   --sysinclude=PATH        location of cross-build system headers
194   --target-os=OS           compiler targets OS [$target_os]
195   --target-exec=CMD        command to run executables on target
196   --target-path=DIR        path to view of build directory on target
197   --nm=NM                  use nm tool
198   --ar=AR                  use archive tool AR [$ar_default]
199   --as=AS                  use assembler AS [$as_default]
200   --cc=CC                  use C compiler CC [$cc_default]
201   --ld=LD                  use linker LD
202   --host-cc=HOSTCC         use host C compiler HOSTCC
203   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
204   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
205   --host-libs=HLIBS        use libs HLIBS when linking for host
206   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
207   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
208   --extra-libs=ELIBS       add ELIBS [$ELIBS]
209   --extra-version=STRING   version string suffix []
210   --build-suffix=SUFFIX    library name suffix []
211   --arch=ARCH              select architecture [$arch]
212   --cpu=CPU                select the minimum required CPU (affects
213                            instruction selection, may crash on older CPUs)
214   --enable-powerpc-perf    enable performance report on PPC
215                            (requires enabling PMC)
216   --disable-asm            disable all assembler optimizations
217   --disable-altivec        disable AltiVec optimizations
218   --disable-amd3dnow       disable 3DNow! optimizations
219   --disable-amd3dnowext    disable 3DNow! extended optimizations
220   --disable-mmx            disable MMX optimizations
221   --disable-mmx2           disable MMX2 optimizations
222   --disable-sse            disable SSE optimizations
223   --disable-ssse3          disable SSSE3 optimizations
224   --disable-armv5te        disable armv5te optimizations
225   --disable-armv6          disable armv6 optimizations
226   --disable-armv6t2        disable armv6t2 optimizations
227   --disable-armvfp         disable ARM VFP optimizations
228   --disable-iwmmxt         disable iwmmxt optimizations
229   --disable-mmi            disable MMI optimizations
230   --disable-neon           disable neon optimizations
231   --disable-vis            disable VIS optimizations
232   --disable-yasm           disable use of yasm assembler
233   --enable-pic             build position-independent code
234   --malloc-prefix=PFX      prefix malloc and related names with PFX
235   --enable-sram            allow use of on-chip SRAM
236
237 Developer options (useful when working on FFmpeg itself):
238   --disable-debug          disable debugging symbols
239   --enable-debug=LEVEL     set the debug level [$debuglevel]
240   --enable-gprof           enable profiling with gprof [$gprof]
241   --disable-optimizations  disable compiler optimizations
242   --enable-extra-warnings  enable more compiler warnings
243   --disable-stripping      disable stripping of executables and shared libraries
244   --samples=PATH           location of test samples for FATE
245
246 NOTE: Object files are built at the place where configure is launched.
247 EOF
248   exit 0
249 }
250
251 quotes='""'
252
253 log(){
254     echo "$@" >> $logfile
255 }
256
257 log_file(){
258     log BEGIN $1
259     pr -n -t $1 >> $logfile
260     log END $1
261 }
262
263 echolog(){
264     log "$@"
265     echo "$@"
266 }
267
268 warn(){
269     log "WARNING: $*"
270     WARNINGS="${WARNINGS}WARNING: $*\n"
271 }
272
273 die(){
274     echolog "$@"
275     cat <<EOF
276
277 If you think configure made a mistake, make sure you are using the latest
278 version from SVN.  If the latest version fails, report the problem to the
279 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
280 EOF
281     if disabled logging; then
282         cat <<EOF
283 Rerun configure with logging enabled (do not use --disable-logging), and
284 include the log this produces with your report.
285 EOF
286     else
287 cat <<EOF
288 Include the log file "$logfile" produced by configure as this will help
289 solving the problem.
290 EOF
291     fi
292     exit 1
293 }
294
295 # Avoid locale weirdness, besides we really just want to translate ASCII.
296 toupper(){
297     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
298 }
299
300 tolower(){
301     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
302 }
303
304 c_escape(){
305     echo "$*" | sed 's/["\\]/\\\0/g'
306 }
307
308 sh_quote(){
309     v=$(echo "$1" | sed "s/'/'\\\\''/g")
310     test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
311     echo "$v"
312 }
313
314 filter(){
315     pat=$1
316     shift
317     for v; do
318         eval "case $v in $pat) echo $v ;; esac"
319     done
320 }
321
322 map(){
323     m=$1
324     shift
325     for v; do eval $m; done
326 }
327
328 set_all(){
329     value=$1
330     shift
331     for var in $*; do
332         eval $var=$value
333     done
334 }
335
336 set_weak(){
337     value=$1
338     shift
339     for var; do
340         eval : \${$var:=$value}
341     done
342 }
343
344 pushvar(){
345     for var in $*; do
346         eval level=\${${var}_level:=0}
347         eval ${var}_${level}="\$$var"
348         eval ${var}_level=$(($level+1))
349     done
350 }
351
352 popvar(){
353     for var in $*; do
354         eval level=\${${var}_level:-0}
355         test $level = 0 && continue
356         eval level=$(($level-1))
357         eval $var="\${${var}_${level}}"
358         eval ${var}_level=$level
359         eval unset ${var}_${level}
360     done
361 }
362
363 enable(){
364     set_all yes $*
365 }
366
367 disable(){
368     set_all no $*
369 }
370
371 enable_weak(){
372     set_weak yes $*
373 }
374
375 disable_weak(){
376     set_weak no $*
377 }
378
379 enable_safe(){
380     for var; do
381         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
382     done
383 }
384
385 disable_safe(){
386     for var; do
387         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
388     done
389 }
390
391 do_enable_deep(){
392     for var; do
393         enabled $var && continue
394         eval sel="\$${var}_select"
395         eval sgs="\$${var}_suggest"
396         pushvar var sgs
397         enable_deep $sel
398         popvar sgs
399         enable_deep_weak $sgs
400         popvar var
401     done
402 }
403
404 enable_deep(){
405     do_enable_deep $*
406     enable $*
407 }
408
409 enable_deep_weak(){
410     do_enable_deep $*
411     enable_weak $*
412 }
413
414 enabled(){
415     test "${1#!}" = "$1" && op== || op=!=
416     eval test "x\$${1#!}" $op "xyes"
417 }
418
419 disabled(){
420     test "${1#!}" = "$1" && op== || op=!=
421     eval test "x\$${1#!}" $op "xno"
422 }
423
424 enabled_all(){
425     for opt; do
426         enabled $opt || return 1
427     done
428 }
429
430 disabled_all(){
431     for opt; do
432         disabled $opt || return 1
433     done
434 }
435
436 enabled_any(){
437     for opt; do
438         enabled $opt && return 0
439     done
440 }
441
442 disabled_any(){
443     for opt; do
444         disabled $opt && return 0
445     done
446     return 1
447 }
448
449 set_default(){
450     for opt; do
451         eval : \${$opt:=\$${opt}_default}
452     done
453 }
454
455 is_in(){
456     value=$1
457     shift
458     for var in $*; do
459         [ $var = $value ] && return 0
460     done
461     return 1
462 }
463
464 check_deps(){
465     for cfg; do
466         cfg="${cfg#!}"
467         enabled ${cfg}_checking && die "Circular dependency for $cfg."
468         disabled ${cfg}_checking && continue
469         enable ${cfg}_checking
470
471         eval dep_all="\$${cfg}_deps"
472         eval dep_any="\$${cfg}_deps_any"
473         eval dep_sel="\$${cfg}_select"
474         eval dep_sgs="\$${cfg}_suggest"
475         eval dep_ifa="\$${cfg}_if"
476         eval dep_ifn="\$${cfg}_if_any"
477
478         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
479         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
480         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
481
482         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
483         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
484         enabled_all  $dep_all || disable $cfg
485         enabled_any  $dep_any || disable $cfg
486         disabled_any $dep_sel && disable $cfg
487
488         if enabled $cfg; then
489             eval dep_extralibs="\$${cfg}_extralibs"
490             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
491             enable_deep $dep_sel
492             enable_deep_weak $dep_sgs
493         fi
494
495         disable ${cfg}_checking
496     done
497 }
498
499 print_config(){
500     pfx=$1
501     header=$2
502     makefile=$3
503     shift 3
504     for cfg; do
505         ucname="$(toupper $cfg)"
506         if enabled $cfg; then
507             echo "#define ${pfx}${ucname} 1" >> $header
508             echo "${pfx}${ucname}=yes" >> $makefile
509         else
510             echo "#define ${pfx}${ucname} 0" >> $header
511             echo "!${pfx}${ucname}=yes" >> $makefile
512         fi
513     done
514 }
515
516 flags_saved(){
517     (: ${SAVE_CFLAGS?}) 2> /dev/null
518 }
519
520 save_flags(){
521     flags_saved && return
522     SAVE_CFLAGS="$CFLAGS"
523     SAVE_LDFLAGS="$LDFLAGS"
524     SAVE_extralibs="$extralibs"
525 }
526
527 restore_flags(){
528     flags_saved || return
529     CFLAGS="$SAVE_CFLAGS"
530     LDFLAGS="$SAVE_LDFLAGS"
531     extralibs="$SAVE_extralibs"
532     unset SAVE_CFLAGS
533     unset SAVE_LDFLAGS
534     unset SAVE_extralibs
535 }
536
537 temp_cflags(){
538     save_flags
539     CFLAGS="$CFLAGS $*"
540 }
541
542 temp_ldflags(){
543     save_flags
544     LDFLAGS="$LDFLAGS $*"
545 }
546
547 temp_extralibs(){
548     save_flags
549     extralibs="$extralibs $*"
550 }
551
552 append(){
553     var=$1
554     shift
555     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
556     eval "$var=\"\$$var $*\""
557 }
558
559 add_cppflags(){
560     append CPPFLAGS $($filter_cppflags "$@")
561 }
562
563 add_cflags(){
564     append CFLAGS $($filter_cflags "$@")
565 }
566
567 add_asflags(){
568     append ASFLAGS $($filter_asflags "$@")
569 }
570
571 add_ldflags(){
572     append LDFLAGS "$@"
573 }
574
575 add_extralibs(){
576     append extralibs "$@"
577 }
578
579 check_cmd(){
580     log "$@"
581     "$@" >> $logfile 2>&1
582 }
583
584 check_cc(){
585     log check_cc "$@"
586     cat > $TMPC
587     log_file $TMPC
588     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
589 }
590
591 check_cpp(){
592     log check_cpp "$@"
593     cat > $TMPC
594     log_file $TMPC
595     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
596 }
597
598 check_as(){
599     log check_as "$@"
600     cat > $TMPC
601     log_file $TMPC
602     check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
603 }
604
605 check_asm(){
606     log check_asm "$@"
607     name="$1"
608     code="$2"
609     shift 2
610     disable $name
611     check_as "$@" <<EOF && enable $name
612 void foo(void){ __asm__ volatile($code); }
613 EOF
614 }
615
616 check_yasm(){
617     log check_yasm "$@"
618     echo "$1" > $TMPS
619     log_file $TMPS
620     shift 1
621     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
622 }
623
624 check_ld(){
625     log check_ld "$@"
626     flags=''
627     libs=''
628     for f; do
629         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
630     done
631     check_cc $($filter_cflags $flags) || return
632     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
633 }
634
635 check_cppflags(){
636     log check_cppflags "$@"
637     set -- $($filter_cppflags "$@")
638     check_cc "$@" <<EOF && append CPPFLAGS "$@"
639 int x;
640 EOF
641 }
642
643 check_cflags(){
644     log check_cflags "$@"
645     set -- $($filter_cflags "$@")
646     check_cc "$@" <<EOF && append CFLAGS "$@"
647 int x;
648 EOF
649 }
650
651 test_ldflags(){
652     log test_ldflags "$@"
653     check_ld "$@" <<EOF
654 int main(void){ return 0; }
655 EOF
656 }
657
658 check_ldflags(){
659     log check_ldflags "$@"
660     test_ldflags "$@" && add_ldflags "$@"
661 }
662
663 check_header(){
664     log check_header "$@"
665     header=$1
666     shift
667     disable_safe $header
668     check_cpp "$@" <<EOF && enable_safe $header
669 #include <$header>
670 int x;
671 EOF
672 }
673
674 check_func(){
675     log check_func "$@"
676     func=$1
677     shift
678     disable $func
679     check_ld "$@" <<EOF && enable $func
680 extern int $func();
681 int main(void){ $func(); }
682 EOF
683 }
684
685 check_mathfunc(){
686     log check_mathfunc "$@"
687     func=$1
688     shift
689     disable $func
690     check_ld "$@" <<EOF && enable $func
691 #include <math.h>
692 float foo(float f) { return $func(f); }
693 int main(void){ return 0; }
694 EOF
695 }
696
697 check_func_headers(){
698     log check_func_headers "$@"
699     headers=$1
700     func=$2
701     shift 2
702     disable $func
703     incs=""
704     for hdr in $headers; do
705         incs="$incs
706 #include <$hdr>"
707     done
708     check_ld "$@" <<EOF && enable $func && enable_safe $headers
709 $incs
710 int main(int argc, char **argv){
711     return (long) $func;
712 }
713 EOF
714 }
715
716 check_cpp_condition(){
717     log check_cpp_condition "$@"
718     header=$1
719     condition=$2
720     shift 2
721     check_cpp $($filter_cppflags "$@") <<EOF
722 #include <$header>
723 #if !($condition)
724 #error "unsatisfied condition: $condition"
725 #endif
726 EOF
727 }
728
729 check_lib(){
730     log check_lib "$@"
731     header="$1"
732     func="$2"
733     shift 2
734     temp_extralibs "$@"
735     check_header $header && check_func $func && add_extralibs "$@"
736     err=$?
737     restore_flags
738     return $err
739 }
740
741 check_lib2(){
742     log check_lib2 "$@"
743     headers="$1"
744     func="$2"
745     shift 2
746     check_func_headers "$headers" $func "$@" && add_extralibs "$@"
747 }
748
749 check_exec(){
750     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
751 }
752
753 check_exec_crash(){
754     code=$(cat)
755
756     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
757     # are safe but may not be available everywhere.  Thus we use
758     # raise(SIGTERM) instead.  The check is run in a subshell so we
759     # can redirect the "Terminated" message from the shell.  SIGBUS
760     # is not defined by standard C so it is used conditionally.
761
762     (check_exec "$@") >> $logfile 2>&1 <<EOF
763 #include <signal.h>
764 static void sighandler(int sig){
765     raise(SIGTERM);
766 }
767 int main(void){
768     signal(SIGILL, sighandler);
769     signal(SIGFPE, sighandler);
770     signal(SIGSEGV, sighandler);
771 #ifdef SIGBUS
772     signal(SIGBUS, sighandler);
773 #endif
774     { $code }
775 }
776 EOF
777 }
778
779 check_type(){
780     log check_type "$@"
781     headers=$1
782     type=$2
783     shift 2
784     disable_safe "$type"
785     incs=""
786     for hdr in $headers; do
787         incs="$incs
788 #include <$hdr>"
789     done
790     check_cc "$@" <<EOF && enable_safe "$type"
791 $incs
792 $type v;
793 EOF
794 }
795
796 check_struct(){
797     log check_type "$@"
798     headers=$1
799     struct=$2
800     member=$3
801     shift 3
802     disable_safe "${struct}_${member}"
803     incs=""
804     for hdr in $headers; do
805         incs="$incs
806 #include <$hdr>"
807     done
808     check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
809 $incs
810 const void *p = &(($struct *)0)->$member;
811 EOF
812 }
813
814 require(){
815     name="$1"
816     header="$2"
817     func="$3"
818     shift 3
819     check_lib $header $func "$@" || die "ERROR: $name not found"
820 }
821
822 require2(){
823     name="$1"
824     headers="$2"
825     func="$3"
826     shift 3
827     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
828 }
829
830 check_host_cc(){
831     log check_host_cc "$@"
832     cat > $TMPC
833     log_file $TMPC
834     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
835 }
836
837 check_host_cflags(){
838     log check_host_cflags "$@"
839     check_host_cc "$@" <<EOF && append host_cflags "$@"
840 int x;
841 EOF
842 }
843
844 apply(){
845     file=$1
846     shift
847     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
848 }
849
850 cp_if_changed(){
851     cmp -s "$1" "$2" &&
852         echo "$2 is unchanged" ||
853         cp -f "$1" "$2"
854 }
855
856 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
857 # system-dependent things.
858
859 COMPONENT_LIST="
860     bsfs
861     decoders
862     demuxers
863     encoders
864     filters
865     hwaccels
866     indevs
867     muxers
868     outdevs
869     parsers
870     protocols
871 "
872
873 CONFIG_LIST="
874     $COMPONENT_LIST
875     aandct
876     avcodec
877     avdevice
878     avfilter
879     avfilter_lavf
880     avformat
881     avisynth
882     bzlib
883     dct
884     doc
885     dwt
886     dxva2
887     fastdiv
888     ffmpeg
889     ffplay
890     ffprobe
891     ffserver
892     fft
893     golomb
894     gpl
895     gprof
896     gray
897     h264dsp
898     hardcoded_tables
899     libdc1394
900     libdirac
901     libfaac
902     libgsm
903     libmp3lame
904     libnut
905     libopencore_amrnb
906     libopencore_amrwb
907     libopenjpeg
908     librtmp
909     libschroedinger
910     libspeex
911     libtheora
912     libvorbis
913     libvpx
914     libx264
915     libxvid
916     lpc
917     lsp
918     mdct
919     memalign_hack
920     mlib
921     mpegaudio_hp
922     network
923     nonfree
924     pic
925     postproc
926     powerpc_perf
927     rdft
928     runtime_cpudetect
929     shared
930     small
931     sram
932     static
933     swscale
934     swscale_alpha
935     vaapi
936     vdpau
937     version3
938     x11grab
939     zlib
940 "
941
942 THREADS_LIST='
943     pthreads
944     w32threads
945 '
946
947 ARCH_LIST='
948     alpha
949     arm
950     avr32
951     avr32_ap
952     avr32_uc
953     bfin
954     ia64
955     m68k
956     mips
957     mips64
958     parisc
959     ppc
960     ppc64
961     s390
962     sh4
963     sparc
964     sparc64
965     tomi
966     x86
967     x86_32
968     x86_64
969 '
970
971 ARCH_EXT_LIST='
972     altivec
973     amd3dnow
974     amd3dnowext
975     armv5te
976     armv6
977     armv6t2
978     armvfp
979     iwmmxt
980     mmi
981     mmx
982     mmx2
983     neon
984     ppc4xx
985     sse
986     ssse3
987     vis
988 '
989
990 HAVE_LIST_PUB='
991     bigendian
992 '
993
994 HAVE_LIST="
995     $ARCH_EXT_LIST
996     $HAVE_LIST_PUB
997     $THREADS_LIST
998     alsa_asoundlib_h
999     altivec_h
1000     arpa_inet_h
1001     attribute_may_alias
1002     attribute_packed
1003     bswap
1004     closesocket
1005     cmov
1006     conio_h
1007     dcbzl
1008     dev_bktr_ioctl_bt848_h
1009     dev_bktr_ioctl_meteor_h
1010     dev_ic_bt8xx_h
1011     dev_video_meteor_ioctl_meteor_h
1012     dev_video_bktr_ioctl_bt848_h
1013     dlfcn_h
1014     dlopen
1015     dos_paths
1016     ebp_available
1017     ebx_available
1018     exp2
1019     exp2f
1020     fast_64bit
1021     fast_clz
1022     fast_cmov
1023     fast_unaligned
1024     fork
1025     getaddrinfo
1026     gethrtime
1027     GetProcessMemoryInfo
1028     GetProcessTimes
1029     getrusage
1030     struct_rusage_ru_maxrss
1031     inet_aton
1032     inline_asm
1033     isatty
1034     ldbrx
1035     libdc1394_1
1036     libdc1394_2
1037     llrint
1038     llrintf
1039     local_aligned_16
1040     local_aligned_8
1041     log2
1042     log2f
1043     loongson
1044     lrint
1045     lrintf
1046     lzo1x_999_compress
1047     machine_ioctl_bt848_h
1048     machine_ioctl_meteor_h
1049     malloc_h
1050     memalign
1051     mkstemp
1052     pld
1053     posix_memalign
1054     round
1055     roundf
1056     sdl
1057     sdl_video_size
1058     setmode
1059     socklen_t
1060     soundcard_h
1061     poll_h
1062     setrlimit
1063     strerror_r
1064     struct_addrinfo
1065     struct_ipv6_mreq
1066     struct_sockaddr_in6
1067     struct_sockaddr_sa_len
1068     struct_sockaddr_storage
1069     symver
1070     symver_gnu_asm
1071     symver_asm_label
1072     sys_mman_h
1073     sys_resource_h
1074     sys_select_h
1075     sys_soundcard_h
1076     sys_videoio_h
1077     ten_operands
1078     termios_h
1079     threads
1080     truncf
1081     vfp_args
1082     VirtualAlloc
1083     winsock2_h
1084     xform_asm
1085     yasm
1086 "
1087
1088 # options emitted with CONFIG_ prefix but not available on command line
1089 CONFIG_EXTRA="
1090     avutil
1091     gplv3
1092     lgplv3
1093 "
1094
1095 CMDLINE_SELECT="
1096     $ARCH_EXT_LIST
1097     $CONFIG_LIST
1098     $THREADS_LIST
1099     asm
1100     cross_compile
1101     debug
1102     extra_warnings
1103     logging
1104     optimizations
1105     stripping
1106     yasm
1107 "
1108
1109 PATHS_LIST='
1110     bindir
1111     datadir
1112     incdir
1113     libdir
1114     mandir
1115     prefix
1116     shlibdir
1117 '
1118
1119 CMDLINE_SET="
1120     $PATHS_LIST
1121     ar
1122     arch
1123     as
1124     build_suffix
1125     cc
1126     cpu
1127     cross_prefix
1128     dep_cc
1129     extra_version
1130     host_cc
1131     host_cflags
1132     host_ldflags
1133     host_libs
1134     host_os
1135     ld
1136     logfile
1137     malloc_prefix
1138     nm
1139     samples
1140     source_path
1141     strip
1142     sysinclude
1143     sysroot
1144     target_exec
1145     target_os
1146     target_path
1147 "
1148
1149 CMDLINE_APPEND="
1150     extra_cflags
1151 "
1152
1153 # code dependency declarations
1154
1155 # architecture extensions
1156
1157 armv5te_deps="arm"
1158 armv6_deps="arm"
1159 armv6t2_deps="arm"
1160 armvfp_deps="arm"
1161 iwmmxt_deps="arm"
1162 neon_deps="arm"
1163
1164 mmi_deps="mips"
1165
1166 altivec_deps="ppc"
1167 ppc4xx_deps="ppc"
1168
1169 vis_deps="sparc"
1170
1171 x86_64_suggest="cmov fast_cmov"
1172 amd3dnow_deps="mmx"
1173 amd3dnowext_deps="amd3dnow"
1174 mmx_deps="x86"
1175 mmx2_deps="mmx"
1176 sse_deps="mmx"
1177 ssse3_deps="sse"
1178
1179 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1180 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1181 fast_unaligned_if_any="armv6 ppc x86"
1182
1183 need_memalign="altivec neon sse"
1184 inline_asm_deps="!tms470"
1185
1186 symver_if_any="symver_asm_label symver_gnu_asm"
1187
1188 # subsystems
1189 mdct_select="fft"
1190 rdft_select="fft"
1191
1192 # decoders / encoders / hardware accelerators
1193 aac_decoder_select="mdct rdft aac_parser"
1194 aac_encoder_select="mdct"
1195 ac3_decoder_select="mdct ac3_parser"
1196 alac_encoder_select="lpc"
1197 amrnb_decoder_select="lsp"
1198 atrac1_decoder_select="mdct"
1199 atrac3_decoder_select="mdct"
1200 binkaudio_dct_decoder_select="mdct rdft dct"
1201 binkaudio_rdft_decoder_select="mdct rdft"
1202 cavs_decoder_select="golomb"
1203 cook_decoder_select="mdct"
1204 cscd_decoder_suggest="zlib"
1205 dca_decoder_select="mdct"
1206 dnxhd_encoder_select="aandct"
1207 dxa_decoder_select="zlib"
1208 eac3_decoder_select="ac3_decoder"
1209 eamad_decoder_select="aandct"
1210 eatgq_decoder_select="aandct"
1211 eatqi_decoder_select="aandct"
1212 ffv1_decoder_select="golomb"
1213 flac_decoder_select="golomb"
1214 flac_encoder_select="golomb lpc"
1215 flashsv_decoder_select="zlib"
1216 flashsv_encoder_select="zlib"
1217 flv_decoder_select="h263_decoder"
1218 flv_encoder_select="h263_encoder"
1219 h261_encoder_select="aandct"
1220 h263_decoder_select="h263_parser"
1221 h263_encoder_select="aandct"
1222 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1223 h263i_decoder_select="h263_decoder"
1224 h263p_encoder_select="h263_encoder"
1225 h264_decoder_select="golomb h264dsp"
1226 h264_dxva2_hwaccel_deps="dxva2api_h"
1227 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1228 h264_vaapi_hwaccel_select="vaapi"
1229 h264_vdpau_decoder_select="vdpau h264_decoder"
1230 imc_decoder_select="fft mdct"
1231 jpegls_decoder_select="golomb"
1232 jpegls_encoder_select="golomb"
1233 ljpeg_encoder_select="aandct"
1234 loco_decoder_select="golomb"
1235 mjpeg_encoder_select="aandct"
1236 mlp_decoder_select="mlp_parser"
1237 mpeg1video_encoder_select="aandct"
1238 mpeg2video_encoder_select="aandct"
1239 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1240 mpeg4_encoder_select="h263_encoder"
1241 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1242 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1243 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1244 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1245 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1246 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1247 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1248 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1249 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1250 msmpeg4v1_decoder_select="h263_decoder"
1251 msmpeg4v1_encoder_select="h263_encoder"
1252 msmpeg4v2_decoder_select="h263_decoder"
1253 msmpeg4v2_encoder_select="h263_encoder"
1254 msmpeg4v3_decoder_select="h263_decoder"
1255 msmpeg4v3_encoder_select="h263_encoder"
1256 nellymoser_decoder_select="mdct"
1257 nellymoser_encoder_select="mdct"
1258 png_decoder_select="zlib"
1259 png_encoder_select="zlib"
1260 qcelp_decoder_select="lsp"
1261 qdm2_decoder_select="mdct rdft"
1262 ra_144_encoder_select="lpc"
1263 rv10_decoder_select="h263_decoder"
1264 rv10_encoder_select="h263_encoder"
1265 rv20_decoder_select="h263_decoder"
1266 rv20_encoder_select="h263_encoder"
1267 rv30_decoder_select="golomb h264dsp"
1268 rv40_decoder_select="golomb h264dsp"
1269 shorten_decoder_select="golomb"
1270 sipr_decoder_select="lsp"
1271 snow_decoder_select="dwt"
1272 snow_encoder_select="aandct dwt"
1273 sonic_decoder_select="golomb"
1274 sonic_encoder_select="golomb"
1275 sonic_ls_encoder_select="golomb"
1276 svq1_encoder_select="aandct"
1277 svq3_decoder_select="golomb h264dsp"
1278 svq3_decoder_suggest="zlib"
1279 theora_decoder_select="vp3_decoder"
1280 tiff_decoder_suggest="zlib"
1281 tiff_encoder_suggest="zlib"
1282 truehd_decoder_select="mlp_decoder"
1283 tscc_decoder_select="zlib"
1284 twinvq_decoder_select="mdct lsp"
1285 vc1_decoder_select="h263_decoder"
1286 vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1287 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1288 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1289 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1290 vorbis_decoder_select="mdct"
1291 vorbis_encoder_select="mdct"
1292 vp6a_decoder_select="vp6_decoder"
1293 vp6f_decoder_select="vp6_decoder"
1294 wmapro_decoder_select="mdct"
1295 wmav1_decoder_select="mdct"
1296 wmav1_encoder_select="mdct"
1297 wmav2_decoder_select="mdct"
1298 wmav2_encoder_select="mdct"
1299 wmavoice_decoder_select="lsp rdft dct"
1300 wmv1_decoder_select="h263_decoder"
1301 wmv1_encoder_select="h263_encoder"
1302 wmv2_decoder_select="h263_decoder"
1303 wmv2_encoder_select="h263_encoder"
1304 wmv3_decoder_select="vc1_decoder"
1305 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1306 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1307 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1308 zlib_decoder_select="zlib"
1309 zlib_encoder_select="zlib"
1310 zmbv_decoder_select="zlib"
1311 zmbv_encoder_select="zlib"
1312
1313 vaapi_deps="va_va_h"
1314 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1315
1316 # parsers
1317 h264_parser_select="golomb h264dsp"
1318
1319 # bitstream_filters
1320 aac_adtstoasc_bsf_select="aac_parser"
1321
1322 # external libraries
1323 libdirac_decoder_deps="libdirac !libschroedinger"
1324 libdirac_encoder_deps="libdirac"
1325 libfaac_encoder_deps="libfaac"
1326 libgsm_decoder_deps="libgsm"
1327 libgsm_encoder_deps="libgsm"
1328 libgsm_ms_decoder_deps="libgsm"
1329 libgsm_ms_encoder_deps="libgsm"
1330 libmp3lame_encoder_deps="libmp3lame"
1331 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1332 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1333 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1334 libopenjpeg_decoder_deps="libopenjpeg"
1335 libschroedinger_decoder_deps="libschroedinger"
1336 libschroedinger_encoder_deps="libschroedinger"
1337 libspeex_decoder_deps="libspeex"
1338 libtheora_encoder_deps="libtheora"
1339 libvorbis_encoder_deps="libvorbis"
1340 libvpx_decoder_deps="libvpx"
1341 libvpx_encoder_deps="libvpx"
1342 libx264_encoder_deps="libx264"
1343 libxvid_encoder_deps="libxvid"
1344
1345 # demuxers / muxers
1346 ac3_demuxer_deps="ac3_parser"
1347 asf_stream_muxer_select="asf_muxer"
1348 avisynth_demuxer_deps="avisynth"
1349 dirac_demuxer_deps="dirac_parser"
1350 eac3_demuxer_select="ac3_parser"
1351 ipod_muxer_select="mov_muxer"
1352 libnut_demuxer_deps="libnut"
1353 libnut_muxer_deps="libnut"
1354 matroska_audio_muxer_select="matroska_muxer"
1355 matroska_demuxer_suggest="zlib bzlib"
1356 mov_demuxer_suggest="zlib"
1357 mp3_demuxer_deps="mpegaudio_parser"
1358 mp4_muxer_select="mov_muxer"
1359 mpegtsraw_demuxer_select="mpegts_demuxer"
1360 mxf_d10_muxer_select="mxf_muxer"
1361 ogg_demuxer_select="golomb"
1362 psp_muxer_select="mov_muxer"
1363 rtsp_demuxer_deps="sdp_demuxer"
1364 rtsp_muxer_deps="sdp_demuxer"
1365 rtsp_muxer_select="rtp_muxer"
1366 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1367 sdp_demuxer_select="asf_demuxer rm_demuxer"
1368 spdif_muxer_select="aac_parser"
1369 tg2_muxer_select="mov_muxer"
1370 tgp_muxer_select="mov_muxer"
1371 w64_demuxer_deps="wav_demuxer"
1372
1373 # indevs / outdevs
1374 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1375 alsa_indev_extralibs="-lasound"
1376 alsa_outdev_deps="alsa_asoundlib_h"
1377 alsa_outdev_extralibs="-lasound"
1378 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1379 dv1394_indev_deps="dv1394 dv_demuxer"
1380 jack_indev_deps="jack_jack_h"
1381 jack_indev_extralibs="-ljack"
1382 libdc1394_indev_deps="libdc1394"
1383 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1384 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1385 v4l_indev_deps="linux_videodev_h"
1386 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1387 vfwcap_indev_deps="capCreateCaptureWindow"
1388 vfwcap_indev_extralibs="-lavicap32"
1389 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1390 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1391
1392 # protocols
1393 gopher_protocol_deps="network"
1394 http_protocol_deps="network"
1395 http_protocol_select="tcp_protocol"
1396 mmst_protocol_deps="network"
1397 rtmp_protocol_select="tcp_protocol"
1398 rtp_protocol_select="udp_protocol"
1399 tcp_protocol_deps="network"
1400 udp_protocol_deps="network"
1401
1402 # filters
1403 movie_filter_deps="avfilter_lavf"
1404 avfilter_lavf_deps="avformat"
1405
1406 # libraries
1407 avdevice_deps="avcodec avformat"
1408 avformat_deps="avcodec"
1409
1410 # programs
1411 ffmpeg_deps="avcodec avformat swscale"
1412 ffmpeg_select="buffer_filter"
1413 ffplay_deps="avcodec avformat swscale sdl"
1414 ffplay_select="rdft"
1415 ffprobe_deps="avcodec avformat"
1416 ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1417 ffserver_extralibs='$ldl'
1418
1419 doc_deps="texi2html"
1420
1421 # default parameters
1422
1423 logfile="config.log"
1424
1425 # installation paths
1426 prefix_default="/usr/local"
1427 bindir_default='${prefix}/bin'
1428 datadir_default='${prefix}/share/ffmpeg'
1429 incdir_default='${prefix}/include'
1430 libdir_default='${prefix}/lib'
1431 mandir_default='${prefix}/share/man'
1432 shlibdir_default="$libdir_default"
1433
1434 # toolchain
1435 ar_default="ar"
1436 cc_default="gcc"
1437 cc_version=\"unknown\"
1438 host_cc_default="gcc"
1439 ln_s="ln -sf"
1440 nm_default="nm"
1441 objformat="elf"
1442 ranlib="ranlib"
1443 strip_default="strip"
1444 yasmexe="yasm"
1445
1446 nm_opts='-g'
1447
1448 # machine
1449 arch_default=$(uname -m)
1450 cpu="generic"
1451
1452 # OS
1453 target_os_default=$(tolower $(uname -s))
1454 host_os=$target_os_default
1455
1456 # configurable options
1457 enable avcodec
1458 enable avdevice
1459 enable avfilter
1460 enable avformat
1461 enable avutil
1462 enable asm
1463 enable debug
1464 enable doc
1465 enable fastdiv
1466 enable ffmpeg
1467 enable ffplay
1468 enable ffprobe
1469 enable ffserver
1470 enable mpegaudio_hp
1471 enable network
1472 enable optimizations
1473 enable protocols
1474 enable static
1475 enable stripping
1476 enable swscale
1477 enable swscale_alpha
1478
1479 # build settings
1480 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1481 FFSERVERLDFLAGS=-Wl,-E
1482 LIBPREF="lib"
1483 LIBSUF=".a"
1484 FULLNAME='$(NAME)$(BUILDSUF)'
1485 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1486 SLIBPREF="lib"
1487 SLIBSUF=".so"
1488 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1489 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1490 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1491 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1492
1493 CC_O='-o $@'
1494
1495 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1496 host_libs='-lm'
1497
1498 target_path='$(CURDIR)'
1499
1500 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1501 # full relative path for objects in subdirectories for non-recursive Make.
1502 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1503 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1504
1505 # find source path
1506 source_path="$(dirname "$0")"
1507 enable source_path_used
1508 if test -f configure; then
1509     source_path="$(pwd)"
1510     disable source_path_used
1511 else
1512     source_path="$(cd "$source_path"; pwd)"
1513     echo "$source_path" | grep -q '[[:blank:]]' &&
1514         die "Out of tree builds are impossible with whitespace in source path."
1515     test -e "$source_path/config.h" &&
1516         die "Out of tree builds are impossible with config.h in source dir."
1517 fi
1518
1519 for v in "$@"; do
1520     r=${v#*=}
1521     l=${v%"$r"}
1522     r=$(sh_quote "$r")
1523     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1524 done
1525
1526 find_things(){
1527     thing=$1
1528     pattern=$2
1529     file=$source_path/$3
1530     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1531 }
1532
1533 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1534 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1535 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1536 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1537 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1538 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1539 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1540 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1541 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1542 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1543 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1544
1545 for n in $COMPONENT_LIST; do
1546     v=$(toupper ${n%s})_LIST
1547     eval enable \$$v
1548     eval ${n}_if_any="\$$v"
1549 done
1550
1551 enable $ARCH_EXT_LIST
1552
1553 die_unknown(){
1554     echo "Unknown option \"$1\"."
1555     echo "See $0 --help for available options."
1556     exit 1
1557 }
1558
1559 show_list() {
1560     suffix=_$1
1561     shift
1562     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1563     exit 0
1564 }
1565
1566 for opt do
1567     optval="${opt#*=}"
1568     case "$opt" in
1569     --extra-ldflags=*) add_ldflags $optval
1570     ;;
1571     --extra-libs=*) add_extralibs $optval
1572     ;;
1573     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1574     ;;
1575     --enable-debug=*) debuglevel="$optval"
1576     ;;
1577     --disable-everything)
1578     map 'eval disable \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1579     ;;
1580     --enable-*=*|--disable-*=*)
1581     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1582     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1583     eval list=\$$(toupper $thing)_LIST
1584     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1585     $action $(filter "$name" $list)
1586     ;;
1587     --enable-?*|--disable-?*)
1588     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1589     if is_in $option $COMPONENT_LIST; then
1590         test $action = disable && action=unset
1591         eval $action \$$(toupper ${option%s})_LIST
1592     elif is_in $option $CMDLINE_SELECT; then
1593         $action $option
1594     else
1595         die_unknown $opt
1596     fi
1597     ;;
1598     --list-*)
1599         NAME="${opt#--list-}"
1600         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1601         NAME=${NAME%s}
1602         eval show_list $NAME \$$(toupper $NAME)_LIST
1603     ;;
1604     --help|-h) show_help
1605     ;;
1606     *)
1607     optname="${opt%%=*}"
1608     optname="${optname#--}"
1609     optname=$(echo "$optname" | sed 's/-/_/g')
1610     if is_in $optname $CMDLINE_SET; then
1611         eval $optname='$optval'
1612     elif is_in $optname $CMDLINE_APPEND; then
1613         append $optname "$optval"
1614     else
1615          die_unknown $opt
1616     fi
1617     ;;
1618     esac
1619 done
1620
1621 disabled logging && logfile=/dev/null
1622
1623 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1624 set >> $logfile
1625
1626 test -n "$cross_prefix" && enable cross_compile
1627
1628 if enabled cross_compile; then
1629     test -n "$arch" && test -n "$target_os" ||
1630         die "Must specify target arch and OS when cross-compiling"
1631 fi
1632
1633 set_default arch target_os
1634
1635 ar_default="${cross_prefix}${ar_default}"
1636 cc_default="${cross_prefix}${cc_default}"
1637 nm_default="${cross_prefix}${nm_default}"
1638 ranlib="${cross_prefix}${ranlib}"
1639 strip_default="${cross_prefix}${strip_default}"
1640
1641 sysinclude_default="${sysroot}/usr/include"
1642
1643 set_default cc nm strip sysinclude
1644 enabled cross_compile || host_cc_default=$cc
1645 set_default host_cc
1646
1647 exesuf() {
1648     case $1 in
1649         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1650     esac
1651 }
1652
1653 EXESUF=$(exesuf $target_os)
1654 HOSTEXESUF=$(exesuf $host_os)
1655
1656 # set temporary file name
1657 : ${TMPDIR:=$TEMPDIR}
1658 : ${TMPDIR:=$TMP}
1659 : ${TMPDIR:=/tmp}
1660
1661 if ! check_cmd type mktemp; then
1662     # simple replacement for missing mktemp
1663     # NOT SAFE FOR GENERAL USE
1664     mktemp(){
1665         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1666     }
1667 fi
1668
1669 tmpfile(){
1670     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1671         (set -C; exec > $tmp) 2>/dev/null ||
1672         die "Unable to create temporary file in $TMPDIR."
1673     append TMPFILES $tmp
1674     eval $1=$tmp
1675 }
1676
1677 trap 'rm -f -- $TMPFILES' EXIT
1678 trap exit HUP INT TERM
1679
1680 tmpfile TMPC  .c
1681 tmpfile TMPE  $EXESUF
1682 tmpfile TMPH  .h
1683 tmpfile TMPO  .o
1684 tmpfile TMPS  .S
1685 tmpfile TMPV  .ver
1686 tmpfile TMPSH .sh
1687
1688 unset -f mktemp
1689
1690 # make sure we can execute files in $TMPDIR
1691 cat > $TMPSH 2>> $logfile <<EOF
1692 #! /bin/sh
1693 EOF
1694 chmod +x $TMPSH >> $logfile 2>&1
1695 if ! $TMPSH >> $logfile 2>&1; then
1696     cat <<EOF
1697 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1698 variable to another directory and make sure that it is not mounted noexec.
1699 EOF
1700     die "Sanity test failed."
1701 fi
1702
1703 filter_cflags=echo
1704 filter_cppflags=echo
1705 filter_asflags=echo
1706
1707 if   $cc -v 2>&1 | grep -qi ^gcc; then
1708     cc_type=gcc
1709     cc_version=__VERSION__
1710     if ! $cc -dumpversion | grep -q '^2\.'; then
1711         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1712         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1713     fi
1714     speed_cflags='-O3'
1715     size_cflags='-Os'
1716 elif $cc --version 2>/dev/null | grep -q Intel; then
1717     cc_type=icc
1718     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1719     CC_DEPFLAGS='-MMD'
1720     AS_DEPFLAGS='-MMD'
1721     speed_cflags='-O3'
1722     size_cflags='-Os'
1723     noopt_cflags='-O1'
1724 elif $cc -v 2>&1 | grep -q xlc; then
1725     cc_type=xlc
1726     cc_version="AV_STRINGIFY(__IBMC__)"
1727     speed_cflags='-O5'
1728     size_cflags='-O5 -qcompact'
1729 elif $cc -V 2>/dev/null | grep -q Compaq; then
1730     cc_type=ccc
1731     cc_version="AV_STRINGIFY(__DECC_VER)"
1732     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1733     debuglevel=3
1734     add_ldflags -Wl,-z,now # calls to libots crash without this
1735     speed_cflags='-fast'
1736     size_cflags='-O1'
1737 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1738     test -d "$sysroot" || die "No valid sysroot specified."
1739     cc_type=armcc
1740     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1741     armcc_conf="$PWD/armcc.conf"
1742     $cc --arm_linux_configure                 \
1743         --arm_linux_config_file="$armcc_conf" \
1744         --configure_sysroot="$sysroot"        \
1745         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1746         die "Error creating armcc configuration file."
1747     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1748     as_default="${cross_prefix}gcc"
1749     CC_DEPFLAGS='-MMD'
1750     AS_DEPFLAGS='-MMD'
1751     speed_cflags='-O3'
1752     size_cflags='-Os'
1753 elif $cc -version 2>/dev/null | grep -q TMS470; then
1754     cc_type=tms470
1755     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1756     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1757     CC_O='-fr=$(@D)'
1758     as_default="${cross_prefix}gcc"
1759     ld_default="${cross_prefix}gcc"
1760     TMPO=$(basename $TMPC .c).o
1761     append TMPFILES $TMPO
1762     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1763     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1764     AS_DEPFLAGS='-MMD'
1765     speed_cflags='-O3 -mf=5'
1766     size_cflags='-O3 -mf=2'
1767     filter_cflags=tms470_flags
1768     tms470_flags(){
1769         for flag; do
1770             case $flag in
1771                 -march=*|-mcpu=*)
1772                     case "${flag#*=}" in
1773                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1774                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1775                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1776                         armv6*|arm11*)          echo -mv=6   ;;
1777                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1778                                                 echo -mv=5e  ;;
1779                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1780                     esac
1781                     ;;
1782                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1783                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1784                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1785                 -msoft-float)   echo --float_support=vfplib       ;;
1786                 -O[0-3]|-mf=*)  echo $flag                        ;;
1787                 -g)             echo -g -mn                       ;;
1788                 -pds=*)         echo $flag                        ;;
1789             esac
1790         done
1791     }
1792 elif $cc -v 2>&1 | grep -q clang; then
1793     cc_type=clang
1794     cc_version=__VERSION__
1795     CC_DEPFLAGS='-MMD'
1796     AS_DEPFLAGS='-MMD'
1797     speed_cflags='-O3'
1798     size_cflags='-Os'
1799 elif $cc -V 2>&1 | grep -q Sun; then
1800     cc_type=suncc
1801     cc_version="AV_STRINGIFY(__SUNPRO_C)"
1802     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1803     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1804     speed_cflags='-O5'
1805     size_cflags='-O5 -xspace'
1806     filter_cflags=suncc_flags
1807     suncc_flags(){
1808         for flag; do
1809             case $flag in
1810                 -march=*|-mcpu=*)
1811                     case "${flag#*=}" in
1812                         native)                   echo -xtarget=native       ;;
1813                         v9|niagara)               echo -xarch=sparc          ;;
1814                         ultrasparc)               echo -xarch=sparcvis       ;;
1815                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1816                         i586|pentium)             echo -xchip=pentium        ;;
1817                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1818                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1819                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1820                         pentium4*)          echo -xtarget=pentium4           ;;
1821                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1822                         *-sse3)             echo -xarch=sse3                 ;;
1823                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
1824                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1825                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1826                         k8|opteron|athlon64|athlon-fx)
1827                                                   echo -xarch=sse2a          ;;
1828                         athlon*)                  echo -xarch=pentium_proa   ;;
1829                     esac
1830                     ;;
1831                 -std=c99)             echo -xc99              ;;
1832                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
1833                 -fPIC)                echo -KPIC -xcode=pic32 ;;
1834                 -W*,*)                echo $flag              ;;
1835                 -f*-*|-W*)                                    ;;
1836                 *)                    echo $flag              ;;
1837             esac
1838         done
1839     }
1840 fi
1841
1842 test -n "$cc_type" && enable $cc_type ||
1843     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1844
1845 : ${as_default:=$cc}
1846 : ${dep_cc_default:=$cc}
1847 : ${ld_default:=$cc}
1848 set_default ar as dep_cc ld
1849
1850 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1851 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1852
1853 add_cflags $extra_cflags
1854 add_asflags $extra_cflags
1855
1856 if test -n "$sysroot"; then
1857     case "$cc_type" in
1858         gcc)
1859             add_cppflags --sysroot="$sysroot"
1860             add_ldflags --sysroot="$sysroot"
1861         ;;
1862         tms470)
1863             add_cppflags -I"$sysinclude"
1864             add_ldflags  --sysroot="$sysroot"
1865         ;;
1866         clang)
1867             add_cppflags -isysroot "$sysroot"
1868             add_ldflags -isysroot "$sysroot"
1869         ;;
1870     esac
1871 fi
1872
1873 if test "$cpu" = host; then
1874     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1875
1876     case "$cc_type" in
1877         gcc)
1878             check_native(){
1879                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1880                 sed -n "/$1=/{
1881                             s/.*$1=\\([^ ]*\\).*/\\1/
1882                             p
1883                             q
1884                         }" $TMPE
1885             }
1886             cpu=$(check_native -march || check_native -mcpu)
1887         ;;
1888     esac
1889
1890     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1891 fi
1892
1893 # Deal with common $arch aliases
1894 case "$arch" in
1895     arm*)
1896         arch="arm"
1897     ;;
1898     mips|mipsel|IP*)
1899         arch="mips"
1900     ;;
1901     mips64*)
1902         arch="mips"
1903         subarch="mips64"
1904     ;;
1905     parisc|hppa)
1906         arch="parisc"
1907     ;;
1908     parisc64|hppa64)
1909         arch="parisc"
1910         subarch="parisc64"
1911     ;;
1912     "Power Macintosh"|ppc|powerpc)
1913         arch="ppc"
1914     ;;
1915     ppc64|powerpc64)
1916         arch="ppc"
1917         subarch="ppc64"
1918     ;;
1919     s390|s390x)
1920         arch="s390"
1921     ;;
1922     sh4|sh)
1923         arch="sh4"
1924     ;;
1925     sun4u|sparc64)
1926         arch="sparc"
1927         subarch="sparc64"
1928     ;;
1929     i[3-6]86|i86pc|BePC|x86_64|amd64)
1930         arch="x86"
1931     ;;
1932 esac
1933
1934 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
1935 enable $arch
1936
1937 # Add processor-specific flags
1938 if test "$cpu" = generic; then
1939     : do nothing
1940 elif enabled ppc; then
1941
1942     case $(tolower $cpu) in
1943         601|ppc601|powerpc601)
1944             cpuflags="-mcpu=601"
1945             disable altivec
1946         ;;
1947         603*|ppc603*|powerpc603*)
1948             cpuflags="-mcpu=603"
1949             disable altivec
1950         ;;
1951         604*|ppc604*|powerpc604*)
1952             cpuflags="-mcpu=604"
1953             disable altivec
1954         ;;
1955         g3|75*|ppc75*|powerpc75*)
1956             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1957             disable altivec
1958         ;;
1959         g4|745*|ppc745*|powerpc745*)
1960             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1961         ;;
1962         74*|ppc74*|powerpc74*)
1963             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1964         ;;
1965         g5|970|ppc970|powerpc970|power4*)
1966             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1967         ;;
1968         cell)
1969             cpuflags="-mcpu=cell"
1970             enable ldbrx
1971         ;;
1972         e500v2)
1973             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1974             disable altivec
1975         ;;
1976         e500)
1977             cpuflags="-mcpu=8540 -mhard-float"
1978             disable altivec
1979         ;;
1980     esac
1981
1982 elif enabled x86; then
1983
1984     case $cpu in
1985         i[345]86|pentium)
1986             cpuflags="-march=$cpu"
1987             disable mmx
1988         ;;
1989         # targets that do NOT support conditional mov (cmov)
1990         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1991             cpuflags="-march=$cpu"
1992             disable cmov
1993         ;;
1994         # targets that do support conditional mov (cmov)
1995         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
1996             cpuflags="-march=$cpu"
1997             enable cmov
1998             enable fast_cmov
1999         ;;
2000         # targets that do support conditional mov but on which it's slow
2001         pentium4|pentium4m|prescott|nocona)
2002             cpuflags="-march=$cpu"
2003             enable cmov
2004             disable fast_cmov
2005         ;;
2006     esac
2007
2008 elif enabled sparc; then
2009
2010     case $cpu in
2011         niagara)
2012             cpuflags="-mcpu=$cpu"
2013             disable vis
2014         ;;
2015         sparc64)
2016             cpuflags="-mcpu=v9"
2017         ;;
2018     esac
2019
2020 elif enabled arm; then
2021
2022     case $cpu in
2023         armv*)
2024             cpuflags="-march=$cpu"
2025         ;;
2026         *)
2027             cpuflags="-mcpu=$cpu"
2028         ;;
2029     esac
2030
2031 elif enabled alpha; then
2032
2033     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2034
2035 elif enabled bfin; then
2036
2037     cpuflags="-mcpu=$cpu"
2038
2039 elif enabled mips; then
2040
2041     cpuflags="-march=$cpu"
2042
2043 elif enabled avr32; then
2044
2045     case $cpu in
2046         ap7[02]0[0-2])
2047             subarch="avr32_ap"
2048             cpuflags="-mpart=$cpu"
2049         ;;
2050         ap)
2051             subarch="avr32_ap"
2052             cpuflags="-march=$cpu"
2053         ;;
2054         uc3[ab]*)
2055             subarch="avr32_uc"
2056             cpuflags="-mcpu=$cpu"
2057         ;;
2058         uc)
2059             subarch="avr32_uc"
2060             cpuflags="-march=$cpu"
2061         ;;
2062     esac
2063
2064 fi
2065
2066 add_cflags $cpuflags
2067 add_asflags $cpuflags
2068
2069 # compiler sanity check
2070 check_exec <<EOF
2071 int main(void){ return 0; }
2072 EOF
2073 if test "$?" != 0; then
2074     echo "$cc is unable to create an executable file."
2075     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2076         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2077         echo "Only do this if you know what cross compiling means."
2078     fi
2079     die "C compiler test failed."
2080 fi
2081
2082 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2083 check_cflags -std=c99
2084 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2085 #include <stdlib.h>
2086 EOF
2087 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2088 #include <stdlib.h>
2089 EOF
2090
2091 check_host_cflags -std=c99
2092
2093 case "$arch" in
2094     alpha|ia64|mips|parisc|sparc)
2095         spic=$shared
2096     ;;
2097     x86)
2098         subarch="x86_32"
2099         check_cc <<EOF && subarch="x86_64"
2100         int test[(int)sizeof(char*) - 7];
2101 EOF
2102         if test "$subarch" = "x86_64"; then
2103             spic=$shared
2104         fi
2105     ;;
2106 esac
2107
2108 enable $subarch
2109 enabled spic && enable pic
2110
2111 # OS specific
2112 case $target_os in
2113     haiku)
2114         prefix_default="/boot/common"
2115         network_extralibs="-lnetwork"
2116         ;;
2117     sunos)
2118         FFSERVERLDFLAGS=""
2119         SHFLAGS='-shared -Wl,-h,$$(@F)'
2120         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2121         network_extralibs="-lsocket -lnsl"
2122         add_cppflags -D__EXTENSIONS__
2123         nm_opts='-P -g'
2124         ;;
2125     netbsd)
2126         oss_indev_extralibs="-lossaudio"
2127         oss_outdev_extralibs="-lossaudio"
2128         add_cppflags -D_XOPEN_SOURCE=600
2129         ;;
2130     openbsd)
2131         enable malloc_aligned
2132         # On OpenBSD 4.5. the compiler does not use PIC unless
2133         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2134         # however the generated executable will not do anything
2135         # (simply quits with exit-code 1, no crash, no output).
2136         # Thus explicitly enable PIC here.
2137         enable pic
2138         SHFLAGS='-shared'
2139         oss_indev_extralibs="-lossaudio"
2140         oss_outdev_extralibs="-lossaudio"
2141         ;;
2142     freebsd|dragonfly)
2143         enable malloc_aligned
2144         ;;
2145     bsd/os)
2146         osextralibs="-lpoll -lgnugetopt"
2147         strip="strip -d"
2148         ;;
2149     darwin)
2150         enable malloc_aligned
2151         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2152         strip="${strip} -x"
2153         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2154         SLIBSUF=".dylib"
2155         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2156         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2157         FFSERVERLDFLAGS=-Wl,-bind_at_load
2158         objformat="macho"
2159         enabled x86_64 && objformat="macho64"
2160         enabled_any pic shared ||
2161             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2162         ;;
2163     mingw32*)
2164         if test $target_os = "mingw32ce"; then
2165             disable network
2166         else
2167             target_os=mingw32
2168         fi
2169         LIBTARGET=i386
2170         if enabled x86_64; then
2171             enable malloc_aligned
2172             LIBTARGET=x64
2173         elif enabled arm; then
2174             LIBTARGET=arm
2175         fi
2176         shlibdir_default="$bindir_default"
2177         disable ffserver
2178         SLIBPREF=""
2179         SLIBSUF=".dll"
2180         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2181         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2182         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2183         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2184             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2185             install -d "$(LIBDIR)"; \
2186             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2187         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2188         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'
2189         objformat="win32"
2190         enable dos_paths
2191         check_cflags -fno-common
2192         if ! enabled x86_64; then
2193             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2194                 die "ERROR: MinGW runtime version must be >= 3.15."
2195             enabled_any avisynth vfwcap_indev &&
2196                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2197                   die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2198         fi
2199         ;;
2200     cygwin*)
2201         target_os=cygwin
2202         shlibdir_default="$bindir_default"
2203         SLIBPREF="cyg"
2204         SLIBSUF=".dll"
2205         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2206         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2207         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2208         objformat="win32"
2209         enable dos_paths
2210         check_cflags -fno-common
2211         ;;
2212     *-dos|freedos|opendos)
2213         disable ffplay ffserver
2214         disable $INDEV_LIST $OUTDEV_LIST
2215         network_extralibs="-lsocket"
2216         objformat="coff"
2217         enable dos_paths
2218         ;;
2219     linux)
2220         enable dv1394
2221         ;;
2222     irix*)
2223         target_os=irix
2224         ranlib="echo ignoring ranlib"
2225         ;;
2226     os/2*)
2227         strip="lxlite"
2228         ln_s="cp -f"
2229         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2230         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2231         FFSERVERLDFLAGS=""
2232         LIBSUF="_s.a"
2233         SLIBPREF=""
2234         SLIBSUF=".dll"
2235         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2236         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2237         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2238           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2239           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2240           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2241           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2242           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2243         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2244           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2245         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2246         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2247         enable dos_paths
2248         ;;
2249     gnu/kfreebsd)
2250         ;;
2251     gnu)
2252         ;;
2253     none)
2254         ;;
2255     *)
2256         die "Unknown OS '$target_os'."
2257         ;;
2258 esac
2259
2260 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2261
2262 set_default $PATHS_LIST
2263
2264 add_extralibs $osextralibs
2265
2266 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2267 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2268
2269 # we need to build at least one lib type
2270 if ! enabled_any static shared; then
2271     cat <<EOF
2272 At least one library type must be built.
2273 Specify --enable-static to build the static libraries or --enable-shared to
2274 build the shared libraries as well. To only build the shared libraries specify
2275 --disable-static in addition to --enable-shared.
2276 EOF
2277     exit 1;
2278 fi
2279
2280 disabled static && LIBNAME=""
2281
2282 die_license_disabled() {
2283     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2284 }
2285
2286 die_license_disabled gpl libx264
2287 die_license_disabled gpl libxvid
2288 die_license_disabled gpl postproc
2289 die_license_disabled gpl x11grab
2290
2291 die_license_disabled nonfree libfaac
2292
2293 die_license_disabled version3 libopencore_amrnb
2294 die_license_disabled version3 libopencore_amrwb
2295
2296 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2297
2298 check_deps $ARCH_EXT_LIST
2299
2300 disabled optimizations || check_cflags -fomit-frame-pointer
2301
2302 enable_pic() {
2303     enable pic
2304     add_cppflags -DPIC
2305     add_cflags   -fPIC
2306     add_asflags  -fPIC
2307 }
2308
2309 enabled pic && enable_pic
2310
2311 check_cc <<EOF || die "Symbol mangling check failed."
2312 int ff_extern;
2313 EOF
2314 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2315 extern_prefix=${sym%%ff_extern*}
2316
2317 check_cc <<EOF && enable inline_asm
2318 void foo(void) { __asm__ volatile ("" ::); }
2319 EOF
2320
2321 _restrict=
2322 for restrict_keyword in restrict __restrict__ __restrict; do
2323     check_cc <<EOF && _restrict=$restrict_keyword && break
2324 void foo(char * $restrict_keyword p);
2325 EOF
2326 done
2327
2328 check_cc <<EOF && enable attribute_packed
2329 struct { int x; } __attribute__((packed)) x;
2330 EOF
2331
2332 check_cc <<EOF && enable attribute_may_alias
2333 union { int x; } __attribute__((may_alias)) x;
2334 EOF
2335
2336 check_cc <<EOF || die "endian test failed"
2337 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2338 EOF
2339 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2340
2341 if enabled alpha; then
2342
2343     check_cflags -mieee
2344
2345 elif enabled arm; then
2346
2347     check_cflags -marm
2348
2349     check_ld <<EOF && enable vfp_args
2350 __asm__ (".eabi_attribute 28, 1");
2351 int main(void) { return 0; }
2352 EOF
2353
2354     # We have to check if pld is a nop and disable it.
2355     check_asm pld '"pld [r0]"'
2356
2357     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2358     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2359     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2360     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2361     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2362     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2363
2364     enabled_all armv6t2 shared !pic && enable_pic
2365
2366 elif enabled mips; then
2367
2368     check_asm loongson '"dmult.g $1, $2, $3"'
2369     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2370
2371 elif enabled ppc; then
2372
2373     enable local_aligned_8 local_aligned_16
2374
2375     check_asm dcbzl     '"dcbzl 0, 1"'
2376     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2377     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2378
2379     # AltiVec flags: The FSF version of GCC differs from the Apple version
2380     if enabled altivec; then
2381         check_cflags -maltivec -mabi=altivec &&
2382         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2383         check_cflags -faltivec
2384
2385         # check if our compiler supports Motorola AltiVec C API
2386         check_cc <<EOF || disable altivec
2387 $inc_altivec_h
2388 int main(void) {
2389     vector signed int v1, v2, v3;
2390     v1 = vec_add(v2,v3);
2391     return 0;
2392 }
2393 EOF
2394
2395         # check if our compiler supports braces for vector declarations
2396         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2397 $inc_altivec_h
2398 int main (void) { (vector int) {1}; return 0; }
2399 EOF
2400     fi
2401
2402 elif enabled sparc; then
2403
2404     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2405         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2406
2407 elif enabled x86; then
2408
2409     enable local_aligned_8 local_aligned_16
2410
2411     # check whether EBP is available on x86
2412     # As 'i' is stored on the stack, this program will crash
2413     # if the base pointer is used to access it because the
2414     # base pointer is cleared in the inline assembly code.
2415     check_exec_crash <<EOF && enable ebp_available
2416     volatile int i=0;
2417     __asm__ volatile (
2418         "xorl %%ebp, %%ebp"
2419     ::: "%ebp");
2420     return i;
2421 EOF
2422
2423     # check whether EBX is available on x86
2424     check_asm ebx_available '""::"b"(0)' &&
2425         check_asm ebx_available '"":::"%ebx"'
2426
2427     # check whether more than 10 operands are supported
2428     check_cc <<EOF && enable ten_operands
2429 int main(void) {
2430     int x=0;
2431     __asm__ volatile(
2432         ""
2433         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2434     );
2435     return 0;
2436 }
2437 EOF
2438
2439     # check whether binutils is new enough to compile SSSE3/MMX2
2440     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2441     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2442
2443     check_asm bswap '"bswap %%eax" ::: "%eax"'
2444
2445     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2446     enabled     x86_64        && append YASMFLAGS "-m amd64"
2447     enabled     pic           && append YASMFLAGS "-DPIC"
2448     test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2449     case "$objformat" in
2450         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2451     esac
2452     if ! disabled yasm; then
2453         check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2454             warn "yasm not found, performance will suffer"
2455     fi
2456
2457     case "$cpu" in
2458         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2459             disable fast_clz
2460         ;;
2461     esac
2462
2463 fi
2464
2465 if check_func dlopen; then
2466     ldl=
2467 elif check_func dlopen -ldl; then
2468     ldl=-ldl
2469 fi
2470
2471 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2472 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2473
2474 check_func  fork
2475 check_func  getaddrinfo $network_extralibs
2476 check_func  gethrtime
2477 check_func  getrusage
2478 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2479 check_func  inet_aton $network_extralibs
2480 check_func  isatty
2481 check_func  ${malloc_prefix}memalign            && enable memalign
2482 check_func  mkstemp
2483 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2484 check_func  setrlimit
2485 check_func  strerror_r
2486 check_func_headers io.h setmode
2487 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2488 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2489 check_func_headers windows.h GetProcessTimes
2490 check_func_headers windows.h VirtualAlloc
2491
2492 check_header conio.h
2493 check_header dlfcn.h
2494 check_header dxva2api.h
2495 check_header malloc.h
2496 check_header poll.h
2497 check_header sys/mman.h
2498 check_header sys/resource.h
2499 check_header sys/select.h
2500 check_header termios.h
2501 check_header vdpau/vdpau.h
2502 check_header vdpau/vdpau_x11.h
2503 check_header X11/extensions/XvMClib.h
2504
2505 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2506
2507 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2508      enabled_any $need_memalign ; then
2509     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2510 fi
2511
2512 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2513 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2514
2515 # check for some common methods of building with pthread support
2516 # do this before the optional library checks as some of them require pthreads
2517 if ! disabled pthreads && ! enabled w32threads; then
2518     enable pthreads
2519     if check_func pthread_create; then
2520         :
2521     elif check_func pthread_create -pthread; then
2522         add_cflags -pthread
2523         add_extralibs -pthread
2524     elif check_func pthread_create -pthreads; then
2525         add_cflags -pthreads
2526         add_extralibs -pthreads
2527     elif check_func pthread_create -lpthreadGC2; then
2528         add_extralibs -lpthreadGC2
2529     elif ! check_lib pthread.h pthread_create -lpthread; then
2530         disable pthreads
2531     fi
2532 fi
2533
2534 for thread in $THREADS_LIST; do
2535     if enabled $thread; then
2536         test -n "$thread_type" &&
2537             die "ERROR: Only one thread type must be selected." ||
2538             thread_type="$thread"
2539     fi
2540 done
2541
2542 check_lib math.h sin -lm
2543 disabled vaapi || check_lib va/va.h vaInitialize -lva
2544
2545 check_mathfunc exp2
2546 check_mathfunc exp2f
2547 check_mathfunc llrint
2548 check_mathfunc llrintf
2549 check_mathfunc log2
2550 check_mathfunc log2f
2551 check_mathfunc lrint
2552 check_mathfunc lrintf
2553 check_mathfunc round
2554 check_mathfunc roundf
2555 check_mathfunc truncf
2556
2557 # these are off by default, so fail if requested and not available
2558 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2559 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2560                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2561                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2562 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2563 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2564 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2565 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2566 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2567 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2568 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2569 enabled librtmp    && require  librtmp librtmp/rtmp.h RTMP_Init $(pkg-config --libs librtmp)
2570 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2571                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2572 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2573 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2574 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2575 enabled libvpx     && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx &&
2576                       require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx
2577 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2578                       { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2579                         die "ERROR: libx264 version must be >= 0.98."; }
2580 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2581 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2582
2583 # libdc1394 check
2584 if enabled libdc1394; then
2585     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2586         enable libdc1394_2; } ||
2587     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2588         enable libdc1394_1; } ||
2589     die "ERROR: No version of libdc1394 found "
2590 fi
2591
2592 SDL_CONFIG="${cross_prefix}sdl-config"
2593 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2594     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2595     sdl_libs=$("${SDL_CONFIG}" --libs)
2596     check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2597     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2598     enable sdl &&
2599     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2600 fi
2601
2602 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2603
2604 if enabled network; then
2605     check_type "sys/types.h sys/socket.h" socklen_t
2606     check_type netdb.h "struct addrinfo"
2607     check_type netinet/in.h "struct ipv6_mreq"
2608     check_type netinet/in.h "struct sockaddr_in6"
2609     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2610     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2611     # Prefer arpa/inet.h over winsock2
2612     if check_header arpa/inet.h ; then
2613         check_func closesocket
2614     elif check_header winsock2.h ; then
2615         check_func_headers winsock2.h closesocket -lws2 && \
2616             network_extralibs="-lws2" || \
2617         { check_func_headers winsock2.h closesocket -lws2_32 && \
2618             network_extralibs="-lws2_32"; }
2619         check_type ws2tcpip.h socklen_t
2620         check_type ws2tcpip.h "struct addrinfo"
2621         check_type ws2tcpip.h "struct ipv6_mreq"
2622         check_type ws2tcpip.h "struct sockaddr_in6"
2623         check_type ws2tcpip.h "struct sockaddr_storage"
2624         check_struct winsock2.h "struct sockaddr" sa_len
2625     else
2626         disable network
2627     fi
2628 fi
2629
2630 check_header linux/videodev.h
2631 check_header linux/videodev2.h
2632 check_header sys/videoio.h
2633
2634 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2635
2636 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2637 { check_header dev/bktr/ioctl_meteor.h &&
2638   check_header dev/bktr/ioctl_bt848.h; } ||
2639 { check_header machine/ioctl_meteor.h &&
2640   check_header machine/ioctl_bt848.h; } ||
2641 { check_header dev/video/meteor/ioctl_meteor.h &&
2642   check_header dev/video/bktr/ioctl_bt848.h; } ||
2643 check_header dev/ic/bt8xx.h
2644
2645 check_header sys/soundcard.h
2646 check_header soundcard.h
2647
2648 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2649
2650 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2651
2652 enabled x11grab                         &&
2653 check_header X11/Xlib.h                 &&
2654 check_header X11/extensions/XShm.h      &&
2655 check_header X11/extensions/Xfixes.h    &&
2656 check_func XOpenDisplay -lX11           &&
2657 check_func XShmCreateImage -lX11 -lXext &&
2658 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2659
2660 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2661 check_cpp_condition \
2662     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2663     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2664       disable vdpau; }
2665 fi
2666
2667 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2668
2669 # add some useful compiler flags if supported
2670 check_cflags -Wdeclaration-after-statement
2671 check_cflags -Wall
2672 check_cflags -Wno-switch
2673 check_cflags -Wdisabled-optimization
2674 check_cflags -Wpointer-arith
2675 check_cflags -Wredundant-decls
2676 check_cflags -Wno-pointer-sign
2677 check_cflags -Wcast-qual
2678 check_cflags -Wwrite-strings
2679 check_cflags -Wtype-limits
2680 check_cflags -Wundef
2681 check_cflags -Wmissing-prototypes
2682 enabled extra_warnings && check_cflags -Winline
2683
2684 # add some linker flags
2685 check_ldflags -Wl,--warn-common
2686 check_ldflags -Wl,--as-needed
2687 check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2688 check_ldflags -Wl,-Bsymbolic
2689
2690 echo "X{};" > $TMPV
2691 if test_ldflags -Wl,--version-script,$TMPV; then
2692     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2693     check_cc <<EOF && enable symver_asm_label
2694 void ff_foo(void) __asm__ ("av_foo@VERSION");
2695 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2696 EOF
2697     check_cc <<EOF && enable symver_gnu_asm
2698 __asm__(".symver ff_foo,av_foo@VERSION");
2699 void ff_foo(void) {}
2700 EOF
2701 fi
2702
2703 if enabled small; then
2704     add_cflags $size_cflags
2705     optimizations="small"
2706 elif enabled optimizations; then
2707     add_cflags $speed_cflags
2708 else
2709     add_cflags $noopt_cflags
2710 fi
2711 check_cflags -fno-math-errno
2712 check_cflags -fno-signed-zeros
2713
2714 if enabled icc; then
2715     # Just warnings, no remarks
2716     check_cflags -w1
2717     # -wd: Disable following warnings
2718     # 144, 167, 556: -Wno-pointer-sign
2719     # 10006: ignoring unknown option -fno-signed-zeros
2720     # 10156: ignoring option '-W'; no argument required
2721     check_cflags -wd144,167,556,10006,10156
2722     # 11030: Warning unknown option --as-needed
2723     # 10156: ignoring option '-export'; no argument required
2724     check_ldflags -wd10156,11030
2725     # Allow to compile with optimizations
2726     check_ldflags -march=$cpu
2727     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2728     enable ebp_available
2729 elif enabled ccc; then
2730     # disable some annoying warnings
2731     add_cflags -msg_disable cvtu32to64
2732     add_cflags -msg_disable embedcomment
2733     add_cflags -msg_disable needconstext
2734     add_cflags -msg_disable nomainieee
2735     add_cflags -msg_disable ptrmismatch1
2736     add_cflags -msg_disable unreachcode
2737 elif enabled gcc; then
2738     check_cflags -fno-tree-vectorize
2739     check_cflags -Werror=implicit
2740     check_cflags -Werror=missing-prototypes
2741 elif enabled clang; then
2742     check_cflags -Qunused-arguments
2743 elif enabled armcc; then
2744     # 2523: use of inline assembler is deprecated
2745     add_cflags -Wrvct,--diag_suppress=2523
2746     add_cflags -Wrvct,--diag_suppress=1207
2747 elif enabled tms470; then
2748     add_cflags -pds=824 -pds=837
2749 fi
2750
2751 if enabled gprof; then
2752     add_cflags  -p
2753     add_ldflags -p
2754 fi
2755
2756 enabled_any $THREADS_LIST      && enable threads
2757
2758 check_deps $CONFIG_LIST       \
2759            $CONFIG_EXTRA      \
2760            $HAVE_LIST         \
2761            $DECODER_LIST      \
2762            $ENCODER_LIST      \
2763            $HWACCEL_LIST      \
2764            $PARSER_LIST       \
2765            $BSF_LIST          \
2766            $DEMUXER_LIST      \
2767            $MUXER_LIST        \
2768            $FILTER_LIST       \
2769            $INDEV_LIST        \
2770            $OUTDEV_LIST       \
2771            $PROTOCOL_LIST     \
2772
2773 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2774
2775 echo "install prefix            $prefix"
2776 echo "source path               $source_path"
2777 echo "C compiler                $cc"
2778 echo "ARCH                      $arch ($cpu)"
2779 if test "$build_suffix" != ""; then
2780     echo "build suffix              $build_suffix"
2781 fi
2782 if test "$extra_version" != ""; then
2783     echo "version string suffix     $extra_version"
2784 fi
2785 echo "big-endian                ${bigendian-no}"
2786 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2787 if enabled x86; then
2788     echo "yasm                      ${yasm-no}"
2789     echo "MMX enabled               ${mmx-no}"
2790     echo "MMX2 enabled              ${mmx2-no}"
2791     echo "3DNow! enabled            ${amd3dnow-no}"
2792     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2793     echo "SSE enabled               ${sse-no}"
2794     echo "SSSE3 enabled             ${ssse3-no}"
2795     echo "CMOV enabled              ${cmov-no}"
2796     echo "CMOV is fast              ${fast_cmov-no}"
2797     echo "EBX available             ${ebx_available-no}"
2798     echo "EBP available             ${ebp_available-no}"
2799     echo "10 operands supported     ${ten_operands-no}"
2800 fi
2801 if enabled arm; then
2802     echo "ARMv5TE enabled           ${armv5te-no}"
2803     echo "ARMv6 enabled             ${armv6-no}"
2804     echo "ARMv6T2 enabled           ${armv6t2-no}"
2805     echo "ARM VFP enabled           ${armvfp-no}"
2806     echo "IWMMXT enabled            ${iwmmxt-no}"
2807     echo "NEON enabled              ${neon-no}"
2808 fi
2809 if enabled mips; then
2810     echo "MMI enabled               ${mmi-no}"
2811 fi
2812 if enabled ppc; then
2813     echo "AltiVec enabled           ${altivec-no}"
2814     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2815     echo "dcbzl available           ${dcbzl-no}"
2816     echo "performance report        ${powerpc_perf-no}"
2817 fi
2818 if enabled sparc; then
2819     echo "VIS enabled               ${vis-no}"
2820 fi
2821 echo "gprof enabled             ${gprof-no}"
2822 echo "debug symbols             ${debug-no}"
2823 echo "strip symbols             ${stripping-no}"
2824 echo "optimizations             ${optimizations-no}"
2825 echo "static                    ${static-no}"
2826 echo "shared                    ${shared-no}"
2827 echo "postprocessing support    ${postproc-no}"
2828 echo "new filter support        ${avfilter-no}"
2829 echo "filters using lavformat   ${avfilter_lavf-no}"
2830 echo "network support           ${network-no}"
2831 echo "threading support         ${thread_type-no}"
2832 echo "SDL support               ${sdl-no}"
2833 echo "Sun medialib support      ${mlib-no}"
2834 echo "AVISynth enabled          ${avisynth-no}"
2835 echo "libdc1394 support         ${libdc1394-no}"
2836 echo "libdirac enabled          ${libdirac-no}"
2837 echo "libfaac enabled           ${libfaac-no}"
2838 echo "libgsm enabled            ${libgsm-no}"
2839 echo "libmp3lame enabled        ${libmp3lame-no}"
2840 echo "libnut enabled            ${libnut-no}"
2841 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2842 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2843 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2844 echo "librtmp enabled           ${librtmp-no}"
2845 echo "libschroedinger enabled   ${libschroedinger-no}"
2846 echo "libspeex enabled          ${libspeex-no}"
2847 echo "libtheora enabled         ${libtheora-no}"
2848 echo "libvorbis enabled         ${libvorbis-no}"
2849 echo "libvpx enabled            ${libvpx-no}"
2850 echo "libx264 enabled           ${libx264-no}"
2851 echo "libxvid enabled           ${libxvid-no}"
2852 echo "zlib enabled              ${zlib-no}"
2853 echo "bzlib enabled             ${bzlib-no}"
2854 echo
2855
2856 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2857     echo "Enabled ${type}s:"
2858     eval list=\$$(toupper $type)_LIST
2859     for part in $list; do
2860         enabled $part && echo ${part%_*}
2861     done | sort | pr -3 -t
2862     echo
2863 done
2864
2865 license="LGPL version 2.1 or later"
2866 if enabled nonfree; then
2867     license="nonfree and unredistributable"
2868 elif enabled gplv3; then
2869     license="GPL version 3 or later"
2870 elif enabled lgplv3; then
2871     license="LGPL version 3 or later"
2872 elif enabled gpl; then
2873     license="GPL version 2 or later"
2874 fi
2875
2876 echo "License: $license"
2877
2878 echo "Creating config.mak and config.h..."
2879
2880 # build tree in object directory if source path is different from current one
2881 if enabled source_path_used; then
2882     DIRS="
2883         doc
2884         libavcodec
2885         libavcodec/$arch
2886         libavdevice
2887         libavfilter
2888         libavformat
2889         libavutil
2890         libavutil/$arch
2891         libpostproc
2892         libswscale
2893         libswscale/$arch
2894         tests
2895         tools
2896     "
2897     FILES="
2898         Makefile
2899         common.mak
2900         subdir.mak
2901         doc/texi2pod.pl
2902         libavcodec/Makefile
2903         libavcodec/${arch}/Makefile
2904         libavdevice/Makefile
2905         libavfilter/Makefile
2906         libavformat/Makefile
2907         libavutil/Makefile
2908         libpostproc/Makefile
2909         libswscale/Makefile
2910     "
2911     map 'mkdir -p $v' $DIRS;
2912     map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2913 fi
2914
2915 enabled stripping || strip="echo skipping strip"
2916
2917 cat > config.mak <<EOF
2918 # Automatically generated by configure - do not modify!
2919 ifndef FFMPEG_CONFIG_MAK
2920 FFMPEG_CONFIG_MAK=1
2921 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2922 prefix=$prefix
2923 LIBDIR=\$(DESTDIR)$libdir
2924 SHLIBDIR=\$(DESTDIR)$shlibdir
2925 INCDIR=\$(DESTDIR)$incdir
2926 BINDIR=\$(DESTDIR)$bindir
2927 DATADIR=\$(DESTDIR)$datadir
2928 MANDIR=\$(DESTDIR)$mandir
2929 SRC_PATH="$source_path"
2930 SRC_PATH_BARE=$source_path
2931 BUILD_ROOT="$PWD"
2932 ARCH=$arch
2933 CC=$cc
2934 AS=$as
2935 LD=$ld
2936 DEPCC=$dep_cc
2937 YASM=$yasmexe
2938 YASMDEP=$yasmexe
2939 AR=$ar
2940 RANLIB=$ranlib
2941 CP=cp -p
2942 LN_S=$ln_s
2943 STRIP=$strip
2944 CPPFLAGS=$CPPFLAGS
2945 CFLAGS=$CFLAGS
2946 ASFLAGS=$ASFLAGS
2947 CC_O=$CC_O
2948 LDFLAGS=$LDFLAGS
2949 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2950 SHFLAGS=$SHFLAGS
2951 YASMFLAGS=$YASMFLAGS
2952 BUILDSUF=$build_suffix
2953 FULLNAME=$FULLNAME
2954 LIBPREF=$LIBPREF
2955 LIBSUF=$LIBSUF
2956 LIBNAME=$LIBNAME
2957 SLIBPREF=$SLIBPREF
2958 SLIBSUF=$SLIBSUF
2959 EXESUF=$EXESUF
2960 EXTRA_VERSION=$extra_version
2961 DEPFLAGS=$DEPFLAGS
2962 CCDEP=$CCDEP
2963 ASDEP=$ASDEP
2964 CC_DEPFLAGS=$CC_DEPFLAGS
2965 AS_DEPFLAGS=$AS_DEPFLAGS
2966 HOSTCC=$host_cc
2967 HOSTCFLAGS=$host_cflags
2968 HOSTEXESUF=$HOSTEXESUF
2969 HOSTLDFLAGS=$host_ldflags
2970 HOSTLIBS=$host_libs
2971 TARGET_EXEC=$target_exec
2972 TARGET_PATH=$target_path
2973 SDL_LIBS=$sdl_libs
2974 SDL_CFLAGS=$sdl_cflags
2975 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2976 EXTRALIBS=$extralibs
2977 INSTALL=install
2978 LIBTARGET=${LIBTARGET}
2979 SLIBNAME=${SLIBNAME}
2980 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2981 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2982 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2983 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2984 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2985 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2986 SAMPLES=$samples
2987 EOF
2988
2989 get_version(){
2990     name=$1
2991     file=$source_path/$2
2992     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2993     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2994     lcname=$(tolower $name)
2995     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2996     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2997 }
2998
2999 get_version LIBSWSCALE  libswscale/swscale.h
3000 get_version LIBPOSTPROC libpostproc/postprocess.h
3001 get_version LIBAVCODEC  libavcodec/avcodec.h
3002 get_version LIBAVDEVICE libavdevice/avdevice.h
3003 get_version LIBAVFORMAT libavformat/avformat.h
3004 get_version LIBAVUTIL   libavutil/avutil.h
3005 get_version LIBAVFILTER libavfilter/avfilter.h
3006
3007 cat > $TMPH <<EOF
3008 /* Automatically generated by configure - do not modify! */
3009 #ifndef FFMPEG_CONFIG_H
3010 #define FFMPEG_CONFIG_H
3011 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3012 #define FFMPEG_LICENSE "$(c_escape $license)"
3013 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3014 #define CC_TYPE "$cc_type"
3015 #define CC_VERSION $cc_version
3016 #define restrict $_restrict
3017 #define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3018 #define EXTERN_PREFIX "${extern_prefix}"
3019 #define EXTERN_ASM ${extern_prefix}
3020 EOF
3021
3022 test -n "$malloc_prefix" &&
3023     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3024
3025 if enabled small || disabled optimizations; then
3026     echo "#undef  av_always_inline"  >> $TMPH
3027     echo "#define av_always_inline"  >> $TMPH
3028 fi
3029
3030 print_config ARCH_   $TMPH config.mak $ARCH_LIST
3031 print_config HAVE_   $TMPH config.mak $HAVE_LIST
3032 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3033                                       $CONFIG_EXTRA      \
3034                                       $DECODER_LIST      \
3035                                       $ENCODER_LIST      \
3036                                       $HWACCEL_LIST      \
3037                                       $PARSER_LIST       \
3038                                       $BSF_LIST          \
3039                                       $DEMUXER_LIST      \
3040                                       $MUXER_LIST        \
3041                                       $FILTER_LIST       \
3042                                       $PROTOCOL_LIST     \
3043                                       $INDEV_LIST        \
3044                                       $OUTDEV_LIST       \
3045
3046 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3047 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3048
3049 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3050 cp_if_changed $TMPH config.h
3051
3052 cat > $TMPH <<EOF
3053 /* Generated by ffconf */
3054 #ifndef AVUTIL_AVCONFIG_H
3055 #define AVUTIL_AVCONFIG_H
3056 EOF
3057
3058 print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3059
3060 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3061
3062 cp_if_changed $TMPH libavutil/avconfig.h
3063
3064 test -n "$WARNINGS" && printf "\n$WARNINGS"
3065
3066 # build pkg-config files
3067
3068 pkgconfig_generate(){
3069 name=$1
3070 shortname=${name#lib}${build_suffix}
3071 comment=$2
3072 version=$3
3073 libs=$4
3074 requires=$5
3075 cat <<EOF > $name/$name.pc
3076 prefix=$prefix
3077 exec_prefix=\${prefix}
3078 libdir=$libdir
3079 includedir=$incdir
3080
3081 Name: $name
3082 Description: $comment
3083 Version: $version
3084 Requires: $(enabled shared || echo $requires)
3085 Requires.private: $(enabled shared && echo $requires)
3086 Conflicts:
3087 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3088 Libs.private: $(enabled shared && echo $libs)
3089 Cflags: -I\${includedir}
3090 EOF
3091 cat <<EOF > $name/$name-uninstalled.pc
3092 prefix=
3093 exec_prefix=
3094 libdir=\${pcfiledir}
3095 includedir=${source_path}
3096
3097 Name: $name
3098 Description: $comment
3099 Version: $version
3100 Requires: $requires
3101 Conflicts:
3102 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3103 Cflags: -I\${includedir}
3104 EOF
3105 }
3106
3107 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3108 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3109 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3110 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3111 enabled avfilter &&
3112     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3113 enabled postproc &&
3114     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3115 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"