OSDN Git Service

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