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