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