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