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