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