Rename vfilters.texi to libavfilter.texi, as the file is meant to
[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 apply(){
782     file=$1
783     shift
784     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
785 }
786
787 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
788 # system-dependent things.
789
790 COMPONENT_LIST="
791     bsfs
792     decoders
793     demuxers
794     encoders
795     filters
796     hwaccels
797     indevs
798     muxers
799     outdevs
800     parsers
801     protocols
802 "
803
804 CONFIG_LIST="
805     $COMPONENT_LIST
806     aandct
807     avfilter
808     avfilter_lavf
809     avisynth
810     beos_netserver
811     bzlib
812     fastdiv
813     ffmpeg
814     ffplay
815     ffserver
816     fft
817     golomb
818     gpl
819     gprof
820     gray
821     hardcoded_tables
822     ipv6
823     libdc1394
824     libdirac
825     libfaac
826     libfaad
827     libfaadbin
828     libgsm
829     libmp3lame
830     libnut
831     libopencore_amrnb
832     libopencore_amrwb
833     libopenjpeg
834     libschroedinger
835     libspeex
836     libtheora
837     libvorbis
838     libx264
839     libxvid
840     lpc
841     mdct
842     memalign_hack
843     mlib
844     mpegaudio_hp
845     network
846     nonfree
847     pic
848     postproc
849     powerpc_perf
850     rdft
851     runtime_cpudetect
852     shared
853     small
854     static
855     swscale_alpha
856     vaapi
857     vdpau
858     version3
859     x11grab
860     zlib
861 "
862
863 THREADS_LIST='
864     beosthreads
865     os2threads
866     pthreads
867     w32threads
868 '
869
870 ARCH_LIST='
871     alpha
872     arm
873     avr32
874     avr32_ap
875     avr32_uc
876     bfin
877     ia64
878     m68k
879     mips
880     mips64
881     parisc
882     ppc
883     ppc64
884     s390
885     sh4
886     sparc
887     sparc64
888     x86
889     x86_32
890     x86_64
891 '
892
893 ARCH_EXT_LIST='
894     altivec
895     amd3dnow
896     amd3dnowext
897     armv5te
898     armv6
899     armv6t2
900     armvfp
901     iwmmxt
902     mmi
903     mmx
904     mmx2
905     neon
906     ppc4xx
907     sse
908     ssse3
909     vis
910 '
911
912 HAVE_LIST="
913     $ARCH_EXT_LIST
914     $THREADS_LIST
915     alsa_asoundlib_h
916     altivec_h
917     arpa_inet_h
918     attribute_packed
919     bigendian
920     bswap
921     closesocket
922     cmov
923     conio_h
924     dcbzl
925     dev_bktr_ioctl_bt848_h
926     dev_bktr_ioctl_meteor_h
927     dev_ic_bt8xx_h
928     dev_video_meteor_ioctl_meteor_h
929     dev_video_bktr_ioctl_bt848_h
930     dlfcn_h
931     dlopen
932     dos_paths
933     ebp_available
934     ebx_available
935     fast_64bit
936     fast_cmov
937     fast_unaligned
938     fork
939     gethrtime
940     GetProcessTimes
941     getrusage
942     inet_aton
943     inline_asm
944     isatty
945     ldbrx
946     libdc1394_1
947     libdc1394_2
948     llrint
949     log2
950     loongson
951     lrint
952     lrintf
953     lzo1x_999_compress
954     machine_ioctl_bt848_h
955     machine_ioctl_meteor_h
956     malloc_h
957     memalign
958     mkstemp
959     pld
960     posix_memalign
961     round
962     roundf
963     sdl
964     sdl_video_size
965     setmode
966     socklen_t
967     soundcard_h
968     poll_h
969     sys_mman_h
970     sys_resource_h
971     sys_select_h
972     sys_soundcard_h
973     sys_videoio_h
974     ten_operands
975     termios_h
976     threads
977     truncf
978     vfp_args
979     VirtualAlloc
980     winsock2_h
981     xform_asm
982     yasm
983 "
984
985 # options emitted with CONFIG_ prefix but not available on command line
986 CONFIG_EXTRA="
987     gplv3
988     lgplv3
989 "
990
991 CMDLINE_SELECT="
992     $ARCH_EXT_LIST
993     $CONFIG_LIST
994     $THREADS_LIST
995     cross_compile
996     debug
997     extra_warnings
998     logging
999     optimizations
1000     stripping
1001     yasm
1002 "
1003
1004 PATHS_LIST='
1005     bindir
1006     datadir
1007     incdir
1008     libdir
1009     mandir
1010     prefix
1011     shlibdir
1012 '
1013
1014 CMDLINE_SET="
1015     $PATHS_LIST
1016     arch
1017     as
1018     build_suffix
1019     cc
1020     cpu
1021     cross_prefix
1022     dep_cc
1023     extra_version
1024     host_cc
1025     host_cflags
1026     host_ldflags
1027     host_libs
1028     host_os
1029     ld
1030     logfile
1031     nm
1032     source_path
1033     sysinclude
1034     sysroot
1035     target_exec
1036     target_os
1037     target_path
1038 "
1039
1040 CMDLINE_APPEND="
1041     extra_cflags
1042 "
1043
1044 # code dependency declarations
1045
1046 # architecture extensions
1047 altivec_deps="ppc"
1048 amd3dnow_deps="mmx"
1049 amd3dnowext_deps="amd3dnow"
1050 armv5te_deps="arm"
1051 armv6_deps="arm"
1052 armv6t2_deps="arm"
1053 armvfp_deps="arm"
1054 iwmmxt_deps="arm"
1055 mmi_deps="mips"
1056 mmx_deps="x86"
1057 mmx2_deps="mmx"
1058 neon_deps="arm"
1059 ppc4xx_deps="ppc"
1060 sse_deps="mmx"
1061 ssse3_deps="sse"
1062 vis_deps="sparc"
1063
1064 need_memalign="altivec neon sse"
1065 inline_asm_deps="!tms470"
1066
1067 # decoders / encoders / hardware accelerators
1068 aac_decoder_select="fft mdct"
1069 aac_encoder_select="fft mdct"
1070 ac3_decoder_select="fft mdct"
1071 alac_encoder_select="lpc"
1072 atrac3_decoder_select="fft mdct"
1073 cavs_decoder_select="golomb"
1074 cook_decoder_select="fft mdct"
1075 cscd_decoder_suggest="zlib"
1076 dca_decoder_select="fft mdct"
1077 dnxhd_encoder_select="aandct"
1078 dxa_decoder_select="zlib"
1079 eac3_decoder_select="ac3_decoder"
1080 eamad_decoder_select="aandct"
1081 eatgq_decoder_select="aandct"
1082 eatqi_decoder_select="aandct"
1083 ffv1_decoder_select="golomb"
1084 flac_decoder_select="golomb"
1085 flac_encoder_select="golomb lpc"
1086 flashsv_decoder_select="zlib"
1087 flashsv_encoder_select="zlib"
1088 flv_encoder_select="h263_encoder"
1089 h261_encoder_select="aandct"
1090 h263_encoder_select="aandct"
1091 h263_vaapi_hwaccel_deps="va_va_h"
1092 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1093 h263p_encoder_select="h263_encoder"
1094 h264_decoder_select="golomb"
1095 h264_vaapi_hwaccel_deps="va_va_h"
1096 h264_vaapi_hwaccel_select="vaapi"
1097 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1098 h264_vdpau_decoder_select="vdpau h264_decoder"
1099 imc_decoder_select="fft mdct"
1100 jpegls_decoder_select="golomb"
1101 jpegls_encoder_select="golomb"
1102 ljpeg_encoder_select="aandct"
1103 loco_decoder_select="golomb"
1104 mjpeg_encoder_select="aandct"
1105 mpeg1video_encoder_select="aandct"
1106 mpeg2video_encoder_select="aandct"
1107 mpeg4_encoder_select="h263_encoder"
1108 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1109 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1110 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1111 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1112 mpeg2_vaapi_hwaccel_deps="va_va_h"
1113 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1114 mpeg4_vaapi_hwaccel_deps="va_va_h"
1115 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1116 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1117 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1118 msmpeg4v1_encoder_select="h263_encoder"
1119 msmpeg4v2_encoder_select="h263_encoder"
1120 msmpeg4v3_encoder_select="h263_encoder"
1121 nellymoser_decoder_select="fft mdct"
1122 nellymoser_encoder_select="fft mdct"
1123 png_decoder_select="zlib"
1124 png_encoder_select="zlib"
1125 qdm2_decoder_select="fft mdct rdft"
1126 rv10_encoder_select="h263_encoder"
1127 rv20_encoder_select="h263_encoder"
1128 rv30_decoder_select="golomb"
1129 rv40_decoder_select="golomb"
1130 shorten_decoder_select="golomb"
1131 sonic_decoder_select="golomb"
1132 sonic_encoder_select="golomb"
1133 sonic_ls_encoder_select="golomb"
1134 svq3_decoder_select="golomb"
1135 svq3_decoder_suggest="zlib"
1136 theora_decoder_select="vp3_decoder"
1137 tiff_decoder_suggest="zlib"
1138 tiff_encoder_suggest="zlib"
1139 tscc_decoder_select="zlib"
1140 vc1_vaapi_hwaccel_deps="va_va_h"
1141 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1142 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1143 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1144 vorbis_decoder_select="fft mdct"
1145 vorbis_encoder_select="fft mdct"
1146 vp6a_decoder_select="vp6_decoder"
1147 vp6f_decoder_select="vp6_decoder"
1148 wmav1_decoder_select="fft mdct"
1149 wmav1_encoder_select="fft mdct"
1150 wmav2_decoder_select="fft mdct"
1151 wmav2_encoder_select="fft mdct"
1152 wmv1_encoder_select="h263_encoder"
1153 wmv2_encoder_select="h263_encoder"
1154 wmv3_decoder_select="vc1_decoder"
1155 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1156 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1157 zlib_decoder_select="zlib"
1158 zlib_encoder_select="zlib"
1159 zmbv_decoder_select="zlib"
1160 zmbv_encoder_select="zlib"
1161
1162 # parsers
1163 h264_parser_select="golomb"
1164
1165 # external libraries
1166 libdirac_decoder_deps="libdirac !libschroedinger"
1167 libdirac_encoder_deps="libdirac"
1168 libfaac_encoder_deps="libfaac"
1169 libfaad_decoder_deps="libfaad"
1170 libfaadbin_decoder_extralibs='$ldl'
1171 libgsm_decoder_deps="libgsm"
1172 libgsm_encoder_deps="libgsm"
1173 libgsm_ms_decoder_deps="libgsm"
1174 libgsm_ms_encoder_deps="libgsm"
1175 libmp3lame_encoder_deps="libmp3lame"
1176 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1177 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1178 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1179 libopenjpeg_decoder_deps="libopenjpeg"
1180 libschroedinger_decoder_deps="libschroedinger"
1181 libschroedinger_encoder_deps="libschroedinger"
1182 libspeex_decoder_deps="libspeex"
1183 libtheora_encoder_deps="libtheora"
1184 libvorbis_encoder_deps="libvorbis"
1185 libx264_encoder_deps="libx264"
1186 libxvid_encoder_deps="libxvid"
1187
1188 # demuxers / muxers
1189 ac3_demuxer_deps="ac3_parser"
1190 asf_stream_muxer_select="asf_muxer"
1191 avisynth_demuxer_deps="avisynth"
1192 dirac_demuxer_deps="dirac_parser"
1193 ipod_muxer_select="mov_muxer"
1194 libnut_demuxer_deps="libnut"
1195 libnut_muxer_deps="libnut"
1196 matroska_audio_muxer_select="matroska_muxer"
1197 matroska_demuxer_suggest="zlib bzlib"
1198 mov_demuxer_suggest="zlib"
1199 mp3_demuxer_deps="mpegaudio_parser"
1200 mp4_muxer_select="mov_muxer"
1201 mpegtsraw_demuxer_select="mpegts_demuxer"
1202 mxf_d10_muxer_select="mxf_muxer"
1203 psp_muxer_select="mov_muxer"
1204 redir_demuxer_deps="network"
1205 rtp_muxer_deps="network rtp_protocol"
1206 rtsp_demuxer_deps="sdp_demuxer"
1207 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1208 tg2_muxer_select="mov_muxer"
1209 tgp_muxer_select="mov_muxer"
1210 w64_demuxer_deps="wav_demuxer"
1211
1212 # indevs / outdevs
1213 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1214 alsa_indev_extralibs="-lasound"
1215 alsa_outdev_deps="alsa_asoundlib_h"
1216 alsa_outdev_extralibs="-lasound"
1217 audio_beos_indev_deps="audio_beos"
1218 audio_beos_indev_extralibs="-lmedia -lbe"
1219 audio_beos_outdev_deps="audio_beos"
1220 audio_beos_outdev_extralibs="-lmedia -lbe"
1221 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1222 dv1394_indev_deps="dv1394 dv_demuxer"
1223 jack_indev_deps="jack_jack_h"
1224 jack_indev_extralibs="-ljack"
1225 libdc1394_indev_deps="libdc1394"
1226 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1227 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1228 v4l_indev_deps="linux_videodev_h"
1229 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1230 vfwcap_indev_deps="capCreateCaptureWindow"
1231 vfwcap_indev_extralibs="-lvfw32"
1232 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1233 x11_grab_device_indev_extralibs="-lX11 -lXext"
1234
1235 # protocols
1236 gopher_protocol_deps="network"
1237 http_protocol_deps="network"
1238 rtmp_protocol_deps="tcp_protocol"
1239 rtp_protocol_deps="udp_protocol"
1240 tcp_protocol_deps="network"
1241 udp_protocol_deps="network"
1242
1243 # filters
1244 movie_filter_deps="avfilter_lavf"
1245
1246 # programs
1247 ffplay_deps="sdl"
1248 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1249 ffserver_extralibs='$ldl'
1250
1251
1252 # default parameters
1253
1254 logfile="config.err"
1255
1256 # installation paths
1257 prefix_default="/usr/local"
1258 bindir_default='${prefix}/bin'
1259 datadir_default='${prefix}/share/ffmpeg'
1260 incdir_default='${prefix}/include'
1261 libdir_default='${prefix}/lib'
1262 mandir_default='${prefix}/share/man'
1263 shlibdir_default="$libdir_default"
1264
1265 # toolchain
1266 ar="ar"
1267 cc_default="gcc"
1268 cc_version=\"unknown\"
1269 host_cc_default="gcc"
1270 ln_s="ln -sf"
1271 nm_default="nm"
1272 objformat="elf"
1273 ranlib="ranlib"
1274 strip="strip"
1275 yasmexe="yasm"
1276
1277 # machine
1278 arch=$(uname -m)
1279 cpu="generic"
1280
1281 # OS
1282 target_os=$(tolower $(uname -s))
1283 host_os=$target_os
1284
1285 # configurable options
1286 enable debug
1287 enable fastdiv
1288 enable ffmpeg
1289 enable ffplay
1290 enable ffserver
1291 enable ipv6
1292 enable mpegaudio_hp
1293 enable network
1294 enable optimizations
1295 enable protocols
1296 enable static
1297 enable stripping
1298 enable swscale_alpha
1299
1300 # build settings
1301 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1302 FFSERVERLDFLAGS=-Wl,-E
1303 LIBPREF="lib"
1304 LIBSUF=".a"
1305 FULLNAME='$(NAME)$(BUILDSUF)'
1306 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1307 SLIBPREF="lib"
1308 SLIBSUF=".so"
1309 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1310 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1311 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1312 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1313
1314 CC_O='-o $@'
1315
1316 host_cflags='-O3 -g -Wall'
1317 host_libs='-lm'
1318
1319 target_path='.'
1320
1321 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1322 # full relative path for objects in subdirectories for non-recursive Make.
1323 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1324 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1325
1326 # find source path
1327 source_path="$(dirname "$0")"
1328 enable source_path_used
1329 if test -f configure; then
1330     source_path="$(pwd)"
1331     disable source_path_used
1332 else
1333     source_path="$(cd "$source_path"; pwd)"
1334     echo "$source_path" | grep -q '[[:blank:]]' &&
1335         die "Out of tree builds are impossible with whitespace in source path."
1336     test -e "$source_path/config.h" &&
1337         die "Out of tree builds are impossible with config.h in source dir."
1338 fi
1339
1340 for v in "$@"; do
1341     r=${v#*=}
1342     l=${v%"$r"}
1343     r=$(sh_quote "$r")
1344     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1345 done
1346
1347 find_things(){
1348     thing=$1
1349     pattern=$2
1350     file=$source_path/$3
1351     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1352 }
1353
1354 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1355 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1356 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1357 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1358 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1359 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1360 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1361 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1362 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1363 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1364 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1365
1366 enable $ARCH_EXT_LIST \
1367        $DECODER_LIST \
1368        $ENCODER_LIST \
1369        $HWACCEL_LIST \
1370        $PARSER_LIST \
1371        $BSF_LIST \
1372        $DEMUXER_LIST \
1373        $MUXER_LIST \
1374        $FILTER_LIST \
1375        $PROTOCOL_LIST \
1376        $INDEV_LIST \
1377        $OUTDEV_LIST \
1378
1379 die_unknown(){
1380     echo "Unknown option \"$1\"."
1381     echo "See $0 --help for available options."
1382     exit 1
1383 }
1384
1385 show_list() {
1386     suffix=_$1
1387     shift
1388     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1389     exit 0
1390 }
1391
1392 for opt do
1393     optval="${opt#*=}"
1394     case "$opt" in
1395     --extra-ldflags=*) add_ldflags $optval
1396     ;;
1397     --extra-libs=*) add_extralibs $optval
1398     ;;
1399     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1400     ;;
1401     --enable-debug=*) debuglevel="$optval"
1402     ;;
1403     --enable-*=*|--disable-*=*)
1404     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1405     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1406     eval list=\$$(toupper $thing)_LIST
1407     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1408     $action $(filter "$name" $list)
1409     ;;
1410     --enable-?*|--disable-?*)
1411     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1412     if is_in $option $COMPONENT_LIST; then
1413         test $action = disable && action=unset
1414         eval $action \$$(toupper ${option%s})_LIST
1415     elif is_in $option $CMDLINE_SELECT; then
1416         $action $option
1417     else
1418         die_unknown $opt
1419     fi
1420     ;;
1421     --list-*)
1422         NAME="${opt#--list-}"
1423         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1424         NAME=${NAME%s}
1425         eval show_list $NAME \$$(toupper $NAME)_LIST
1426     ;;
1427     --help|-h) show_help
1428     ;;
1429     *)
1430     optname="${opt%%=*}"
1431     optname="${optname#--}"
1432     optname=$(echo "$optname" | sed 's/-/_/g')
1433     if is_in $optname $CMDLINE_SET; then
1434         eval $optname='$optval'
1435     elif is_in $optname $CMDLINE_APPEND; then
1436         append $optname "$optval"
1437     else
1438          die_unknown $opt
1439     fi
1440     ;;
1441     esac
1442 done
1443
1444 disabled logging && logfile=/dev/null
1445
1446 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1447 set >> $logfile
1448
1449 test -n "$cross_prefix" && enable cross_compile
1450
1451 ar="${cross_prefix}${ar}"
1452 cc_default="${cross_prefix}${cc_default}"
1453 nm_default="${cross_prefix}${nm_default}"
1454 ranlib="${cross_prefix}${ranlib}"
1455 strip="${cross_prefix}${strip}"
1456
1457 sysinclude_default="${sysroot}/usr/include"
1458
1459 set_default cc nm sysinclude
1460 enabled cross_compile || host_cc_default=$cc
1461 set_default host_cc
1462
1463 exesuf() {
1464     case $1 in
1465         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1466     esac
1467 }
1468
1469 EXESUF=$(exesuf $target_os)
1470 HOSTEXESUF=$(exesuf $host_os)
1471
1472 # set temporary file name
1473 : ${TMPDIR:=$TEMPDIR}
1474 : ${TMPDIR:=$TMP}
1475 : ${TMPDIR:=/tmp}
1476
1477 if ! check_cmd type mktemp; then
1478     # simple replacement for missing mktemp
1479     # NOT SAFE FOR GENERAL USE
1480     mktemp(){
1481         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1482     }
1483 fi
1484
1485 tmpfile(){
1486     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1487         (set -C; exec > $tmp) 2>/dev/null ||
1488         die "Unable to create temporary file in $TMPDIR."
1489     append TMPFILES $tmp
1490     eval $1=$tmp
1491 }
1492
1493 trap 'rm -f -- $TMPFILES' EXIT
1494 trap exit HUP INT TERM
1495
1496 tmpfile TMPC  .c
1497 tmpfile TMPE  $EXESUF
1498 tmpfile TMPH  .h
1499 tmpfile TMPO  .o
1500 tmpfile TMPS  .S
1501 tmpfile TMPSH .sh
1502
1503 unset -f mktemp
1504
1505 # make sure we can execute files in $TMPDIR
1506 cat > $TMPSH 2>> $logfile <<EOF
1507 #! /bin/sh
1508 EOF
1509 chmod +x $TMPSH >> $logfile 2>&1
1510 if ! $TMPSH >> $logfile 2>&1; then
1511     cat <<EOF
1512 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1513 variable to another directory and make sure that it is not mounted noexec.
1514 EOF
1515     die "Sanity test failed."
1516 fi
1517
1518 filter_cflags=echo
1519 filter_cppflags=echo
1520 filter_asflags=echo
1521
1522 if   $cc -v 2>&1 | grep -qi ^gcc; then
1523     cc_type=gcc
1524     cc_version=__VERSION__
1525     if ! $cc -dumpversion | grep -q '^2\.'; then
1526         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1527         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1528     fi
1529 elif $cc --version 2>/dev/null | grep -q Intel; then
1530     cc_type=icc
1531     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1532     CC_DEPFLAGS='-MMD'
1533     AS_DEPFLAGS='-MMD'
1534 elif $cc -v 2>&1 | grep -q xlc; then
1535     cc_type=xlc
1536     cc_version="AV_STRINGIFY(__IBMC__)"
1537 elif $cc -V 2>/dev/null | grep -q Compaq; then
1538     cc_type=ccc
1539     cc_version="AV_STRINGIFY(__DECC_VER)"
1540     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1541     debuglevel=3
1542     add_ldflags -Wl,-z,now # calls to libots crash without this
1543 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1544     test -d "$sysroot" || die "No valid sysroot specified."
1545     cc_type=armcc
1546     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1547     armcc_conf="$PWD/armcc.conf"
1548     $cc --arm_linux_configure                 \
1549         --arm_linux_config_file="$armcc_conf" \
1550         --configure_sysroot="$sysroot"        \
1551         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1552         die "Error creating armcc configuration file."
1553     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1554     as_default="${cross_prefix}gcc"
1555     CC_DEPFLAGS='-MMD'
1556     AS_DEPFLAGS='-MMD'
1557 elif $cc -version 2>/dev/null | grep -q TMS470; then
1558     cc_type=tms470
1559     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1560     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1561     CC_O='-fr=$(@D)'
1562     as_default="${cross_prefix}gcc"
1563     ld_default="${cross_prefix}gcc"
1564     TMPO=$(basename $TMPC .c).o
1565     append TMPFILES $TMPO
1566     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1567     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1568     AS_DEPFLAGS='-MMD'
1569     filter_cflags=tms470_flags
1570     tms470_flags(){
1571         for flag; do
1572             case $flag in
1573                 -march=*|-mcpu=*)
1574                     case "${flag#*=}" in
1575                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1576                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1577                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1578                         armv6*|arm11*)          echo -mv=6   ;;
1579                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1580                                                 echo -mv=5e  ;;
1581                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1582                     esac
1583                     ;;
1584                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1585                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1586                 -msoft-float)   echo --float_support=vfplib       ;;
1587                 -Os)            echo -O3 -mf=2                    ;;
1588                 -O[0-3])        echo $flag -mf=5                  ;;
1589                 -g)             echo -g -mn                       ;;
1590             esac
1591         done
1592     }
1593 fi
1594
1595 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1596
1597 : ${as_default:=$cc}
1598 : ${dep_cc_default:=$cc}
1599 : ${ld_default:=$cc}
1600 set_default as dep_cc ld
1601
1602 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1603 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1604
1605 add_cflags $extra_cflags
1606 add_asflags $extra_cflags
1607
1608 if test -n "$sysroot"; then
1609     case "$cc_type" in
1610         gcc)
1611             add_cppflags --sysroot="$sysroot"
1612             add_ldflags --sysroot="$sysroot"
1613         ;;
1614         tms470)
1615             add_cppflags -I"$sysinclude"
1616             add_ldflags  --sysroot="$sysroot"
1617         ;;
1618     esac
1619 fi
1620
1621 if test "$cpu" = host; then
1622     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1623
1624     case "$cc_type" in
1625         gcc)
1626             check_native(){
1627                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1628                 awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1629             }
1630             cpu=$(check_native -march || check_native -mcpu)
1631         ;;
1632     esac
1633
1634     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1635 fi
1636
1637 # Add processor-specific flags
1638 case $cpu in
1639     601|ppc601|PowerPC601)
1640         cpuflags="-mcpu=601"
1641     ;;
1642     603*|ppc603*|PowerPC603*)
1643         cpuflags="-mcpu=603"
1644     ;;
1645     604*|ppc604*|PowerPC604*)
1646         cpuflags="-mcpu=604"
1647     ;;
1648     G3|g3|75*|ppc75*|PowerPC75*)
1649         cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1650     ;;
1651     G4|g4|745*|ppc745*|PowerPC745*)
1652         cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1653     ;;
1654     74*|ppc74*|PowerPC74*)
1655         cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1656     ;;
1657     G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1658         cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1659     ;;
1660     Cell|CELL|cell)
1661         cpuflags="-mcpu=cell"
1662         enable ldbrx
1663     ;;
1664     # targets that do NOT support conditional mov (cmov)
1665     i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1666         cpuflags="-march=$cpu"
1667         disable cmov
1668     ;;
1669     # targets that do support conditional mov (cmov)
1670     i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1671         cpuflags="-march=$cpu"
1672         enable cmov
1673         enable fast_cmov
1674     ;;
1675     # targets that do support conditional mov but on which it's slow
1676     pentium4|pentium4m|prescott|nocona)
1677         cpuflags="-march=$cpu"
1678         enable cmov
1679         disable fast_cmov
1680     ;;
1681     sparc64)
1682         cpuflags="-mcpu=v9"
1683     ;;
1684     arm11*|cortex*)
1685         cpuflags="-mcpu=$cpu"
1686         enable fast_unaligned
1687     ;;
1688     armv[67]*)
1689         cpuflags="-march=$cpu"
1690         enable fast_unaligned
1691     ;;
1692     armv*)
1693         cpuflags="-march=$cpu"
1694     ;;
1695     arm*)
1696         cpuflags="-mcpu=$cpu"
1697     ;;
1698     ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1699         enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1700     ;;
1701     bf*)
1702         cpuflags="-mcpu=$cpu"
1703     ;;
1704     mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1705         cpuflags="-march=$cpu"
1706     ;;
1707     ap7[02]0[0-2])
1708         subarch="avr32_ap"
1709         cpuflags="-mpart=$cpu"
1710     ;;
1711     ap)
1712         subarch="avr32_ap"
1713         cpuflags="-march=$cpu"
1714     ;;
1715     uc3[ab]*)
1716         subarch="avr32_uc"
1717         cpuflags="-mcpu=$cpu"
1718     ;;
1719     uc)
1720         subarch="avr32_uc"
1721         cpuflags="-march=$cpu"
1722     ;;
1723     generic)
1724     ;;
1725     *)
1726         echo "WARNING: Unknown CPU \"$cpu\", ignored."
1727     ;;
1728 esac
1729
1730 add_cflags $cpuflags
1731 add_asflags $cpuflags
1732
1733 # compiler sanity check
1734 check_exec <<EOF
1735 int main(void){ return 0; }
1736 EOF
1737 if test "$?" != 0; then
1738     echo "$cc is unable to create an executable file."
1739     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1740         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1741         echo "Only do this if you know what cross compiling means."
1742     fi
1743     die "C compiler test failed."
1744 fi
1745
1746 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1747 check_cflags -std=c99
1748 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1749 #include <stdlib.h>
1750 EOF
1751 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1752 #include <stdlib.h>
1753 EOF
1754
1755 case "$arch" in
1756     alpha)
1757         arch="alpha"
1758         enable fast_64bit
1759         check_cflags -mieee
1760         spic=$shared
1761     ;;
1762     arm|armv[4567]*l)
1763         arch="arm"
1764     ;;
1765     avr32)
1766     ;;
1767     bfin)
1768         arch="bfin"
1769     ;;
1770     ia64)
1771         arch="ia64"
1772         enable fast_64bit
1773         spic=$shared
1774     ;;
1775     m68k)
1776         arch="m68k"
1777     ;;
1778     mips|mipsel|IP*)
1779         arch="mips"
1780         spic=$shared
1781     ;;
1782     mips64)
1783         arch="mips"
1784         subarch="mips64"
1785         enable fast_64bit
1786         spic=$shared
1787     ;;
1788     parisc|hppa)
1789         arch="parisc"
1790         spic=$shared
1791     ;;
1792     parisc64|hppa64)
1793         arch="parisc"
1794         enable fast_64bit
1795         spic=$shared
1796     ;;
1797     "Power Macintosh"|ppc|powerpc)
1798         arch="ppc"
1799         enable fast_unaligned
1800     ;;
1801     ppc64)
1802         arch="ppc"
1803         subarch="ppc64"
1804         enable fast_64bit
1805         enable fast_unaligned
1806     ;;
1807     s390|s390x)
1808         arch="s390"
1809     ;;
1810     sh4|sh)
1811         arch="sh4"
1812     ;;
1813     sparc)
1814         arch="sparc"
1815         spic=$shared
1816     ;;
1817     sun4u|sparc64)
1818         arch="sparc"
1819         subarch="sparc64"
1820         enable fast_64bit
1821         spic=$shared
1822     ;;
1823     i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1824         arch="x86"
1825         subarch="x86_32"
1826         enable fast_unaligned
1827         check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1828         int test[sizeof(char*) - 7];
1829 EOF
1830         if test "$subarch" = "x86_64"; then
1831             enable cmov
1832             enable fast_cmov
1833         fi
1834     ;;
1835     *)
1836         arch="unknown"
1837     ;;
1838 esac
1839
1840 enable $arch $subarch
1841 enabled spic && enable pic
1842
1843 # OS specific
1844 case $target_os in
1845     beos|haiku|zeta)
1846         prefix_default="$HOME/config"
1847         # helps building libavcodec
1848         add_cppflags -DPIC
1849         add_cflags -fomit-frame-pointer
1850         # 3 gcc releases known for BeOS, each with ugly bugs
1851         gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1852         case "$gcc_version" in
1853           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1854             disable mmx
1855             ;;
1856           *20010315*) echo "BeBits gcc"
1857             add_cflags -fno-expensive-optimizations
1858             ;;
1859         esac
1860         SHFLAGS=-nostart
1861         # enable BeOS things
1862         enable audio_beos
1863         # no need for libm, but the inet stuff
1864         # Check for BONE
1865         # XXX: actually should check for NOT net_server
1866         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1867             network_extralibs="-lbind -lsocket"
1868         else
1869             enable beos_netserver
1870             network_extralibs="-lnet"
1871         fi ;;
1872     sunos)
1873         FFSERVERLDFLAGS=""
1874         SHFLAGS='-shared -Wl,-h,$$(@F)'
1875         network_extralibs="-lsocket -lnsl"
1876         add_cppflags -D__EXTENSIONS__
1877         ;;
1878     netbsd)
1879         oss_indev_extralibs="-lossaudio"
1880         oss_outdev_extralibs="-lossaudio"
1881         ;;
1882     openbsd)
1883         enable malloc_aligned
1884         enable pic
1885         SHFLAGS='-shared'
1886         oss_indev_extralibs="-lossaudio"
1887         oss_outdev_extralibs="-lossaudio"
1888         ;;
1889     freebsd|dragonfly)
1890         enable malloc_aligned
1891         ;;
1892     bsd/os)
1893         osextralibs="-lpoll -lgnugetopt"
1894         strip="strip -d"
1895         ;;
1896     darwin)
1897         enable malloc_aligned
1898         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1899         strip="strip -x"
1900         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1901         SLIBSUF=".dylib"
1902         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1903         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1904         FFSERVERLDFLAGS=-Wl,-bind_at_load
1905         objformat="macho"
1906         enabled x86_64 && objformat="macho64"
1907         enabled_any pic shared ||
1908             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
1909         ;;
1910     mingw32*)
1911         if test $target_os = "mingw32ce"; then
1912             disable network
1913         else
1914             target_os=mingw32
1915         fi
1916         LIBTARGET=i386
1917         if enabled x86_64; then
1918             enable malloc_aligned
1919             LIBTARGET=x64
1920         elif enabled arm; then
1921             LIBTARGET=arm
1922         fi
1923         shlibdir_default="$bindir_default"
1924         disable ffserver
1925         SLIBPREF=""
1926         SLIBSUF=".dll"
1927         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1928         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1929         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1930         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1931             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
1932             install -d "$(LIBDIR)"; \
1933             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
1934         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1935         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'
1936         objformat="win32"
1937         enable dos_paths
1938         check_cflags -fno-common
1939         if ! enabled x86_64; then
1940             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1941                 die "ERROR: MinGW runtime version must be >= 3.15."
1942             enabled_any avisynth vfwcap_indev &&
1943                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1944                   die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
1945             fi
1946         ;;
1947     cygwin*)
1948         target_os=cygwin
1949         shlibdir_default="$bindir_default"
1950         SLIBPREF="cyg"
1951         SLIBSUF=".dll"
1952         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1953         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1954         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1955         objformat="win32"
1956         enable dos_paths
1957         check_cflags -fno-common
1958         ;;
1959     *-dos|freedos|opendos)
1960         disable ffplay ffserver
1961         disable $INDEV_LIST $OUTDEV_LIST
1962         network_extralibs="-lsocket"
1963         objformat="coff"
1964         enable dos_paths
1965         ;;
1966     linux)
1967         enable dv1394
1968         ;;
1969     irix*)
1970         target_os=irix
1971         ranlib="echo ignoring ranlib"
1972         ;;
1973     os/2*)
1974         strip="lxlite"
1975         ln_s="cp -f"
1976         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1977         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1978         FFSERVERLDFLAGS=""
1979         LIBSUF="_s.a"
1980         SLIBPREF=""
1981         SLIBSUF=".dll"
1982         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1983         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1984         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1985           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1986           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1987           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1988           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1989           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1990         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1991           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1992         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1993         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1994         enable dos_paths
1995         ;;
1996     gnu/kfreebsd)
1997         ;;
1998     gnu)
1999         ;;
2000
2001     *)
2002         die "Unknown OS '$target_os'."
2003         ;;
2004 esac
2005
2006 set_default $PATHS_LIST
2007
2008 add_extralibs $osextralibs
2009
2010 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2011 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2012
2013 # we need to build at least one lib type
2014 if ! enabled_any static shared; then
2015     cat <<EOF
2016 At least one library type must be built.
2017 Specify --enable-static to build the static libraries or --enable-shared to
2018 build the shared libraries as well. To only build the shared libraries specify
2019 --disable-static in addition to --enable-shared.
2020 EOF
2021     exit 1;
2022 fi
2023
2024 disabled static && LIBNAME=""
2025
2026 if enabled_any libfaad libfaadbin ; then
2027     if check_header faad.h; then
2028         check_cc <<EOF
2029 #include <faad.h>
2030 #ifndef FAAD2_VERSION
2031 ok faad1
2032 #endif
2033 int main(void) { return 0; }
2034 EOF
2035         test $? = 0 && enable libfaad2
2036     else
2037         die "FAAD test failed."
2038     fi
2039 fi
2040
2041
2042 die_license_disabled() {
2043     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2044 }
2045
2046 die_license_disabled gpl libfaad2
2047 die_license_disabled gpl libx264
2048 die_license_disabled gpl libxvid
2049 die_license_disabled gpl postproc
2050 die_license_disabled gpl x11grab
2051
2052 die_license_disabled nonfree libfaac
2053
2054 die_license_disabled version3 libopencore_amrnb
2055 die_license_disabled version3 libopencore_amrwb
2056
2057 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2058
2059 check_deps $ARCH_EXT_LIST
2060
2061 disabled optimizations || check_cflags -fomit-frame-pointer
2062
2063 enable_pic() {
2064     enable pic
2065     add_cppflags -DPIC
2066     add_cflags   -fPIC
2067     add_asflags  -fPIC
2068 }
2069
2070 enabled pic && enable_pic
2071
2072 check_cc <<EOF || die "Symbol mangling check failed."
2073 int ff_extern;
2074 EOF
2075 sym=$($nm -P -g $TMPO | grep ff_extern)
2076 extern_prefix=${sym%%ff_extern*}
2077
2078 check_cc <<EOF && enable inline_asm
2079 void foo(void) { __asm__ volatile ("" ::); }
2080 EOF
2081
2082 _restrict=
2083 for restrict_keyword in restrict __restrict__ __restrict; do
2084     check_cc <<EOF && _restrict=$restrict_keyword && break
2085 void foo(char * $restrict_keyword p);
2086 EOF
2087 done
2088
2089 check_cc <<EOF && enable attribute_packed
2090 struct { int x; } __attribute__((packed)) x;
2091 EOF
2092
2093 check_cc <<EOF || die "endian test failed"
2094 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2095 EOF
2096 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2097
2098 if enabled arm; then
2099
2100     check_cflags -marm
2101
2102     check_ld <<EOF && enable vfp_args
2103 __asm__ (".eabi_attribute 28, 1");
2104 int main(void) { return 0; }
2105 EOF
2106
2107     # We have to check if pld is a nop and disable it.
2108     check_asm pld '"pld [r0]"'
2109
2110     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2111     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2112     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2113     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2114     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2115     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2116
2117     enabled_all armv6t2 shared !pic && enable_pic
2118
2119 elif enabled mips; then
2120
2121     check_asm loongson '"dmult.g $1, $2, $3"'
2122     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2123
2124 elif enabled ppc; then
2125
2126     check_asm dcbzl     '"dcbzl 0, 1"'
2127     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2128     check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
2129
2130     # AltiVec flags: The FSF version of GCC differs from the Apple version
2131     if enabled altivec; then
2132         check_cflags -maltivec -mabi=altivec &&
2133         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2134         check_cflags -faltivec
2135
2136         # check if our compiler supports Motorola AltiVec C API
2137         check_cc <<EOF || disable altivec
2138 $inc_altivec_h
2139 int main(void) {
2140     vector signed int v1, v2, v3;
2141     v1 = vec_add(v2,v3);
2142     return 0;
2143 }
2144 EOF
2145
2146         # check if our compiler supports braces for vector declarations
2147         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2148 $inc_altivec_h
2149 int main (void) { (vector int) {1}; return 0; }
2150 EOF
2151     fi
2152
2153 elif enabled sparc; then
2154
2155     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2156         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2157
2158 elif enabled x86; then
2159
2160     # check whether EBP is available on x86
2161     # As 'i' is stored on the stack, this program will crash
2162     # if the base pointer is used to access it because the
2163     # base pointer is cleared in the inline assembly code.
2164     check_exec_crash <<EOF && enable ebp_available
2165     volatile int i=0;
2166     __asm__ volatile (
2167         "xorl %%ebp, %%ebp"
2168     ::: "%ebp");
2169     return i;
2170 EOF
2171
2172     # check whether EBX is available on x86
2173     check_asm ebx_available '""::"b"(0)' &&
2174         check_asm ebx_available '"":::"%ebx"'
2175
2176     # check whether more than 10 operands are supported
2177     check_cc <<EOF && enable ten_operands
2178 int main(void) {
2179     int x=0;
2180     __asm__ volatile(
2181         ""
2182         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2183     );
2184     return 0;
2185 }
2186 EOF
2187
2188     # check whether binutils is new enough to compile SSSE3/MMX2
2189     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2190     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2191
2192     check_asm bswap '"bswap %%eax" ::: "%eax"'
2193
2194     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2195     enabled     x86_64        && append YASMFLAGS "-m amd64"
2196     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
2197     case "$objformat" in
2198         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2199         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
2200         *)                    append YASMFLAGS "-DPREFIX"  ;;
2201     esac
2202     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2203
2204 fi
2205
2206 if check_func dlopen; then
2207     ldl=
2208 elif check_func dlopen -ldl; then
2209     ldl=-ldl
2210 fi
2211
2212 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2213 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2214
2215 check_func  fork
2216 check_func  gethrtime
2217 check_func  getrusage
2218 check_func  inet_aton $network_extralibs
2219 check_func  isatty
2220 check_func  memalign
2221 check_func  mkstemp
2222 check_func  posix_memalign
2223 check_func_headers io.h setmode
2224 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2225 check_func_headers windows.h GetProcessTimes
2226 check_func_headers windows.h VirtualAlloc
2227
2228 check_header conio.h
2229 check_header dlfcn.h
2230 check_header malloc.h
2231 check_header poll.h
2232 check_header sys/mman.h
2233 check_header sys/resource.h
2234 check_header sys/select.h
2235 check_header termios.h
2236 check_header vdpau/vdpau.h
2237 check_header vdpau/vdpau_x11.h
2238 check_header X11/extensions/XvMClib.h
2239
2240 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2241      enabled_any $need_memalign ; then
2242     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2243 fi
2244
2245 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2246 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2247
2248 # check for some common methods of building with pthread support
2249 # do this before the optional library checks as some of them require pthreads
2250 if enabled pthreads; then
2251     if check_func pthread_create; then
2252         :
2253     elif check_func pthread_create -pthread; then
2254         add_cflags -pthread
2255         add_extralibs -pthread
2256     elif check_func pthread_create -pthreads; then
2257         add_cflags -pthreads
2258         add_extralibs -pthreads
2259     elif check_func pthread_create -lpthreadGC2; then
2260         add_extralibs -lpthreadGC2
2261     elif ! check_lib pthread.h pthread_create -lpthread; then
2262         die "ERROR: can't find pthreads library"
2263     fi
2264 fi
2265
2266 for thread in $THREADS_LIST; do
2267     if enabled $thread; then
2268         test -n "$thread_type" &&
2269             die "ERROR: Only one thread type must be selected." ||
2270             thread_type="$thread"
2271     fi
2272 done
2273
2274 check_lib math.h sin -lm
2275 check_lib va/va.h vaInitialize -lva
2276
2277 check_func llrint
2278 check_func log2
2279 check_func lrint
2280 check_func lrintf
2281 check_func round
2282 check_func roundf
2283 check_func truncf
2284
2285 # these are off by default, so fail if requested and not available
2286 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2287 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2288                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2289                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2290 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2291 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2292 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2293 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2294 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2295 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2296 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2297 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2298 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2299                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2300 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2301 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2302 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2303 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2304                       { check_cpp_condition x264.h "X264_BUILD >= 78" ||
2305                         die "ERROR: libx264 version must be >= 0.78."; }
2306 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2307 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2308
2309 # libdc1394 check
2310 if enabled libdc1394; then
2311     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2312         enable libdc1394_2; } ||
2313     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2314         enable libdc1394_1; } ||
2315     die "ERROR: No version of libdc1394 found "
2316 fi
2317
2318 disable sdl_too_old
2319 disable sdl
2320 SDL_CONFIG="${cross_prefix}sdl-config"
2321 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2322     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2323     temp_cflags $sdl_cflags
2324     temp_extralibs $("${SDL_CONFIG}" --libs)
2325     if check_lib2 SDL.h SDL_Init; then
2326         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2327         if test "$_sdlversion" -lt 121 ; then
2328             enable sdl_too_old
2329         else
2330             enable sdl
2331             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2332 #include <SDL.h>
2333 int main(int argc, char **argv){
2334     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2335     int w = vi->current_w;
2336     return 0;
2337 }
2338 EOF
2339         fi
2340     fi
2341     restore_flags
2342 fi
2343
2344 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2345
2346 if enabled network; then
2347     check_type "sys/types.h sys/socket.h" socklen_t
2348     # Prefer arpa/inet.h over winsock2
2349     if check_header arpa/inet.h ; then
2350         check_func closesocket
2351     elif check_header winsock2.h ; then
2352         check_func_headers winsock2.h closesocket -lws2 && \
2353             network_extralibs="-lws2" || \
2354         { check_func_headers winsock2.h closesocket -lws2_32 && \
2355             network_extralibs="-lws2_32"; }
2356         check_type ws2tcpip.h socklen_t
2357     else
2358         disable network
2359     fi
2360 fi
2361
2362 enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2363 #include <sys/types.h>
2364 #include <sys/socket.h>
2365 #include <netinet/in.h>
2366 #include <netdb.h>
2367 int main(void) {
2368     struct sockaddr_storage saddr;
2369     struct ipv6_mreq mreq6;
2370     getaddrinfo(0,0,0,0);
2371     getnameinfo(0,0,0,0,0,0,0);
2372     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2373 }
2374 EOF
2375
2376 check_header linux/videodev.h
2377 check_header linux/videodev2.h
2378 check_header sys/videoio.h
2379
2380 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2381
2382 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2383 { check_header dev/bktr/ioctl_meteor.h &&
2384   check_header dev/bktr/ioctl_bt848.h; } ||
2385 { check_header machine/ioctl_meteor.h &&
2386   check_header machine/ioctl_bt848.h; } ||
2387 { check_header dev/video/meteor/ioctl_meteor.h &&
2388   check_header dev/video/bktr/ioctl_bt848.h; } ||
2389 check_header dev/ic/bt8xx.h
2390
2391 check_header sys/soundcard.h
2392 check_header soundcard.h
2393
2394 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2395
2396 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2397
2398 enabled x11grab                         &&
2399 check_header X11/Xlib.h                 &&
2400 check_header X11/extensions/XShm.h      &&
2401 check_func XOpenDisplay -lX11           &&
2402 check_func XShmCreateImage -lX11 -lXext
2403
2404 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2405
2406 # add some useful compiler flags if supported
2407 check_cflags -Wdeclaration-after-statement
2408 check_cflags -Wall
2409 check_cflags -Wno-switch
2410 check_cflags -Wdisabled-optimization
2411 check_cflags -Wpointer-arith
2412 check_cflags -Wredundant-decls
2413 check_cflags -Wno-pointer-sign
2414 check_cflags -Wcast-qual
2415 check_cflags -Wwrite-strings
2416 check_cflags -Wtype-limits
2417 check_cflags -Wundef
2418 enabled extra_warnings && check_cflags -Winline
2419
2420 # add some linker flags
2421 check_ldflags -Wl,--warn-common
2422 check_ldflags -Wl,--as-needed
2423 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'
2424 check_ldflags -Wl,-Bsymbolic
2425
2426 if enabled small; then
2427     check_cflags -Os            # not all compilers support -Os
2428     optimizations="small"
2429 elif enabled optimizations; then
2430     if enabled xlc; then
2431         add_cflags  -O5
2432         add_ldflags -O5
2433     elif enabled ccc; then
2434         add_cflags -fast
2435     else
2436         add_cflags -O3
2437     fi
2438 fi
2439 check_cflags -fno-math-errno
2440 check_cflags -fno-signed-zeros
2441
2442 if enabled icc; then
2443     # Just warnings, no remarks
2444     check_cflags -w1
2445     # -wd: Disable following warnings
2446     # 144, 167, 556: -Wno-pointer-sign
2447     # 10006: ignoring unknown option -fno-signed-zeros
2448     # 10156: ignoring option '-W'; no argument required
2449     check_cflags -wd144,167,556,10006,10156
2450     # 11030: Warning unknown option --as-needed
2451     # 10156: ignoring option '-export'; no argument required
2452     check_ldflags -wd10156,11030
2453     # Allow to compile with optimizations
2454     check_ldflags -march=$cpu
2455     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2456     enable ebp_available
2457 elif enabled ccc; then
2458     # disable some annoying warnings
2459     add_cflags -msg_disable cvtu32to64
2460     add_cflags -msg_disable embedcomment
2461     add_cflags -msg_disable needconstext
2462     add_cflags -msg_disable nomainieee
2463     add_cflags -msg_disable ptrmismatch1
2464     add_cflags -msg_disable unreachcode
2465 elif enabled gcc; then
2466     check_cflags -fno-tree-vectorize
2467 fi
2468
2469 if enabled gprof; then
2470     add_cflags  -p
2471     add_ldflags -p
2472 fi
2473
2474 # Find out if the .align argument is a power of two or not.
2475 check_asm asmalign_pot '".align 3"'
2476
2477 enabled_any $DECODER_LIST      && enable decoders
2478 enabled_any $ENCODER_LIST      && enable encoders
2479 enabled_any $HWACCEL_LIST      && enable hwaccels
2480 enabled_any $BSF_LIST          && enable bsfs
2481 enabled_any $DEMUXER_LIST      && enable demuxers
2482 enabled_any $MUXER_LIST        && enable muxers
2483 enabled_any $FILTER_LIST       && enable filters
2484 enabled_any $INDEV_LIST        && enable indevs
2485 enabled_any $OUTDEV_LIST       && enable outdevs
2486 enabled_any $PROTOCOL_LIST     && enable protocols
2487
2488 enabled_any $THREADS_LIST      && enable threads
2489
2490 check_deps $CONFIG_LIST       \
2491            $CONFIG_EXTRA      \
2492            $HAVE_LIST         \
2493            $DECODER_LIST      \
2494            $ENCODER_LIST      \
2495            $HWACCEL_LIST      \
2496            $PARSER_LIST       \
2497            $BSF_LIST          \
2498            $DEMUXER_LIST      \
2499            $MUXER_LIST        \
2500            $FILTER_LIST       \
2501            $INDEV_LIST        \
2502            $OUTDEV_LIST       \
2503            $PROTOCOL_LIST     \
2504
2505 echo "install prefix            $prefix"
2506 echo "source path               $source_path"
2507 echo "C compiler                $cc"
2508 echo ".align is power-of-two    $asmalign_pot"
2509 echo "ARCH                      $arch ($cpu)"
2510 if test "$build_suffix" != ""; then
2511     echo "build suffix              $build_suffix"
2512 fi
2513 if test "$extra_version" != ""; then
2514     echo "version string suffix     $extra_version"
2515 fi
2516 echo "big-endian                ${bigendian-no}"
2517 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2518 if enabled x86; then
2519     echo "yasm                      ${yasm-no}"
2520     echo "MMX enabled               ${mmx-no}"
2521     echo "MMX2 enabled              ${mmx2-no}"
2522     echo "3DNow! enabled            ${amd3dnow-no}"
2523     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2524     echo "SSE enabled               ${sse-no}"
2525     echo "SSSE3 enabled             ${ssse3-no}"
2526     echo "CMOV enabled              ${cmov-no}"
2527     echo "CMOV is fast              ${fast_cmov-no}"
2528     echo "EBX available             ${ebx_available-no}"
2529     echo "EBP available             ${ebp_available-no}"
2530     echo "10 operands supported     ${ten_operands-no}"
2531 fi
2532 if enabled arm; then
2533     echo "ARMv5TE enabled           ${armv5te-no}"
2534     echo "ARMv6 enabled             ${armv6-no}"
2535     echo "ARMv6T2 enabled           ${armv6t2-no}"
2536     echo "ARM VFP enabled           ${armvfp-no}"
2537     echo "IWMMXT enabled            ${iwmmxt-no}"
2538     echo "NEON enabled              ${neon-no}"
2539 fi
2540 if enabled mips; then
2541     echo "MMI enabled               ${mmi-no}"
2542 fi
2543 if enabled ppc; then
2544     echo "AltiVec enabled           ${altivec-no}"
2545     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2546     echo "dcbzl available           ${dcbzl-no}"
2547     echo "performance report        ${powerpc_perf-no}"
2548 fi
2549 if enabled sparc; then
2550     echo "VIS enabled               ${vis-no}"
2551 fi
2552 echo "gprof enabled             ${gprof-no}"
2553 echo "debug symbols             ${debug-no}"
2554 echo "strip symbols             ${stripping-no}"
2555 echo "optimizations             ${optimizations-no}"
2556 echo "static                    ${static-no}"
2557 echo "shared                    ${shared-no}"
2558 echo "postprocessing support    ${postproc-no}"
2559 echo "new filter support        ${avfilter-no}"
2560 echo "filters using lavformat   ${avfilter_lavf-no}"
2561 echo "network support           ${network-no}"
2562 if enabled network; then
2563     echo "IPv6 support              ${ipv6-no}"
2564 fi
2565 echo "threading support         ${thread_type-no}"
2566 echo "SDL support               ${sdl-no}"
2567 if enabled sdl_too_old; then
2568     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2569 fi
2570 echo "Sun medialib support      ${mlib-no}"
2571 echo "AVISynth enabled          ${avisynth-no}"
2572 echo "libdc1394 support         ${libdc1394-no}"
2573 echo "libdirac enabled          ${libdirac-no}"
2574 echo "libfaac enabled           ${libfaac-no}"
2575 echo "libfaad enabled           ${libfaad-no}"
2576 echo "libfaad dlopened          ${libfaadbin-no}"
2577 echo "libgsm enabled            ${libgsm-no}"
2578 echo "libmp3lame enabled        ${libmp3lame-no}"
2579 echo "libnut enabled            ${libnut-no}"
2580 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2581 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2582 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2583 echo "libschroedinger enabled   ${libschroedinger-no}"
2584 echo "libspeex enabled          ${libspeex-no}"
2585 echo "libtheora enabled         ${libtheora-no}"
2586 echo "libvorbis enabled         ${libvorbis-no}"
2587 echo "libx264 enabled           ${libx264-no}"
2588 echo "libxvid enabled           ${libxvid-no}"
2589 echo "zlib enabled              ${zlib-no}"
2590 echo "bzlib enabled             ${bzlib-no}"
2591 echo
2592
2593 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2594     echo "Enabled ${type}s:"
2595     eval list=\$$(toupper $type)_LIST
2596     for part in $list; do
2597         enabled $part && echo ${part%_*}
2598     done | sort | pr -3 -t
2599     echo
2600 done
2601
2602 license="LGPL version 2.1 or later"
2603 if enabled nonfree; then
2604     license="nonfree and unredistributable"
2605 elif enabled gplv3; then
2606     license="GPL version 3 or later"
2607 elif enabled lgplv3; then
2608     license="LGPL version 3 or later"
2609 elif enabled gpl; then
2610     license="GPL version 2 or later"
2611 fi
2612
2613 echo "License: $license"
2614
2615 echo "Creating config.mak and config.h..."
2616
2617 echo "# Automatically generated by configure - do not modify!" > config.mak
2618 echo "ifndef FFMPEG_CONFIG_MAK" >> config.mak
2619 echo "FFMPEG_CONFIG_MAK=1" >> config.mak
2620
2621 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2622 echo "prefix=$prefix" >> config.mak
2623 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2624 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2625 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2626 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2627 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2628 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2629 echo "SRC_PATH=\"$source_path\"" >> config.mak
2630 echo "SRC_PATH_BARE=$source_path" >> config.mak
2631 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2632 echo "CC=$cc" >> config.mak
2633 echo "AS=$as" >> config.mak
2634 echo "LD=$ld" >> config.mak
2635 echo "DEPCC=$dep_cc" >> config.mak
2636 echo "YASM=$yasmexe" >> config.mak
2637 echo "AR=$ar" >> config.mak
2638 echo "RANLIB=$ranlib" >> config.mak
2639 echo "LN_S=$ln_s" >> config.mak
2640 enabled stripping &&
2641     echo "STRIP=$strip" >> config.mak ||
2642     echo "STRIP=echo ignoring strip" >> config.mak
2643
2644 echo "CPPFLAGS=$CPPFLAGS" >> config.mak
2645 echo "CFLAGS=$CFLAGS" >> config.mak
2646 echo "ASFLAGS=$ASFLAGS" >> config.mak
2647 echo "CC_O=$CC_O" >> config.mak
2648 echo "LDFLAGS=$LDFLAGS" >> config.mak
2649 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2650 echo "SHFLAGS=$SHFLAGS" >> config.mak
2651 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2652 echo "BUILDSUF=$build_suffix" >> config.mak
2653 echo "FULLNAME=$FULLNAME" >> config.mak
2654 echo "LIBPREF=$LIBPREF" >> config.mak
2655 echo "LIBSUF=$LIBSUF" >> config.mak
2656 echo "LIBNAME=$LIBNAME" >> config.mak
2657 echo "SLIBPREF=$SLIBPREF" >> config.mak
2658 echo "SLIBSUF=$SLIBSUF" >> config.mak
2659 echo "EXESUF=$EXESUF" >> config.mak
2660 echo "EXTRA_VERSION=$extra_version" >> config.mak
2661 echo "DEPFLAGS=$DEPFLAGS" >> config.mak
2662 echo "CCDEP=$CCDEP" >> config.mak
2663 echo "ASDEP=$ASDEP" >> config.mak
2664 echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
2665 echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
2666 echo "HOSTCC=$host_cc" >> config.mak
2667 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2668 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2669 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2670 echo "HOSTLIBS=$host_libs" >> config.mak
2671 echo "TARGET_EXEC=$target_exec" >> config.mak
2672 echo "TARGET_PATH=$target_path" >> config.mak
2673
2674 if enabled sdl; then
2675     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2676     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2677 fi
2678 if enabled texi2html; then
2679     echo "BUILD_DOC=yes" >> config.mak
2680 fi
2681
2682 get_version(){
2683     name=$1
2684     file=$source_path/$2
2685     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2686     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2687     lcname=$(tolower $name)
2688     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2689     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2690 }
2691
2692 get_version LIBSWSCALE  libswscale/swscale.h
2693 get_version LIBPOSTPROC libpostproc/postprocess.h
2694 get_version LIBAVCODEC  libavcodec/avcodec.h
2695 get_version LIBAVDEVICE libavdevice/avdevice.h
2696 get_version LIBAVFORMAT libavformat/avformat.h
2697 get_version LIBAVUTIL   libavutil/avutil.h
2698 get_version LIBAVFILTER libavfilter/avfilter.h
2699
2700 if enabled shared; then
2701     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2702     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2703     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2704     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2705     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2706     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2707     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2708     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2709 fi
2710 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2711 echo "EXTRALIBS=$extralibs" >> config.mak
2712
2713 echo "ARCH=$arch" >> config.mak
2714
2715
2716 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2717 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2718 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2719 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2720 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2721
2722 echo "#define CC_TYPE \"$cc_type\"" >> $TMPH
2723 echo "#define CC_VERSION $cc_version" >> $TMPH
2724 echo "#define restrict $_restrict" >> $TMPH
2725
2726 if enabled small || disabled optimizations; then
2727     echo "#define av_always_inline"  >> $TMPH
2728 fi
2729
2730
2731 # Apparently it's not possible to portably echo a backslash.
2732 enabled asmalign_pot &&
2733     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2734     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2735
2736 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2737 echo "#define EXTERN_ASM ${extern_prefix}" >> $TMPH
2738
2739 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2740 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2741 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2742                                       $CONFIG_EXTRA      \
2743                                       $DECODER_LIST      \
2744                                       $ENCODER_LIST      \
2745                                       $HWACCEL_LIST      \
2746                                       $PARSER_LIST       \
2747                                       $BSF_LIST          \
2748                                       $DEMUXER_LIST      \
2749                                       $MUXER_LIST        \
2750                                       $FILTER_LIST       \
2751                                       $PROTOCOL_LIST     \
2752                                       $INDEV_LIST        \
2753                                       $OUTDEV_LIST       \
2754
2755 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2756 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2757
2758 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2759 cmp -s $TMPH config.h &&
2760     echo "config.h is unchanged" ||
2761     mv -f $TMPH config.h
2762
2763 # build tree in object directory if source path is different from current one
2764 if enabled source_path_used; then
2765     DIRS="
2766         doc
2767         libavcodec
2768         libavcodec/$arch
2769         libavdevice
2770         libavfilter
2771         libavformat
2772         libavutil
2773         libavutil/$arch
2774         libpostproc
2775         libswscale
2776         libswscale/$arch
2777         tests
2778         tools
2779     "
2780     FILES="
2781         Makefile
2782         common.mak
2783         subdir.mak
2784         doc/texi2pod.pl
2785         libavcodec/Makefile
2786         libavdevice/Makefile
2787         libavfilter/Makefile
2788         libavformat/Makefile
2789         libavutil/Makefile
2790         libpostproc/Makefile
2791         libswscale/Makefile
2792     "
2793     for dir in $DIRS ; do
2794         mkdir -p $dir
2795     done
2796     for f in $FILES ; do
2797         $ln_s "$source_path/$f" $f
2798     done
2799 fi
2800
2801
2802 # build pkg-config files
2803
2804 pkgconfig_generate(){
2805 name=$1
2806 shortname=${name#lib}${build_suffix}
2807 comment=$2
2808 version=$3
2809 libs=$4
2810 requires=$5
2811 cat <<EOF > $name/$name.pc
2812 prefix=$prefix
2813 exec_prefix=\${prefix}
2814 libdir=$libdir
2815 includedir=$incdir
2816
2817 Name: $name
2818 Description: $comment
2819 Version: $version
2820 Requires: $(enabled shared || echo $requires)
2821 Requires.private: $(enabled shared && echo $requires)
2822 Conflicts:
2823 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2824 Libs.private: $(enabled shared && echo $libs)
2825 Cflags: -I\${includedir}
2826 EOF
2827 cat <<EOF > $name/$name-uninstalled.pc
2828 prefix=
2829 exec_prefix=
2830 libdir=\${pcfiledir}
2831 includedir=${source_path}
2832
2833 Name: $name
2834 Description: $comment
2835 Version: $version
2836 Requires: $requires
2837 Conflicts:
2838 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2839 Cflags: -I\${includedir}
2840 EOF
2841 }
2842
2843 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2844 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2845 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2846 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2847 enabled avfilter &&
2848     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2849 enabled postproc &&
2850     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2851 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"