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