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