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