Merge commit '696a74e81560889ef2fde76b045c5158a325a7a5' into release/1.1
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --list-decoders          show all available decoders
67   --list-encoders          show all available encoders
68   --list-hwaccels          show all available hardware accelerators
69   --list-demuxers          show all available demuxers
70   --list-muxers            show all available muxers
71   --list-parsers           show all available parsers
72   --list-protocols         show all available protocols
73   --list-bsfs              show all available bitstream filters
74   --list-indevs            show all available input devices
75   --list-outdevs           show all available output devices
76   --list-filters           show all available filters
77
78 Standard options:
79   --logfile=FILE           log tests and output to FILE [config.log]
80   --disable-logging        do not log configure debug information
81   --fatal-warnings         fail if any configure warning is generated
82   --prefix=PREFIX          install in PREFIX [$prefix]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85   --libdir=DIR             install libs in DIR [PREFIX/lib]
86   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
87   --incdir=DIR             install includes in DIR [PREFIX/include]
88   --mandir=DIR             install man page in DIR [PREFIX/share/man]
89
90 Licensing options:
91   --enable-gpl             allow use of GPL code, the resulting libs
92                            and binaries will be under GPL [no]
93   --enable-version3        upgrade (L)GPL to version 3 [no]
94   --enable-nonfree         allow use of nonfree code, the resulting libs
95                            and binaries will be unredistributable [no]
96
97 Configuration options:
98   --disable-static         do not build static libraries [no]
99   --enable-shared          build shared libraries [no]
100   --enable-small           optimize for size instead of speed
101   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
102   --enable-gray            enable full grayscale support (slower color)
103   --disable-swscale-alpha  disable alpha channel support in swscale
104   --disable-all            disable building components, libraries and programs
105
106 Program options:
107   --disable-programs       do not build command line programs
108   --disable-ffmpeg         disable ffmpeg build
109   --disable-ffplay         disable ffplay build
110   --disable-ffprobe        disable ffprobe build
111   --disable-ffserver       disable ffserver build
112
113 Documentation options:
114   --disable-doc            do not build documentation
115   --disable-htmlpages      do not build HTML documentation pages
116   --disable-manpages       do not build man documentation pages
117   --disable-podpages       do not build POD documentation pages
118   --disable-txtpages       do not build text documentation pages
119
120 Component options:
121   --disable-avdevice       disable libavdevice build
122   --disable-avcodec        disable libavcodec build
123   --disable-avformat       disable libavformat build
124   --disable-avutil         disable libavutil build
125   --disable-swresample     disable libswresample build
126   --disable-swscale        disable libswscale build
127   --disable-postproc       disable libpostproc build
128   --disable-avfilter       disable libavfilter build
129   --enable-avresample      enable libavresample build [no]
130   --disable-pthreads       disable pthreads [auto]
131   --disable-w32threads     disable Win32 threads [auto]
132   --disable-os2threads     disable OS/2 threads [auto]
133   --enable-x11grab         enable X11 grabbing [no]
134   --disable-network        disable network support [no]
135   --disable-dct            disable DCT code
136   --disable-dwt            disable DWT code
137   --disable-lsp            disable LSP code
138   --disable-lzo            disable LZO decoder code
139   --disable-mdct           disable MDCT code
140   --disable-rdft           disable RDFT code
141   --disable-fft            disable FFT code
142   --enable-dxva2           enable DXVA2 code
143   --enable-vaapi           enable VAAPI code [autodetect]
144   --enable-vda             enable VDA code   [autodetect]
145   --enable-vdpau           enable VDPAU code [autodetect]
146
147 Individual component options:
148   --disable-everything     disable all components listed below
149   --disable-encoder=NAME   disable encoder NAME
150   --enable-encoder=NAME    enable encoder NAME
151   --disable-encoders       disable all encoders
152   --disable-decoder=NAME   disable decoder NAME
153   --enable-decoder=NAME    enable decoder NAME
154   --disable-decoders       disable all decoders
155   --disable-hwaccel=NAME   disable hwaccel NAME
156   --enable-hwaccel=NAME    enable hwaccel NAME
157   --disable-hwaccels       disable all hwaccels
158   --disable-muxer=NAME     disable muxer NAME
159   --enable-muxer=NAME      enable muxer NAME
160   --disable-muxers         disable all muxers
161   --disable-demuxer=NAME   disable demuxer NAME
162   --enable-demuxer=NAME    enable demuxer NAME
163   --disable-demuxers       disable all demuxers
164   --enable-parser=NAME     enable parser NAME
165   --disable-parser=NAME    disable parser NAME
166   --disable-parsers        disable all parsers
167   --enable-bsf=NAME        enable bitstream filter NAME
168   --disable-bsf=NAME       disable bitstream filter NAME
169   --disable-bsfs           disable all bitstream filters
170   --enable-protocol=NAME   enable protocol NAME
171   --disable-protocol=NAME  disable protocol NAME
172   --disable-protocols      disable all protocols
173   --enable-indev=NAME      enable input device NAME
174   --disable-indev=NAME     disable input device NAME
175   --disable-indevs         disable input devices
176   --enable-outdev=NAME     enable output device NAME
177   --disable-outdev=NAME    disable output device NAME
178   --disable-outdevs        disable output devices
179   --disable-devices        disable all devices
180   --enable-filter=NAME     enable filter NAME
181   --disable-filter=NAME    disable filter NAME
182   --disable-filters        disable all filters
183
184 External library support:
185   --enable-avisynth        enable reading of AVISynth script files [no]
186   --enable-bzlib           enable bzlib [autodetect]
187   --enable-fontconfig      enable fontconfig
188   --enable-frei0r          enable frei0r video filtering
189   --enable-gnutls          enable gnutls [no]
190   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
191   --enable-libass          enable libass subtitles rendering [no]
192   --enable-libbluray       enable BluRay reading using libbluray [no]
193   --enable-libcaca         enable textual display using libcaca
194   --enable-libcelt         enable CELT decoding via libcelt [no]
195   --enable-libcdio         enable audio CD grabbing with libcdio
196   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
197                            and libraw1394 [no]
198   --enable-libfaac         enable AAC encoding via libfaac [no]
199   --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
200   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
201   --enable-libfreetype     enable libfreetype [no]
202   --enable-libgsm          enable GSM de/encoding via libgsm [no]
203   --enable-libiec61883     enable iec61883 via libiec61883 [no]
204   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
205   --enable-libmodplug      enable ModPlug via libmodplug [no]
206   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
207   --enable-libnut          enable NUT (de)muxing via libnut,
208                            native (de)muxer exists [no]
209   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
210   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
211   --enable-libopencv       enable video filtering via libopencv [no]
212   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
213   --enable-libopus         enable Opus decoding via libopus [no]
214   --enable-libpulse        enable Pulseaudio input via libpulse [no]
215   --enable-librtmp         enable RTMP[E] support via librtmp [no]
216   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
217   --enable-libsoxr         enable Include libsoxr resampling [no]
218   --enable-libspeex        enable Speex de/encoding via libspeex [no]
219   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
220   --enable-libtheora       enable Theora encoding via libtheora [no]
221   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
222   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
223   --enable-libv4l2         enable libv4l2/v4l-utils [no]
224   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
225   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
226   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
227                            native implementation exists [no]
228   --enable-libvpx          enable VP8 de/encoding via libvpx [no]
229   --enable-libx264         enable H.264 encoding via x264 [no]
230   --enable-libxavs         enable AVS encoding via xavs [no]
231   --enable-libxvid         enable Xvid encoding via xvidcore,
232                            native MPEG-4/Xvid encoder exists [no]
233   --enable-openal          enable OpenAL 1.1 capture support [no]
234   --enable-openssl         enable openssl [no]
235   --enable-zlib            enable zlib [autodetect]
236
237 Advanced options (experts only):
238   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
239   --enable-cross-compile   assume a cross-compiler is used
240   --sysroot=PATH           root of cross-build tree
241   --sysinclude=PATH        location of cross-build system headers
242   --target-os=OS           compiler targets OS [$target_os]
243   --target-exec=CMD        command to run executables on target
244   --target-path=DIR        path to view of build directory on target
245   --toolchain=NAME         set tool defaults according to NAME
246   --nm=NM                  use nm tool NM [$nm_default]
247   --ar=AR                  use archive tool AR [$ar_default]
248   --as=AS                  use assembler AS [$as_default]
249   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
250   --cc=CC                  use C compiler CC [$cc_default]
251   --cxx=CXX                use C compiler CXX [$cxx_default]
252   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
253   --ld=LD                  use linker LD [$ld_default]
254   --host-cc=HOSTCC         use host C compiler HOSTCC
255   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
256   --host-ld=HOSTLD         use host linker HOSTLD
257   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
258   --host-libs=HLIBS        use libs HLIBS when linking for host
259   --host-os=OS             compiler host OS [$target_os]
260   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
261   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
262   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
263   --extra-libs=ELIBS       add ELIBS [$ELIBS]
264   --extra-version=STRING   version string suffix []
265   --optflags=OPTFLAGS      override optimization-related compiler flags
266   --build-suffix=SUFFIX    library name suffix []
267   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
268   --progs-suffix=SUFFIX    program name suffix []
269   --arch=ARCH              select architecture [$arch]
270   --cpu=CPU                select the minimum required CPU (affects
271                            instruction selection, may crash on older CPUs)
272   --enable-pic             build position-independent code
273   --enable-sram            allow use of on-chip SRAM
274   --enable-thumb           compile for Thumb instruction set
275   --disable-symver         disable symbol versioning
276   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
277   --disable-safe-bitstream-reader
278                            disable buffer boundary checking in bitreaders
279                            (faster, but may crash)
280   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
281   --enable-lto             use link-time optimization
282
283 Optimization options (experts only):
284   --disable-asm            disable all assembler optimizations
285   --disable-altivec        disable AltiVec optimizations
286   --disable-amd3dnow       disable 3DNow! optimizations
287   --disable-amd3dnowext    disable 3DNow! extended optimizations
288   --disable-mmx            disable MMX optimizations
289   --disable-mmxext         disable MMXEXT optimizations
290   --disable-sse            disable SSE optimizations
291   --disable-sse2           disable SSE2 optimizations
292   --disable-sse3           disable SSE3 optimizations
293   --disable-ssse3          disable SSSE3 optimizations
294   --disable-sse4           disable SSE4 optimizations
295   --disable-sse42          disable SSE4.2 optimizations
296   --disable-avx            disable AVX optimizations
297   --disable-fma4           disable FMA4 optimizations
298   --disable-armv5te        disable armv5te optimizations
299   --disable-armv6          disable armv6 optimizations
300   --disable-armv6t2        disable armv6t2 optimizations
301   --disable-vfp            disable VFP optimizations
302   --disable-neon           disable NEON optimizations
303   --disable-vis            disable VIS optimizations
304   --disable-inline-asm     disable use of inline assembler
305   --disable-yasm           disable use of yasm assembler
306   --disable-mips32r2       disable MIPS32R2 optimizations
307   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
308   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
309   --disable-mipsfpu        disable floating point MIPS optimizations
310   --disable-fast-unaligned consider unaligned accesses slow
311
312 Developer options (useful when working on FFmpeg itself):
313   --enable-coverage        build with test coverage instrumentation
314   --disable-debug          disable debugging symbols
315   --enable-debug=LEVEL     set the debug level [$debuglevel]
316   --disable-optimizations  disable compiler optimizations
317   --enable-extra-warnings  enable more compiler warnings
318   --disable-stripping      disable stripping of executables and shared libraries
319   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
320                            2 causes a slowdown at runtime.
321   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
322   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
323                            leaks and errors, using the specified valgrind binary.
324                            Cannot be combined with --target-exec
325   --enable-ftrapv          Trap arithmetic overflows
326   --samples=PATH           location of test samples for FATE, if not set use
327                            \$FATE_SAMPLES at make invocation time.
328   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
329                            should be used only for debugging purposes)
330   --enable-random          randomly enable/disable components
331   --disable-random
332   --enable-random=LIST     randomly enable/disable specific components or
333   --disable-random=LIST    component groups. LIST is a comma-separated list
334                            of NAME[:PROB] entries where NAME is a component
335                            (group) and PROB the probability associated with
336                            NAME (default 0.5).
337   --random-seed=VALUE      seed value for --enable/disable-random
338
339 NOTE: Object files are built at the place where configure is launched.
340 EOF
341   exit 0
342 }
343
344 quotes='""'
345
346 log(){
347     echo "$@" >> $logfile
348 }
349
350 log_file(){
351     log BEGIN $1
352     pr -n -t $1 >> $logfile
353     log END $1
354 }
355
356 echolog(){
357     log "$@"
358     echo "$@"
359 }
360
361 warn(){
362     log "WARNING: $*"
363     WARNINGS="${WARNINGS}WARNING: $*\n"
364 }
365
366 die(){
367     echolog "$@"
368     cat <<EOF
369
370 If you think configure made a mistake, make sure you are using the latest
371 version from Git.  If the latest version fails, report the problem to the
372 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
373 EOF
374     if disabled logging; then
375         cat <<EOF
376 Rerun configure with logging enabled (do not use --disable-logging), and
377 include the log this produces with your report.
378 EOF
379     else
380         cat <<EOF
381 Include the log file "$logfile" produced by configure as this will help
382 solving the problem.
383 EOF
384     fi
385     exit 1
386 }
387
388 # Avoid locale weirdness, besides we really just want to translate ASCII.
389 toupper(){
390     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
391 }
392
393 tolower(){
394     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
395 }
396
397 c_escape(){
398     echo "$*" | sed 's/["\\]/\\\0/g'
399 }
400
401 sh_quote(){
402     v=$(echo "$1" | sed "s/'/'\\\\''/g")
403     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
404     echo "$v"
405 }
406
407 cleanws(){
408     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
409 }
410
411 filter(){
412     pat=$1
413     shift
414     for v; do
415         eval "case $v in $pat) echo $v ;; esac"
416     done
417 }
418
419 filter_out(){
420     pat=$1
421     shift
422     for v; do
423         eval "case $v in $pat) ;; *) echo $v ;; esac"
424     done
425 }
426
427 map(){
428     m=$1
429     shift
430     for v; do eval $m; done
431 }
432
433 add_suffix(){
434     suffix=$1
435     shift
436     for v; do echo ${v}${suffix}; done
437 }
438
439 set_all(){
440     value=$1
441     shift
442     for var in $*; do
443         eval $var=$value
444     done
445 }
446
447 set_weak(){
448     value=$1
449     shift
450     for var; do
451         eval : \${$var:=$value}
452     done
453 }
454
455 set_safe(){
456     var=$1
457     shift
458     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
459 }
460
461 get_safe(){
462     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
463 }
464
465 pushvar(){
466     for var in $*; do
467         eval level=\${${var}_level:=0}
468         eval ${var}_${level}="\$$var"
469         eval ${var}_level=$(($level+1))
470     done
471 }
472
473 popvar(){
474     for var in $*; do
475         eval level=\${${var}_level:-0}
476         test $level = 0 && continue
477         eval level=$(($level-1))
478         eval $var="\${${var}_${level}}"
479         eval ${var}_level=$level
480         eval unset ${var}_${level}
481     done
482 }
483
484 enable(){
485     set_all yes $*
486 }
487
488 disable(){
489     set_all no $*
490 }
491
492 enable_weak(){
493     set_weak yes $*
494 }
495
496 disable_weak(){
497     set_weak no $*
498 }
499
500 enable_safe(){
501     for var; do
502         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
503     done
504 }
505
506 disable_safe(){
507     for var; do
508         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
509     done
510 }
511
512 do_enable_deep(){
513     for var; do
514         enabled $var && continue
515         eval sel="\$${var}_select"
516         eval sgs="\$${var}_suggest"
517         pushvar var sgs
518         enable_deep $sel
519         popvar sgs
520         enable_deep_weak $sgs
521         popvar var
522     done
523 }
524
525 enable_deep(){
526     do_enable_deep $*
527     enable $*
528 }
529
530 enable_deep_weak(){
531     do_enable_deep $*
532     enable_weak $*
533 }
534
535 enabled(){
536     test "${1#!}" = "$1" && op== || op=!=
537     eval test "x\$${1#!}" $op "xyes"
538 }
539
540 disabled(){
541     test "${1#!}" = "$1" && op== || op=!=
542     eval test "x\$${1#!}" $op "xno"
543 }
544
545 enabled_all(){
546     for opt; do
547         enabled $opt || return 1
548     done
549 }
550
551 disabled_all(){
552     for opt; do
553         disabled $opt || return 1
554     done
555 }
556
557 enabled_any(){
558     for opt; do
559         enabled $opt && return 0
560     done
561 }
562
563 disabled_any(){
564     for opt; do
565         disabled $opt && return 0
566     done
567     return 1
568 }
569
570 set_default(){
571     for opt; do
572         eval : \${$opt:=\$${opt}_default}
573     done
574 }
575
576 is_in(){
577     value=$1
578     shift
579     for var in $*; do
580         [ $var = $value ] && return 0
581     done
582     return 1
583 }
584
585 do_check_deps(){
586     for cfg; do
587         cfg="${cfg#!}"
588         enabled ${cfg}_checking && die "Circular dependency for $cfg."
589         disabled ${cfg}_checking && continue
590         enable ${cfg}_checking
591         append allopts $cfg
592
593         eval dep_all="\$${cfg}_deps"
594         eval dep_any="\$${cfg}_deps_any"
595         eval dep_sel="\$${cfg}_select"
596         eval dep_sgs="\$${cfg}_suggest"
597         eval dep_ifa="\$${cfg}_if"
598         eval dep_ifn="\$${cfg}_if_any"
599
600         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
601         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
602         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
603
604         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
605         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
606         enabled_all  $dep_all || disable $cfg
607         enabled_any  $dep_any || disable $cfg
608         disabled_any $dep_sel && disable $cfg
609
610         if enabled $cfg; then
611             enable_deep $dep_sel
612             enable_deep_weak $dep_sgs
613         fi
614
615         disable ${cfg}_checking
616     done
617 }
618
619 check_deps(){
620     unset allopts
621
622     do_check_deps "$@"
623
624     for cfg in $allopts; do
625         enabled $cfg || continue
626         eval dep_extralibs="\$${cfg}_extralibs"
627         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
628     done
629 }
630
631 print_config(){
632     pfx=$1
633     files=$2
634     shift 2
635     map 'eval echo "$v \${$v:-no}"' "$@" |
636     awk "BEGIN { split(\"$files\", files) }
637         {
638             c = \"$pfx\" toupper(\$1);
639             v = \$2;
640             sub(/yes/, 1, v);
641             sub(/no/,  0, v);
642             for (f in files) {
643                 file = files[f];
644                 if (file ~ /\\.h\$/) {
645                     printf(\"#define %s %d\\n\", c, v) >>file;
646                 } else if (file ~ /\\.asm\$/) {
647                     printf(\"%%define %s %d\\n\", c, v) >>file;
648                 } else if (file ~ /\\.mak\$/) {
649                     n = -v ? \"\" : \"!\";
650                     printf(\"%s%s=yes\\n\", n, c) >>file;
651                 }
652             }
653         }"
654 }
655
656 print_enabled(){
657     suf=$1
658     shift
659     for v; do
660         enabled $v && printf "%s\n" ${v%$suf};
661     done
662 }
663
664 append(){
665     var=$1
666     shift
667     eval "$var=\"\$$var $*\""
668 }
669
670 prepend(){
671     var=$1
672     shift
673     eval "$var=\"$* \$$var\""
674 }
675
676 add_cppflags(){
677     append CPPFLAGS "$@"
678 }
679
680 add_cflags(){
681     append CFLAGS $($cflags_filter "$@")
682 }
683
684 add_cxxflags(){
685     append CXXFLAGS $($cflags_filter "$@")
686 }
687
688 add_asflags(){
689     append ASFLAGS $($asflags_filter "$@")
690 }
691
692 add_ldflags(){
693     append LDFLAGS $($ldflags_filter "$@")
694 }
695
696 add_extralibs(){
697     prepend extralibs $($ldflags_filter "$@")
698 }
699
700 add_host_cflags(){
701     append host_cflags $($host_cflags_filter "$@")
702 }
703
704 add_host_ldflags(){
705     append host_ldflags $($host_ldflags_filter "$@")
706 }
707
708 add_compat(){
709     append compat_objs $1
710     shift
711     map 'add_cppflags -D$v' "$@"
712 }
713
714 check_cmd(){
715     log "$@"
716     "$@" >> $logfile 2>&1
717 }
718
719 cc_o(){
720     eval printf '%s\\n' $CC_O
721 }
722
723 cc_e(){
724     eval printf '%s\\n' $CC_E
725 }
726
727 check_cc(){
728     log check_cc "$@"
729     cat > $TMPC
730     log_file $TMPC
731     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
732 }
733
734 check_cxx(){
735     log check_cxx "$@"
736     cat > $TMPCPP
737     log_file $TMPCPP
738     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
739 }
740
741 check_cpp(){
742     log check_cpp "$@"
743     cat > $TMPC
744     log_file $TMPC
745     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
746 }
747
748 as_o(){
749     eval printf '%s\\n' $AS_O
750 }
751
752 check_as(){
753     log check_as "$@"
754     cat > $TMPS
755     log_file $TMPS
756     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
757 }
758
759 check_inline_asm(){
760     log check_inline_asm "$@"
761     name="$1"
762     code="$2"
763     shift 2
764     disable $name
765     check_cc "$@" <<EOF && enable $name
766 void foo(void){ __asm__ volatile($code); }
767 EOF
768 }
769
770 check_insn(){
771     log check_insn "$@"
772     check_inline_asm ${1}_inline "\"$2\""
773     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
774 }
775
776 check_yasm(){
777     log check_yasm "$@"
778     echo "$1" > $TMPS
779     log_file $TMPS
780     shift 1
781     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
782 }
783
784 ld_o(){
785     eval printf '%s\\n' $LD_O
786 }
787
788 check_ld(){
789     log check_ld "$@"
790     type=$1
791     shift 1
792     flags=$(filter_out '-l*|*.so' $@)
793     libs=$(filter '-l*|*.so' $@)
794     check_$type $($cflags_filter $flags) || return
795     flags=$($ldflags_filter $flags)
796     libs=$($ldflags_filter $libs)
797     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
798 }
799
800 print_include(){
801     hdr=$1
802     test "${hdr%.h}" = "${hdr}" &&
803         echo "#include $hdr"    ||
804         echo "#include <$hdr>"
805 }
806
807 check_code(){
808     log check_code "$@"
809     check=$1
810     headers=$2
811     code=$3
812     shift 3
813     {
814         for hdr in $headers; do
815             print_include $hdr
816         done
817         echo "int main(void) { $code; return 0; }"
818     } | check_$check "$@"
819 }
820
821 check_cppflags(){
822     log check_cppflags "$@"
823     check_cc "$@" <<EOF && append CPPFLAGS "$@"
824 int x;
825 EOF
826 }
827
828 check_cflags(){
829     log check_cflags "$@"
830     set -- $($cflags_filter "$@")
831     check_cc "$@" <<EOF && append CFLAGS "$@"
832 int x;
833 EOF
834 }
835
836 check_cxxflags(){
837     log check_cxxflags "$@"
838     set -- $($cflags_filter "$@")
839     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
840 int x;
841 EOF
842 }
843
844 test_ldflags(){
845     log test_ldflags "$@"
846     check_ld "cc" "$@" <<EOF
847 int main(void){ return 0; }
848 EOF
849 }
850
851 check_ldflags(){
852     log check_ldflags "$@"
853     test_ldflags "$@" && add_ldflags "$@"
854 }
855
856 check_header(){
857     log check_header "$@"
858     header=$1
859     shift
860     disable_safe $header
861     check_cpp "$@" <<EOF && enable_safe $header
862 #include <$header>
863 int x;
864 EOF
865 }
866
867 check_func(){
868     log check_func "$@"
869     func=$1
870     shift
871     disable $func
872     check_ld "cc" "$@" <<EOF && enable $func
873 extern int $func();
874 int main(void){ $func(); }
875 EOF
876 }
877
878 check_mathfunc(){
879     log check_mathfunc "$@"
880     func=$1
881     narg=$2
882     shift 2
883     test $narg = 2 && args="f, g" || args="f"
884     disable $func
885     check_ld "cc" "$@" <<EOF && enable $func
886 #include <math.h>
887 float foo(float f, float g) { return $func($args); }
888 int main(void){ return (int) foo; }
889 EOF
890 }
891
892 check_func_headers(){
893     log check_func_headers "$@"
894     headers=$1
895     funcs=$2
896     shift 2
897     {
898         for hdr in $headers; do
899             print_include $hdr
900         done
901         for func in $funcs; do
902             echo "long check_$func(void) { return (long) $func; }"
903         done
904         echo "int main(void) { return 0; }"
905     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
906 }
907
908 check_class_headers_cpp(){
909     log check_class_headers_cpp "$@"
910     headers=$1
911     classes=$2
912     shift 2
913     {
914         for hdr in $headers; do
915             echo "#include <$hdr>"
916         done
917         echo "int main(void) { "
918         i=1
919         for class in $classes; do
920             echo "$class obj$i;"
921             i=$(expr $i + 1)
922         done
923         echo "return 0; }"
924     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
925 }
926
927 check_cpp_condition(){
928     log check_cpp_condition "$@"
929     header=$1
930     condition=$2
931     shift 2
932     check_cpp "$@" <<EOF
933 #include <$header>
934 #if !($condition)
935 #error "unsatisfied condition: $condition"
936 #endif
937 EOF
938 }
939
940 check_lib(){
941     log check_lib "$@"
942     header="$1"
943     func="$2"
944     shift 2
945     check_header $header && check_func $func "$@" && add_extralibs "$@"
946 }
947
948 check_lib2(){
949     log check_lib2 "$@"
950     headers="$1"
951     funcs="$2"
952     shift 2
953     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
954 }
955
956 check_lib_cpp(){
957     log check_lib_cpp "$@"
958     headers="$1"
959     classes="$2"
960     shift 2
961     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
962 }
963
964 check_pkg_config(){
965     log check_pkg_config "$@"
966     pkg="$1"
967     headers="$2"
968     funcs="$3"
969     shift 3
970     $pkg_config --exists $pkg 2>/dev/null || return
971     pkg_cflags=$($pkg_config --cflags $pkg)
972     pkg_libs=$($pkg_config --libs $pkg)
973     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
974         set_safe ${pkg}_cflags $pkg_cflags   &&
975         set_safe ${pkg}_libs   $pkg_libs
976 }
977
978 check_exec(){
979     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
980 }
981
982 check_exec_crash(){
983     code=$(cat)
984
985     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
986     # are safe but may not be available everywhere.  Thus we use
987     # raise(SIGTERM) instead.  The check is run in a subshell so we
988     # can redirect the "Terminated" message from the shell.  SIGBUS
989     # is not defined by standard C so it is used conditionally.
990
991     (check_exec "$@") >> $logfile 2>&1 <<EOF
992 #include <signal.h>
993 static void sighandler(int sig){
994     raise(SIGTERM);
995 }
996 int func(void){
997     $code
998 }
999 int (*func_ptr)(void) = func;
1000 int main(void){
1001     signal(SIGILL, sighandler);
1002     signal(SIGFPE, sighandler);
1003     signal(SIGSEGV, sighandler);
1004 #ifdef SIGBUS
1005     signal(SIGBUS, sighandler);
1006 #endif
1007     return func_ptr();
1008 }
1009 EOF
1010 }
1011
1012 check_type(){
1013     log check_type "$@"
1014     headers=$1
1015     type=$2
1016     shift 2
1017     disable_safe "$type"
1018     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1019 }
1020
1021 check_struct(){
1022     log check_type "$@"
1023     headers=$1
1024     struct=$2
1025     member=$3
1026     shift 3
1027     disable_safe "${struct}_${member}"
1028     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1029         enable_safe "${struct}_${member}"
1030 }
1031
1032 require(){
1033     name="$1"
1034     header="$2"
1035     func="$3"
1036     shift 3
1037     check_lib $header $func "$@" || die "ERROR: $name not found"
1038 }
1039
1040 require2(){
1041     name="$1"
1042     headers="$2"
1043     func="$3"
1044     shift 3
1045     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1046 }
1047
1048 require_cpp(){
1049     name="$1"
1050     headers="$2"
1051     classes="$3"
1052     shift 3
1053     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1054 }
1055
1056 require_pkg_config(){
1057     pkg="$1"
1058     check_pkg_config "$@" || die "ERROR: $pkg not found"
1059     add_cflags    $(get_safe ${pkg}_cflags)
1060     add_extralibs $(get_safe ${pkg}_libs)
1061 }
1062
1063 require_libfreetype(){
1064     log require_libfreetype "$@"
1065     pkg="freetype2"
1066     check_cmd $pkg_config --exists --print-errors $pkg \
1067       || die "ERROR: $pkg not found"
1068     pkg_cflags=$($pkg_config --cflags $pkg)
1069     pkg_libs=$($pkg_config --libs $pkg)
1070     {
1071         echo "#include <ft2build.h>"
1072         echo "#include FT_FREETYPE_H"
1073         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1074         echo "int main(void) { return 0; }"
1075     } | check_ld "cc" $pkg_cflags $pkg_libs \
1076       && set_safe ${pkg}_cflags $pkg_cflags \
1077       && set_safe ${pkg}_libs   $pkg_libs \
1078       || die "ERROR: $pkg not found"
1079     add_cflags    $(get_safe ${pkg}_cflags)
1080     add_extralibs $(get_safe ${pkg}_libs)
1081 }
1082
1083 hostcc_o(){
1084     eval printf '%s\\n' $HOSTCC_O
1085 }
1086
1087 check_host_cc(){
1088     log check_host_cc "$@"
1089     cat > $TMPC
1090     log_file $TMPC
1091     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1092 }
1093
1094 check_host_cflags(){
1095     log check_host_cflags "$@"
1096     set -- $($host_cflags_filter "$@")
1097     check_host_cc "$@" <<EOF && append host_cflags "$@"
1098 int x;
1099 EOF
1100 }
1101
1102 apply(){
1103     file=$1
1104     shift
1105     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1106 }
1107
1108 cp_if_changed(){
1109     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1110     mkdir -p "$(dirname $2)"
1111     $cp_f "$1" "$2"
1112 }
1113
1114 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1115 # system-dependent things.
1116
1117 COMPONENT_LIST="
1118     bsfs
1119     decoders
1120     demuxers
1121     encoders
1122     filters
1123     hwaccels
1124     indevs
1125     muxers
1126     outdevs
1127     parsers
1128     protocols
1129 "
1130
1131 DOCUMENT_LIST="
1132     doc
1133     htmlpages
1134     manpages
1135     podpages
1136     txtpages
1137 "
1138
1139 LIBRARY_LIST="
1140     avcodec
1141     avdevice
1142     avfilter
1143     avformat
1144     avresample
1145     avutil
1146     postproc
1147     swresample
1148     swscale
1149 "
1150
1151 PROGRAM_LIST="
1152     ffplay
1153     ffprobe
1154     ffserver
1155     ffmpeg
1156 "
1157
1158 CONFIG_LIST="
1159     $COMPONENT_LIST
1160     $DOCUMENT_LIST
1161     $LIBRARY_LIST
1162     $PROGRAM_LIST
1163     avisynth
1164     bzlib
1165     crystalhd
1166     dct
1167     dwt
1168     dxva2
1169     fast_unaligned
1170     fft
1171     fontconfig
1172     frei0r
1173     ftrapv
1174     gnutls
1175     gpl
1176     gray
1177     hardcoded_tables
1178     incompatible_fork_abi
1179     libaacplus
1180     libass
1181     libbluray
1182     libcaca
1183     libcdio
1184     libcelt
1185     libdc1394
1186     libfaac
1187     libfdk_aac
1188     libflite
1189     libfreetype
1190     libgsm
1191     libiec61883
1192     libilbc
1193     libmodplug
1194     libmp3lame
1195     libnut
1196     libopencore_amrnb
1197     libopencore_amrwb
1198     libopencv
1199     libopenjpeg
1200     libopus
1201     libpulse
1202     librtmp
1203     libschroedinger
1204     libsoxr
1205     libspeex
1206     libstagefright_h264
1207     libtheora
1208     libtwolame
1209     libutvideo
1210     libv4l2
1211     libvo_aacenc
1212     libvo_amrwbenc
1213     libvorbis
1214     libvpx
1215     libx264
1216     libxavs
1217     libxvid
1218     lsp
1219     lzo
1220     mdct
1221     memalign_hack
1222     memory_poisoning
1223     network
1224     nonfree
1225     openal
1226     openssl
1227     pic
1228     rdft
1229     runtime_cpudetect
1230     safe_bitstream_reader
1231     shared
1232     small
1233     sram
1234     static
1235     swscale_alpha
1236     thumb
1237     vaapi
1238     vda
1239     vdpau
1240     version3
1241     xmm_clobber_test
1242     x11grab
1243     zlib
1244 "
1245
1246 THREADS_LIST='
1247     pthreads
1248     w32threads
1249     os2threads
1250 '
1251
1252 ARCH_LIST='
1253     aarch64
1254     alpha
1255     arm
1256     avr32
1257     avr32_ap
1258     avr32_uc
1259     bfin
1260     ia64
1261     m68k
1262     mips
1263     mips64
1264     parisc
1265     ppc
1266     ppc64
1267     s390
1268     sh4
1269     sparc
1270     sparc64
1271     tilegx
1272     tilepro
1273     tomi
1274     x86
1275     x86_32
1276     x86_64
1277 '
1278
1279 ARCH_EXT_LIST_ARM='
1280     armv5te
1281     armv6
1282     armv6t2
1283     neon
1284     vfp
1285     vfpv3
1286 '
1287
1288 ARCH_EXT_LIST_X86='
1289     amd3dnow
1290     amd3dnowext
1291     avx
1292     fma4
1293     mmx
1294     mmxext
1295     sse
1296     sse2
1297     sse3
1298     sse4
1299     sse42
1300     ssse3
1301 '
1302
1303 ARCH_EXT_LIST="
1304     $ARCH_EXT_LIST_ARM
1305     $ARCH_EXT_LIST_X86
1306     altivec
1307     ppc4xx
1308     vis
1309     mipsfpu
1310     mips32r2
1311     mipsdspr1
1312     mipsdspr2
1313 "
1314
1315 HAVE_LIST_CMDLINE='
1316     inline_asm
1317     symver
1318     yasm
1319 '
1320
1321 HAVE_LIST_PUB='
1322     bigendian
1323     fast_unaligned
1324     incompatible_fork_abi
1325 '
1326
1327 MATH_FUNCS="
1328     atanf
1329     atan2f
1330     cbrtf
1331     cosf
1332     exp2
1333     exp2f
1334     expf
1335     isinf
1336     isnan
1337     ldexpf
1338     llrint
1339     llrintf
1340     log2
1341     log2f
1342     log10f
1343     lrint
1344     lrintf
1345     powf
1346     rint
1347     round
1348     roundf
1349     sinf
1350     trunc
1351     truncf
1352 "
1353
1354 HAVE_LIST="
1355     $ARCH_EXT_LIST
1356     $(add_suffix _external $ARCH_EXT_LIST)
1357     $(add_suffix _inline   $ARCH_EXT_LIST)
1358     $HAVE_LIST_CMDLINE
1359     $HAVE_LIST_PUB
1360     $THREADS_LIST
1361     $MATH_FUNCS
1362     access
1363     aligned_malloc
1364     aligned_stack
1365     alsa_asoundlib_h
1366     altivec_h
1367     arpa_inet_h
1368     asm_mod_q
1369     asm_mod_y
1370     asm_types_h
1371     attribute_may_alias
1372     attribute_packed
1373     cdio_paranoia_h
1374     cdio_paranoia_paranoia_h
1375     clock_gettime
1376     closesocket
1377     cmov
1378     CommandLineToArgvW
1379     cpunop
1380     CryptGenRandom
1381     dcbzl
1382     dev_bktr_ioctl_bt848_h
1383     dev_bktr_ioctl_meteor_h
1384     dev_ic_bt8xx_h
1385     dev_video_bktr_ioctl_bt848_h
1386     dev_video_meteor_ioctl_meteor_h
1387     direct_h
1388     dlfcn_h
1389     dlopen
1390     dos_paths
1391     dxva_h
1392     ebp_available
1393     ebx_available
1394     fast_64bit
1395     fast_clz
1396     fast_cmov
1397     fcntl
1398     fork
1399     getaddrinfo
1400     gethrtime
1401     getopt
1402     GetProcessAffinityMask
1403     GetProcessMemoryInfo
1404     GetProcessTimes
1405     GetSystemTimeAsFileTime
1406     getrusage
1407     getservbyport
1408     gettimeofday
1409     glob
1410     gnu_as
1411     ibm_asm
1412     inet_aton
1413     io_h
1414     isatty
1415     jack_port_get_latency_range
1416     kbhit
1417     ldbrx
1418     libdc1394_1
1419     libdc1394_2
1420     local_aligned_16
1421     local_aligned_8
1422     localtime_r
1423     loongson
1424     lzo1x_999_compress
1425     machine_ioctl_bt848_h
1426     machine_ioctl_meteor_h
1427     makeinfo
1428     malloc_h
1429     MapViewOfFile
1430     memalign
1431     mkstemp
1432     mm_empty
1433     mmap
1434     mprotect
1435     msvcrt
1436     nanosleep
1437     openjpeg_1_5_openjpeg_h
1438     PeekNamedPipe
1439     perl
1440     pod2man
1441     poll_h
1442     posix_memalign
1443     pthread_cancel
1444     rdtsc
1445     rsync_contimeout
1446     sched_getaffinity
1447     sdl
1448     sdl_video_size
1449     SetConsoleTextAttribute
1450     setmode
1451     setrlimit
1452     Sleep
1453     sndio_h
1454     socklen_t
1455     soundcard_h
1456     strerror_r
1457     struct_addrinfo
1458     struct_group_source_req
1459     struct_ip_mreq_source
1460     struct_ipv6_mreq
1461     struct_pollfd
1462     struct_rusage_ru_maxrss
1463     struct_sctp_event_subscribe
1464     struct_sockaddr_in6
1465     struct_sockaddr_sa_len
1466     struct_sockaddr_storage
1467     struct_v4l2_frmivalenum_discrete
1468     symver_asm_label
1469     symver_gnu_asm
1470     sysconf
1471     sysctl
1472     sys_mman_h
1473     sys_param_h
1474     sys_resource_h
1475     sys_select_h
1476     sys_soundcard_h
1477     sys_time_h
1478     sys_videoio_h
1479     termios_h
1480     texi2html
1481     threads
1482     unistd_h
1483     usleep
1484     vfp_args
1485     VirtualAlloc
1486     windows_h
1487     winsock2_h
1488     xform_asm
1489     xmm_clobbers
1490 "
1491
1492 # options emitted with CONFIG_ prefix but not available on the command line
1493 CONFIG_EXTRA="
1494     aandcttables
1495     ac3dsp
1496     audio_frame_queue
1497     error_resilience
1498     gcrypt
1499     golomb
1500     gplv3
1501     h264chroma
1502     h264dsp
1503     h264pred
1504     h264qpel
1505     huffman
1506     lgplv3
1507     lpc
1508     mpegaudio
1509     mpegaudiodsp
1510     mpegvideo
1511     mpegvideoenc
1512     nettle
1513     rangecoder
1514     rtpdec
1515     rtpenc_chain
1516     sinewin
1517     videodsp
1518     vp3dsp
1519 "
1520
1521 CMDLINE_SELECT="
1522     $ARCH_EXT_LIST
1523     $CONFIG_LIST
1524     $HAVE_LIST_CMDLINE
1525     $THREADS_LIST
1526     asm
1527     coverage
1528     cross_compile
1529     debug
1530     extra_warnings
1531     logging
1532     lto
1533     optimizations
1534     stripping
1535 "
1536
1537 PATHS_LIST='
1538     bindir
1539     datadir
1540     incdir
1541     libdir
1542     mandir
1543     prefix
1544     shlibdir
1545 '
1546
1547 CMDLINE_SET="
1548     $PATHS_LIST
1549     ar
1550     arch
1551     as
1552     assert_level
1553     build_suffix
1554     cc
1555     cpu
1556     cross_prefix
1557     cxx
1558     dep_cc
1559     extra_version
1560     host_cc
1561     host_cflags
1562     host_ld
1563     host_ldflags
1564     host_libs
1565     host_os
1566     install
1567     ld
1568     logfile
1569     malloc_prefix
1570     nm
1571     optflags
1572     pkg_config
1573     progs_suffix
1574     random_seed
1575     samples
1576     strip
1577     sysinclude
1578     sysroot
1579     target_exec
1580     target_os
1581     target_path
1582     toolchain
1583     valgrind
1584     yasmexe
1585 "
1586
1587 CMDLINE_APPEND="
1588     extra_cflags
1589     extra_cxxflags
1590 "
1591
1592 # code dependency declarations
1593
1594 # architecture extensions
1595
1596 armv5te_deps="arm"
1597 armv6_deps="arm"
1598 armv6t2_deps="arm"
1599 neon_deps="arm"
1600 vfp_deps="arm"
1601 vfpv3_deps="vfp"
1602
1603 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1604
1605 mipsfpu_deps="mips"
1606 mips32r2_deps="mips"
1607 mipsdspr1_deps="mips"
1608 mipsdspr2_deps="mips"
1609
1610 altivec_deps="ppc"
1611 ppc4xx_deps="ppc"
1612
1613 vis_deps="sparc"
1614
1615 x86_64_suggest="cmov fast_cmov"
1616
1617 amd3dnow_deps="mmx"
1618 amd3dnowext_deps="amd3dnow"
1619 mmx_deps="x86"
1620 mmxext_deps="mmx"
1621 sse_deps="mmxext"
1622 sse2_deps="sse"
1623 sse3_deps="sse2"
1624 ssse3_deps="sse3"
1625 sse4_deps="ssse3"
1626 sse42_deps="sse4"
1627 avx_deps="sse42"
1628 fma4_deps="avx"
1629
1630 mmx_external_deps="yasm"
1631 mmx_inline_deps="inline_asm"
1632 mmx_suggest="mmx_external mmx_inline"
1633
1634 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1635     eval dep=\$${ext}_deps
1636     eval ${ext}_external_deps='"${dep}_external"'
1637     eval ${ext}_inline_deps='"${dep}_inline"'
1638     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1639 done
1640
1641 aligned_stack_if_any="ppc x86"
1642 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1643 fast_clz_if_any="alpha avr32 mips ppc x86"
1644 fast_unaligned_if_any="ppc x86"
1645
1646 inline_asm_deps="!tms470"
1647 need_memalign="altivec neon sse"
1648
1649 symver_if_any="symver_asm_label symver_gnu_asm"
1650
1651 log2_deps="!msvcrt"
1652
1653 # subsystems
1654 dct_select="rdft"
1655 mdct_select="fft"
1656 rdft_select="fft"
1657 mpegaudio_select="mpegaudiodsp"
1658 mpegaudiodsp_select="dct"
1659 mpegvideo_select="videodsp"
1660 mpegvideoenc_select="mpegvideo"
1661
1662 # decoders / encoders
1663 aac_decoder_select="mdct sinewin"
1664 aac_encoder_select="audio_frame_queue mdct sinewin"
1665 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1666 ac3_decoder_select="mdct ac3dsp ac3_parser"
1667 ac3_encoder_select="mdct ac3dsp"
1668 ac3_fixed_encoder_select="mdct ac3dsp"
1669 alac_encoder_select="lpc"
1670 amrnb_decoder_select="lsp"
1671 amrwb_decoder_select="lsp"
1672 amv_encoder_select="aandcttables"
1673 atrac1_decoder_select="mdct sinewin"
1674 atrac3_decoder_select="mdct"
1675 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1676 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1677 cavs_decoder_select="golomb mpegvideo"
1678 comfortnoise_encoder_select="lpc"
1679 cook_decoder_select="mdct sinewin"
1680 cscd_decoder_select="lzo"
1681 cscd_decoder_suggest="zlib"
1682 dca_decoder_select="mdct"
1683 dirac_decoder_select="dwt golomb"
1684 dnxhd_encoder_select="aandcttables mpegvideoenc"
1685 dxa_decoder_select="zlib"
1686 eac3_decoder_select="ac3_decoder"
1687 eac3_encoder_select="ac3_encoder"
1688 eamad_decoder_select="aandcttables error_resilience mpegvideo"
1689 eatgq_decoder_select="aandcttables"
1690 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1691 exr_decoder_select="zlib"
1692 ffv1_decoder_select="golomb rangecoder"
1693 ffv1_encoder_select="rangecoder"
1694 ffvhuff_encoder_select="huffman"
1695 flac_decoder_select="golomb"
1696 flac_encoder_select="golomb lpc"
1697 flashsv_decoder_select="zlib"
1698 flashsv_encoder_select="zlib"
1699 flashsv2_encoder_select="zlib"
1700 flashsv2_decoder_select="zlib"
1701 flv_decoder_select="h263_decoder"
1702 flv_encoder_select="h263_encoder"
1703 fraps_decoder_select="huffman"
1704 h261_decoder_select="error_resilience mpegvideo"
1705 h261_encoder_select="aandcttables mpegvideoenc"
1706 h263_decoder_select="error_resilience h263_parser mpegvideo"
1707 h263_encoder_select="aandcttables error_resilience mpegvideoenc"
1708 h263i_decoder_select="h263_decoder"
1709 h263p_encoder_select="h263_encoder"
1710 h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1711 huffyuv_encoder_select="huffman"
1712 iac_decoder_select="fft mdct sinewin"
1713 imc_decoder_select="fft mdct sinewin"
1714 jpegls_decoder_select="golomb"
1715 jpegls_encoder_select="golomb"
1716 ljpeg_encoder_select="aandcttables mpegvideoenc"
1717 loco_decoder_select="golomb"
1718 mdec_decoder_select="error_resilience mpegvideo"
1719 mjpeg_encoder_select="aandcttables mpegvideoenc"
1720 mlp_decoder_select="mlp_parser"
1721 mp1_decoder_select="mpegaudio"
1722 mp1float_decoder_select="mpegaudio"
1723 mp2_decoder_select="mpegaudio"
1724 mp2float_decoder_select="mpegaudio"
1725 mp3_decoder_select="mpegaudio"
1726 mp3adu_decoder_select="mpegaudio"
1727 mp3adufloat_decoder_select="mpegaudio"
1728 mp3float_decoder_select="mpegaudio"
1729 mp3on4_decoder_select="mpegaudio"
1730 mp3on4float_decoder_select="mpegaudio"
1731 mpc7_decoder_select="mpegaudiodsp"
1732 mpc8_decoder_select="mpegaudiodsp"
1733 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1734 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1735 mpeg1video_decoder_select="error_resilience mpegvideo"
1736 mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
1737 mpeg2video_decoder_select="error_resilience mpegvideo"
1738 mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
1739 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1740 mpeg4_encoder_select="h263_encoder"
1741 msmpeg4v1_decoder_select="h263_decoder"
1742 msmpeg4v1_encoder_select="h263_encoder"
1743 msmpeg4v2_decoder_select="h263_decoder"
1744 msmpeg4v2_encoder_select="h263_encoder"
1745 msmpeg4v3_decoder_select="h263_decoder"
1746 msmpeg4v3_encoder_select="h263_encoder"
1747 mss2_decoder_select="vc1_decoder"
1748 nellymoser_decoder_select="mdct sinewin"
1749 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1750 nuv_decoder_select="lzo"
1751 png_decoder_select="zlib"
1752 png_encoder_select="zlib"
1753 qcelp_decoder_select="lsp"
1754 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1755 ra_144_encoder_select="audio_frame_queue lpc"
1756 ralf_decoder_select="golomb"
1757 rv10_decoder_select="h263_decoder"
1758 rv10_encoder_select="h263_encoder"
1759 rv20_decoder_select="h263_decoder"
1760 rv20_encoder_select="h263_encoder"
1761 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1762 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1763 shorten_decoder_select="golomb"
1764 sipr_decoder_select="lsp"
1765 snow_decoder_select="dwt rangecoder videodsp"
1766 snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder"
1767 sonic_decoder_select="golomb"
1768 sonic_encoder_select="golomb"
1769 sonic_ls_encoder_select="golomb"
1770 svq1_decoder_select="error_resilience mpegvideo"
1771 svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1772 svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1773 svq3_decoder_suggest="zlib"
1774 theora_decoder_select="vp3_decoder"
1775 tiff_decoder_suggest="zlib"
1776 tiff_encoder_suggest="zlib"
1777 truehd_decoder_select="mlp_parser"
1778 tscc_decoder_select="zlib"
1779 twinvq_decoder_select="mdct lsp sinewin"
1780 utvideo_encoder_select="huffman"
1781 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1782 vc1image_decoder_select="vc1_decoder"
1783 vorbis_decoder_select="mdct"
1784 vorbis_encoder_select="mdct"
1785 vp3_decoder_select="vp3dsp videodsp"
1786 vp5_decoder_select="vp3dsp videodsp"
1787 vp6_decoder_select="huffman vp3dsp videodsp"
1788 vp6a_decoder_select="vp6_decoder"
1789 vp6f_decoder_select="vp6_decoder"
1790 vp8_decoder_select="h264pred videodsp"
1791 wmapro_decoder_select="mdct sinewin"
1792 wmav1_decoder_select="mdct sinewin"
1793 wmav1_encoder_select="mdct sinewin"
1794 wmav2_decoder_select="mdct sinewin"
1795 wmav2_encoder_select="mdct sinewin"
1796 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1797 wmv1_decoder_select="h263_decoder"
1798 wmv1_encoder_select="h263_encoder"
1799 wmv2_decoder_select="h263_decoder"
1800 wmv2_encoder_select="h263_encoder"
1801 wmv3_decoder_select="vc1_decoder"
1802 wmv3image_decoder_select="wmv3_decoder"
1803 zerocodec_decoder_select="zlib"
1804 zlib_decoder_select="zlib"
1805 zlib_encoder_select="zlib"
1806 zmbv_decoder_select="zlib"
1807 zmbv_encoder_select="zlib"
1808
1809 # hardware accelerators
1810 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1811 dxva2_deps="dxva2api_h"
1812 vaapi_deps="va_va_h"
1813 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1814 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1815
1816 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1817 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1818 h264_dxva2_hwaccel_deps="dxva2"
1819 h264_dxva2_hwaccel_select="h264_decoder"
1820 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1821 h264_vda_decoder_select="vda h264_parser h264_decoder"
1822 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1823 h264_vda_hwaccel_select="vda h264_decoder"
1824 h264_vdpau_decoder_select="vdpau h264_decoder"
1825 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1826 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1827 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1828 mpeg2_crystalhd_decoder_select="crystalhd"
1829 mpeg2_dxva2_hwaccel_deps="dxva2"
1830 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1831 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1832 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1833 mpeg4_crystalhd_decoder_select="crystalhd"
1834 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1835 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1836 msmpeg4_crystalhd_decoder_select="crystalhd"
1837 vc1_crystalhd_decoder_select="crystalhd"
1838 vc1_dxva2_hwaccel_deps="dxva2"
1839 vc1_dxva2_hwaccel_select="vc1_decoder"
1840 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1841 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1842 wmv3_crystalhd_decoder_select="crystalhd"
1843 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1844 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1845 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1846
1847 # parsers
1848 h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo"
1849 mpeg4video_parser_select="error_resilience mpegvideo"
1850 mpegvideo_parser_select="error_resilience mpegvideo"
1851 vc1_parser_select="error_resilience mpegvideo"
1852
1853 # external libraries
1854 libaacplus_encoder_deps="libaacplus"
1855 libcelt_decoder_deps="libcelt"
1856 libfaac_encoder_deps="libfaac"
1857 libfaac_encoder_select="audio_frame_queue"
1858 libfdk_aac_encoder_deps="libfdk_aac"
1859 libfdk_aac_encoder_select="audio_frame_queue"
1860 libgsm_decoder_deps="libgsm"
1861 libgsm_encoder_deps="libgsm"
1862 libgsm_ms_decoder_deps="libgsm"
1863 libgsm_ms_encoder_deps="libgsm"
1864 libilbc_decoder_deps="libilbc"
1865 libilbc_encoder_deps="libilbc"
1866 libmodplug_demuxer_deps="libmodplug"
1867 libmp3lame_encoder_deps="libmp3lame"
1868 libmp3lame_encoder_select="audio_frame_queue"
1869 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1870 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1871 libopencore_amrnb_encoder_select="audio_frame_queue"
1872 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1873 libopenjpeg_decoder_deps="libopenjpeg"
1874 libopenjpeg_encoder_deps="libopenjpeg"
1875 libopus_decoder_deps="libopus"
1876 libopus_encoder_deps="libopus"
1877 libopus_encoder_select="audio_frame_queue"
1878 libschroedinger_decoder_deps="libschroedinger"
1879 libschroedinger_encoder_deps="libschroedinger"
1880 libspeex_decoder_deps="libspeex"
1881 libspeex_encoder_deps="libspeex"
1882 libspeex_encoder_select="audio_frame_queue"
1883 libstagefright_h264_decoder_deps="libstagefright_h264"
1884 libtheora_encoder_deps="libtheora"
1885 libtwolame_encoder_deps="libtwolame"
1886 libvo_aacenc_encoder_deps="libvo_aacenc"
1887 libvo_aacenc_encoder_select="audio_frame_queue"
1888 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1889 libvorbis_decoder_deps="libvorbis"
1890 libvorbis_encoder_deps="libvorbis"
1891 libvorbis_encoder_select="audio_frame_queue"
1892 libvpx_decoder_deps="libvpx"
1893 libvpx_encoder_deps="libvpx"
1894 libx264_encoder_deps="libx264"
1895 libx264rgb_encoder_deps="libx264"
1896 libxavs_encoder_deps="libxavs"
1897 libxvid_encoder_deps="libxvid"
1898 libutvideo_decoder_deps="libutvideo"
1899 libutvideo_encoder_deps="libutvideo"
1900
1901 # demuxers / muxers
1902 ac3_demuxer_select="ac3_parser"
1903 asf_stream_muxer_select="asf_muxer"
1904 avisynth_demuxer_deps="avisynth"
1905 dirac_demuxer_select="dirac_parser"
1906 dts_demuxer_select="dca_parser"
1907 dtshd_demuxer_select="dca_parser"
1908 eac3_demuxer_select="ac3_parser"
1909 f4v_muxer_select="mov_muxer"
1910 flac_demuxer_select="flac_parser"
1911 ipod_muxer_select="mov_muxer"
1912 ismv_muxer_select="mov_muxer"
1913 libnut_demuxer_deps="libnut"
1914 libnut_muxer_deps="libnut"
1915 matroska_audio_muxer_select="matroska_muxer"
1916 matroska_demuxer_suggest="bzlib lzo zlib"
1917 mov_demuxer_suggest="zlib"
1918 mov_muxer_select="rtpenc_chain"
1919 mp3_demuxer_select="mpegaudio_parser"
1920 mp4_muxer_select="mov_muxer"
1921 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1922 mpegtsraw_demuxer_select="mpegts_demuxer"
1923 mxf_d10_muxer_select="mxf_muxer"
1924 ogg_demuxer_select="golomb"
1925 psp_muxer_select="mov_muxer"
1926 rtp_demuxer_select="sdp_demuxer"
1927 rtp_muxer_select="mpegvideo"
1928 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1929 rtsp_demuxer_select="http_protocol rtpdec"
1930 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
1931 sap_demuxer_select="sdp_demuxer"
1932 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
1933 sdp_demuxer_select="rtpdec"
1934 smoothstreaming_muxer_select="ismv_muxer"
1935 spdif_muxer_select="aac_parser"
1936 tak_demuxer_select="tak_parser"
1937 tg2_muxer_select="mov_muxer"
1938 tgp_muxer_select="mov_muxer"
1939 vobsub_demuxer_select="mpegps_demuxer"
1940 w64_demuxer_deps="wav_demuxer"
1941 w64_muxer_deps="wav_muxer"
1942
1943 # indevs / outdevs
1944 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1945 alsa_outdev_deps="alsa_asoundlib_h"
1946 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1947 caca_outdev_deps="libcaca"
1948 dshow_indev_deps="IBaseFilter"
1949 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1950 dv1394_indev_deps="dv1394 dv_demuxer"
1951 fbdev_indev_deps="linux_fb_h"
1952 iec61883_indev_deps="libiec61883"
1953 jack_indev_deps="jack_jack_h sem_timedwait"
1954 lavfi_indev_deps="avfilter"
1955 libcdio_indev_deps="libcdio"
1956 libdc1394_indev_deps="libdc1394"
1957 libv4l2_indev_deps="libv4l2"
1958 openal_indev_deps="openal"
1959 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1960 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1961 pulse_indev_deps="libpulse"
1962 sdl_outdev_deps="sdl"
1963 sndio_indev_deps="sndio_h"
1964 sndio_outdev_deps="sndio_h"
1965 v4l_indev_deps="linux_videodev_h"
1966 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1967 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1968 vfwcap_indev_extralibs="-lavicap32"
1969 x11grab_indev_deps="x11grab"
1970
1971 # protocols
1972 bluray_protocol_deps="libbluray"
1973 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1974 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1975 ffrtmpcrypt_protocol_select="tcp_protocol"
1976 ffrtmphttp_protocol_deps="!librtmp_protocol"
1977 ffrtmphttp_protocol_select="http_protocol"
1978 gopher_protocol_select="network"
1979 httpproxy_protocol_select="tcp_protocol"
1980 http_protocol_select="tcp_protocol"
1981 https_protocol_select="tls_protocol"
1982 librtmp_protocol_deps="librtmp"
1983 librtmpe_protocol_deps="librtmp"
1984 librtmps_protocol_deps="librtmp"
1985 librtmpt_protocol_deps="librtmp"
1986 librtmpte_protocol_deps="librtmp"
1987 mmsh_protocol_select="http_protocol"
1988 mmst_protocol_select="network"
1989 rtmp_protocol_deps="!librtmp_protocol"
1990 rtmp_protocol_select="tcp_protocol"
1991 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1992 rtmps_protocol_deps="!librtmp_protocol"
1993 rtmps_protocol_select="tls_protocol"
1994 rtmpt_protocol_select="ffrtmphttp_protocol"
1995 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1996 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1997 rtp_protocol_select="udp_protocol"
1998 sctp_protocol_deps="struct_sctp_event_subscribe"
1999 sctp_protocol_select="network"
2000 tcp_protocol_select="network"
2001 tls_protocol_deps_any="openssl gnutls"
2002 tls_protocol_select="tcp_protocol"
2003 udp_protocol_select="network"
2004
2005 # filters
2006 aconvert_filter_deps="swresample"
2007 amovie_filter_deps="avcodec avformat"
2008 aresample_filter_deps="swresample"
2009 ass_filter_deps="libass"
2010 asyncts_filter_deps="avresample"
2011 atempo_filter_deps="avcodec rdft"
2012 blackframe_filter_deps="gpl"
2013 boxblur_filter_deps="gpl"
2014 colormatrix_filter_deps="gpl"
2015 cropdetect_filter_deps="gpl"
2016 decimate_filter_deps="gpl avcodec"
2017 delogo_filter_deps="gpl"
2018 deshake_filter_deps="avcodec"
2019 drawtext_filter_deps="libfreetype"
2020 ebur128_filter_deps="gpl"
2021 flite_filter_deps="libflite"
2022 frei0r_filter_deps="frei0r dlopen"
2023 frei0r_filter_extralibs='$ldl'
2024 frei0r_src_filter_deps="frei0r dlopen"
2025 frei0r_src_filter_extralibs='$ldl'
2026 geq_filter_deps="gpl"
2027 histeq_filter_deps="gpl"
2028 hqdn3d_filter_deps="gpl"
2029 hue_filter_deps="gpl"
2030 kerndeint_filter_deps="gpl"
2031 movie_filter_deps="avcodec avformat"
2032 mp_filter_deps="gpl avcodec swscale inline_asm"
2033 mptestsrc_filter_deps="gpl"
2034 negate_filter_deps="lut_filter"
2035 resample_filter_deps="avresample"
2036 ocv_filter_deps="libopencv"
2037 pan_filter_deps="swresample"
2038 pp_filter_deps="gpl postproc"
2039 removelogo_filter_deps="avcodec avformat swscale"
2040 scale_filter_deps="swscale"
2041 smartblur_filter_deps="gpl swscale"
2042 showspectrum_filter_deps="avcodec rdft"
2043 subtitles_filter_deps="avformat avcodec libass"
2044 super2xsai_filter_deps="gpl"
2045 tinterlace_filter_deps="gpl"
2046 yadif_filter_deps="gpl"
2047 pixfmts_super2xsai_test_deps="super2xsai_filter"
2048 tinterlace_merge_test_deps="tinterlace_filter"
2049 tinterlace_pad_test_deps="tinterlace_filter"
2050
2051 # libraries
2052 avcodec_deps="avutil"
2053 avdevice_deps="avutil avcodec avformat"
2054 avfilter_deps="avutil"
2055 avformat_deps="avutil avcodec"
2056 avresample_deps="avutil"
2057 postproc_deps="avutil gpl"
2058 swscale_deps="avutil"
2059
2060 # programs
2061 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
2062 ffmpeg_select="ffbuffersink_filter format_filter aformat_filter
2063                setpts_filter null_filter anull_filter ffabuffersink_filter"
2064 ffplay_deps="avcodec avformat swscale swresample sdl"
2065 ffplay_select="ffbuffersink_filter rdft crop_filter"
2066 ffprobe_deps="avcodec avformat"
2067 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
2068 ffserver_extralibs='$ldl'
2069
2070 # documentation
2071 podpages_deps="perl"
2072 manpages_deps="perl pod2man"
2073 htmlpages_deps="texi2html"
2074 txtpages_deps="makeinfo"
2075 doc_deps_any="manpages htmlpages podpages txtpages"
2076
2077 # default parameters
2078
2079 logfile="config.log"
2080
2081 # installation paths
2082 prefix_default="/usr/local"
2083 bindir_default='${prefix}/bin'
2084 datadir_default='${prefix}/share/ffmpeg'
2085 incdir_default='${prefix}/include'
2086 libdir_default='${prefix}/lib'
2087 mandir_default='${prefix}/share/man'
2088 shlibdir_default="$libdir_default"
2089
2090 # toolchain
2091 ar_default="ar"
2092 cc_default="gcc"
2093 cxx_default="g++"
2094 host_cc_default="gcc"
2095 cp_f="cp -f"
2096 install="install"
2097 ln_s="ln -sf"
2098 nm_default="nm -g"
2099 objformat="elf"
2100 pkg_config_default=pkg-config
2101 ranlib="ranlib"
2102 strip_default="strip"
2103 yasmexe_default="yasm"
2104
2105 nogas=":"
2106
2107 # machine
2108 arch_default=$(uname -m)
2109 cpu="generic"
2110
2111 # OS
2112 target_os_default=$(tolower $(uname -s))
2113 host_os=$target_os_default
2114
2115 # configurable options
2116 enable $PROGRAM_LIST
2117 enable $DOCUMENT_LIST
2118 enable $(filter_out avresample $LIBRARY_LIST)
2119 enable stripping
2120
2121 enable asm
2122 enable debug
2123 enable doc
2124 enable optimizations
2125 enable runtime_cpudetect
2126 enable safe_bitstream_reader
2127 enable static
2128 enable swscale_alpha
2129
2130 # By default, enable only those hwaccels that have no external dependencies.
2131 enable dxva2 vdpau
2132
2133 # build settings
2134 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2135 FFSERVERLDFLAGS=-Wl,-E
2136 LIBPREF="lib"
2137 LIBSUF=".a"
2138 FULLNAME='$(NAME)$(BUILDSUF)'
2139 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2140 SLIBPREF="lib"
2141 SLIBSUF=".so"
2142 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2143 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2144 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2145 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2146 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2147 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2148
2149 asflags_filter=echo
2150 cflags_filter=echo
2151 ldflags_filter=echo
2152
2153 AS_C='-c'
2154 AS_O='-o $@'
2155 CC_C='-c'
2156 CC_E='-E -o $@'
2157 CC_O='-o $@'
2158 CXX_C='-c'
2159 CXX_O='-o $@'
2160 LD_O='-o $@'
2161 LD_LIB='-l%'
2162 LD_PATH='-L'
2163 HOSTCC_C='-c'
2164 HOSTCC_O='-o $@'
2165 HOSTLD_O='-o $@'
2166
2167 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
2168 host_libs='-lm'
2169 host_cflags_filter=echo
2170 host_ldflags_filter=echo
2171
2172 target_path='$(CURDIR)'
2173
2174 # since the object filename is not given with the -MM flag, the compiler
2175 # is only able to print the basename, and we must add the path ourselves
2176 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2177 DEPFLAGS='-MM'
2178
2179 # find source path
2180 if test -f configure; then
2181     source_path=.
2182 else
2183     source_path=$(cd $(dirname "$0"); pwd)
2184     echo "$source_path" | grep -q '[[:blank:]]' &&
2185         die "Out of tree builds are impossible with whitespace in source path."
2186     test -e "$source_path/config.h" &&
2187         die "Out of tree builds are impossible with config.h in source dir."
2188 fi
2189
2190 for v in "$@"; do
2191     r=${v#*=}
2192     l=${v%"$r"}
2193     r=$(sh_quote "$r")
2194     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2195 done
2196
2197 find_things(){
2198     thing=$1
2199     pattern=$2
2200     file=$source_path/$3
2201     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2202 }
2203
2204 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2205 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2206 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2207 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2208 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2209 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2210 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2211 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2212 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2213 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2214 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2215
2216 ALL_COMPONENTS="
2217     $BSF_LIST
2218     $DECODER_LIST
2219     $DEMUXER_LIST
2220     $ENCODER_LIST
2221     $FILTER_LIST
2222     $HWACCEL_LIST
2223     $INDEV_LIST
2224     $MUXER_LIST
2225     $OUTDEV_LIST
2226     $PARSER_LIST
2227     $PROTOCOL_LIST
2228 "
2229
2230 for n in $COMPONENT_LIST; do
2231     v=$(toupper ${n%s})_LIST
2232     eval enable \$$v
2233     eval ${n}_if_any="\$$v"
2234 done
2235
2236 enable $ARCH_EXT_LIST
2237
2238 die_unknown(){
2239     echo "Unknown option \"$1\"."
2240     echo "See $0 --help for available options."
2241     exit 1
2242 }
2243
2244 show_list() {
2245     suffix=_$1
2246     shift
2247     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2248     exit 0
2249 }
2250
2251 rand_list(){
2252     IFS=', '
2253     set -- $*
2254     unset IFS
2255     for thing; do
2256         comp=${thing%:*}
2257         prob=${thing#$comp}
2258         prob=${prob#:}
2259         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2260         echo "prob ${prob:-0.5}"
2261         printf '%s\n' $comp
2262     done
2263 }
2264
2265 do_random(){
2266     action=$1
2267     shift
2268     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2269     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2270 }
2271
2272 for opt do
2273     optval="${opt#*=}"
2274     case "$opt" in
2275         --extra-ldflags=*)
2276             add_ldflags $optval
2277         ;;
2278         --extra-libs=*)
2279             add_extralibs $optval
2280         ;;
2281         --disable-devices)
2282             disable $INDEV_LIST $OUTDEV_LIST
2283         ;;
2284         --enable-debug=*)
2285             debuglevel="$optval"
2286         ;;
2287         --disable-programs)
2288             disable $PROGRAM_LIST
2289         ;;
2290         --disable-everything)
2291             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2292         ;;
2293         --disable-all)
2294             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2295             disable $LIBRARY_LIST $PROGRAM_LIST doc
2296         ;;
2297         --enable-random|--disable-random)
2298             action=${opt%%-random}
2299             do_random ${action#--} $COMPONENT_LIST
2300         ;;
2301         --enable-random=*|--disable-random=*)
2302             action=${opt%%-random=*}
2303             do_random ${action#--} $optval
2304         ;;
2305         --enable-*=*|--disable-*=*)
2306             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2307             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2308             eval list=\$$(toupper $thing)_LIST
2309             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2310             list=$(filter "$name" $list)
2311             [ "$list" = "" ] && warn "Option $opt did not match anything"
2312             $action $list
2313         ;;
2314         --enable-?*|--disable-?*)
2315             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2316             if is_in $option $COMPONENT_LIST; then
2317                 test $action = disable && action=unset
2318                 eval $action \$$(toupper ${option%s})_LIST
2319             elif is_in $option $CMDLINE_SELECT; then
2320                 $action $option
2321             else
2322                 die_unknown $opt
2323             fi
2324         ;;
2325         --list-*)
2326             NAME="${opt#--list-}"
2327             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2328             NAME=${NAME%s}
2329             eval show_list $NAME \$$(toupper $NAME)_LIST
2330         ;;
2331         --help|-h) show_help
2332         ;;
2333         --fatal-warnings) enable fatal_warnings
2334         ;;
2335         *)
2336             optname="${opt%%=*}"
2337             optname="${optname#--}"
2338             optname=$(echo "$optname" | sed 's/-/_/g')
2339             if is_in $optname $CMDLINE_SET; then
2340                 eval $optname='$optval'
2341             elif is_in $optname $CMDLINE_APPEND; then
2342                 append $optname "$optval"
2343             else
2344                 die_unknown $opt
2345             fi
2346         ;;
2347     esac
2348 done
2349
2350 disabled logging && logfile=/dev/null
2351
2352 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2353 set >> $logfile
2354
2355 test -n "$cross_prefix" && enable cross_compile
2356
2357 if enabled cross_compile; then
2358     test -n "$arch" && test -n "$target_os" ||
2359         die "Must specify target arch and OS when cross-compiling"
2360 fi
2361
2362 ar_default="${cross_prefix}${ar_default}"
2363 cc_default="${cross_prefix}${cc_default}"
2364 cxx_default="${cross_prefix}${cxx_default}"
2365 nm_default="${cross_prefix}${nm_default}"
2366 pkg_config_default="${cross_prefix}${pkg_config_default}"
2367 ranlib="${cross_prefix}${ranlib}"
2368 strip_default="${cross_prefix}${strip_default}"
2369
2370 sysinclude_default="${sysroot}/usr/include"
2371
2372 case "$toolchain" in
2373     clang-asan)
2374         cc_default="clang"
2375         add_cflags  -faddress-sanitizer
2376         add_ldflags -faddress-sanitizer
2377     ;;
2378     clang-tsan)
2379         cc_default="clang"
2380         add_cflags  -fthread-sanitizer
2381         add_ldflags -fthread-sanitizer
2382     ;;
2383     msvc)
2384         cc_default="c99wrap cl"
2385         ld_default="c99wrap link"
2386         nm_default="dumpbin -symbols"
2387         ar_default="lib"
2388         target_os_default="win32"
2389     ;;
2390     ?*)
2391         die "Unknown toolchain $toolchain"
2392     ;;
2393 esac
2394
2395 set_default arch cc cxx pkg_config strip sysinclude target_os yasmexe
2396 enabled cross_compile || host_cc_default=$cc
2397 set_default host_cc
2398
2399 if ! $pkg_config --version >/dev/null 2>&1; then
2400     warn "$pkg_config not found, library detection may fail."
2401     pkg_config=false
2402 fi
2403
2404 exesuf() {
2405     case $1 in
2406         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2407     esac
2408 }
2409
2410 EXESUF=$(exesuf $target_os)
2411 HOSTEXESUF=$(exesuf $host_os)
2412
2413 # set temporary file name
2414 : ${TMPDIR:=$TEMPDIR}
2415 : ${TMPDIR:=$TMP}
2416 : ${TMPDIR:=/tmp}
2417
2418 if ! check_cmd mktemp -u XXXXXX; then
2419     # simple replacement for missing mktemp
2420     # NOT SAFE FOR GENERAL USE
2421     mktemp(){
2422         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2423     }
2424 fi
2425
2426 tmpfile(){
2427     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2428         (set -C; exec > $tmp) 2>/dev/null ||
2429         die "Unable to create temporary file in $TMPDIR."
2430     append TMPFILES $tmp
2431     eval $1=$tmp
2432 }
2433
2434 trap 'rm -f -- $TMPFILES' EXIT
2435
2436 tmpfile TMPASM .asm
2437 tmpfile TMPC   .c
2438 tmpfile TMPCPP .cpp
2439 tmpfile TMPE   $EXESUF
2440 tmpfile TMPH   .h
2441 tmpfile TMPO   .o
2442 tmpfile TMPS   .S
2443 tmpfile TMPSH  .sh
2444 tmpfile TMPV   .ver
2445
2446 unset -f mktemp
2447
2448 chmod +x $TMPE
2449
2450 # make sure we can execute files in $TMPDIR
2451 cat > $TMPSH 2>> $logfile <<EOF
2452 #! /bin/sh
2453 EOF
2454 chmod +x $TMPSH >> $logfile 2>&1
2455 if ! $TMPSH >> $logfile 2>&1; then
2456     cat <<EOF
2457 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2458 variable to another directory and make sure that it is not mounted noexec.
2459 EOF
2460     die "Sanity test failed."
2461 fi
2462
2463 ccc_flags(){
2464     for flag; do
2465         case $flag in
2466             -std=c99)           echo -c99                       ;;
2467             -mcpu=*)            echo -arch ${flag#*=}           ;;
2468             -mieee)             echo -ieee                      ;;
2469             -O*|-fast)          echo $flag                      ;;
2470             -fno-math-errno)    echo -assume nomath_errno       ;;
2471             -g)                 echo -g3                        ;;
2472             -Wall)              echo -msg_enable level2         ;;
2473             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2474             -Wl,*)              echo $flag                      ;;
2475             -f*|-W*)                                            ;;
2476             *)                  echo $flag                      ;;
2477         esac
2478    done
2479 }
2480
2481 msvc_flags(){
2482     for flag; do
2483         case $flag in
2484             -fomit-frame-pointer) echo -Oy ;;
2485             -g)                   echo -Z7 ;;
2486             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2487                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2488                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2489                                        -wd4554 \
2490                                        -wd4996 -wd4273 ;;
2491             -std=c99)             ;;
2492             -fno-math-errno)      ;;
2493             -fno-common)          ;;
2494             -fno-signed-zeros)    ;;
2495             -fPIC)                ;;
2496             -lz)                  echo zlib.lib ;;
2497             -lavifil32)           echo vfw32.lib ;;
2498             -lavicap32)           echo vfw32.lib user32.lib ;;
2499             -l*)                  echo ${flag#-l}.lib ;;
2500             *)                    echo $flag ;;
2501         esac
2502     done
2503 }
2504
2505 pgi_flags(){
2506     for flag; do
2507         case $flag in
2508             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2509             -fomit-frame-pointer) echo -Mnoframe ;;
2510             -g)                   echo -gopt ;;
2511             *)                    echo $flag ;;
2512         esac
2513     done
2514 }
2515
2516 suncc_flags(){
2517     for flag; do
2518         case $flag in
2519             -march=*|-mcpu=*)
2520                 case "${flag#*=}" in
2521                     native)                   echo -xtarget=native       ;;
2522                     v9|niagara)               echo -xarch=sparc          ;;
2523                     ultrasparc)               echo -xarch=sparcvis       ;;
2524                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2525                     i586|pentium)             echo -xchip=pentium        ;;
2526                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2527                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2528                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2529                     pentium4*)          echo -xtarget=pentium4           ;;
2530                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2531                     *-sse3)             echo -xarch=sse3                 ;;
2532                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2533                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2534                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2535                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2536                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2537                     k8|opteron|athlon64|athlon-fx)
2538                                               echo -xarch=sse2a          ;;
2539                     athlon*)                  echo -xarch=pentium_proa   ;;
2540                 esac
2541                 ;;
2542             -std=c99)             echo -xc99              ;;
2543             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2544             -fPIC)                echo -KPIC -xcode=pic32 ;;
2545             -W*,*)                echo $flag              ;;
2546             -f*-*|-W*)                                    ;;
2547             *)                    echo $flag              ;;
2548         esac
2549     done
2550 }
2551
2552 tms470_flags(){
2553     for flag; do
2554         case $flag in
2555             -march=*|-mcpu=*)
2556                 case "${flag#*=}" in
2557                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2558                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2559                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2560                     armv6*|arm11*)          echo -mv=6   ;;
2561                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2562                                             echo -mv=5e  ;;
2563                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2564                 esac
2565                 ;;
2566             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2567             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2568             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2569             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2570             -msoft-float)   echo --float_support=vfplib       ;;
2571             -O[0-3]|-mf=*)  echo $flag                        ;;
2572             -g)             echo -g -mn                       ;;
2573             -pds=*)         echo $flag                        ;;
2574             -D*|-I*)        echo $flag                        ;;
2575             --gcc|--abi=*)  echo $flag                        ;;
2576             -me)            echo $flag                        ;;
2577         esac
2578     done
2579 }
2580
2581 probe_cc(){
2582     pfx=$1
2583     _cc=$2
2584
2585     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2586     unset _ld_o _ldflags _ld_lib _ld_path
2587     unset _depflags _DEPCMD _DEPFLAGS
2588     _flags_filter=echo
2589
2590     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
2591         true # no-op to avoid reading stdin in following checks
2592     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2593         _type=llvm_gcc
2594         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2595         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2596         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2597         _cflags_speed='-O3'
2598         _cflags_size='-Os'
2599     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2600         _type=gcc
2601         gcc_version=$($_cc --version | head -n1)
2602         gcc_basever=$($_cc -dumpversion)
2603         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2604         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2605         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2606         if ! $_cc -dumpversion | grep -q '^2\.'; then
2607             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2608         fi
2609         _cflags_speed='-O3'
2610         _cflags_size='-Os'
2611     elif $_cc --version 2>/dev/null | grep -q Intel; then
2612         _type=icc
2613         _ident=$($_cc --version | head -n1)
2614         _depflags='-MMD'
2615         _cflags_speed='-O3'
2616         _cflags_size='-Os'
2617         _cflags_noopt='-O1'
2618     elif $_cc -v 2>&1 | grep -q xlc; then
2619         _type=xlc
2620         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2621         _cflags_speed='-O5'
2622         _cflags_size='-O5 -qcompact'
2623     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2624         _type=ccc
2625         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2626         _DEPFLAGS='-M'
2627         _cflags_speed='-fast'
2628         _cflags_size='-O1'
2629         _flags_filter=ccc_flags
2630     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2631         test -d "$sysroot" || die "No valid sysroot specified."
2632         _type=armcc
2633         _ident=$($_cc --vsn | head -n1)
2634         armcc_conf="$PWD/armcc.conf"
2635         $_cc --arm_linux_configure                 \
2636              --arm_linux_config_file="$armcc_conf" \
2637              --configure_sysroot="$sysroot"        \
2638              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2639              die "Error creating armcc configuration file."
2640         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2641         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2642         as_default="${cross_prefix}gcc"
2643         _depflags='-MMD'
2644         _cflags_speed='-O3'
2645         _cflags_size='-Os'
2646     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2647         _type=tms470
2648         _ident=$($_cc -version | head -n1 | tr -s ' ')
2649         _flags='--gcc --abi=eabi -me'
2650         _cc_e='-ppl -fe=$@'
2651         _cc_o='-fe=$@'
2652         _depflags='-ppa -ppd=$(@:.o=.d)'
2653         _cflags_speed='-O3 -mf=5'
2654         _cflags_size='-O3 -mf=2'
2655         _flags_filter=tms470_flags
2656     elif $_cc -v 2>&1 | grep -q clang; then
2657         _type=clang
2658         _ident=$($_cc --version | head -n1)
2659         _depflags='-MMD'
2660         _cflags_speed='-O3'
2661         _cflags_size='-Os'
2662     elif $_cc -V 2>&1 | grep -q Sun; then
2663         _type=suncc
2664         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2665         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2666         _DEPFLAGS='-xM1 -xc99'
2667         _ldflags='-std=c99'
2668         _cflags_speed='-O5'
2669         _cflags_size='-O5 -xspace'
2670         _flags_filter=suncc_flags
2671     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2672         _type=pathscale
2673         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2674         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2675         _cflags_speed='-O2'
2676         _cflags_size='-Os'
2677         _flags_filter='filter_out -Wdisabled-optimization'
2678     elif $_cc -v 2>&1 | grep -q Open64; then
2679         _type=open64
2680         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2681         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2682         _cflags_speed='-O2'
2683         _cflags_size='-Os'
2684         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2685     elif $_cc -V 2>&1 | grep -q Portland; then
2686         _type=pgi
2687         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2688         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2689         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2690         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2691         _cflags_noopt="-O1"
2692         _flags_filter=pgi_flags
2693     elif $_cc 2>&1 | grep -q Microsoft; then
2694         _type=msvc
2695         _ident=$($cc 2>&1 | head -n1)
2696         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2697         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2698         _cflags_speed="-O2"
2699         _cflags_size="-O1"
2700         # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2701         if $_cc 2>&1 | grep -q Linker; then
2702             _ld_o='-out $@'
2703         else
2704             _ld_o='-Fe$@'
2705         fi
2706         _cc_o='-Fo $@'
2707         _cc_e='-P -Fi $@'
2708         _flags_filter=msvc_flags
2709         _ld_lib='lib%.a'
2710         _ld_path='-libpath:'
2711         _flags='-nologo'
2712         _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2713         if [ $pfx = hostcc ]; then
2714             append _cflags -Dsnprintf=_snprintf
2715         fi
2716         disable stripping
2717     fi
2718
2719     eval ${pfx}_type=\$_type
2720     eval ${pfx}_ident=\$_ident
2721 }
2722
2723 set_ccvars(){
2724     eval ${1}_C=\${_cc_c-\${${1}_C}}
2725     eval ${1}_E=\${_cc_e-\${${1}_E}}
2726     eval ${1}_O=\${_cc_o-\${${1}_O}}
2727
2728     if [ -n "$_depflags" ]; then
2729         eval ${1}_DEPFLAGS=\$_depflags
2730     else
2731         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2732         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2733         eval DEP${1}FLAGS=\$_flags
2734     fi
2735 }
2736
2737 probe_cc cc "$cc"
2738 cflags_filter=$_flags_filter
2739 cflags_speed=$_cflags_speed
2740 cflags_size=$_cflags_size
2741 cflags_noopt=$_cflags_noopt
2742 add_cflags $_flags $_cflags
2743 cc_ldflags=$_ldflags
2744 set_ccvars CC
2745
2746 probe_cc hostcc "$host_cc"
2747 host_cflags_filter=$_flags_filter
2748 add_host_cflags  $_flags $_cflags
2749 set_ccvars HOSTCC
2750
2751 test -n "$cc_type" && enable $cc_type ||
2752     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2753
2754 : ${as_default:=$cc}
2755 : ${dep_cc_default:=$cc}
2756 : ${ld_default:=$cc}
2757 : ${host_ld_default:=$host_cc}
2758 set_default ar as dep_cc ld host_ld
2759
2760 probe_cc as "$as"
2761 asflags_filter=$_flags_filter
2762 add_asflags $_flags $_cflags
2763 set_ccvars AS
2764
2765 probe_cc ld "$ld"
2766 ldflags_filter=$_flags_filter
2767 add_ldflags $_flags $_ldflags
2768 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2769 LD_O=${_ld_o-$LD_O}
2770 LD_LIB=${_ld_lib-$LD_LIB}
2771 LD_PATH=${_ld_path-$LD_PATH}
2772
2773 probe_cc hostld "$host_ld"
2774 host_ldflags_filter=$_flags_filter
2775 add_host_ldflags $_flags $_ldflags
2776 HOSTLD_O=${_ld_o-$HOSTLD_O}
2777
2778 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2779     probe_cc depcc "$dep_cc"
2780     CCDEP=${_DEPCMD:-$DEPCMD}
2781     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2782     DEPCCFLAGS=$_flags
2783 fi
2784
2785 if $ar 2>&1 | grep -q Microsoft; then
2786     arflags="-nologo"
2787     ar_o='-out:$@'
2788 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2789     arflags="rq"
2790     ar_o='$@'
2791 else
2792     arflags="rc"
2793     ar_o='$@'
2794 fi
2795
2796 add_cflags $extra_cflags
2797 add_cxxflags $extra_cxxflags
2798 add_asflags $extra_cflags
2799
2800 if test -n "$sysroot"; then
2801     case "$cc_type" in
2802         gcc|llvm_gcc|clang)
2803             add_cppflags --sysroot="$sysroot"
2804             add_ldflags --sysroot="$sysroot"
2805         ;;
2806         tms470)
2807             add_cppflags -I"$sysinclude"
2808             add_ldflags  --sysroot="$sysroot"
2809         ;;
2810     esac
2811 fi
2812
2813 if test "$cpu" = host; then
2814     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2815
2816     case "$cc_type" in
2817         gcc|llvm_gcc)
2818             check_native(){
2819                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2820                 sed -n "/cc1.*$1=/{
2821                             s/.*$1=\\([^ ]*\\).*/\\1/
2822                             p
2823                             q
2824                         }" $TMPE
2825             }
2826             cpu=$(check_native -march || check_native -mcpu)
2827         ;;
2828     esac
2829
2830     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2831 fi
2832
2833 # Deal with common $arch aliases
2834 case "$arch" in
2835     aarch64|arm64)
2836         arch="aarch64"
2837     ;;
2838     arm*|iPad*)
2839         arch="arm"
2840     ;;
2841     mips*|IP*)
2842         arch="mips"
2843     ;;
2844     parisc*|hppa*)
2845         arch="parisc"
2846     ;;
2847     "Power Macintosh"|ppc*|powerpc*)
2848         arch="ppc"
2849     ;;
2850     s390|s390x)
2851         arch="s390"
2852     ;;
2853     sh4|sh)
2854         arch="sh4"
2855     ;;
2856     sun4u|sparc*)
2857         arch="sparc"
2858     ;;
2859     tilegx|tile-gx)
2860         arch="tilegx"
2861     ;;
2862     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2863         arch="x86"
2864     ;;
2865 esac
2866
2867 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2868 enable $arch
2869
2870 # Add processor-specific flags
2871 if enabled aarch64; then
2872
2873     case $cpu in
2874         armv*)
2875             cpuflags="-march=$cpu"
2876         ;;
2877         *)
2878             cpuflags="-mcpu=$cpu"
2879         ;;
2880     esac
2881
2882 elif enabled alpha; then
2883
2884     cpuflags="-mcpu=$cpu"
2885
2886 elif enabled arm; then
2887
2888     check_arm_arch() {
2889         check_cpp_condition stddef.h \
2890             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
2891             $cpuflags
2892     }
2893
2894     probe_arm_arch() {
2895         if   check_arm_arch 4;        then echo armv4;
2896         elif check_arm_arch 4T;       then echo armv4t;
2897         elif check_arm_arch 5;        then echo armv5;
2898         elif check_arm_arch 5E;       then echo armv5e;
2899         elif check_arm_arch 5T;       then echo armv5t;
2900         elif check_arm_arch 5TE;      then echo armv5te;
2901         elif check_arm_arch 5TEJ;     then echo armv5te;
2902         elif check_arm_arch 6;        then echo armv6;
2903         elif check_arm_arch 6J;       then echo armv6j;
2904         elif check_arm_arch 6K;       then echo armv6k;
2905         elif check_arm_arch 6Z;       then echo armv6z;
2906         elif check_arm_arch 6ZK;      then echo armv6zk;
2907         elif check_arm_arch 6T2;      then echo armv6t2;
2908         elif check_arm_arch 7;        then echo armv7;
2909         elif check_arm_arch 7A  7_A;  then echo armv7-a;
2910         elif check_arm_arch 7R  7_R;  then echo armv7-r;
2911         elif check_arm_arch 7M  7_M;  then echo armv7-m;
2912         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
2913         elif check_arm_arch 8A  8_A;  then echo armv8-a;
2914         fi
2915     }
2916
2917     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
2918
2919     case $cpu in
2920         armv*)
2921             cpuflags="-march=$cpu"
2922             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2923         ;;
2924         *)
2925             cpuflags="-mcpu=$cpu"
2926             case $cpu in
2927                 cortex-a*)                               subarch=armv7a  ;;
2928                 cortex-r*)                               subarch=armv7r  ;;
2929                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2930                 arm11*)                                  subarch=armv6   ;;
2931                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2932                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2933                 *)                             subarch=$(probe_arm_arch) ;;
2934             esac
2935         ;;
2936     esac
2937
2938     case "$subarch" in
2939         armv5t*)    enable fast_clz                ;;
2940         armv[6-8]*) enable fast_clz fast_unaligned ;;
2941     esac
2942
2943 elif enabled avr32; then
2944
2945     case $cpu in
2946         ap7[02]0[0-2])
2947             subarch="avr32_ap"
2948             cpuflags="-mpart=$cpu"
2949         ;;
2950         ap)
2951             subarch="avr32_ap"
2952             cpuflags="-march=$cpu"
2953         ;;
2954         uc3[ab]*)
2955             subarch="avr32_uc"
2956             cpuflags="-mcpu=$cpu"
2957         ;;
2958         uc)
2959             subarch="avr32_uc"
2960             cpuflags="-march=$cpu"
2961         ;;
2962     esac
2963
2964 elif enabled bfin; then
2965
2966     cpuflags="-mcpu=$cpu"
2967
2968 elif enabled mips; then
2969
2970     cpuflags="-march=$cpu"
2971
2972     case $cpu in
2973         24kc)
2974             disable mipsfpu
2975             disable mipsdspr1
2976             disable mipsdspr2
2977         ;;
2978         24kf*)
2979             disable mipsdspr1
2980             disable mipsdspr2
2981         ;;
2982         24kec|34kc|1004kc)
2983             disable mipsfpu
2984             disable mipsdspr2
2985         ;;
2986         24kef*|34kf*|1004kf*)
2987             disable mipsdspr2
2988         ;;
2989         74kc)
2990             disable mipsfpu
2991         ;;
2992     esac
2993
2994 elif enabled ppc; then
2995
2996     case $(tolower $cpu) in
2997         601|ppc601|powerpc601)
2998             cpuflags="-mcpu=601"
2999             disable altivec
3000         ;;
3001         603*|ppc603*|powerpc603*)
3002             cpuflags="-mcpu=603"
3003             disable altivec
3004         ;;
3005         604*|ppc604*|powerpc604*)
3006             cpuflags="-mcpu=604"
3007             disable altivec
3008         ;;
3009         g3|75*|ppc75*|powerpc75*)
3010             cpuflags="-mcpu=750"
3011             disable altivec
3012         ;;
3013         g4|745*|ppc745*|powerpc745*)
3014             cpuflags="-mcpu=7450"
3015         ;;
3016         74*|ppc74*|powerpc74*)
3017             cpuflags="-mcpu=7400"
3018         ;;
3019         g5|970|ppc970|powerpc970)
3020             cpuflags="-mcpu=970"
3021         ;;
3022         power[3-7]*)
3023             cpuflags="-mcpu=$cpu"
3024         ;;
3025         cell)
3026             cpuflags="-mcpu=cell"
3027             enable ldbrx
3028         ;;
3029         e500mc)
3030             cpuflags="-mcpu=e500mc"
3031             disable altivec
3032         ;;
3033         e500v2)
3034             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3035             disable altivec
3036         ;;
3037         e500)
3038             cpuflags="-mcpu=8540 -mhard-float"
3039             disable altivec
3040         ;;
3041     esac
3042
3043 elif enabled sparc; then
3044
3045     case $cpu in
3046         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3047             cpuflags="-mcpu=$cpu"
3048             disable vis
3049         ;;
3050         ultrasparc*|niagara[234])
3051             cpuflags="-mcpu=$cpu"
3052         ;;
3053     esac
3054
3055 elif enabled x86; then
3056
3057     case $cpu in
3058         i[345]86|pentium)
3059             cpuflags="-march=$cpu"
3060             disable mmx
3061         ;;
3062         # targets that do NOT support conditional mov (cmov)
3063         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3064             cpuflags="-march=$cpu"
3065             disable cmov
3066         ;;
3067         # targets that do support conditional mov (cmov)
3068         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
3069             cpuflags="-march=$cpu"
3070             enable cmov
3071             enable fast_cmov
3072         ;;
3073         # targets that do support conditional mov but on which it's slow
3074         pentium4|pentium4m|prescott|nocona)
3075             cpuflags="-march=$cpu"
3076             enable cmov
3077             disable fast_cmov
3078         ;;
3079     esac
3080
3081 fi
3082
3083 if [ "$cpu" != generic ]; then
3084     add_cflags  $cpuflags
3085     add_asflags $cpuflags
3086 fi
3087
3088 # compiler sanity check
3089 check_exec <<EOF
3090 int main(void){ return 0; }
3091 EOF
3092 if test "$?" != 0; then
3093     echo "$cc is unable to create an executable file."
3094     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3095         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3096         echo "Only do this if you know what cross compiling means."
3097     fi
3098     die "C compiler test failed."
3099 fi
3100
3101 add_cppflags -D_ISOC99_SOURCE
3102 add_cxxflags -D__STDC_CONSTANT_MACROS
3103 check_cflags -std=c99
3104 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3105 #include <stdlib.h>
3106 EOF
3107 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3108 #include <stdlib.h>
3109 EOF
3110
3111 check_host_cflags -std=c99
3112 check_host_cflags -Wall
3113
3114 check_64bit(){
3115     arch32=$1
3116     arch64=$2
3117     expr=$3
3118     check_code cc "" "int test[2*($expr) - 1]" &&
3119         subarch=$arch64 || subarch=$arch32
3120 }
3121
3122 case "$arch" in
3123     aarch64|alpha|ia64)
3124         spic=$shared
3125     ;;
3126     mips)
3127         check_64bit mips mips64 '_MIPS_SIM > 1'
3128         spic=$shared
3129     ;;
3130     parisc)
3131         check_64bit parisc parisc64 'sizeof(void *) > 4'
3132         spic=$shared
3133     ;;
3134     ppc)
3135         check_64bit ppc ppc64 'sizeof(void *) > 4'
3136         spic=$shared
3137     ;;
3138     s390)
3139         check_64bit s390 s390x 'sizeof(void *) > 4'
3140         spic=$shared
3141     ;;
3142     sparc)
3143         check_64bit sparc sparc64 'sizeof(void *) > 4'
3144         spic=$shared
3145     ;;
3146     x86)
3147         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3148         if test "$subarch" = "x86_64"; then
3149             spic=$shared
3150         fi
3151     ;;
3152     ppc)
3153         check_cc <<EOF && subarch="ppc64"
3154         int test[(int)sizeof(char*) - 7];
3155 EOF
3156     ;;
3157 esac
3158
3159 enable $subarch
3160 enabled spic && enable pic
3161
3162 # OS specific
3163 case $target_os in
3164     haiku)
3165         prefix_default="/boot/common"
3166         network_extralibs="-lnetwork"
3167         host_libs=
3168         ;;
3169     sunos)
3170         FFSERVERLDFLAGS=""
3171         SHFLAGS='-shared -Wl,-h,$$(@F)'
3172         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3173         network_extralibs="-lsocket -lnsl"
3174         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3175         # When using suncc to build, the Solaris linker will mark
3176         # an executable with each instruction set encountered by
3177         # the Solaris assembler.  As our libraries contain their own
3178         # guards for processor-specific code, instead suppress
3179         # generation of the HWCAPS ELF section on Solaris x86 only.
3180         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
3181         nm_default='nm -P -g'
3182         ;;
3183     netbsd)
3184         disable symver
3185         oss_indev_extralibs="-lossaudio"
3186         oss_outdev_extralibs="-lossaudio"
3187         enabled gcc || check_ldflags -Wl,-zmuldefs
3188         ;;
3189     openbsd|bitrig)
3190         # On OpenBSD 4.5. the compiler does not use PIC unless
3191         # explicitly using -fPIC. FFmpeg builds fine without PIC,
3192         # however the generated executable will not do anything
3193         # (simply quits with exit-code 1, no crash, no output).
3194         # Thus explicitly enable PIC here.
3195         enable pic
3196         disable symver
3197         SHFLAGS='-shared'
3198         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
3199         SLIB_INSTALL_LINKS=
3200         oss_indev_extralibs="-lossaudio"
3201         oss_outdev_extralibs="-lossaudio"
3202         ;;
3203     dragonfly)
3204         disable symver
3205         ;;
3206     freebsd)
3207         ;;
3208     bsd/os)
3209         add_extralibs -lpoll -lgnugetopt
3210         strip="strip -d"
3211         ;;
3212     darwin)
3213         gas="gas-preprocessor.pl $cc"
3214         enabled ppc && add_asflags -force_cpusubtype_ALL
3215         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3216         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3217         strip="${strip} -x"
3218         add_ldflags -Wl,-dynamic,-search_paths_first
3219         SLIBSUF=".dylib"
3220         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3221         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3222         FFSERVERLDFLAGS=-Wl,-bind_at_load
3223         objformat="macho"
3224         enabled x86_64 && objformat="macho64"
3225         enabled_any pic shared ||
3226             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3227         ;;
3228     mingw32*)
3229         if test $target_os = "mingw32ce"; then
3230             disable network
3231         else
3232             target_os=mingw32
3233         fi
3234         LIBTARGET=i386
3235         if enabled x86_64; then
3236             LIBTARGET="i386:x86-64"
3237         elif enabled arm; then
3238             LIBTARGET=arm-wince
3239         fi
3240         shlibdir_default="$bindir_default"
3241         SLIBPREF=""
3242         SLIBSUF=".dll"
3243         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3244         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3245         dlltool="${cross_prefix}dlltool"
3246         if check_cmd lib.exe -list; then
3247             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3248             if enabled x86_64; then
3249                 LIBTARGET=x64
3250             fi
3251         elif check_cmd $dlltool --version; then
3252             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3253         fi
3254         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3255         SLIB_INSTALL_LINKS=
3256         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3257         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3258         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
3259         objformat="win32"
3260         ranlib=:
3261         enable dos_paths
3262         add_cppflags -U__STRICT_ANSI__
3263         ;;
3264     win32|win64)
3265         if enabled shared; then
3266             # Link to the import library instead of the normal static library
3267             # for shared libs.
3268             LD_LIB='%.lib'
3269             # Cannot build shared and static libraries at the same time with
3270             # MSVC.
3271             disable static
3272         fi
3273         shlibdir_default="$bindir_default"
3274         SLIBPREF=""
3275         SLIBSUF=".dll"
3276         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3277         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3278         SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3279         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3280         SLIB_INSTALL_LINKS=
3281         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3282         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3283         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3284         objformat="win32"
3285         ranlib=:
3286         enable dos_paths
3287         ;;
3288     cygwin*)
3289         target_os=cygwin
3290         shlibdir_default="$bindir_default"
3291         SLIBPREF="cyg"
3292         SLIBSUF=".dll"
3293         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3294         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3295         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3296         SLIB_INSTALL_LINKS=
3297         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3298         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3299         objformat="win32"
3300         enable dos_paths
3301         ;;
3302     *-dos|freedos|opendos)
3303         network_extralibs="-lsocket"
3304         objformat="coff"
3305         enable dos_paths
3306         add_cppflags -U__STRICT_ANSI__
3307         ;;
3308     linux)
3309         enable dv1394
3310         ;;
3311     irix*)
3312         target_os=irix
3313         ranlib="echo ignoring ranlib"
3314         ;;
3315     os/2*)
3316         strip="lxlite -CS"
3317         ln_s="cp -f"
3318         objformat="aout"
3319         add_cppflags -D_GNU_SOURCE
3320         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3321         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3322         FFSERVERLDFLAGS=""
3323         LIBSUF="_s.a"
3324         SLIBPREF=""
3325         SLIBSUF=".dll"
3326         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3327         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3328         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3329             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3330             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3331             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3332             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3333             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3334         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3335             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3336         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3337         enable dos_paths
3338         enable_weak os2threads
3339         ;;
3340     gnu/kfreebsd)
3341         add_cppflags -D_BSD_SOURCE
3342         ;;
3343     gnu)
3344         ;;
3345     qnx)
3346         add_cppflags -D_QNX_SOURCE
3347         network_extralibs="-lsocket"
3348         ;;
3349     symbian)
3350         SLIBSUF=".dll"
3351         enable dos_paths
3352         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3353         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3354         add_ldflags -Wl,--target1-abs,--no-undefined \
3355                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3356                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3357         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3358                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3359                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3360         ;;
3361     osf1)
3362         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3363         FFSERVERLDFLAGS=
3364         ;;
3365     minix)
3366         ;;
3367     plan9)
3368         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3369                      -D_REENTRANT_SOURCE        \
3370                      -D_RESEARCH_SOURCE         \
3371                      -DFD_SETSIZE=96            \
3372                      -DHAVE_SOCK_OPTS
3373         add_compat strtod.o strtod=avpriv_strtod
3374         network_extralibs='-lbsd'
3375         exeobjs=compat/plan9/main.o
3376         disable ffserver
3377         ln_s='ln -s -f'
3378         cp_f='cp'
3379         ;;
3380     none)
3381         ;;
3382     *)
3383         die "Unknown OS '$target_os'."
3384         ;;
3385 esac
3386
3387 # determine libc flavour
3388
3389 if check_cpp_condition features.h "defined __UCLIBC__"; then
3390     libc_type=uclibc
3391     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3392 elif check_cpp_condition features.h "defined __GLIBC__"; then
3393     libc_type=glibc
3394     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3395 elif check_header _mingw.h; then
3396     libc_type=mingw
3397     check_cpp_condition _mingw.h \
3398         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3399             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3400         die "ERROR: MinGW runtime version must be >= 3.15."
3401     if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3402             __MINGW64_VERSION_MAJOR < 3"; then
3403         add_compat msvcrt/snprintf.o
3404         add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3405     fi
3406 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3407     libc_type=newlib
3408     add_cppflags -U__STRICT_ANSI__
3409 elif check_func_headers stdlib.h _get_doserrno; then
3410     libc_type=msvcrt
3411     add_compat strtod.o strtod=avpriv_strtod
3412     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3413                                  _snprintf=avpriv_snprintf  \
3414                                  vsnprintf=avpriv_vsnprintf
3415 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3416     libc_type=klibc
3417 fi
3418
3419 test -n "$libc_type" && enable $libc_type
3420
3421 # hacks for compiler/libc/os combinations
3422
3423 if enabled_all tms470 glibc; then
3424     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3425     add_cppflags -D__USER_LABEL_PREFIX__=
3426     add_cppflags -D__builtin_memset=memset
3427     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3428     add_cflags   -pds=48    # incompatible redefinition of macro
3429 fi
3430
3431 if enabled_all ccc glibc; then
3432     add_ldflags -Wl,-z,now  # calls to libots crash without this
3433 fi
3434
3435 esc(){
3436     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3437 }
3438
3439 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3440
3441 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3442
3443 set_default $PATHS_LIST
3444 set_default nm
3445
3446 # we need to build at least one lib type
3447 if ! enabled_any static shared; then
3448     cat <<EOF
3449 At least one library type must be built.
3450 Specify --enable-static to build the static libraries or --enable-shared to
3451 build the shared libraries as well. To only build the shared libraries specify
3452 --disable-static in addition to --enable-shared.
3453 EOF
3454     exit 1;
3455 fi
3456
3457 die_license_disabled() {
3458     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3459 }
3460
3461 die_license_disabled_gpl() {
3462     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3463 }
3464
3465 die_license_disabled gpl libcdio
3466 die_license_disabled gpl libutvideo
3467 die_license_disabled gpl libx264
3468 die_license_disabled gpl libxavs
3469 die_license_disabled gpl libxvid
3470 die_license_disabled gpl x11grab
3471
3472 die_license_disabled nonfree libaacplus
3473 die_license_disabled nonfree libfaac
3474 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3475 enabled gpl && die_license_disabled_gpl nonfree openssl
3476
3477 die_license_disabled version3 libopencore_amrnb
3478 die_license_disabled version3 libopencore_amrwb
3479 die_license_disabled version3 libvo_aacenc
3480 die_license_disabled version3 libvo_amrwbenc
3481
3482 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3483
3484 disabled optimizations || check_cflags -fomit-frame-pointer
3485
3486 enable_pic() {
3487     enable pic
3488     add_cppflags -DPIC
3489     add_cflags   -fPIC
3490     add_asflags  -fPIC
3491 }
3492
3493 enabled pic && enable_pic
3494
3495 check_cc <<EOF || die "Symbol mangling check failed."
3496 int ff_extern;
3497 EOF
3498 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3499 extern_prefix=${sym%%ff_extern*}
3500
3501 check_cc <<EOF && enable_weak inline_asm
3502 void foo(void) { __asm__ volatile ("" ::); }
3503 EOF
3504
3505 _restrict=
3506 for restrict_keyword in restrict __restrict__ __restrict; do
3507     check_cc <<EOF && _restrict=$restrict_keyword && break
3508 void foo(char * $restrict_keyword p);
3509 EOF
3510 done
3511
3512 check_cc <<EOF && enable attribute_packed
3513 struct { int x; } __attribute__((packed)) x;
3514 EOF
3515
3516 check_cc <<EOF && enable attribute_may_alias
3517 union { int x; } __attribute__((may_alias)) x;
3518 EOF
3519
3520 check_cc <<EOF || die "endian test failed"
3521 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3522 EOF
3523 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3524
3525 if enabled alpha; then
3526
3527     check_cflags -mieee
3528
3529 elif enabled arm; then
3530
3531     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
3532 float func(float a, float b){ return a+b; }
3533 EOF
3534
3535     enabled thumb && check_cflags -mthumb || check_cflags -marm
3536     nogas=die
3537
3538     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3539         enable vfp_args
3540     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3541         case "${cross_prefix:-$cc}" in
3542             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3543             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3544 __asm__ (".eabi_attribute 28, 1");
3545 int main(void) { return 0; }
3546 EOF
3547         esac
3548         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3549     fi
3550
3551     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3552     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3553     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3554     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3555     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3556     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3557
3558     [ $target_os = linux ] ||
3559         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3560             $ARCH_EXT_LIST_ARM
3561
3562     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3563     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3564
3565     enabled_all armv6t2 shared !pic && enable_pic
3566
3567 elif enabled mips; then
3568
3569     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3570     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3571      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3572     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3573      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3574     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3575      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3576     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3577      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3578
3579 elif enabled parisc; then
3580
3581     if enabled gcc; then
3582         case $($cc -dumpversion) in
3583             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3584         esac
3585     fi
3586
3587 elif enabled ppc; then
3588
3589     enable local_aligned_8 local_aligned_16
3590
3591     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3592     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3593     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3594     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3595
3596     # AltiVec flags: The FSF version of GCC differs from the Apple version
3597     if enabled altivec; then
3598         nogas=warn
3599         check_cflags -maltivec -mabi=altivec &&
3600         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3601         check_cflags -faltivec
3602
3603         # check if our compiler supports Motorola AltiVec C API
3604         check_cc <<EOF || disable altivec
3605 $inc_altivec_h
3606 int main(void) {
3607     vector signed int v1 = (vector signed int) { 0 };
3608     vector signed int v2 = (vector signed int) { 1 };
3609     v1 = vec_add(v1, v2);
3610     return 0;
3611 }
3612 EOF
3613
3614         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3615     fi
3616
3617 elif enabled sparc; then
3618
3619     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3620
3621 elif enabled x86; then
3622
3623     check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3624
3625     check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3626
3627     enable local_aligned_8 local_aligned_16
3628
3629     # check whether EBP is available on x86
3630     # As 'i' is stored on the stack, this program will crash
3631     # if the base pointer is used to access it because the
3632     # base pointer is cleared in the inline assembly code.
3633     check_exec_crash <<EOF && enable ebp_available
3634 volatile int i=0;
3635 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3636 return i;
3637 EOF
3638
3639     # check whether EBX is available on x86
3640     check_inline_asm ebx_available '""::"b"(0)' &&
3641         check_inline_asm ebx_available '"":::"%ebx"'
3642
3643     # check whether xmm clobbers are supported
3644     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3645
3646     # check whether binutils is new enough to compile SSSE3/MMXEXT
3647     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3648     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3649
3650     if ! disabled_any asm mmx yasm; then
3651         if check_cmd $yasmexe --version; then
3652             enabled x86_64 && yasm_extra="-m amd64"
3653             yasm_debug="-g dwarf2"
3654         elif check_cmd nasm -v; then
3655             yasmexe=nasm
3656             yasm_debug="-g -F dwarf"
3657             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3658         fi
3659
3660         YASMFLAGS="-f $objformat $yasm_extra"
3661         enabled pic               && append YASMFLAGS "-DPIC"
3662         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3663         case "$objformat" in
3664             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3665         esac
3666
3667         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3668             die "yasm not found, use --disable-yasm for a crippled build"
3669         check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external
3670         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3671         check_yasm "CPU amdnop" && enable cpunop
3672     fi
3673
3674     case "$cpu" in
3675         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3676             disable fast_clz
3677         ;;
3678     esac
3679
3680 fi
3681
3682 if enabled asm; then
3683     as=${gas:=$as}
3684     check_as <<EOF && enable gnu_as || \
3685         $nogas "GNU assembler not found, install gas-preprocessor"
3686 .macro m n
3687 \n: .int 0
3688 .endm
3689 m x
3690 EOF
3691 fi
3692
3693 check_ldflags -Wl,--as-needed
3694
3695 if check_func dlopen; then
3696     ldl=
3697 elif check_func dlopen -ldl; then
3698     ldl=-ldl
3699 fi
3700
3701 if ! disabled network; then
3702     check_type "sys/types.h sys/socket.h" socklen_t
3703     check_type netdb.h "struct addrinfo"
3704     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3705     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3706     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3707     check_type netinet/in.h "struct sockaddr_in6"
3708     check_type poll.h "struct pollfd"
3709     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3710     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3711     check_type netinet/sctp.h "struct sctp_event_subscribe"
3712     check_func getaddrinfo $network_extralibs
3713     check_func getservbyport $network_extralibs
3714     # Prefer arpa/inet.h over winsock2
3715     if check_header arpa/inet.h ; then
3716         check_func closesocket
3717     elif check_header winsock2.h ; then
3718         check_func_headers winsock2.h closesocket -lws2 &&
3719             network_extralibs="-lws2" ||
3720         { check_func_headers winsock2.h closesocket -lws2_32 &&
3721             network_extralibs="-lws2_32"; }
3722         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3723         check_type ws2tcpip.h socklen_t
3724         check_type ws2tcpip.h "struct addrinfo"
3725         check_type ws2tcpip.h "struct group_source_req"
3726         check_type ws2tcpip.h "struct ip_mreq_source"
3727         check_type ws2tcpip.h "struct ipv6_mreq"
3728         check_type winsock2.h "struct pollfd"
3729         check_type ws2tcpip.h "struct sockaddr_in6"
3730         check_type ws2tcpip.h "struct sockaddr_storage"
3731         check_struct winsock2.h "struct sockaddr" sa_len
3732     else
3733         disable network
3734     fi
3735 fi
3736
3737 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3738 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3739
3740 check_func  access
3741 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3742 check_func  fcntl
3743 check_func  fork
3744 check_func  gethrtime
3745 check_func  getopt
3746 check_func  getrusage
3747 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3748 check_func  gettimeofday
3749 check_func  inet_aton $network_extralibs
3750 check_func  isatty
3751 check_func  localtime_r
3752 check_func  ${malloc_prefix}memalign            && enable memalign
3753 check_func  mkstemp
3754 check_func  mmap
3755 check_func  mprotect
3756 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3757 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3758 check_func  setrlimit
3759 check_func  strerror_r
3760 check_func  sched_getaffinity
3761 check_func  sysconf
3762 check_func  sysctl
3763 check_func  usleep
3764 check_func_headers conio.h kbhit
3765 check_func_headers windows.h PeekNamedPipe
3766 check_func_headers io.h setmode
3767 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3768 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3769 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3770 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3771 check_func_headers windows.h GetProcessAffinityMask
3772 check_func_headers windows.h GetProcessTimes
3773 check_func_headers windows.h GetSystemTimeAsFileTime
3774 check_func_headers windows.h MapViewOfFile
3775 check_func_headers windows.h SetConsoleTextAttribute
3776 check_func_headers windows.h Sleep
3777 check_func_headers windows.h VirtualAlloc
3778 check_func_headers glob.h glob
3779
3780 check_header direct.h
3781 check_header dlfcn.h
3782 check_header dxva.h
3783 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3784 check_header io.h
3785 check_header libcrystalhd/libcrystalhd_if.h
3786 check_header malloc.h
3787 check_header poll.h
3788 check_header sys/mman.h
3789 check_header sys/param.h
3790 check_header sys/resource.h
3791 check_header sys/select.h
3792 check_header sys/time.h
3793 check_header termios.h
3794 check_header unistd.h
3795 check_header vdpau/vdpau.h
3796 check_header vdpau/vdpau_x11.h
3797 check_header windows.h
3798 check_header X11/extensions/XvMClib.h
3799 check_header asm/types.h
3800
3801 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3802 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3803
3804 # check for VDA header
3805 if ! disabled vda && ! enabled ppc; then
3806     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3807         enable vda
3808         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3809     fi
3810 fi
3811
3812 if ! disabled w32threads && ! enabled pthreads; then
3813     check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3814 fi
3815
3816 # check for some common methods of building with pthread support
3817 # do this before the optional library checks as some of them require pthreads
3818 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3819     enable pthreads
3820     if check_func pthread_create; then
3821         :
3822     elif check_func pthread_create -pthread; then
3823         add_cflags -pthread
3824         add_extralibs -pthread
3825     elif check_func pthread_create -pthreads; then
3826         add_cflags -pthreads
3827         add_extralibs -pthreads
3828     elif check_func pthread_create -lpthreadGC2; then
3829         add_extralibs -lpthreadGC2
3830     elif ! check_lib pthread.h pthread_create -lpthread; then
3831         disable pthreads
3832     fi
3833 fi
3834
3835 for thread in $THREADS_LIST; do
3836     if enabled $thread; then
3837         test -n "$thread_type" &&
3838             die "ERROR: Only one thread type must be selected." ||
3839             thread_type="$thread"
3840     fi
3841 done
3842
3843 if enabled pthreads; then
3844   check_func pthread_cancel
3845 fi
3846
3847 check_lib math.h sin -lm && LIBM="-lm"
3848 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3849 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3850
3851 atan2f_args=2
3852 ldexpf_args=2
3853 powf_args=2
3854
3855 for func in $MATH_FUNCS; do
3856     eval check_mathfunc $func \${${func}_args:-1}
3857 done
3858
3859 # these are off by default, so fail if requested and not available
3860 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3861 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3862 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3863 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3864 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3865 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3866 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3867 enabled libbluray  && require_pkg_config libbluray libbluray/bluray.h bd_open
3868 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3869                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3870                         die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
3871 enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
3872 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3873 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3874 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
3875 enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
3876 enabled libfreetype && require_libfreetype
3877 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3878 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3879 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3880 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3881 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3882 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3883 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3884 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3885 enabled libopenjpeg && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
3886                          check_lib openjpeg.h opj_version -lopenjpeg ||
3887                          die "ERROR: libopenjpeg not found"; }
3888 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3889 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3890 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3891 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3892 enabled libsoxr    && require  libsoxr soxr.h soxr_create -lsoxr
3893 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3894 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3895     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3896     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3897 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3898 enabled libtwolame && require  libtwolame twolame.h twolame_init -ltwolame &&
3899                       { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
3900                         die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
3901 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3902 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3903 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3904 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3905 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3906 enabled libvpx     && {
3907     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3908                                 die "ERROR: libvpx decoder must be installed and version must be >=0.9.1"; }
3909     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3910                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3911 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3912                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3913                         die "ERROR: libx264 must be installed and version must be >= 0.118."; }
3914 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3915 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3916 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3917                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3918                         die "ERROR: openal not found"; } &&
3919                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3920                         die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
3921 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3922                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3923                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3924                         die "ERROR: openssl not found"; }
3925
3926 if enabled gnutls; then
3927     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3928     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3929 fi
3930
3931 # libdc1394 check
3932 if enabled libdc1394; then
3933     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3934         enable libdc1394_2; } ||
3935     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3936         enable libdc1394_1; } ||
3937     die "ERROR: No version of libdc1394 found "
3938 fi
3939
3940 SDL_CONFIG="${cross_prefix}sdl-config"
3941 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3942     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3943     enable sdl &&
3944     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3945 else
3946   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3947     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3948     sdl_libs=$("${SDL_CONFIG}" --libs)
3949     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3950     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3951     enable sdl &&
3952     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3953   fi
3954 fi
3955 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3956
3957 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3958 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3959 perl --version > /dev/null 2>&1 && enable perl || disable perl
3960 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3961 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
3962
3963 check_header linux/fb.h
3964 check_header linux/videodev.h
3965 check_header linux/videodev2.h
3966 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
3967
3968 check_header sys/videoio.h
3969
3970 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3971 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3972 # w32api 3.12 had it defined wrong
3973 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3974
3975 check_type "dshow.h" IBaseFilter
3976
3977 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3978 { check_header dev/bktr/ioctl_meteor.h &&
3979   check_header dev/bktr/ioctl_bt848.h; } ||
3980 { check_header machine/ioctl_meteor.h &&
3981   check_header machine/ioctl_bt848.h; } ||
3982 { check_header dev/video/meteor/ioctl_meteor.h &&
3983   check_header dev/video/bktr/ioctl_bt848.h; } ||
3984 check_header dev/ic/bt8xx.h
3985
3986 check_header sndio.h
3987 if check_struct sys/soundcard.h audio_buf_info bytes; then
3988     enable_safe sys/soundcard.h
3989 else
3990     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3991     #include <sys/soundcard.h>
3992     audio_buf_info abc;
3993 EOF
3994 fi
3995 check_header soundcard.h
3996
3997 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3998
3999 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4000     check_func jack_port_get_latency_range -ljack
4001
4002 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4003
4004 if enabled libcdio; then
4005     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
4006 fi
4007
4008 enabled x11grab                                           &&
4009 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
4010 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4011 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4012
4013 if ! disabled vaapi; then
4014     check_lib va/va.h vaInitialize -lva && {
4015         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
4016         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
4017     } || disable vaapi
4018 fi
4019
4020 if ! disabled vdpau && enabled vdpau_vdpau_h; then
4021     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4022         { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
4023 fi
4024
4025 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4026 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
4027 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
4028
4029 # add some useful compiler flags if supported
4030 check_cflags -Wdeclaration-after-statement
4031 check_cflags -Wall
4032 check_cflags -Wno-parentheses
4033 check_cflags -Wno-switch
4034 check_cflags -Wno-format-zero-length
4035 check_cflags -Wdisabled-optimization
4036 check_cflags -Wpointer-arith
4037 check_cflags -Wredundant-decls
4038 check_cflags -Wno-pointer-sign
4039 check_cflags -Wwrite-strings
4040 check_cflags -Wtype-limits
4041 check_cflags -Wundef
4042 check_cflags -Wmissing-prototypes
4043 check_cflags -Wno-pointer-to-int-cast
4044 check_cflags -Wstrict-prototypes
4045 enabled extra_warnings && check_cflags -Winline
4046
4047 # add some linker flags
4048 check_ldflags -Wl,--warn-common
4049 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4050 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4051
4052 enabled xmm_clobber_test &&
4053     check_ldflags -Wl,--wrap,avcodec_open2              \
4054                   -Wl,--wrap,avcodec_decode_audio4      \
4055                   -Wl,--wrap,avcodec_decode_video2      \
4056                   -Wl,--wrap,avcodec_decode_subtitle2   \
4057                   -Wl,--wrap,avcodec_encode_audio2      \
4058                   -Wl,--wrap,avcodec_encode_video       \
4059                   -Wl,--wrap,avcodec_encode_subtitle    \
4060                   -Wl,--wrap,sws_scale ||
4061     disable xmm_clobber_test
4062
4063 echo "X{};" > $TMPV
4064 if test_ldflags -Wl,--version-script,$TMPV; then
4065     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4066     check_cc <<EOF && enable symver_asm_label
4067 void ff_foo(void) __asm__ ("av_foo@VERSION");
4068 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4069 EOF
4070     check_cc <<EOF && enable symver_gnu_asm
4071 __asm__(".symver ff_foo,av_foo@VERSION");
4072 void ff_foo(void) {}
4073 EOF
4074 fi
4075
4076 if [ -z "$optflags" ]; then
4077     if enabled small; then
4078         optflags=$cflags_size
4079     elif enabled optimizations; then
4080         optflags=$cflags_speed
4081     else
4082         optflags=$cflags_noopt
4083     fi
4084 fi
4085
4086 check_optflags(){
4087     check_cflags "$@"
4088     enabled lto && check_ldflags "$@"
4089 }
4090
4091
4092 if enabled lto; then
4093     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4094     check_cflags  -flto
4095     check_ldflags -flto $cpuflags
4096 fi
4097
4098 check_optflags $optflags
4099 check_optflags -fno-math-errno
4100 check_optflags -fno-signed-zeros
4101
4102 enabled ftrapv && check_cflags -ftrapv
4103
4104 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
4105 int x;
4106 EOF
4107
4108
4109 if enabled icc; then
4110     # Just warnings, no remarks
4111     check_cflags -w1
4112     # -wd: Disable following warnings
4113     # 144, 167, 556: -Wno-pointer-sign
4114     # 1292: attribute "foo" ignored
4115     # 1419: external declaration in primary source file
4116     # 10006: ignoring unknown option -fno-signed-zeros
4117     # 10148: ignoring unknown option -Wno-parentheses
4118     # 10156: ignoring option '-W'; no argument required
4119     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4120     # 11030: Warning unknown option --as-needed
4121     # 10156: ignoring option '-export'; no argument required
4122     check_ldflags -wd10156,11030
4123     # Allow to compile with optimizations
4124     check_ldflags -march=$cpu
4125     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4126     enable ebp_available
4127     if enabled x86_32; then
4128         icc_version=$($cc -dumpversion)
4129         test ${icc_version%%.*} -ge 11 &&
4130             check_cflags -falign-stack=maintain-16-byte ||
4131             disable aligned_stack
4132     fi
4133 elif enabled ccc; then
4134     # disable some annoying warnings
4135     add_cflags -msg_disable bitnotint
4136     add_cflags -msg_disable mixfuncvoid
4137     add_cflags -msg_disable nonstandcast
4138     add_cflags -msg_disable unsupieee
4139 elif enabled gcc; then
4140     check_optflags -fno-tree-vectorize
4141     check_cflags -Werror=implicit-function-declaration
4142     check_cflags -Werror=missing-prototypes
4143     check_cflags -Werror=return-type
4144     check_cflags -Werror=vla
4145 elif enabled llvm_gcc; then
4146     check_cflags -mllvm -stack-alignment=16
4147 elif enabled clang; then
4148     check_cflags -mllvm -stack-alignment=16
4149     check_cflags -Qunused-arguments
4150     check_cflags -Werror=implicit-function-declaration
4151     check_cflags -Werror=missing-prototypes
4152     check_cflags -Werror=return-type
4153 elif enabled armcc; then
4154     # 2523: use of inline assembler is deprecated
4155     add_cflags -W${armcc_opt},--diag_suppress=2523
4156     add_cflags -W${armcc_opt},--diag_suppress=1207
4157     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4158     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4159     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4160     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4161 elif enabled tms470; then
4162     add_cflags -pds=824 -pds=837
4163 elif enabled pathscale; then
4164     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4165 elif enabled msvc; then
4166     enabled x86_32 && disable aligned_stack
4167 fi
4168
4169 case $target_os in
4170     osf1)
4171         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4172     ;;
4173     plan9)
4174         add_cppflags -Dmain=plan9_main
4175     ;;
4176 esac
4177
4178 enabled_any $THREADS_LIST      && enable threads
4179
4180 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4181
4182 check_deps $CONFIG_LIST       \
4183            $CONFIG_EXTRA      \
4184            $HAVE_LIST         \
4185            $ALL_COMPONENTS    \
4186
4187
4188 if test $target_os = "haiku"; then
4189     disable memalign
4190     disable posix_memalign
4191 fi
4192
4193 ! enabled_any memalign posix_memalign aligned_malloc &&
4194     enabled_any $need_memalign && enable memalign_hack
4195
4196 # add_dep lib dep
4197 # -> enable ${lib}_deps_${dep}
4198 # -> add $dep to ${lib}_deps only once
4199 add_dep() {
4200     lib=$1
4201     dep=$2
4202     enabled "${lib}_deps_${dep}" && return 0
4203     enable  "${lib}_deps_${dep}"
4204     prepend "${lib}_deps" $dep
4205 }
4206
4207 # merge deps lib components
4208 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4209 merge_deps() {
4210     lib=$1
4211     shift
4212     for comp in $*; do
4213         enabled $comp || continue
4214         eval "dep=\"\$${comp}_deps\""
4215         for d in $dep; do
4216             add_dep $lib $d
4217         done
4218     done
4219 }
4220
4221 merge_deps libavfilter $FILTER_LIST
4222
4223 echo "install prefix            $prefix"
4224 echo "source path               $source_path"
4225 echo "C compiler                $cc"
4226 echo "ARCH                      $arch ($cpu)"
4227 if test "$build_suffix" != ""; then
4228     echo "build suffix              $build_suffix"
4229 fi
4230 if test "$progs_suffix" != ""; then
4231     echo "progs suffix              $progs_suffix"
4232 fi
4233 if test "$extra_version" != ""; then
4234     echo "version string suffix     $extra_version"
4235 fi
4236 echo "big-endian                ${bigendian-no}"
4237 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4238 if enabled x86; then
4239     echo "${yasmexe}                      ${yasm-no}"
4240     echo "MMX enabled               ${mmx-no}"
4241     echo "MMXEXT enabled            ${mmxext-no}"
4242     echo "3DNow! enabled            ${amd3dnow-no}"
4243     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4244     echo "SSE enabled               ${sse-no}"
4245     echo "SSSE3 enabled             ${ssse3-no}"
4246     echo "AVX enabled               ${avx-no}"
4247     echo "FMA4 enabled              ${fma4-no}"
4248     echo "CMOV enabled              ${cmov-no}"
4249     echo "CMOV is fast              ${fast_cmov-no}"
4250     echo "EBX available             ${ebx_available-no}"
4251     echo "EBP available             ${ebp_available-no}"
4252 fi
4253 if enabled arm; then
4254     echo "ARMv5TE enabled           ${armv5te-no}"
4255     echo "ARMv6 enabled             ${armv6-no}"
4256     echo "ARMv6T2 enabled           ${armv6t2-no}"
4257     echo "VFP enabled               ${vfp-no}"
4258     echo "NEON enabled              ${neon-no}"
4259     echo "THUMB enabled             ${thumb-no}"
4260 fi
4261 if enabled mips; then
4262     echo "MIPS FPU enabled          ${mipsfpu-no}"
4263     echo "MIPS32R2 enabled          ${mips32r2-no}"
4264     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
4265     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
4266 fi
4267 if enabled ppc; then
4268     echo "AltiVec enabled           ${altivec-no}"
4269     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4270     echo "dcbzl available           ${dcbzl-no}"
4271 fi
4272 if enabled sparc; then
4273     echo "VIS enabled               ${vis-no}"
4274 fi
4275 echo "debug symbols             ${debug-no}"
4276 echo "strip symbols             ${stripping-no}"
4277 echo "optimize for size         ${small-no}"
4278 echo "optimizations             ${optimizations-no}"
4279 echo "static                    ${static-no}"
4280 echo "shared                    ${shared-no}"
4281 echo "postprocessing support    ${postproc-no}"
4282 echo "new filter support        ${avfilter-no}"
4283 echo "network support           ${network-no}"
4284 echo "threading support         ${thread_type-no}"
4285 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4286 echo "SDL support               ${sdl-no}"
4287 echo "libdxva2 enabled          ${dxva2-no}"
4288 echo "libva enabled             ${vaapi-no}"
4289 echo "libvdpau enabled          ${vdpau-no}"
4290 echo "AVISynth enabled          ${avisynth-no}"
4291 echo "frei0r enabled            ${frei0r-no}"
4292 echo "gnutls enabled            ${gnutls-no}"
4293 echo "libaacplus enabled        ${libaacplus-no}"
4294 echo "libass enabled            ${libass-no}"
4295 echo "libcaca enabled           ${libcaca-no}"
4296 echo "libcdio support           ${libcdio-no}"
4297 echo "libcelt enabled           ${libcelt-no}"
4298 echo "libdc1394 support         ${libdc1394-no}"
4299 echo "libfaac enabled           ${libfaac-no}"
4300 echo "libfdk-aac enabled        ${libfdk_aac-no}"
4301 echo "libgsm enabled            ${libgsm-no}"
4302 echo "libiec61883 support       ${libiec61883-no}"
4303 echo "libilbc enabled           ${libilbc-no}"
4304 echo "libmodplug enabled        ${libmodplug-no}"
4305 echo "libmp3lame enabled        ${libmp3lame-no}"
4306 echo "libnut enabled            ${libnut-no}"
4307 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
4308 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
4309 echo "libopencv support         ${libopencv-no}"
4310 echo "libopenjpeg enabled       ${libopenjpeg-no}"
4311 echo "libopus enabled           ${libopus-no}"
4312 echo "libpulse enabled          ${libpulse-no}"
4313 echo "librtmp enabled           ${librtmp-no}"
4314 echo "libschroedinger enabled   ${libschroedinger-no}"
4315 echo "libsoxr enabled           ${libsoxr-no}"
4316 echo "libspeex enabled          ${libspeex-no}"
4317 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
4318 echo "libtheora enabled         ${libtheora-no}"
4319 echo "libtwolame enabled        ${libtwolame-no}"
4320 echo "libutvideo enabled        ${libutvideo-no}"
4321 echo "libv4l2 enabled           ${libv4l2-no}"
4322 echo "libvo-aacenc support      ${libvo_aacenc-no}"
4323 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
4324 echo "libvorbis enabled         ${libvorbis-no}"
4325 echo "libvpx enabled            ${libvpx-no}"
4326 echo "libx264 enabled           ${libx264-no}"
4327 echo "libxavs enabled           ${libxavs-no}"
4328 echo "libxvid enabled           ${libxvid-no}"
4329 echo "openal enabled            ${openal-no}"
4330 echo "openssl enabled           ${openssl-no}"
4331 echo "zlib enabled              ${zlib-no}"
4332 echo "bzlib enabled             ${bzlib-no}"
4333 echo "texi2html enabled         ${texi2html-no}"
4334 echo "perl enabled              ${perl-no}"
4335 echo "pod2man enabled           ${pod2man-no}"
4336 echo "makeinfo enabled          ${makeinfo-no}"
4337 test -n "$random_seed" &&
4338     echo "random seed               ${random_seed}"
4339 echo
4340
4341 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4342     echo "Enabled ${type}s:"
4343     eval list=\$$(toupper $type)_LIST
4344     print_enabled '_*' $list | sort | pr -r -3 -t
4345     echo
4346 done
4347
4348 license="LGPL version 2.1 or later"
4349 if enabled nonfree; then
4350     license="nonfree and unredistributable"
4351 elif enabled gplv3; then
4352     license="GPL version 3 or later"
4353 elif enabled lgplv3; then
4354     license="LGPL version 3 or later"
4355 elif enabled gpl; then
4356     license="GPL version 2 or later"
4357 fi
4358
4359 echo "License: $license"
4360
4361 echo "Creating config.mak and config.h..."
4362
4363 test -e Makefile || $ln_s "$source_path/Makefile" .
4364
4365 enabled stripping || strip="echo skipping strip"
4366
4367 config_files="$TMPH config.mak"
4368
4369 cat > config.mak <<EOF
4370 # Automatically generated by configure - do not modify!
4371 ifndef FFMPEG_CONFIG_MAK
4372 FFMPEG_CONFIG_MAK=1
4373 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4374 prefix=$prefix
4375 LIBDIR=\$(DESTDIR)$libdir
4376 SHLIBDIR=\$(DESTDIR)$shlibdir
4377 INCDIR=\$(DESTDIR)$incdir
4378 BINDIR=\$(DESTDIR)$bindir
4379 DATADIR=\$(DESTDIR)$datadir
4380 MANDIR=\$(DESTDIR)$mandir
4381 SRC_PATH=$source_path
4382 ifndef MAIN_MAKEFILE
4383 SRC_PATH:=\$(SRC_PATH:.%=..%)
4384 endif
4385 CC_IDENT=$cc_ident
4386 ARCH=$arch
4387 CC=$cc
4388 CXX=$cxx
4389 AS=$as
4390 LD=$ld
4391 DEPCC=$dep_cc
4392 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4393 DEPAS=$as
4394 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4395 YASM=$yasmexe
4396 DEPYASM=$yasmexe
4397 AR=$ar
4398 ARFLAGS=$arflags
4399 AR_O=$ar_o
4400 RANLIB=$ranlib
4401 CP=cp -p
4402 LN_S=$ln_s
4403 STRIP=$strip
4404 CPPFLAGS=$CPPFLAGS
4405 CFLAGS=$CFLAGS
4406 CXXFLAGS=$CXXFLAGS
4407 ASFLAGS=$ASFLAGS
4408 AS_C=$AS_C
4409 AS_O=$AS_O
4410 CC_C=$CC_C
4411 CC_E=$CC_E
4412 CC_O=$CC_O
4413 CXX_C=$CXX_C
4414 CXX_O=$CXX_O
4415 LD_O=$LD_O
4416 LD_LIB=$LD_LIB
4417 LD_PATH=$LD_PATH
4418 DLLTOOL=$dlltool
4419 LDFLAGS=$LDFLAGS
4420 LDFLAGS-ffserver=$FFSERVERLDFLAGS
4421 SHFLAGS=$SHFLAGS
4422 YASMFLAGS=$YASMFLAGS
4423 BUILDSUF=$build_suffix
4424 PROGSSUF=$progs_suffix
4425 FULLNAME=$FULLNAME
4426 LIBPREF=$LIBPREF
4427 LIBSUF=$LIBSUF
4428 LIBNAME=$LIBNAME
4429 SLIBPREF=$SLIBPREF
4430 SLIBSUF=$SLIBSUF
4431 EXESUF=$EXESUF
4432 EXTRA_VERSION=$extra_version
4433 CCDEP=$CCDEP
4434 CXXDEP=$CXXDEP
4435 CCDEP_FLAGS=$CCDEP_FLAGS
4436 ASDEP=$ASDEP
4437 ASDEP_FLAGS=$ASDEP_FLAGS
4438 CC_DEPFLAGS=$CC_DEPFLAGS
4439 AS_DEPFLAGS=$AS_DEPFLAGS
4440 HOSTCC=$host_cc
4441 HOSTLD=$host_ld
4442 HOSTCFLAGS=$host_cflags
4443 HOSTEXESUF=$HOSTEXESUF
4444 HOSTLDFLAGS=$host_ldflags
4445 HOSTLIBS=$host_libs
4446 DEPHOSTCC=$host_cc
4447 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4448 HOSTCCDEP=$HOSTCCDEP
4449 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4450 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4451 HOSTCC_C=$HOSTCC_C
4452 HOSTCC_O=$HOSTCC_O
4453 HOSTLD_O=$HOSTLD_O
4454 TARGET_EXEC=$target_exec
4455 TARGET_PATH=$target_path
4456 LIBS-ffplay=$sdl_libs
4457 CFLAGS-ffplay=$sdl_cflags
4458 ZLIB=$($ldflags_filter -lz)
4459 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4460 EXTRALIBS=$extralibs
4461 COMPAT_OBJS=$compat_objs
4462 EXEOBJS=$exeobjs
4463 INSTALL=$install
4464 LIBTARGET=${LIBTARGET}
4465 SLIBNAME=${SLIBNAME}
4466 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4467 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4468 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4469 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4470 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4471 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4472 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4473 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4474 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4475 NOREDZONE_FLAGS=$noredzone_flags
4476 EOF
4477
4478 get_version(){
4479     lcname=lib${1}
4480     name=$(toupper $lcname)
4481     file=$source_path/$lcname/version.h
4482     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4483     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4484     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4485     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4486 }
4487
4488 map 'get_version $v' $LIBRARY_LIST
4489
4490 cat > $TMPH <<EOF
4491 /* Automatically generated by configure - do not modify! */
4492 #ifndef FFMPEG_CONFIG_H
4493 #define FFMPEG_CONFIG_H
4494 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4495 #define FFMPEG_LICENSE "$(c_escape $license)"
4496 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4497 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4498 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4499 #define av_restrict $_restrict
4500 #define EXTERN_PREFIX "${extern_prefix}"
4501 #define EXTERN_ASM ${extern_prefix}
4502 #define SLIBSUF "$SLIBSUF"
4503 #define HAVE_MMX2 HAVE_MMXEXT
4504 EOF
4505
4506 test -n "$assert_level" &&
4507     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4508
4509 test -n "$malloc_prefix" &&
4510     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4511
4512 if enabled yasm; then
4513     append config_files $TMPASM
4514     printf '' >$TMPASM
4515 fi
4516
4517 print_config ARCH_   "$config_files" $ARCH_LIST
4518 print_config HAVE_   "$config_files" $HAVE_LIST
4519 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4520                                      $CONFIG_EXTRA      \
4521                                      $ALL_COMPONENTS    \
4522
4523 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4524 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4525
4526 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4527 cp_if_changed $TMPH config.h
4528 touch .config
4529
4530 enabled yasm && cp_if_changed $TMPASM config.asm
4531
4532 cat > $TMPH <<EOF
4533 /* Generated by ffconf */
4534 #ifndef AVUTIL_AVCONFIG_H
4535 #define AVUTIL_AVCONFIG_H
4536 EOF
4537
4538 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4539
4540 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4541
4542 cp_if_changed $TMPH libavutil/avconfig.h
4543
4544 if test -n "$WARNINGS"; then
4545     printf "\n$WARNINGS"
4546     enabled fatal_warnings && exit 1
4547 fi
4548
4549 # build pkg-config files
4550
4551 pkgconfig_generate(){
4552     name=$1
4553     shortname=${name#lib}${build_suffix}
4554     comment=$2
4555     version=$3
4556     libs=$4
4557     requires=$5
4558     enabled ${name#lib} || return 0
4559     mkdir -p $name
4560     cat <<EOF > $name/$name.pc
4561 prefix=$prefix
4562 exec_prefix=\${prefix}
4563 libdir=$libdir
4564 includedir=$incdir
4565
4566 Name: $name
4567 Description: $comment
4568 Version: $version
4569 Requires: $(enabled shared || echo $requires)
4570 Requires.private: $(enabled shared && echo $requires)
4571 Conflicts:
4572 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4573 Libs.private: $(enabled shared && echo $libs)
4574 Cflags: -I\${includedir}
4575 EOF
4576
4577 mkdir -p doc/examples/pc-uninstalled
4578 includedir=${source_path}
4579 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4580     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4581 prefix=
4582 exec_prefix=
4583 libdir=\${pcfiledir}/../../../$name
4584 includedir=${includedir}
4585
4586 Name: $name
4587 Description: $comment
4588 Version: $version
4589 Requires: $requires
4590 Conflicts:
4591 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4592 Cflags: -I\${includedir}
4593 EOF
4594 }
4595
4596 libavfilter_pc_deps="libavutil = $LIBAVUTIL_VERSION"
4597 enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4598 enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4599 enabled libavfilter_deps_avresample && prepend libavfilter_pc_deps "libavresample = $LIBAVRESAMPLE_VERSION,"
4600 enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4601 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4602 enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4603 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4604
4605 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4606 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4607
4608 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4609 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4610 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4611 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4612 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4613 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4614 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4615 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4616 pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4617
4618 fix_ffmpeg_remote(){
4619     git_remote_from=$1
4620     git_remote_to=$2
4621     fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4622     if [ "$fixme_remote" != "" ]; then
4623         echolog "
4624 Outdated domain in git config, the official domain for ffmpeg git is since
4625 November 2011, source.ffmpeg.org, both the old and the new point to the same
4626 repository and server. To update it enter the following commands:
4627 "
4628         for remote in $fixme_remote; do
4629             echolog "git remote set-url $remote $git_remote_to"
4630         done
4631     fi
4632 }
4633
4634 if test -f "$source_path/.git/config"; then
4635     remote_from=git.videolan.org
4636     remote_to=source.ffmpeg.org
4637     fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
4638     fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
4639 fi