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