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