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