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