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