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