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