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