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