5f639331f339594b0a6a1e67c0ecabffef17c242
[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     GetProcessTimes
1032     getrusage
1033     inet_aton
1034     inline_asm
1035     isatty
1036     ldbrx
1037     libdc1394_1
1038     libdc1394_2
1039     llrint
1040     local_aligned_16
1041     local_aligned_8
1042     log2
1043     log2f
1044     loongson
1045     lrint
1046     lrintf
1047     lzo1x_999_compress
1048     machine_ioctl_bt848_h
1049     machine_ioctl_meteor_h
1050     malloc_h
1051     memalign
1052     mkstemp
1053     pld
1054     posix_memalign
1055     round
1056     roundf
1057     sdl
1058     sdl_video_size
1059     setmode
1060     socklen_t
1061     soundcard_h
1062     poll_h
1063     setrlimit
1064     struct_addrinfo
1065     struct_ipv6_mreq
1066     struct_sockaddr_in6
1067     struct_sockaddr_sa_len
1068     struct_sockaddr_storage
1069     sys_mman_h
1070     sys_resource_h
1071     sys_select_h
1072     sys_soundcard_h
1073     sys_videoio_h
1074     ten_operands
1075     termios_h
1076     threads
1077     truncf
1078     vfp_args
1079     VirtualAlloc
1080     winsock2_h
1081     xform_asm
1082     yasm
1083 "
1084
1085 # options emitted with CONFIG_ prefix but not available on command line
1086 CONFIG_EXTRA="
1087     avutil
1088     gplv3
1089     lgplv3
1090 "
1091
1092 CMDLINE_SELECT="
1093     $ARCH_EXT_LIST
1094     $CONFIG_LIST
1095     $THREADS_LIST
1096     asm
1097     cross_compile
1098     debug
1099     extra_warnings
1100     logging
1101     optimizations
1102     stripping
1103     yasm
1104 "
1105
1106 PATHS_LIST='
1107     bindir
1108     datadir
1109     incdir
1110     libdir
1111     mandir
1112     prefix
1113     shlibdir
1114 '
1115
1116 CMDLINE_SET="
1117     $PATHS_LIST
1118     arch
1119     as
1120     build_suffix
1121     cc
1122     cpu
1123     cross_prefix
1124     dep_cc
1125     extra_version
1126     host_cc
1127     host_cflags
1128     host_ldflags
1129     host_libs
1130     host_os
1131     ld
1132     logfile
1133     malloc_prefix
1134     nm
1135     source_path
1136     strip
1137     sysinclude
1138     sysroot
1139     target_exec
1140     target_os
1141     target_path
1142 "
1143
1144 CMDLINE_APPEND="
1145     extra_cflags
1146 "
1147
1148 # code dependency declarations
1149
1150 # architecture extensions
1151
1152 armv5te_deps="arm"
1153 armv6_deps="arm"
1154 armv6t2_deps="arm"
1155 armvfp_deps="arm"
1156 iwmmxt_deps="arm"
1157 neon_deps="arm"
1158
1159 mmi_deps="mips"
1160
1161 altivec_deps="ppc"
1162 ppc4xx_deps="ppc"
1163
1164 vis_deps="sparc"
1165
1166 x86_64_suggest="cmov fast_cmov"
1167 amd3dnow_deps="mmx"
1168 amd3dnowext_deps="amd3dnow"
1169 mmx_deps="x86"
1170 mmx2_deps="mmx"
1171 sse_deps="mmx"
1172 ssse3_deps="sse"
1173
1174 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1175 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1176 fast_unaligned_if_any="armv6 ppc x86"
1177
1178 need_memalign="altivec neon sse"
1179 inline_asm_deps="!tms470"
1180
1181 # subsystems
1182 mdct_select="fft"
1183 rdft_select="fft"
1184
1185 # decoders / encoders / hardware accelerators
1186 aac_decoder_select="mdct aac_parser"
1187 aac_encoder_select="mdct"
1188 ac3_decoder_select="mdct ac3_parser"
1189 alac_encoder_select="lpc"
1190 atrac1_decoder_select="mdct"
1191 atrac3_decoder_select="mdct"
1192 binkaudio_dct_decoder_select="mdct rdft dct"
1193 binkaudio_rdft_decoder_select="mdct rdft"
1194 cavs_decoder_select="golomb"
1195 cook_decoder_select="mdct"
1196 cscd_decoder_suggest="zlib"
1197 dca_decoder_select="mdct"
1198 dnxhd_encoder_select="aandct"
1199 dxa_decoder_select="zlib"
1200 eac3_decoder_select="ac3_decoder"
1201 eamad_decoder_select="aandct"
1202 eatgq_decoder_select="aandct"
1203 eatqi_decoder_select="aandct"
1204 ffv1_decoder_select="golomb"
1205 flac_decoder_select="golomb"
1206 flac_encoder_select="golomb lpc"
1207 flashsv_decoder_select="zlib"
1208 flashsv_encoder_select="zlib"
1209 flv_decoder_select="h263_decoder"
1210 flv_encoder_select="h263_encoder"
1211 h261_encoder_select="aandct"
1212 h263_decoder_select="h263_parser"
1213 h263_encoder_select="aandct"
1214 h263_vaapi_hwaccel_deps="va_va_h"
1215 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1216 h263i_decoder_select="h263_decoder"
1217 h263p_encoder_select="h263_encoder"
1218 h264_decoder_select="golomb"
1219 h264_dxva2_hwaccel_deps="dxva2api_h"
1220 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1221 h264_vaapi_hwaccel_deps="va_va_h"
1222 h264_vaapi_hwaccel_select="vaapi"
1223 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1224 h264_vdpau_decoder_select="vdpau h264_decoder"
1225 imc_decoder_select="fft mdct"
1226 jpegls_decoder_select="golomb"
1227 jpegls_encoder_select="golomb"
1228 ljpeg_encoder_select="aandct"
1229 loco_decoder_select="golomb"
1230 mjpeg_encoder_select="aandct"
1231 mlp_decoder_select="mlp_parser"
1232 mpeg1video_encoder_select="aandct"
1233 mpeg2video_encoder_select="aandct"
1234 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1235 mpeg4_encoder_select="h263_encoder"
1236 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1237 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1238 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1239 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1240 mpeg2_vaapi_hwaccel_deps="va_va_h"
1241 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1242 mpeg4_vaapi_hwaccel_deps="va_va_h"
1243 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1244 mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1245 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1246 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1247 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1248 msmpeg4v1_decoder_select="h263_decoder"
1249 msmpeg4v1_encoder_select="h263_encoder"
1250 msmpeg4v2_decoder_select="h263_decoder"
1251 msmpeg4v2_encoder_select="h263_encoder"
1252 msmpeg4v3_decoder_select="h263_decoder"
1253 msmpeg4v3_encoder_select="h263_encoder"
1254 nellymoser_decoder_select="mdct"
1255 nellymoser_encoder_select="mdct"
1256 png_decoder_select="zlib"
1257 png_encoder_select="zlib"
1258 qdm2_decoder_select="mdct rdft"
1259 rv10_decoder_select="h263_decoder"
1260 rv10_encoder_select="h263_encoder"
1261 rv20_decoder_select="h263_decoder"
1262 rv20_encoder_select="h263_encoder"
1263 rv30_decoder_select="golomb"
1264 rv40_decoder_select="golomb"
1265 shorten_decoder_select="golomb"
1266 sonic_decoder_select="golomb"
1267 sonic_encoder_select="golomb"
1268 sonic_ls_encoder_select="golomb"
1269 svq3_decoder_select="golomb"
1270 svq3_decoder_suggest="zlib"
1271 theora_decoder_select="vp3_decoder"
1272 tiff_decoder_suggest="zlib"
1273 tiff_encoder_suggest="zlib"
1274 truehd_decoder_select="mlp_decoder"
1275 tscc_decoder_select="zlib"
1276 twinvq_decoder_select="mdct"
1277 vc1_decoder_select="h263_decoder"
1278 vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1279 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1280 vc1_vaapi_hwaccel_deps="va_va_h"
1281 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1282 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1283 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1284 vorbis_decoder_select="mdct"
1285 vorbis_encoder_select="mdct"
1286 vp6a_decoder_select="vp6_decoder"
1287 vp6f_decoder_select="vp6_decoder"
1288 wmapro_decoder_select="mdct"
1289 wmav1_decoder_select="mdct"
1290 wmav1_encoder_select="mdct"
1291 wmav2_decoder_select="mdct"
1292 wmav2_encoder_select="mdct"
1293 wmv1_decoder_select="h263_decoder"
1294 wmv1_encoder_select="h263_encoder"
1295 wmv2_decoder_select="h263_decoder"
1296 wmv2_encoder_select="h263_encoder"
1297 wmv3_decoder_select="vc1_decoder"
1298 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1299 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1300 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1301 zlib_decoder_select="zlib"
1302 zlib_encoder_select="zlib"
1303 zmbv_decoder_select="zlib"
1304 zmbv_encoder_select="zlib"
1305
1306 # parsers
1307 h264_parser_select="golomb"
1308
1309 # bitstream_filters
1310 aac_adtstoasc_bsf_select="aac_parser"
1311
1312 # external libraries
1313 libdirac_decoder_deps="libdirac !libschroedinger"
1314 libdirac_encoder_deps="libdirac"
1315 libfaac_encoder_deps="libfaac"
1316 libfaad_decoder_deps="libfaad"
1317 libfaadbin_decoder_extralibs='$ldl'
1318 libgsm_decoder_deps="libgsm"
1319 libgsm_encoder_deps="libgsm"
1320 libgsm_ms_decoder_deps="libgsm"
1321 libgsm_ms_encoder_deps="libgsm"
1322 libmp3lame_encoder_deps="libmp3lame"
1323 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1324 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1325 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1326 libopenjpeg_decoder_deps="libopenjpeg"
1327 libschroedinger_decoder_deps="libschroedinger"
1328 libschroedinger_encoder_deps="libschroedinger"
1329 libspeex_decoder_deps="libspeex"
1330 libtheora_encoder_deps="libtheora"
1331 libvorbis_encoder_deps="libvorbis"
1332 libx264_encoder_deps="libx264"
1333 libxvid_encoder_deps="libxvid"
1334
1335 # demuxers / muxers
1336 ac3_demuxer_deps="ac3_parser"
1337 asf_stream_muxer_select="asf_muxer"
1338 avisynth_demuxer_deps="avisynth"
1339 dirac_demuxer_deps="dirac_parser"
1340 eac3_demuxer_select="ac3_parser"
1341 ipod_muxer_select="mov_muxer"
1342 libnut_demuxer_deps="libnut"
1343 libnut_muxer_deps="libnut"
1344 matroska_audio_muxer_select="matroska_muxer"
1345 matroska_demuxer_suggest="zlib bzlib"
1346 mov_demuxer_suggest="zlib"
1347 mp3_demuxer_deps="mpegaudio_parser"
1348 mp4_muxer_select="mov_muxer"
1349 mpegtsraw_demuxer_select="mpegts_demuxer"
1350 mxf_d10_muxer_select="mxf_muxer"
1351 ogg_demuxer_select="golomb"
1352 psp_muxer_select="mov_muxer"
1353 rtsp_demuxer_deps="sdp_demuxer"
1354 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1355 spdif_muxer_select="aac_parser"
1356 tg2_muxer_select="mov_muxer"
1357 tgp_muxer_select="mov_muxer"
1358 w64_demuxer_deps="wav_demuxer"
1359
1360 # indevs / outdevs
1361 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1362 alsa_indev_extralibs="-lasound"
1363 alsa_outdev_deps="alsa_asoundlib_h"
1364 alsa_outdev_extralibs="-lasound"
1365 audio_beos_indev_deps="audio_beos"
1366 audio_beos_indev_extralibs="-lmedia -lbe"
1367 audio_beos_outdev_deps="audio_beos"
1368 audio_beos_outdev_extralibs="-lmedia -lbe"
1369 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1370 dv1394_indev_deps="dv1394 dv_demuxer"
1371 jack_indev_deps="jack_jack_h"
1372 jack_indev_extralibs="-ljack"
1373 libdc1394_indev_deps="libdc1394"
1374 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1375 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1376 v4l_indev_deps="linux_videodev_h"
1377 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1378 vfwcap_indev_deps="capCreateCaptureWindow"
1379 vfwcap_indev_extralibs="-lavicap32"
1380 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1381 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1382
1383 # protocols
1384 gopher_protocol_deps="network"
1385 http_protocol_deps="network"
1386 rtmp_protocol_deps="tcp_protocol"
1387 rtp_protocol_deps="udp_protocol"
1388 tcp_protocol_deps="network"
1389 udp_protocol_deps="network"
1390
1391 # filters
1392 movie_filter_deps="avfilter_lavf"
1393 avfilter_lavf_deps="avformat"
1394
1395 # libraries
1396 avdevice_deps="avcodec avformat"
1397 avformat_deps="avcodec"
1398
1399 # programs
1400 ffmpeg_deps="avcodec avformat swscale"
1401 ffplay_deps="avcodec avformat swscale sdl"
1402 ffplay_select="rdft"
1403 ffprobe_deps="avcodec avformat"
1404 ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1405 ffserver_extralibs='$ldl'
1406
1407 doc_deps="texi2html"
1408
1409 # default parameters
1410
1411 logfile="config.err"
1412
1413 # installation paths
1414 prefix_default="/usr/local"
1415 bindir_default='${prefix}/bin'
1416 datadir_default='${prefix}/share/ffmpeg'
1417 incdir_default='${prefix}/include'
1418 libdir_default='${prefix}/lib'
1419 mandir_default='${prefix}/share/man'
1420 shlibdir_default="$libdir_default"
1421
1422 # toolchain
1423 ar="ar"
1424 cc_default="gcc"
1425 cc_version=\"unknown\"
1426 host_cc_default="gcc"
1427 ln_s="ln -sf"
1428 nm_default="nm"
1429 objformat="elf"
1430 ranlib="ranlib"
1431 strip_default="strip"
1432 yasmexe="yasm"
1433
1434 nm_opts='-g'
1435
1436 # machine
1437 arch_default=$(uname -m)
1438 cpu="generic"
1439
1440 # OS
1441 target_os_default=$(tolower $(uname -s))
1442 host_os=$target_os_default
1443
1444 # configurable options
1445 enable avcodec
1446 enable avdevice
1447 enable avformat
1448 enable avutil
1449 enable asm
1450 enable debug
1451 enable doc
1452 enable fastdiv
1453 enable ffmpeg
1454 enable ffplay
1455 enable ffprobe
1456 enable ffserver
1457 enable mpegaudio_hp
1458 enable network
1459 enable optimizations
1460 enable protocols
1461 enable static
1462 enable stripping
1463 enable swscale
1464 enable swscale_alpha
1465
1466 # build settings
1467 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1468 FFSERVERLDFLAGS=-Wl,-E
1469 LIBPREF="lib"
1470 LIBSUF=".a"
1471 FULLNAME='$(NAME)$(BUILDSUF)'
1472 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1473 SLIBPREF="lib"
1474 SLIBSUF=".so"
1475 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1476 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1477 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1478 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1479
1480 CC_O='-o $@'
1481
1482 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1483 host_libs='-lm'
1484
1485 target_path='$(CURDIR)'
1486
1487 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1488 # full relative path for objects in subdirectories for non-recursive Make.
1489 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1490 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1491
1492 # find source path
1493 source_path="$(dirname "$0")"
1494 enable source_path_used
1495 if test -f configure; then
1496     source_path="$(pwd)"
1497     disable source_path_used
1498 else
1499     source_path="$(cd "$source_path"; pwd)"
1500     echo "$source_path" | grep -q '[[:blank:]]' &&
1501         die "Out of tree builds are impossible with whitespace in source path."
1502     test -e "$source_path/config.h" &&
1503         die "Out of tree builds are impossible with config.h in source dir."
1504 fi
1505
1506 for v in "$@"; do
1507     r=${v#*=}
1508     l=${v%"$r"}
1509     r=$(sh_quote "$r")
1510     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1511 done
1512
1513 find_things(){
1514     thing=$1
1515     pattern=$2
1516     file=$source_path/$3
1517     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1518 }
1519
1520 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1521 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1522 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1523 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1524 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1525 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1526 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1527 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1528 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1529 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1530 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1531
1532 enable $ARCH_EXT_LIST \
1533        $DECODER_LIST \
1534        $ENCODER_LIST \
1535        $HWACCEL_LIST \
1536        $PARSER_LIST \
1537        $BSF_LIST \
1538        $DEMUXER_LIST \
1539        $MUXER_LIST \
1540        $FILTER_LIST \
1541        $PROTOCOL_LIST \
1542        $INDEV_LIST \
1543        $OUTDEV_LIST \
1544
1545 die_unknown(){
1546     echo "Unknown option \"$1\"."
1547     echo "See $0 --help for available options."
1548     exit 1
1549 }
1550
1551 show_list() {
1552     suffix=_$1
1553     shift
1554     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1555     exit 0
1556 }
1557
1558 for opt do
1559     optval="${opt#*=}"
1560     case "$opt" in
1561     --extra-ldflags=*) add_ldflags $optval
1562     ;;
1563     --extra-libs=*) add_extralibs $optval
1564     ;;
1565     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1566     ;;
1567     --enable-debug=*) debuglevel="$optval"
1568     ;;
1569     --enable-*=*|--disable-*=*)
1570     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1571     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1572     eval list=\$$(toupper $thing)_LIST
1573     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1574     $action $(filter "$name" $list)
1575     ;;
1576     --enable-?*|--disable-?*)
1577     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1578     if is_in $option $COMPONENT_LIST; then
1579         test $action = disable && action=unset
1580         eval $action \$$(toupper ${option%s})_LIST
1581     elif is_in $option $CMDLINE_SELECT; then
1582         $action $option
1583     else
1584         die_unknown $opt
1585     fi
1586     ;;
1587     --list-*)
1588         NAME="${opt#--list-}"
1589         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1590         NAME=${NAME%s}
1591         eval show_list $NAME \$$(toupper $NAME)_LIST
1592     ;;
1593     --help|-h) show_help
1594     ;;
1595     *)
1596     optname="${opt%%=*}"
1597     optname="${optname#--}"
1598     optname=$(echo "$optname" | sed 's/-/_/g')
1599     if is_in $optname $CMDLINE_SET; then
1600         eval $optname='$optval'
1601     elif is_in $optname $CMDLINE_APPEND; then
1602         append $optname "$optval"
1603     else
1604          die_unknown $opt
1605     fi
1606     ;;
1607     esac
1608 done
1609
1610 disabled logging && logfile=/dev/null
1611
1612 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1613 set >> $logfile
1614
1615 test -n "$cross_prefix" && enable cross_compile
1616
1617 if enabled cross_compile; then
1618     test -n "$arch" && test -n "$target_os" ||
1619         die "Must specify target arch and OS when cross-compiling"
1620 fi
1621
1622 set_default arch target_os
1623
1624 ar="${cross_prefix}${ar}"
1625 cc_default="${cross_prefix}${cc_default}"
1626 nm_default="${cross_prefix}${nm_default}"
1627 ranlib="${cross_prefix}${ranlib}"
1628 strip_default="${cross_prefix}${strip_default}"
1629
1630 sysinclude_default="${sysroot}/usr/include"
1631
1632 set_default cc nm strip sysinclude
1633 enabled cross_compile || host_cc_default=$cc
1634 set_default host_cc
1635
1636 exesuf() {
1637     case $1 in
1638         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1639     esac
1640 }
1641
1642 EXESUF=$(exesuf $target_os)
1643 HOSTEXESUF=$(exesuf $host_os)
1644
1645 # set temporary file name
1646 : ${TMPDIR:=$TEMPDIR}
1647 : ${TMPDIR:=$TMP}
1648 : ${TMPDIR:=/tmp}
1649
1650 if ! check_cmd type mktemp; then
1651     # simple replacement for missing mktemp
1652     # NOT SAFE FOR GENERAL USE
1653     mktemp(){
1654         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1655     }
1656 fi
1657
1658 tmpfile(){
1659     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1660         (set -C; exec > $tmp) 2>/dev/null ||
1661         die "Unable to create temporary file in $TMPDIR."
1662     append TMPFILES $tmp
1663     eval $1=$tmp
1664 }
1665
1666 trap 'rm -f -- $TMPFILES' EXIT
1667 trap exit HUP INT TERM
1668
1669 tmpfile TMPC  .c
1670 tmpfile TMPE  $EXESUF
1671 tmpfile TMPH  .h
1672 tmpfile TMPO  .o
1673 tmpfile TMPS  .S
1674 tmpfile TMPV  .ver
1675 tmpfile TMPSH .sh
1676
1677 unset -f mktemp
1678
1679 # make sure we can execute files in $TMPDIR
1680 cat > $TMPSH 2>> $logfile <<EOF
1681 #! /bin/sh
1682 EOF
1683 chmod +x $TMPSH >> $logfile 2>&1
1684 if ! $TMPSH >> $logfile 2>&1; then
1685     cat <<EOF
1686 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1687 variable to another directory and make sure that it is not mounted noexec.
1688 EOF
1689     die "Sanity test failed."
1690 fi
1691
1692 filter_cflags=echo
1693 filter_cppflags=echo
1694 filter_asflags=echo
1695
1696 if   $cc -v 2>&1 | grep -qi ^gcc; then
1697     cc_type=gcc
1698     cc_version=__VERSION__
1699     if ! $cc -dumpversion | grep -q '^2\.'; then
1700         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1701         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1702     fi
1703     speed_cflags='-O3'
1704     size_cflags='-Os'
1705 elif $cc --version 2>/dev/null | grep -q Intel; then
1706     cc_type=icc
1707     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1708     CC_DEPFLAGS='-MMD'
1709     AS_DEPFLAGS='-MMD'
1710     speed_cflags='-O3'
1711     size_cflags='-Os'
1712 elif $cc -v 2>&1 | grep -q xlc; then
1713     cc_type=xlc
1714     cc_version="AV_STRINGIFY(__IBMC__)"
1715     speed_cflags='-O5'
1716     size_cflags='-O5 -qcompact'
1717 elif $cc -V 2>/dev/null | grep -q Compaq; then
1718     cc_type=ccc
1719     cc_version="AV_STRINGIFY(__DECC_VER)"
1720     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1721     debuglevel=3
1722     add_ldflags -Wl,-z,now # calls to libots crash without this
1723     speed_cflags='-fast'
1724     size_cflags='-O1'
1725 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1726     test -d "$sysroot" || die "No valid sysroot specified."
1727     cc_type=armcc
1728     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1729     armcc_conf="$PWD/armcc.conf"
1730     $cc --arm_linux_configure                 \
1731         --arm_linux_config_file="$armcc_conf" \
1732         --configure_sysroot="$sysroot"        \
1733         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1734         die "Error creating armcc configuration file."
1735     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1736     as_default="${cross_prefix}gcc"
1737     CC_DEPFLAGS='-MMD'
1738     AS_DEPFLAGS='-MMD'
1739     speed_cflags='-O3'
1740     size_cflags='-Os'
1741 elif $cc -version 2>/dev/null | grep -q TMS470; then
1742     cc_type=tms470
1743     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1744     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1745     CC_O='-fr=$(@D)'
1746     as_default="${cross_prefix}gcc"
1747     ld_default="${cross_prefix}gcc"
1748     TMPO=$(basename $TMPC .c).o
1749     append TMPFILES $TMPO
1750     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1751     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1752     AS_DEPFLAGS='-MMD'
1753     speed_cflags='-O3 -mf=5'
1754     size_cflags='-O3 -mf=2'
1755     filter_cflags=tms470_flags
1756     tms470_flags(){
1757         for flag; do
1758             case $flag in
1759                 -march=*|-mcpu=*)
1760                     case "${flag#*=}" in
1761                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1762                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1763                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1764                         armv6*|arm11*)          echo -mv=6   ;;
1765                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1766                                                 echo -mv=5e  ;;
1767                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1768                     esac
1769                     ;;
1770                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1771                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1772                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1773                 -msoft-float)   echo --float_support=vfplib       ;;
1774                 -O[0-3]|-mf=*)  echo $flag                        ;;
1775                 -g)             echo -g -mn                       ;;
1776                 -pds=*)         echo $flag                        ;;
1777             esac
1778         done
1779     }
1780 elif $cc -v 2>&1 | grep -q clang; then
1781     cc_type=clang
1782     cc_version=__VERSION__
1783     CC_DEPFLAGS='-MMD'
1784     AS_DEPFLAGS='-MMD'
1785     speed_cflags='-O3'
1786     size_cflags='-Os'
1787 elif $cc -V 2>&1 | grep -q Sun; then
1788     cc_type=suncc
1789     cc_version="AV_STRINGIFY(__SUNPRO_C)"
1790     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1791     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1792     speed_cflags='-O5'
1793     size_cflags='-O5 -xspace'
1794     filter_cflags=suncc_flags
1795     suncc_flags(){
1796         for flag; do
1797             case $flag in
1798                 -march=*|-mcpu=*)
1799                     case "${flag#*=}" in
1800                         native)                   echo -xtarget=native       ;;
1801                         v9)                       echo -xarch=sparc          ;;
1802                         ultrasparc)               echo -xarch=sparcvis       ;;
1803                         ultrasparc3|niagara*)     echo -xarch=sparcvis2      ;;
1804                         i586|pentium)             echo -xchip=pentium        ;;
1805                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1806                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1807                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1808                         pentium4*)          echo -xtarget=pentium4           ;;
1809                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1810                         *-sse3)             echo -xarch=sse3                 ;;
1811                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
1812                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1813                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1814                         k8|opteron|athlon64|athlon-fx)
1815                                                   echo -xarch=sse2a          ;;
1816                         athlon*)                  echo -xarch=pentium_proa   ;;
1817                     esac
1818                     ;;
1819                 -std=c99)             echo -xc99              ;;
1820                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
1821                 -fPIC)                echo -KPIC -xcode=pic32 ;;
1822                 -W*,*)                echo $flag              ;;
1823                 -f*-*|-W*)                                    ;;
1824                 *)                    echo $flag              ;;
1825             esac
1826         done
1827     }
1828 fi
1829
1830 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1831
1832 : ${as_default:=$cc}
1833 : ${dep_cc_default:=$cc}
1834 : ${ld_default:=$cc}
1835 set_default as dep_cc ld
1836
1837 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1838 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1839
1840 add_cflags $extra_cflags
1841 add_asflags $extra_cflags
1842
1843 if test -n "$sysroot"; then
1844     case "$cc_type" in
1845         gcc)
1846             add_cppflags --sysroot="$sysroot"
1847             add_ldflags --sysroot="$sysroot"
1848         ;;
1849         tms470)
1850             add_cppflags -I"$sysinclude"
1851             add_ldflags  --sysroot="$sysroot"
1852         ;;
1853         clang)
1854             add_cppflags -isysroot="$sysroot"
1855             add_ldflags -isysroot="$sysroot"
1856         ;;
1857     esac
1858 fi
1859
1860 if test "$cpu" = host; then
1861     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1862
1863     case "$cc_type" in
1864         gcc)
1865             check_native(){
1866                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1867                 sed -n "/$1=/{
1868                             s/.*$1=\\([^ ]*\\).*/\\1/
1869                             p
1870                             q
1871                         }" $TMPE
1872             }
1873             cpu=$(check_native -march || check_native -mcpu)
1874         ;;
1875     esac
1876
1877     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1878 fi
1879
1880 # Deal with common $arch aliases
1881 case "$arch" in
1882     arm*)
1883         arch="arm"
1884     ;;
1885     mips|mipsel|IP*)
1886         arch="mips"
1887     ;;
1888     mips64)
1889         arch="mips"
1890         subarch="mips64"
1891     ;;
1892     parisc|hppa)
1893         arch="parisc"
1894     ;;
1895     parisc64|hppa64)
1896         arch="parisc"
1897         subarch="parisc64"
1898     ;;
1899     "Power Macintosh"|ppc|powerpc)
1900         arch="ppc"
1901     ;;
1902     ppc64)
1903         arch="ppc"
1904         subarch="ppc64"
1905     ;;
1906     s390|s390x)
1907         arch="s390"
1908     ;;
1909     sh4|sh)
1910         arch="sh4"
1911     ;;
1912     sun4u|sparc64)
1913         arch="sparc"
1914         subarch="sparc64"
1915     ;;
1916     i[3-6]86|i86pc|BePC|x86_64|amd64)
1917         arch="x86"
1918     ;;
1919 esac
1920
1921 is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
1922 enable $arch
1923
1924 # Add processor-specific flags
1925 if test "$cpu" = generic; then
1926     : do nothing
1927 elif enabled ppc; then
1928
1929     case $(tolower $cpu) in
1930         601|ppc601|powerpc601)
1931             cpuflags="-mcpu=601"
1932             disable altivec
1933         ;;
1934         603*|ppc603*|powerpc603*)
1935             cpuflags="-mcpu=603"
1936             disable altivec
1937         ;;
1938         604*|ppc604*|powerpc604*)
1939             cpuflags="-mcpu=604"
1940             disable altivec
1941         ;;
1942         g3|75*|ppc75*|powerpc75*)
1943             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1944             disable altivec
1945         ;;
1946         g4|745*|ppc745*|powerpc745*)
1947             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1948         ;;
1949         74*|ppc74*|powerpc74*)
1950             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1951         ;;
1952         g5|970|ppc970|powerpc970|power4*)
1953             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1954         ;;
1955         cell)
1956             cpuflags="-mcpu=cell"
1957             enable ldbrx
1958         ;;
1959         e500v2)
1960             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1961             disable altivec
1962         ;;
1963         e500)
1964             cpuflags="-mcpu=8540 -mhard-float"
1965             disable altivec
1966         ;;
1967     esac
1968
1969 elif enabled x86; then
1970
1971     case $cpu in
1972         i[345]86|pentium)
1973             cpuflags="-march=$cpu"
1974             disable mmx
1975         ;;
1976         # targets that do NOT support conditional mov (cmov)
1977         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1978             cpuflags="-march=$cpu"
1979             disable cmov
1980         ;;
1981         # targets that do support conditional mov (cmov)
1982         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1983             cpuflags="-march=$cpu"
1984             enable cmov
1985             enable fast_cmov
1986         ;;
1987         # targets that do support conditional mov but on which it's slow
1988         pentium4|pentium4m|prescott|nocona)
1989             cpuflags="-march=$cpu"
1990             enable cmov
1991             disable fast_cmov
1992         ;;
1993     esac
1994
1995 elif enabled sparc; then
1996
1997     case $cpu in
1998         sparc64)
1999             cpuflags="-mcpu=v9"
2000         ;;
2001     esac
2002
2003 elif enabled arm; then
2004
2005     case $cpu in
2006         armv*)
2007             cpuflags="-march=$cpu"
2008         ;;
2009         *)
2010             cpuflags="-mcpu=$cpu"
2011         ;;
2012     esac
2013
2014 elif enabled alpha; then
2015
2016     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2017
2018 elif enabled bfin; then
2019
2020     cpuflags="-mcpu=$cpu"
2021
2022 elif enabled mips; then
2023
2024     cpuflags="-march=$cpu"
2025
2026 elif enabled avr32; then
2027
2028     case $cpu in
2029         ap7[02]0[0-2])
2030             subarch="avr32_ap"
2031             cpuflags="-mpart=$cpu"
2032         ;;
2033         ap)
2034             subarch="avr32_ap"
2035             cpuflags="-march=$cpu"
2036         ;;
2037         uc3[ab]*)
2038             subarch="avr32_uc"
2039             cpuflags="-mcpu=$cpu"
2040         ;;
2041         uc)
2042             subarch="avr32_uc"
2043             cpuflags="-march=$cpu"
2044         ;;
2045     esac
2046
2047 fi
2048
2049 add_cflags $cpuflags
2050 add_asflags $cpuflags
2051
2052 # compiler sanity check
2053 check_exec <<EOF
2054 int main(void){ return 0; }
2055 EOF
2056 if test "$?" != 0; then
2057     echo "$cc is unable to create an executable file."
2058     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2059         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2060         echo "Only do this if you know what cross compiling means."
2061     fi
2062     die "C compiler test failed."
2063 fi
2064
2065 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2066 check_cflags -std=c99
2067 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2068 #include <stdlib.h>
2069 EOF
2070 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2071 #include <stdlib.h>
2072 EOF
2073
2074 check_host_cflags -std=c99
2075
2076 case "$arch" in
2077     alpha|ia64|mips|parisc|sparc)
2078         spic=$shared
2079     ;;
2080     x86)
2081         subarch="x86_32"
2082         check_cc <<EOF && subarch="x86_64"
2083         int test[(int)sizeof(char*) - 7];
2084 EOF
2085         if test "$subarch" = "x86_64"; then
2086             spic=$shared
2087         fi
2088     ;;
2089 esac
2090
2091 enable $subarch
2092 enabled spic && enable pic
2093 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2094
2095 # OS specific
2096 case $target_os in
2097     beos|haiku|zeta)
2098         prefix_default="$HOME/config"
2099         # 3 gcc releases known for BeOS, each with ugly bugs
2100         gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
2101         case "$gcc_version" in
2102           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
2103             disable mmx
2104             ;;
2105           *20010315*) echo "BeBits gcc"
2106             add_cflags -fno-expensive-optimizations
2107             ;;
2108         esac
2109         SHFLAGS=-nostart
2110         # enable BeOS things
2111         enable audio_beos
2112         # no need for libm, but the inet stuff
2113         # Check for BONE
2114         # XXX: actually should check for NOT net_server
2115         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
2116             network_extralibs="-lbind -lsocket"
2117         else
2118             enable beos_netserver
2119             network_extralibs="-lnet"
2120         fi ;;
2121     sunos)
2122         FFSERVERLDFLAGS=""
2123         SHFLAGS='-shared -Wl,-h,$$(@F)'
2124         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2125         network_extralibs="-lsocket -lnsl"
2126         add_cppflags -D__EXTENSIONS__
2127         nm_opts='-P -g'
2128         ;;
2129     netbsd)
2130         oss_indev_extralibs="-lossaudio"
2131         oss_outdev_extralibs="-lossaudio"
2132         ;;
2133     openbsd)
2134         enable malloc_aligned
2135         # On OpenBSD 4.5. the compiler does not use PIC unless
2136         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2137         # however the generated executable will not do anything
2138         # (simply quits with exit-code 1, no crash, no output).
2139         # Thus explicitly enable PIC here.
2140         enable pic
2141         SHFLAGS='-shared'
2142         oss_indev_extralibs="-lossaudio"
2143         oss_outdev_extralibs="-lossaudio"
2144         ;;
2145     freebsd|dragonfly)
2146         enable malloc_aligned
2147         ;;
2148     bsd/os)
2149         osextralibs="-lpoll -lgnugetopt"
2150         strip="strip -d"
2151         ;;
2152     darwin)
2153         enable malloc_aligned
2154         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2155         strip="strip -x"
2156         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2157         SLIBSUF=".dylib"
2158         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2159         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2160         FFSERVERLDFLAGS=-Wl,-bind_at_load
2161         objformat="macho"
2162         enabled x86_64 && objformat="macho64"
2163         enabled_any pic shared ||
2164             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2165         ;;
2166     mingw32*)
2167         if test $target_os = "mingw32ce"; then
2168             disable network
2169         else
2170             target_os=mingw32
2171         fi
2172         LIBTARGET=i386
2173         if enabled x86_64; then
2174             enable malloc_aligned
2175             LIBTARGET=x64
2176         elif enabled arm; then
2177             LIBTARGET=arm
2178         fi
2179         shlibdir_default="$bindir_default"
2180         disable ffserver
2181         SLIBPREF=""
2182         SLIBSUF=".dll"
2183         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2184         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2185         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2186         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2187             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2188             install -d "$(LIBDIR)"; \
2189             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2190         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2191         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'
2192         objformat="win32"
2193         enable dos_paths
2194         check_cflags -fno-common
2195         if ! enabled x86_64; then
2196             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2197                 die "ERROR: MinGW runtime version must be >= 3.15."
2198             enabled_any avisynth vfwcap_indev &&
2199                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2200                   die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2201         fi
2202         ;;
2203     cygwin*)
2204         target_os=cygwin
2205         shlibdir_default="$bindir_default"
2206         SLIBPREF="cyg"
2207         SLIBSUF=".dll"
2208         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2209         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2210         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2211         objformat="win32"
2212         enable dos_paths
2213         check_cflags -fno-common
2214         ;;
2215     *-dos|freedos|opendos)
2216         disable ffplay ffserver
2217         disable $INDEV_LIST $OUTDEV_LIST
2218         network_extralibs="-lsocket"
2219         objformat="coff"
2220         enable dos_paths
2221         ;;
2222     linux)
2223         enable dv1394
2224         ;;
2225     irix*)
2226         target_os=irix
2227         ranlib="echo ignoring ranlib"
2228         ;;
2229     os/2*)
2230         strip="lxlite"
2231         ln_s="cp -f"
2232         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2233         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2234         FFSERVERLDFLAGS=""
2235         LIBSUF="_s.a"
2236         SLIBPREF=""
2237         SLIBSUF=".dll"
2238         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2239         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2240         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2241           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2242           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2243           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2244           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2245           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2246         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2247           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2248         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2249         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2250         enable dos_paths
2251         ;;
2252     gnu/kfreebsd)
2253         ;;
2254     gnu)
2255         ;;
2256     none)
2257         ;;
2258     *)
2259         die "Unknown OS '$target_os'."
2260         ;;
2261 esac
2262
2263 set_default $PATHS_LIST
2264
2265 add_extralibs $osextralibs
2266
2267 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2268 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2269
2270 # we need to build at least one lib type
2271 if ! enabled_any static shared; then
2272     cat <<EOF
2273 At least one library type must be built.
2274 Specify --enable-static to build the static libraries or --enable-shared to
2275 build the shared libraries as well. To only build the shared libraries specify
2276 --disable-static in addition to --enable-shared.
2277 EOF
2278     exit 1;
2279 fi
2280
2281 disabled static && LIBNAME=""
2282
2283 if enabled_any libfaad libfaadbin ; then
2284     if check_header faad.h; then
2285         check_cc <<EOF
2286 #include <faad.h>
2287 #ifndef FAAD2_VERSION
2288 ok faad1
2289 #endif
2290 int main(void) { return 0; }
2291 EOF
2292         test $? = 0 && enable libfaad2
2293     else
2294         die "FAAD test failed."
2295     fi
2296 fi
2297
2298
2299 die_license_disabled() {
2300     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2301 }
2302
2303 die_license_disabled gpl libfaad2
2304 die_license_disabled gpl libx264
2305 die_license_disabled gpl libxvid
2306 die_license_disabled gpl postproc
2307 die_license_disabled gpl x11grab
2308
2309 die_license_disabled nonfree libfaac
2310
2311 die_license_disabled version3 libopencore_amrnb
2312 die_license_disabled version3 libopencore_amrwb
2313
2314 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2315
2316 check_deps $ARCH_EXT_LIST
2317
2318 disabled optimizations || check_cflags -fomit-frame-pointer
2319
2320 enable_pic() {
2321     enable pic
2322     add_cppflags -DPIC
2323     add_cflags   -fPIC
2324     add_asflags  -fPIC
2325 }
2326
2327 enabled pic && enable_pic
2328
2329 check_cc <<EOF || die "Symbol mangling check failed."
2330 int ff_extern;
2331 EOF
2332 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2333 extern_prefix=${sym%%ff_extern*}
2334
2335 check_cc <<EOF && enable inline_asm
2336 void foo(void) { __asm__ volatile ("" ::); }
2337 EOF
2338
2339 _restrict=
2340 for restrict_keyword in restrict __restrict__ __restrict; do
2341     check_cc <<EOF && _restrict=$restrict_keyword && break
2342 void foo(char * $restrict_keyword p);
2343 EOF
2344 done
2345
2346 check_cc <<EOF && enable attribute_packed
2347 struct { int x; } __attribute__((packed)) x;
2348 EOF
2349
2350 check_cc <<EOF && enable attribute_may_alias
2351 union { int x; } __attribute__((may_alias)) x;
2352 EOF
2353
2354 check_cc <<EOF || die "endian test failed"
2355 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2356 EOF
2357 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2358
2359 if enabled alpha; then
2360
2361     check_cflags -mieee
2362
2363 elif enabled arm; then
2364
2365     check_cflags -marm
2366
2367     check_ld <<EOF && enable vfp_args
2368 __asm__ (".eabi_attribute 28, 1");
2369 int main(void) { return 0; }
2370 EOF
2371
2372     # We have to check if pld is a nop and disable it.
2373     check_asm pld '"pld [r0]"'
2374
2375     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2376     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2377     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2378     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2379     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2380     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2381
2382     enabled_all armv6t2 shared !pic && enable_pic
2383
2384 elif enabled ia64; then
2385
2386     # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2387     enabled shared && enable_weak hardcoded_tables
2388
2389 elif enabled mips; then
2390
2391     check_asm loongson '"dmult.g $1, $2, $3"'
2392     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2393
2394 elif enabled ppc; then
2395
2396     enable local_aligned_8 local_aligned_16
2397
2398     check_asm dcbzl     '"dcbzl 0, 1"'
2399     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2400     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2401
2402     # AltiVec flags: The FSF version of GCC differs from the Apple version
2403     if enabled altivec; then
2404         check_cflags -maltivec -mabi=altivec &&
2405         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2406         check_cflags -faltivec
2407
2408         # check if our compiler supports Motorola AltiVec C API
2409         check_cc <<EOF || disable altivec
2410 $inc_altivec_h
2411 int main(void) {
2412     vector signed int v1, v2, v3;
2413     v1 = vec_add(v2,v3);
2414     return 0;
2415 }
2416 EOF
2417
2418         # check if our compiler supports braces for vector declarations
2419         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2420 $inc_altivec_h
2421 int main (void) { (vector int) {1}; return 0; }
2422 EOF
2423     fi
2424
2425 elif enabled sparc; then
2426
2427     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2428         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2429
2430 elif enabled x86; then
2431
2432     enable local_aligned_8 local_aligned_16
2433
2434     # check whether EBP is available on x86
2435     # As 'i' is stored on the stack, this program will crash
2436     # if the base pointer is used to access it because the
2437     # base pointer is cleared in the inline assembly code.
2438     check_exec_crash <<EOF && enable ebp_available
2439     volatile int i=0;
2440     __asm__ volatile (
2441         "xorl %%ebp, %%ebp"
2442     ::: "%ebp");
2443     return i;
2444 EOF
2445
2446     # check whether EBX is available on x86
2447     check_asm ebx_available '""::"b"(0)' &&
2448         check_asm ebx_available '"":::"%ebx"'
2449
2450     # check whether more than 10 operands are supported
2451     check_cc <<EOF && enable ten_operands
2452 int main(void) {
2453     int x=0;
2454     __asm__ volatile(
2455         ""
2456         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2457     );
2458     return 0;
2459 }
2460 EOF
2461
2462     # check whether binutils is new enough to compile SSSE3/MMX2
2463     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2464     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2465
2466     check_asm bswap '"bswap %%eax" ::: "%eax"'
2467
2468     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2469     enabled     x86_64        && append YASMFLAGS "-m amd64"
2470     enabled     pic           && append YASMFLAGS "-DPIC"
2471     test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2472     case "$objformat" in
2473         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2474     esac
2475     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2476
2477     case "$cpu" in
2478         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2479             disable fast_clz
2480         ;;
2481     esac
2482
2483 fi
2484
2485 if check_func dlopen; then
2486     ldl=
2487 elif check_func dlopen -ldl; then
2488     ldl=-ldl
2489 fi
2490
2491 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2492 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2493
2494 check_func  fork
2495 check_func  getaddrinfo $network_extralibs
2496 check_func  gethrtime
2497 check_func  getrusage
2498 check_func  inet_aton $network_extralibs
2499 check_func  isatty
2500 check_func  ${malloc_prefix}memalign            && enable memalign
2501 check_func  mkstemp
2502 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2503 check_func  setrlimit
2504 check_func_headers io.h setmode
2505 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2506 check_func_headers windows.h GetProcessTimes
2507 check_func_headers windows.h VirtualAlloc
2508
2509 check_header conio.h
2510 check_header dlfcn.h
2511 check_header dxva2api.h
2512 check_header malloc.h
2513 check_header poll.h
2514 check_header sys/mman.h
2515 check_header sys/resource.h
2516 check_header sys/select.h
2517 check_header termios.h
2518 check_header vdpau/vdpau.h
2519 check_header vdpau/vdpau_x11.h
2520 check_header X11/extensions/XvMClib.h
2521
2522 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2523
2524 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2525      enabled_any $need_memalign ; then
2526     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2527 fi
2528
2529 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2530 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2531
2532 # check for some common methods of building with pthread support
2533 # do this before the optional library checks as some of them require pthreads
2534 if enabled pthreads; then
2535     if check_func pthread_create; then
2536         :
2537     elif check_func pthread_create -pthread; then
2538         add_cflags -pthread
2539         add_extralibs -pthread
2540     elif check_func pthread_create -pthreads; then
2541         add_cflags -pthreads
2542         add_extralibs -pthreads
2543     elif check_func pthread_create -lpthreadGC2; then
2544         add_extralibs -lpthreadGC2
2545     elif ! check_lib pthread.h pthread_create -lpthread; then
2546         die "ERROR: can't find pthreads library"
2547     fi
2548 fi
2549
2550 for thread in $THREADS_LIST; do
2551     if enabled $thread; then
2552         test -n "$thread_type" &&
2553             die "ERROR: Only one thread type must be selected." ||
2554             thread_type="$thread"
2555     fi
2556 done
2557
2558 check_lib math.h sin -lm
2559 check_lib va/va.h vaInitialize -lva
2560
2561 check_mathfunc exp2
2562 check_mathfunc exp2f
2563 check_mathfunc llrint
2564 check_mathfunc log2
2565 check_mathfunc log2f
2566 check_mathfunc lrint
2567 check_mathfunc lrintf
2568 check_mathfunc round
2569 check_mathfunc roundf
2570 check_mathfunc truncf
2571
2572 # these are off by default, so fail if requested and not available
2573 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2574 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2575                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2576                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2577 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2578 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2579 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2580 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2581 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2582 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2583 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2584 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2585 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2586                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2587 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2588 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2589 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2590 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2591                       { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2592                         die "ERROR: libx264 version must be >= 0.83."; }
2593 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2594 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2595
2596 # libdc1394 check
2597 if enabled libdc1394; then
2598     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2599         enable libdc1394_2; } ||
2600     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2601         enable libdc1394_1; } ||
2602     die "ERROR: No version of libdc1394 found "
2603 fi
2604
2605 SDL_CONFIG="${cross_prefix}sdl-config"
2606 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2607     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2608     sdl_libs=$("${SDL_CONFIG}" --libs)
2609     check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2610     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2611     enable sdl &&
2612     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2613 fi
2614
2615 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2616
2617 if enabled network; then
2618     check_type "sys/types.h sys/socket.h" socklen_t
2619     check_type netdb.h "struct addrinfo"
2620     check_type netinet/in.h "struct ipv6_mreq"
2621     check_type netinet/in.h "struct sockaddr_in6"
2622     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2623     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2624     # Prefer arpa/inet.h over winsock2
2625     if check_header arpa/inet.h ; then
2626         check_func closesocket
2627     elif check_header winsock2.h ; then
2628         check_func_headers winsock2.h closesocket -lws2 && \
2629             network_extralibs="-lws2" || \
2630         { check_func_headers winsock2.h closesocket -lws2_32 && \
2631             network_extralibs="-lws2_32"; }
2632         check_type ws2tcpip.h socklen_t
2633         check_type ws2tcpip.h "struct addrinfo"
2634         check_type ws2tcpip.h "struct ipv6_mreq"
2635         check_type ws2tcpip.h "struct sockaddr_in6"
2636         check_type ws2tcpip.h "struct sockaddr_storage"
2637         check_struct winsock2.h "struct sockaddr" sa_len
2638     else
2639         disable network
2640     fi
2641 fi
2642
2643 check_header linux/videodev.h
2644 check_header linux/videodev2.h
2645 check_header sys/videoio.h
2646
2647 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2648
2649 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2650 { check_header dev/bktr/ioctl_meteor.h &&
2651   check_header dev/bktr/ioctl_bt848.h; } ||
2652 { check_header machine/ioctl_meteor.h &&
2653   check_header machine/ioctl_bt848.h; } ||
2654 { check_header dev/video/meteor/ioctl_meteor.h &&
2655   check_header dev/video/bktr/ioctl_bt848.h; } ||
2656 check_header dev/ic/bt8xx.h
2657
2658 check_header sys/soundcard.h
2659 check_header soundcard.h
2660
2661 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2662
2663 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2664
2665 enabled x11grab                         &&
2666 check_header X11/Xlib.h                 &&
2667 check_header X11/extensions/XShm.h      &&
2668 check_header X11/extensions/Xfixes.h    &&
2669 check_func XOpenDisplay -lX11           &&
2670 check_func XShmCreateImage -lX11 -lXext &&
2671 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2672
2673 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2674 check_cpp_condition \
2675     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2676     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2677       disable vdpau; }
2678 fi
2679
2680 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2681
2682 # add some useful compiler flags if supported
2683 check_cflags -Wdeclaration-after-statement
2684 check_cflags -Wall
2685 check_cflags -Wno-switch
2686 check_cflags -Wdisabled-optimization
2687 check_cflags -Wpointer-arith
2688 check_cflags -Wredundant-decls
2689 check_cflags -Wno-pointer-sign
2690 check_cflags -Wcast-qual
2691 check_cflags -Wwrite-strings
2692 check_cflags -Wtype-limits
2693 check_cflags -Wundef
2694 enabled extra_warnings && check_cflags -Winline
2695
2696 # add some linker flags
2697 check_ldflags -Wl,--warn-common
2698 check_ldflags -Wl,--as-needed
2699 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'
2700 check_ldflags -Wl,-Bsymbolic
2701
2702 echo "X{};" > $TMPV
2703 test_ldflags -Wl,--version-script,$TMPV &&
2704     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2705
2706 if enabled small; then
2707     add_cflags $size_cflags
2708     optimizations="small"
2709 elif enabled optimizations; then
2710     add_cflags $speed_cflags
2711 fi
2712 check_cflags -fno-math-errno
2713 check_cflags -fno-signed-zeros
2714
2715 if enabled icc; then
2716     # Just warnings, no remarks
2717     check_cflags -w1
2718     # -wd: Disable following warnings
2719     # 144, 167, 556: -Wno-pointer-sign
2720     # 10006: ignoring unknown option -fno-signed-zeros
2721     # 10156: ignoring option '-W'; no argument required
2722     check_cflags -wd144,167,556,1292,10006,10156
2723     # 11030: Warning unknown option --as-needed
2724     # 10156: ignoring option '-export'; no argument required
2725     check_ldflags -wd10156,11030
2726     # Allow to compile with optimizations
2727     check_ldflags -march=$cpu
2728     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2729     enable ebp_available
2730 elif enabled ccc; then
2731     # disable some annoying warnings
2732     add_cflags -msg_disable cvtu32to64
2733     add_cflags -msg_disable embedcomment
2734     add_cflags -msg_disable needconstext
2735     add_cflags -msg_disable nomainieee
2736     add_cflags -msg_disable ptrmismatch1
2737     add_cflags -msg_disable unreachcode
2738 elif enabled gcc; then
2739     check_cflags -fno-tree-vectorize
2740 elif enabled clang; then
2741     check_cflags -Qunused-arguments
2742 elif enabled armcc; then
2743     # 2523: use of inline assembler is deprecated
2744     add_cflags -Wrvct,--diag_suppress=2523
2745 elif enabled tms470; then
2746     add_cflags -pds=824 -pds=837
2747 fi
2748
2749 if enabled gprof; then
2750     add_cflags  -p
2751     add_ldflags -p
2752 fi
2753
2754 # Find out if the .align argument is a power of two or not.
2755 check_asm asmalign_pot '".align 3"'
2756
2757 enabled_any $DECODER_LIST      && enable decoders
2758 enabled_any $ENCODER_LIST      && enable encoders
2759 enabled_any $HWACCEL_LIST      && enable hwaccels
2760 enabled_any $BSF_LIST          && enable bsfs
2761 enabled_any $DEMUXER_LIST      && enable demuxers
2762 enabled_any $MUXER_LIST        && enable muxers
2763 enabled_any $FILTER_LIST       && enable filters
2764 enabled_any $INDEV_LIST        && enable indevs
2765 enabled_any $OUTDEV_LIST       && enable outdevs
2766 enabled_any $PROTOCOL_LIST     && enable protocols
2767
2768 enabled_any $THREADS_LIST      && enable threads
2769
2770 check_deps $CONFIG_LIST       \
2771            $CONFIG_EXTRA      \
2772            $HAVE_LIST         \
2773            $DECODER_LIST      \
2774            $ENCODER_LIST      \
2775            $HWACCEL_LIST      \
2776            $PARSER_LIST       \
2777            $BSF_LIST          \
2778            $DEMUXER_LIST      \
2779            $MUXER_LIST        \
2780            $FILTER_LIST       \
2781            $INDEV_LIST        \
2782            $OUTDEV_LIST       \
2783            $PROTOCOL_LIST     \
2784
2785 enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2786
2787 echo "install prefix            $prefix"
2788 echo "source path               $source_path"
2789 echo "C compiler                $cc"
2790 echo ".align is power-of-two    $asmalign_pot"
2791 echo "ARCH                      $arch ($cpu)"
2792 if test "$build_suffix" != ""; then
2793     echo "build suffix              $build_suffix"
2794 fi
2795 if test "$extra_version" != ""; then
2796     echo "version string suffix     $extra_version"
2797 fi
2798 echo "big-endian                ${bigendian-no}"
2799 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2800 if enabled x86; then
2801     echo "yasm                      ${yasm-no}"
2802     echo "MMX enabled               ${mmx-no}"
2803     echo "MMX2 enabled              ${mmx2-no}"
2804     echo "3DNow! enabled            ${amd3dnow-no}"
2805     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2806     echo "SSE enabled               ${sse-no}"
2807     echo "SSSE3 enabled             ${ssse3-no}"
2808     echo "CMOV enabled              ${cmov-no}"
2809     echo "CMOV is fast              ${fast_cmov-no}"
2810     echo "EBX available             ${ebx_available-no}"
2811     echo "EBP available             ${ebp_available-no}"
2812     echo "10 operands supported     ${ten_operands-no}"
2813 fi
2814 if enabled arm; then
2815     echo "ARMv5TE enabled           ${armv5te-no}"
2816     echo "ARMv6 enabled             ${armv6-no}"
2817     echo "ARMv6T2 enabled           ${armv6t2-no}"
2818     echo "ARM VFP enabled           ${armvfp-no}"
2819     echo "IWMMXT enabled            ${iwmmxt-no}"
2820     echo "NEON enabled              ${neon-no}"
2821 fi
2822 if enabled mips; then
2823     echo "MMI enabled               ${mmi-no}"
2824 fi
2825 if enabled ppc; then
2826     echo "AltiVec enabled           ${altivec-no}"
2827     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2828     echo "dcbzl available           ${dcbzl-no}"
2829     echo "performance report        ${powerpc_perf-no}"
2830 fi
2831 if enabled sparc; then
2832     echo "VIS enabled               ${vis-no}"
2833 fi
2834 echo "gprof enabled             ${gprof-no}"
2835 echo "debug symbols             ${debug-no}"
2836 echo "strip symbols             ${stripping-no}"
2837 echo "optimizations             ${optimizations-no}"
2838 echo "static                    ${static-no}"
2839 echo "shared                    ${shared-no}"
2840 echo "postprocessing support    ${postproc-no}"
2841 echo "new filter support        ${avfilter-no}"
2842 echo "filters using lavformat   ${avfilter_lavf-no}"
2843 echo "network support           ${network-no}"
2844 echo "threading support         ${thread_type-no}"
2845 echo "SDL support               ${sdl-no}"
2846 echo "Sun medialib support      ${mlib-no}"
2847 echo "AVISynth enabled          ${avisynth-no}"
2848 echo "libdc1394 support         ${libdc1394-no}"
2849 echo "libdirac enabled          ${libdirac-no}"
2850 echo "libfaac enabled           ${libfaac-no}"
2851 echo "libfaad enabled           ${libfaad-no}"
2852 echo "libfaad dlopened          ${libfaadbin-no}"
2853 echo "libgsm enabled            ${libgsm-no}"
2854 echo "libmp3lame enabled        ${libmp3lame-no}"
2855 echo "libnut enabled            ${libnut-no}"
2856 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2857 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2858 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2859 echo "libschroedinger enabled   ${libschroedinger-no}"
2860 echo "libspeex enabled          ${libspeex-no}"
2861 echo "libtheora enabled         ${libtheora-no}"
2862 echo "libvorbis enabled         ${libvorbis-no}"
2863 echo "libx264 enabled           ${libx264-no}"
2864 echo "libxvid enabled           ${libxvid-no}"
2865 echo "zlib enabled              ${zlib-no}"
2866 echo "bzlib enabled             ${bzlib-no}"
2867 echo
2868
2869 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2870     echo "Enabled ${type}s:"
2871     eval list=\$$(toupper $type)_LIST
2872     for part in $list; do
2873         enabled $part && echo ${part%_*}
2874     done | sort | pr -3 -t
2875     echo
2876 done
2877
2878 license="LGPL version 2.1 or later"
2879 if enabled nonfree; then
2880     license="nonfree and unredistributable"
2881 elif enabled gplv3; then
2882     license="GPL version 3 or later"
2883 elif enabled lgplv3; then
2884     license="LGPL version 3 or later"
2885 elif enabled gpl; then
2886     license="GPL version 2 or later"
2887 fi
2888
2889 echo "License: $license"
2890
2891 echo "Creating config.mak and config.h..."
2892
2893 # build tree in object directory if source path is different from current one
2894 if enabled source_path_used; then
2895     DIRS="
2896         doc
2897         libavcodec
2898         libavcodec/$arch
2899         libavdevice
2900         libavfilter
2901         libavformat
2902         libavutil
2903         libavutil/$arch
2904         libpostproc
2905         libswscale
2906         libswscale/$arch
2907         tests
2908         tools
2909     "
2910     FILES="
2911         Makefile
2912         common.mak
2913         subdir.mak
2914         doc/texi2pod.pl
2915         libavcodec/Makefile
2916         libavdevice/Makefile
2917         libavfilter/Makefile
2918         libavformat/Makefile
2919         libavutil/Makefile
2920         libpostproc/Makefile
2921         libswscale/Makefile
2922     "
2923     for dir in $DIRS ; do
2924         mkdir -p $dir
2925     done
2926     for f in $FILES ; do
2927         $ln_s "$source_path/$f" $f
2928     done
2929 fi
2930
2931 enabled stripping || strip="echo skipping strip"
2932
2933 cat > config.mak <<EOF
2934 # Automatically generated by configure - do not modify!
2935 ifndef FFMPEG_CONFIG_MAK
2936 FFMPEG_CONFIG_MAK=1
2937 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2938 prefix=$prefix
2939 LIBDIR=\$(DESTDIR)$libdir
2940 SHLIBDIR=\$(DESTDIR)$shlibdir
2941 INCDIR=\$(DESTDIR)$incdir
2942 BINDIR=\$(DESTDIR)$bindir
2943 DATADIR=\$(DESTDIR)$datadir
2944 MANDIR=\$(DESTDIR)$mandir
2945 SRC_PATH="$source_path"
2946 SRC_PATH_BARE=$source_path
2947 BUILD_ROOT="$PWD"
2948 ARCH=$arch
2949 CC=$cc
2950 AS=$as
2951 LD=$ld
2952 DEPCC=$dep_cc
2953 YASM=$yasmexe
2954 AR=$ar
2955 RANLIB=$ranlib
2956 LN_S=$ln_s
2957 STRIP=$strip
2958 CPPFLAGS=$CPPFLAGS
2959 CFLAGS=$CFLAGS
2960 ASFLAGS=$ASFLAGS
2961 CC_O=$CC_O
2962 LDFLAGS=$LDFLAGS
2963 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2964 SHFLAGS=$SHFLAGS
2965 YASMFLAGS=$YASMFLAGS
2966 BUILDSUF=$build_suffix
2967 FULLNAME=$FULLNAME
2968 LIBPREF=$LIBPREF
2969 LIBSUF=$LIBSUF
2970 LIBNAME=$LIBNAME
2971 SLIBPREF=$SLIBPREF
2972 SLIBSUF=$SLIBSUF
2973 EXESUF=$EXESUF
2974 EXTRA_VERSION=$extra_version
2975 DEPFLAGS=$DEPFLAGS
2976 CCDEP=$CCDEP
2977 ASDEP=$ASDEP
2978 CC_DEPFLAGS=$CC_DEPFLAGS
2979 AS_DEPFLAGS=$AS_DEPFLAGS
2980 HOSTCC=$host_cc
2981 HOSTCFLAGS=$host_cflags
2982 HOSTEXESUF=$HOSTEXESUF
2983 HOSTLDFLAGS=$host_ldflags
2984 HOSTLIBS=$host_libs
2985 TARGET_EXEC=$target_exec
2986 TARGET_PATH=$target_path
2987 SDL_LIBS=$sdl_libs
2988 SDL_CFLAGS=$sdl_cflags
2989 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2990 EXTRALIBS=$extralibs
2991 EOF
2992
2993 get_version(){
2994     name=$1
2995     file=$source_path/$2
2996     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2997     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2998     lcname=$(tolower $name)
2999     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3000     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3001 }
3002
3003 get_version LIBSWSCALE  libswscale/swscale.h
3004 get_version LIBPOSTPROC libpostproc/postprocess.h
3005 get_version LIBAVCODEC  libavcodec/avcodec.h
3006 get_version LIBAVDEVICE libavdevice/avdevice.h
3007 get_version LIBAVFORMAT libavformat/avformat.h
3008 get_version LIBAVUTIL   libavutil/avutil.h
3009 get_version LIBAVFILTER libavfilter/avfilter.h
3010
3011 enabled shared && cat >> config.mak <<EOF
3012 LIBTARGET=${LIBTARGET}
3013 SLIBNAME=${SLIBNAME}
3014 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3015 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3016 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3017 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3018 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3019 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3020 EOF
3021
3022 enabled asmalign_pot || align_shift="1 <<"
3023
3024 cat > $TMPH <<EOF
3025 /* Automatically generated by configure - do not modify! */
3026 #ifndef FFMPEG_CONFIG_H
3027 #define FFMPEG_CONFIG_H
3028 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3029 #define FFMPEG_LICENSE "$(c_escape $license)"
3030 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3031 #define CC_TYPE "$cc_type"
3032 #define CC_VERSION $cc_version
3033 #define restrict $_restrict
3034 #define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
3035 #define EXTERN_PREFIX "${extern_prefix}"
3036 #define EXTERN_ASM ${extern_prefix}
3037 EOF
3038
3039 test -n "$malloc_prefix" &&
3040     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3041
3042 if enabled small || disabled optimizations; then
3043     echo "#define av_always_inline"  >> $TMPH
3044 fi
3045
3046 print_config ARCH_   $TMPH config.mak $ARCH_LIST
3047 print_config HAVE_   $TMPH config.mak $HAVE_LIST
3048 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
3049                                       $CONFIG_EXTRA      \
3050                                       $DECODER_LIST      \
3051                                       $ENCODER_LIST      \
3052                                       $HWACCEL_LIST      \
3053                                       $PARSER_LIST       \
3054                                       $BSF_LIST          \
3055                                       $DEMUXER_LIST      \
3056                                       $MUXER_LIST        \
3057                                       $FILTER_LIST       \
3058                                       $PROTOCOL_LIST     \
3059                                       $INDEV_LIST        \
3060                                       $OUTDEV_LIST       \
3061
3062 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3063 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3064
3065 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3066 cp_if_changed $TMPH config.h
3067
3068 cat > $TMPH <<EOF
3069 /* Generated by ffconf */
3070 #ifndef AVUTIL_AVCONFIG_H
3071 #define AVUTIL_AVCONFIG_H
3072 EOF
3073
3074 print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3075
3076 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3077
3078 cp_if_changed $TMPH libavutil/avconfig.h
3079
3080 # build pkg-config files
3081
3082 pkgconfig_generate(){
3083 name=$1
3084 shortname=${name#lib}${build_suffix}
3085 comment=$2
3086 version=$3
3087 libs=$4
3088 requires=$5
3089 cat <<EOF > $name/$name.pc
3090 prefix=$prefix
3091 exec_prefix=\${prefix}
3092 libdir=$libdir
3093 includedir=$incdir
3094
3095 Name: $name
3096 Description: $comment
3097 Version: $version
3098 Requires: $(enabled shared || echo $requires)
3099 Requires.private: $(enabled shared && echo $requires)
3100 Conflicts:
3101 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3102 Libs.private: $(enabled shared && echo $libs)
3103 Cflags: -I\${includedir}
3104 EOF
3105 cat <<EOF > $name/$name-uninstalled.pc
3106 prefix=
3107 exec_prefix=
3108 libdir=\${pcfiledir}
3109 includedir=${source_path}
3110
3111 Name: $name
3112 Description: $comment
3113 Version: $version
3114 Requires: $requires
3115 Conflicts:
3116 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3117 Cflags: -I\${includedir}
3118 EOF
3119 }
3120
3121 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3122 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3123 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3124 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3125 enabled avfilter &&
3126     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3127 enabled postproc &&
3128     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3129 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"