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