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