]> git.sesse.net Git - ffmpeg/blob - configure
Merge commit '979cb55103fa8e8274806e496901203742c686d1'
[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         case "$arch" in
3201         arm*)
3202             as_default="armasm"
3203             ;;
3204         esac
3205         target_os_default="win32"
3206         # Use a relative path for TMPDIR. This makes sure all the
3207         # ffconf temp files are written with a relative path, avoiding
3208         # issues with msys/win32 path conversion for MSVC parameters
3209         # such as -Fo<file> or -out:<file>.
3210         TMPDIR=.
3211     ;;
3212     icl)
3213         cc_default="icl"
3214         ld_default="xilink"
3215         nm_default="dumpbin -symbols"
3216         ar_default="xilib"
3217         target_os_default="win32"
3218         TMPDIR=.
3219     ;;
3220     gcov)
3221         add_cflags  -fprofile-arcs -ftest-coverage
3222         add_ldflags -fprofile-arcs -ftest-coverage
3223     ;;
3224     hardened)
3225         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3226         add_cflags   -fno-strict-overflow -fstack-protector-all
3227         add_ldflags  -Wl,-z,relro -Wl,-z,now
3228     ;;
3229     ?*)
3230         die "Unknown toolchain $toolchain"
3231     ;;
3232 esac
3233
3234 test -n "$cross_prefix" && enable cross_compile
3235
3236 if enabled cross_compile; then
3237     test -n "$arch" && test -n "$target_os" ||
3238         die "Must specify target arch and OS when cross-compiling"
3239 fi
3240
3241 ar_default="${cross_prefix}${ar_default}"
3242 cc_default="${cross_prefix}${cc_default}"
3243 cxx_default="${cross_prefix}${cxx_default}"
3244 nm_default="${cross_prefix}${nm_default}"
3245 pkg_config_default="${cross_prefix}${pkg_config_default}"
3246 if ${cross_prefix}${ranlib_default} 2>&1 | grep -q "\-D "; then
3247     ranlib_default="${cross_prefix}${ranlib_default} -D"
3248 else
3249     ranlib_default="${cross_prefix}${ranlib_default}"
3250 fi
3251 strip_default="${cross_prefix}${strip_default}"
3252 windres_default="${cross_prefix}${windres_default}"
3253
3254 sysinclude_default="${sysroot}/usr/include"
3255
3256 set_default arch cc cxx doxygen pkg_config ranlib strip sysinclude \
3257     target_exec target_os yasmexe
3258 enabled cross_compile || host_cc_default=$cc
3259 set_default host_cc
3260
3261 pkg_config_fail_message=""
3262 if ! $pkg_config --version >/dev/null 2>&1; then
3263     warn "$pkg_config not found, library detection may fail."
3264     pkg_config=false
3265 elif is_in -static $cc $LDFLAGS && ! is_in --static $pkg_config $pkg_config_flags; then
3266     pkg_config_fail_message="
3267 Note: When building a static binary, add --pkg-config-flags=\"--static\"."
3268 fi
3269
3270 if test $doxygen != $doxygen_default && \
3271   ! $doxygen --version >/dev/null 2>&1; then
3272     warn "Specified doxygen \"$doxygen\" not found, API documentation will fail to build."
3273 fi
3274
3275 exesuf() {
3276     case $1 in
3277         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3278     esac
3279 }
3280
3281 EXESUF=$(exesuf $target_os)
3282 HOSTEXESUF=$(exesuf $host_os)
3283
3284 # set temporary file name
3285 : ${TMPDIR:=$TEMPDIR}
3286 : ${TMPDIR:=$TMP}
3287 : ${TMPDIR:=/tmp}
3288
3289 if [ -n "$tempprefix" ] ; then
3290     mktemp(){
3291         echo $tempprefix.${HOSTNAME}.${UID}
3292     }
3293 elif ! check_cmd mktemp -u XXXXXX; then
3294     # simple replacement for missing mktemp
3295     # NOT SAFE FOR GENERAL USE
3296     mktemp(){
3297         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3298     }
3299 fi
3300
3301 tmpfile(){
3302     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
3303         (set -C; exec > $tmp) 2>/dev/null ||
3304         die "Unable to create temporary file in $TMPDIR."
3305     append TMPFILES $tmp
3306     eval $1=$tmp
3307 }
3308
3309 trap 'rm -f -- $TMPFILES' EXIT
3310
3311 tmpfile TMPASM .asm
3312 tmpfile TMPC   .c
3313 tmpfile TMPCPP .cpp
3314 tmpfile TMPE   $EXESUF
3315 tmpfile TMPH   .h
3316 tmpfile TMPM   .m
3317 tmpfile TMPO   .o
3318 tmpfile TMPS   .S
3319 tmpfile TMPSH  .sh
3320 tmpfile TMPV   .ver
3321
3322 unset -f mktemp
3323
3324 chmod +x $TMPE
3325
3326 # make sure we can execute files in $TMPDIR
3327 cat > $TMPSH 2>> $logfile <<EOF
3328 #! /bin/sh
3329 EOF
3330 chmod +x $TMPSH >> $logfile 2>&1
3331 if ! $TMPSH >> $logfile 2>&1; then
3332     cat <<EOF
3333 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3334 variable to another directory and make sure that it is not mounted noexec.
3335 EOF
3336     die "Sanity test failed."
3337 fi
3338
3339 armasm_flags(){
3340     for flag; do
3341         case $flag in
3342             # Filter out MSVC cl.exe options from cflags that shouldn't
3343             # be passed to gas-preprocessor
3344             -M[TD]*)                                            ;;
3345             *)                  echo $flag                      ;;
3346         esac
3347    done
3348 }
3349
3350 ccc_flags(){
3351     for flag; do
3352         case $flag in
3353             -std=c99)           echo -c99                       ;;
3354             -mcpu=*)            echo -arch ${flag#*=}           ;;
3355             -mieee)             echo -ieee                      ;;
3356             -O*|-fast)          echo $flag                      ;;
3357             -fno-math-errno)    echo -assume nomath_errno       ;;
3358             -g)                 echo -g3                        ;;
3359             -Wall)              echo -msg_enable level2         ;;
3360             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3361             -Wl,*)              echo $flag                      ;;
3362             -f*|-W*)                                            ;;
3363             *)                  echo $flag                      ;;
3364         esac
3365    done
3366 }
3367
3368 cparser_flags(){
3369     for flag; do
3370         case $flag in
3371             -Wno-switch)             echo -Wno-switch-enum ;;
3372             -Wno-format-zero-length) ;;
3373             -Wdisabled-optimization) ;;
3374             -Wno-pointer-sign)       echo -Wno-other ;;
3375             *)                       echo $flag ;;
3376         esac
3377     done
3378 }
3379
3380 msvc_common_flags(){
3381     for flag; do
3382         case $flag in
3383             # In addition to specifying certain flags under the compiler
3384             # specific filters, they must be specified here as well or else the
3385             # generic catch all at the bottom will print the original flag.
3386             -Wall)                ;;
3387             -std=c99)             ;;
3388             # Common flags
3389             -fomit-frame-pointer) ;;
3390             -g)                   echo -Z7 ;;
3391             -fno-math-errno)      ;;
3392             -fno-common)          ;;
3393             -fno-signed-zeros)    ;;
3394             -fPIC)                ;;
3395             -mthumb)              ;;
3396             -march=*)             ;;
3397             -lz)                  echo zlib.lib ;;
3398             -lavifil32)           echo vfw32.lib ;;
3399             -lavicap32)           echo vfw32.lib user32.lib ;;
3400             -l*)                  echo ${flag#-l}.lib ;;
3401             -LARGEADDRESSAWARE)   echo $flag ;;
3402             -L*)                  echo -libpath:${flag#-L} ;;
3403             *)                    echo $flag ;;
3404         esac
3405     done
3406 }
3407
3408 msvc_flags(){
3409     msvc_common_flags "$@"
3410     for flag; do
3411         case $flag in
3412             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3413                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3414                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3415                                        -wd4307 \
3416                                        -wd4273 -wd4554 -wd4701 ;;
3417         esac
3418     done
3419 }
3420
3421 icl_flags(){
3422     msvc_common_flags "$@"
3423     for flag; do
3424         case $flag in
3425             # Despite what Intel's documentation says -Wall, which is supported
3426             # on Windows, does enable remarks so disable them here.
3427             -Wall)                echo $flag -Qdiag-disable:remark ;;
3428             -std=c99)             echo -Qstd=c99 ;;
3429             -flto)                echo -ipo ;;
3430         esac
3431     done
3432 }
3433
3434 icc_flags(){
3435     for flag; do
3436         case $flag in
3437             -flto)                echo -ipo ;;
3438             *)                    echo $flag ;;
3439         esac
3440     done
3441 }
3442
3443 pgi_flags(){
3444     for flag; do
3445         case $flag in
3446             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3447             -fomit-frame-pointer) echo -Mnoframe ;;
3448             -g)                   echo -gopt ;;
3449             *)                    echo $flag ;;
3450         esac
3451     done
3452 }
3453
3454 suncc_flags(){
3455     for flag; do
3456         case $flag in
3457             -march=*|-mcpu=*)
3458                 case "${flag#*=}" in
3459                     native)                   echo -xtarget=native       ;;
3460                     v9|niagara)               echo -xarch=sparc          ;;
3461                     ultrasparc)               echo -xarch=sparcvis       ;;
3462                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3463                     i586|pentium)             echo -xchip=pentium        ;;
3464                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3465                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3466                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3467                     pentium4*)          echo -xtarget=pentium4           ;;
3468                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3469                     *-sse3)             echo -xarch=sse3                 ;;
3470                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3471                     bonnell)                   echo -xarch=ssse3         ;;
3472                     corei7|nehalem)            echo -xtarget=nehalem     ;;
3473                     westmere)                  echo -xtarget=westmere    ;;
3474                     silvermont)                echo -xarch=sse4_2        ;;
3475                     corei7-avx|sandybridge)    echo -xtarget=sandybridge ;;
3476                     core-avx*|ivybridge|haswell|broadwell)
3477                                                echo -xarch=avx           ;;
3478                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
3479                     btver1)                    echo -xarch=amdsse4a      ;;
3480                     btver2|bdver*)             echo -xarch=avx           ;;
3481                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3482                     k8|opteron|athlon64|athlon-fx)
3483                                                echo -xarch=sse2a         ;;
3484                     athlon*)                   echo -xarch=pentium_proa  ;;
3485                 esac
3486                 ;;
3487             -std=c99)             echo -xc99              ;;
3488             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3489             -fPIC)                echo -KPIC -xcode=pic32 ;;
3490             -W*,*)                echo $flag              ;;
3491             -f*-*|-W*|-mimpure-text)                      ;;
3492             -shared)              echo -G                 ;;
3493             *)                    echo $flag              ;;
3494         esac
3495     done
3496 }
3497
3498 tms470_flags(){
3499     for flag; do
3500         case $flag in
3501             -march=*|-mcpu=*)
3502                 case "${flag#*=}" in
3503                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3504                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3505                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3506                     armv6*|arm11*)          echo -mv=6   ;;
3507                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3508                                             echo -mv=5e  ;;
3509                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3510                 esac
3511                 ;;
3512             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3513             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3514             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3515             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3516             -msoft-float)   echo --float_support=vfplib       ;;
3517             -O[0-3]|-mf=*)  echo $flag                        ;;
3518             -g)             echo -g -mn                       ;;
3519             -pds=*)         echo $flag                        ;;
3520             -D*|-I*)        echo $flag                        ;;
3521             --gcc|--abi=*)  echo $flag                        ;;
3522             -me)            echo $flag                        ;;
3523         esac
3524     done
3525 }
3526
3527 probe_cc(){
3528     pfx=$1
3529     _cc=$2
3530
3531     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3532     unset _ld_o _ldflags _ld_lib _ld_path
3533     unset _depflags _DEPCMD _DEPFLAGS
3534     _flags_filter=echo
3535
3536     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3537         true # no-op to avoid reading stdin in following checks
3538     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3539         _type=llvm_gcc
3540         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3541         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3542         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3543         _cflags_speed='-O3'
3544         _cflags_size='-Os'
3545     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3546         _type=gcc
3547         gcc_version=$($_cc --version | head -n1)
3548         gcc_basever=$($_cc -dumpversion)
3549         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3550         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3551         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3552         if ! $_cc -dumpversion | grep -q '^2\.'; then
3553             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3554         fi
3555         _cflags_speed='-O3'
3556         _cflags_size='-Os'
3557     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3558         _type=icc
3559         _ident=$($_cc --version | head -n1)
3560         _depflags='-MMD'
3561         _cflags_speed='-O3'
3562         _cflags_size='-Os'
3563         _cflags_noopt='-O1'
3564         _flags_filter=icc_flags
3565     elif $_cc -v 2>&1 | grep -q xlc; then
3566         _type=xlc
3567         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3568         _cflags_speed='-O5'
3569         _cflags_size='-O5 -qcompact'
3570     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3571         _type=ccc
3572         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3573         _DEPFLAGS='-M'
3574         _cflags_speed='-fast'
3575         _cflags_size='-O1'
3576         _flags_filter=ccc_flags
3577     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3578         test -d "$sysroot" || die "No valid sysroot specified."
3579         _type=armcc
3580         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3581         armcc_conf="$PWD/armcc.conf"
3582         $_cc --arm_linux_configure                 \
3583              --arm_linux_config_file="$armcc_conf" \
3584              --configure_sysroot="$sysroot"        \
3585              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3586              die "Error creating armcc configuration file."
3587         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3588         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3589         as_default="${cross_prefix}gcc"
3590         _depflags='-MMD'
3591         _cflags_speed='-O3'
3592         _cflags_size='-Os'
3593     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3594         _type=tms470
3595         _ident=$($_cc -version | head -n1 | tr -s ' ')
3596         _flags='--gcc --abi=eabi -me'
3597         _cc_e='-ppl -fe=$@'
3598         _cc_o='-fe=$@'
3599         _depflags='-ppa -ppd=$(@:.o=.d)'
3600         _cflags_speed='-O3 -mf=5'
3601         _cflags_size='-O3 -mf=2'
3602         _flags_filter=tms470_flags
3603     elif $_cc -v 2>&1 | grep -q clang; then
3604         _type=clang
3605         _ident=$($_cc --version | head -n1)
3606         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3607         _cflags_speed='-O3'
3608         _cflags_size='-Os'
3609     elif $_cc -V 2>&1 | grep -q Sun; then
3610         _type=suncc
3611         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3612         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3613         _DEPFLAGS='-xM1 -xc99'
3614         _ldflags='-std=c99'
3615         _cflags_speed='-O5'
3616         _cflags_size='-O5 -xspace'
3617         _flags_filter=suncc_flags
3618     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3619         _type=pathscale
3620         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3621         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3622         _cflags_speed='-O2'
3623         _cflags_size='-Os'
3624         _flags_filter='filter_out -Wdisabled-optimization'
3625     elif $_cc -v 2>&1 | grep -q Open64; then
3626         _type=open64
3627         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3628         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3629         _cflags_speed='-O2'
3630         _cflags_size='-Os'
3631         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3632     elif $_cc -V 2>&1 | grep -q Portland; then
3633         _type=pgi
3634         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3635         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3636         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3637         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3638         _cflags_noopt="-O"
3639         _flags_filter=pgi_flags
3640     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3641         _type=armasm
3642         _ident=$($_cc | head -n1)
3643         # 4509: "This form of conditional instruction is deprecated"
3644         _flags="-nologo -ignore 4509"
3645         _flags_filter=armasm_flags
3646     elif $_cc 2>&1 | grep -q Intel; then
3647         _type=icl
3648         _ident=$($_cc 2>&1 | head -n1)
3649         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3650         # Not only is O3 broken on 13.x+ but it is slower on all previous
3651         # versions (tested) as well.
3652         _cflags_speed="-O2"
3653         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3654         if $_cc 2>&1 | grep -q Linker; then
3655             _ld_o='-out:$@'
3656         else
3657             _ld_o='-Fe$@'
3658         fi
3659         _cc_o='-Fo$@'
3660         _cc_e='-P'
3661         _flags_filter=icl_flags
3662         _ld_lib='lib%.a'
3663         _ld_path='-libpath:'
3664         # -Qdiag-error to make icl error when seeing certain unknown arguments
3665         _flags='-nologo -Qdiag-error:4044,10157'
3666         # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency
3667         # with MSVC which enables it by default.
3668         _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS -fp:precise'
3669         disable stripping
3670     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3671         _type=msvc
3672         _ident=$($_cc 2>&1 | head -n1)
3673         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3674         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3675         _cflags_speed="-O2"
3676         _cflags_size="-O1"
3677         if $_cc -nologo- 2>&1 | grep -q Linker; then
3678             _ld_o='-out:$@'
3679         else
3680             _ld_o='-Fe$@'
3681         fi
3682         _cc_o='-Fo$@'
3683         _cc_e='-P -Fi$@'
3684         _flags_filter=msvc_flags
3685         _ld_lib='lib%.a'
3686         _ld_path='-libpath:'
3687         _flags='-nologo'
3688         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS'
3689         disable stripping
3690     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3691         _type=cparser
3692         _ident=$($_cc --version | head -n1)
3693         _depflags='-MMD'
3694         _cflags_speed='-O4'
3695         _cflags_size='-O2'
3696         _flags_filter=cparser_flags
3697     fi
3698
3699     eval ${pfx}_type=\$_type
3700     eval ${pfx}_ident=\$_ident
3701 }
3702
3703 set_ccvars(){
3704     eval ${1}_C=\${_cc_c-\${${1}_C}}
3705     eval ${1}_E=\${_cc_e-\${${1}_E}}
3706     eval ${1}_O=\${_cc_o-\${${1}_O}}
3707
3708     if [ -n "$_depflags" ]; then
3709         eval ${1}_DEPFLAGS=\$_depflags
3710     else
3711         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3712         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3713         eval DEP${1}FLAGS=\$_flags
3714     fi
3715 }
3716
3717 probe_cc cc "$cc"
3718 cflags_filter=$_flags_filter
3719 cflags_speed=$_cflags_speed
3720 cflags_size=$_cflags_size
3721 cflags_noopt=$_cflags_noopt
3722 add_cflags $_flags $_cflags
3723 cc_ldflags=$_ldflags
3724 set_ccvars CC
3725
3726 probe_cc hostcc "$host_cc"
3727 host_cflags_filter=$_flags_filter
3728 add_host_cflags  $_flags $_cflags
3729 set_ccvars HOSTCC
3730
3731 test -n "$cc_type" && enable $cc_type ||
3732     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3733
3734 : ${as_default:=$cc}
3735 : ${dep_cc_default:=$cc}
3736 : ${ld_default:=$cc}
3737 : ${host_ld_default:=$host_cc}
3738 set_default ar as dep_cc ld host_ld windres
3739
3740 probe_cc as "$as"
3741 asflags_filter=$_flags_filter
3742 add_asflags $_flags $_cflags
3743 set_ccvars AS
3744
3745 probe_cc ld "$ld"
3746 ldflags_filter=$_flags_filter
3747 add_ldflags $_flags $_ldflags
3748 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3749 LD_O=${_ld_o-$LD_O}
3750 LD_LIB=${_ld_lib-$LD_LIB}
3751 LD_PATH=${_ld_path-$LD_PATH}
3752
3753 probe_cc hostld "$host_ld"
3754 host_ldflags_filter=$_flags_filter
3755 add_host_ldflags $_flags $_ldflags
3756 HOSTLD_O=${_ld_o-$HOSTLD_O}
3757
3758 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3759     probe_cc depcc "$dep_cc"
3760     CCDEP=${_DEPCMD:-$DEPCMD}
3761     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3762     DEPCCFLAGS=$_flags
3763 fi
3764
3765 if $ar 2>&1 | grep -q Microsoft; then
3766     arflags="-nologo"
3767     ar_o='-out:$@'
3768 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3769     arflags="rq"
3770     ar_o='$@'
3771 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3772     arflags='-Xany -r -c'
3773     ar_o='$@'
3774 elif $ar 2>&1 | grep -q "\[D\] "; then
3775     arflags="rcD"
3776     ar_o='$@'
3777 else
3778     arflags="rc"
3779     ar_o='$@'
3780 fi
3781
3782 add_cflags $extra_cflags
3783 add_cxxflags $extra_cxxflags
3784 add_asflags $extra_cflags
3785
3786 if test -n "$sysroot"; then
3787     case "$cc_type" in
3788         gcc|llvm_gcc|clang)
3789             add_cppflags --sysroot="$sysroot"
3790             add_ldflags --sysroot="$sysroot"
3791 # On Darwin --sysroot may be ignored, -isysroot always affects headers and linking
3792             add_cppflags -isysroot "$sysroot"
3793             add_ldflags -isysroot "$sysroot"
3794         ;;
3795         tms470)
3796             add_cppflags -I"$sysinclude"
3797             add_ldflags  --sysroot="$sysroot"
3798         ;;
3799     esac
3800 fi
3801
3802 if test "$cpu" = host; then
3803     enabled cross_compile &&
3804         die "--cpu=host makes no sense when cross-compiling."
3805
3806     case "$cc_type" in
3807         gcc|llvm_gcc)
3808             check_native(){
3809                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3810                 sed -n "/cc1.*$1=/{
3811                             s/.*$1=\\([^ ]*\\).*/\\1/
3812                             p
3813                             q
3814                         }" $TMPE
3815             }
3816             cpu=$(check_native -march || check_native -mcpu)
3817         ;;
3818     esac
3819
3820     test "${cpu:-host}" = host &&
3821         die "--cpu=host not supported with compiler $cc"
3822 fi
3823
3824 # Deal with common $arch aliases
3825 case "$arch" in
3826     aarch64|arm64)
3827         arch="aarch64"
3828     ;;
3829     arm*|iPad*|iPhone*)
3830         arch="arm"
3831     ;;
3832     mips*|IP*)
3833         arch="mips"
3834     ;;
3835     parisc*|hppa*)
3836         arch="parisc"
3837     ;;
3838     "Power Macintosh"|ppc*|powerpc*)
3839         arch="ppc"
3840     ;;
3841     s390|s390x)
3842         arch="s390"
3843     ;;
3844     sh4|sh)
3845         arch="sh4"
3846     ;;
3847     sun4u|sparc*)
3848         arch="sparc"
3849     ;;
3850     tilegx|tile-gx)
3851         arch="tilegx"
3852     ;;
3853     i[3-6]86*|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3854         arch="x86"
3855     ;;
3856 esac
3857
3858 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3859 enable $arch
3860
3861 # Add processor-specific flags
3862 if enabled aarch64; then
3863
3864     case $cpu in
3865         armv*)
3866             cpuflags="-march=$cpu"
3867         ;;
3868         *)
3869             cpuflags="-mcpu=$cpu"
3870         ;;
3871     esac
3872
3873 elif enabled alpha; then
3874
3875     cpuflags="-mcpu=$cpu"
3876
3877 elif enabled arm; then
3878
3879     check_arm_arch() {
3880         check_cpp_condition stddef.h \
3881             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3882             $cpuflags
3883     }
3884
3885     probe_arm_arch() {
3886         if   check_arm_arch 4;        then echo armv4;
3887         elif check_arm_arch 4T;       then echo armv4t;
3888         elif check_arm_arch 5;        then echo armv5;
3889         elif check_arm_arch 5E;       then echo armv5e;
3890         elif check_arm_arch 5T;       then echo armv5t;
3891         elif check_arm_arch 5TE;      then echo armv5te;
3892         elif check_arm_arch 5TEJ;     then echo armv5te;
3893         elif check_arm_arch 6;        then echo armv6;
3894         elif check_arm_arch 6J;       then echo armv6j;
3895         elif check_arm_arch 6K;       then echo armv6k;
3896         elif check_arm_arch 6Z;       then echo armv6z;
3897         elif check_arm_arch 6ZK;      then echo armv6zk;
3898         elif check_arm_arch 6T2;      then echo armv6t2;
3899         elif check_arm_arch 7;        then echo armv7;
3900         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3901         elif check_arm_arch 7S;       then echo armv7-a;
3902         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3903         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3904         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3905         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3906         fi
3907     }
3908
3909     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3910
3911     case $cpu in
3912         armv*)
3913             cpuflags="-march=$cpu"
3914             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3915         ;;
3916         *)
3917             cpuflags="-mcpu=$cpu"
3918             case $cpu in
3919                 cortex-a*)                               subarch=armv7a  ;;
3920                 cortex-r*)                               subarch=armv7r  ;;
3921                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3922                 arm11*)                                  subarch=armv6   ;;
3923                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3924                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3925                 *)                             subarch=$(probe_arm_arch) ;;
3926             esac
3927         ;;
3928     esac
3929
3930     case "$subarch" in
3931         armv5t*)    enable fast_clz                ;;
3932         armv[6-8]*)
3933             enable fast_clz
3934             disabled fast_unaligned || enable fast_unaligned
3935             ;;
3936     esac
3937
3938 elif enabled avr32; then
3939
3940     case $cpu in
3941         ap7[02]0[0-2])
3942             subarch="avr32_ap"
3943             cpuflags="-mpart=$cpu"
3944         ;;
3945         ap)
3946             subarch="avr32_ap"
3947             cpuflags="-march=$cpu"
3948         ;;
3949         uc3[ab]*)
3950             subarch="avr32_uc"
3951             cpuflags="-mcpu=$cpu"
3952         ;;
3953         uc)
3954             subarch="avr32_uc"
3955             cpuflags="-march=$cpu"
3956         ;;
3957     esac
3958
3959 elif enabled bfin; then
3960
3961     cpuflags="-mcpu=$cpu"
3962
3963 elif enabled mips; then
3964
3965     cpuflags="-march=$cpu"
3966
3967     case $cpu in
3968         24kc)
3969             disable mips32r5
3970             disable mips64r6
3971             disable mipsfpu
3972             disable mipsdspr1
3973             disable mipsdspr2
3974             disable msa
3975         ;;
3976         24kf*)
3977             disable mips32r5
3978             disable mips64r6
3979             disable mipsdspr1
3980             disable mipsdspr2
3981             disable msa
3982         ;;
3983         24kec|34kc|1004kc)
3984             disable mips32r5
3985             disable mips64r6
3986             disable mipsfpu
3987             disable mipsdspr2
3988             disable msa
3989         ;;
3990         24kef*|34kf*|1004kf*)
3991             disable mips32r5
3992             disable mips64r6
3993             disable mipsdspr2
3994             disable msa
3995         ;;
3996         74kc)
3997             disable mips32r5
3998             disable mips64r6
3999             disable mipsfpu
4000             disable msa
4001         ;;
4002         74kf)
4003             disable mips32r5
4004             disable mips64r6
4005             disable msa
4006         ;;
4007         p5600)
4008             disable mips64r6
4009             disable mipsdspr1
4010             disable mipsdspr2
4011
4012             check_cflags "-mtune=p5600"
4013         ;;
4014         i6400)
4015             disable mips32r5
4016             disable mipsdspr1
4017             disable mipsdspr2
4018             disable mipsfpu
4019
4020             check_cflags "-mtune=i6400 -mabi=64"
4021             check_ldflags "-mabi=64"
4022         ;;
4023         loongson*)
4024             disable mipsfpu
4025             disable mips32r2
4026             disable mips32r5
4027             disable mips64r6
4028             disable mipsdspr1
4029             disable mipsdspr2
4030             disable msa
4031             enable local_aligned_8 local_aligned_16 local_aligned_32
4032             enable simd_align_16
4033             enable fast_64bit
4034             enable fast_clz
4035             enable fast_cmov
4036             enable fast_unaligned
4037             disable aligned_stack
4038             case $cpu in
4039                 loongson3*)
4040                     cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations"
4041                 ;;
4042                 loongson2e)
4043                     cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations"
4044                 ;;
4045                 loongson2f)
4046                     cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations"
4047                 ;;
4048             esac
4049         ;;
4050         generic)
4051             disable mips32r5
4052             disable mips64r6
4053             disable msa
4054         ;;
4055     esac
4056
4057 elif enabled ppc; then
4058
4059     disable ldbrx
4060
4061     case $(tolower $cpu) in
4062         601|ppc601|powerpc601)
4063             cpuflags="-mcpu=601"
4064             disable altivec
4065         ;;
4066         603*|ppc603*|powerpc603*)
4067             cpuflags="-mcpu=603"
4068             disable altivec
4069         ;;
4070         604*|ppc604*|powerpc604*)
4071             cpuflags="-mcpu=604"
4072             disable altivec
4073         ;;
4074         g3|75*|ppc75*|powerpc75*)
4075             cpuflags="-mcpu=750"
4076             disable altivec
4077         ;;
4078         g4|745*|ppc745*|powerpc745*)
4079             cpuflags="-mcpu=7450"
4080             disable vsx
4081         ;;
4082         74*|ppc74*|powerpc74*)
4083             cpuflags="-mcpu=7400"
4084             disable vsx
4085         ;;
4086         g5|970|ppc970|powerpc970)
4087             cpuflags="-mcpu=970"
4088             disable vsx
4089         ;;
4090         power[3-6]*)
4091             cpuflags="-mcpu=$cpu"
4092             disable vsx
4093         ;;
4094         power[7-8]*)
4095             cpuflags="-mcpu=$cpu"
4096         ;;
4097         cell)
4098             cpuflags="-mcpu=cell"
4099             enable ldbrx
4100             disable vsx
4101         ;;
4102         e500mc)
4103             cpuflags="-mcpu=e500mc"
4104             disable altivec
4105         ;;
4106         e500v2)
4107             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
4108             disable altivec
4109             disable dcbzl
4110         ;;
4111         e500)
4112             cpuflags="-mcpu=8540 -mhard-float"
4113             disable altivec
4114             disable dcbzl
4115         ;;
4116     esac
4117
4118 elif enabled sparc; then
4119
4120     case $cpu in
4121         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
4122             cpuflags="-mcpu=$cpu"
4123         ;;
4124         ultrasparc*|niagara[234])
4125             cpuflags="-mcpu=$cpu"
4126         ;;
4127     esac
4128
4129 elif enabled x86; then
4130
4131     case $cpu in
4132         i[345]86|pentium)
4133             cpuflags="-march=$cpu"
4134             disable i686
4135             disable mmx
4136         ;;
4137         # targets that do NOT support nopl and conditional mov (cmov)
4138         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
4139             cpuflags="-march=$cpu"
4140             disable i686
4141         ;;
4142         # targets that do support nopl and conditional mov (cmov)
4143         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\
4144         |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*)
4145             cpuflags="-march=$cpu"
4146             enable i686
4147             enable fast_cmov
4148         ;;
4149         # targets that do support conditional mov but on which it's slow
4150         pentium4|pentium4m|prescott|nocona)
4151             cpuflags="-march=$cpu"
4152             enable i686
4153             disable fast_cmov
4154         ;;
4155     esac
4156
4157 fi
4158
4159 if [ "$cpu" != generic ]; then
4160     add_cflags  $cpuflags
4161     add_asflags $cpuflags
4162 fi
4163
4164 # compiler sanity check
4165 check_exec <<EOF
4166 int main(void){ return 0; }
4167 EOF
4168 if test "$?" != 0; then
4169     echo "$cc is unable to create an executable file."
4170     if test -z "$cross_prefix" && ! enabled cross_compile ; then
4171         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
4172         echo "Only do this if you know what cross compiling means."
4173     fi
4174     die "C compiler test failed."
4175 fi
4176
4177 add_cppflags -D_ISOC99_SOURCE
4178 add_cxxflags -D__STDC_CONSTANT_MACROS
4179 check_cflags -std=c99
4180 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
4181 #include <stdlib.h>
4182 EOF
4183 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
4184 #include <stdlib.h>
4185 EOF
4186
4187 add_host_cppflags -D_ISOC99_SOURCE
4188 check_host_cflags -std=c99
4189 check_host_cflags -Wall
4190 check_host_cflags -O3
4191
4192 check_64bit(){
4193     arch32=$1
4194     arch64=$2
4195     expr=$3
4196     check_code cc "" "int test[2*($expr) - 1]" &&
4197         subarch=$arch64 || subarch=$arch32
4198 }
4199
4200 case "$arch" in
4201     aarch64|alpha|ia64)
4202         spic=$shared
4203     ;;
4204     mips)
4205         check_64bit mips mips64 '_MIPS_SIM > 1'
4206         spic=$shared
4207     ;;
4208     parisc)
4209         check_64bit parisc parisc64 'sizeof(void *) > 4'
4210         spic=$shared
4211     ;;
4212     ppc)
4213         check_64bit ppc ppc64 'sizeof(void *) > 4'
4214         spic=$shared
4215     ;;
4216     s390)
4217         check_64bit s390 s390x 'sizeof(void *) > 4'
4218         spic=$shared
4219     ;;
4220     sparc)
4221         check_64bit sparc sparc64 'sizeof(void *) > 4'
4222         spic=$shared
4223     ;;
4224     x86)
4225         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
4226         # Treat x32 as x64 for now. Note it also needs spic=$shared
4227         test "$subarch" = "x86_32" && check_cpp_condition stddef.h 'defined(__x86_64__)' &&
4228             subarch=x86_64
4229         if test "$subarch" = "x86_64"; then
4230             spic=$shared
4231         fi
4232     ;;
4233     ppc)
4234         check_cc <<EOF && subarch="ppc64"
4235         int test[(int)sizeof(char*) - 7];
4236 EOF
4237     ;;
4238 esac
4239
4240 enable $subarch
4241 enabled spic && enable_weak pic
4242
4243 # OS specific
4244 case $target_os in
4245     aix)
4246         SHFLAGS=-shared
4247         add_cppflags '-I\$(SRC_PATH)/compat/aix'
4248         enabled shared && add_ldflags -Wl,-brtl
4249         ;;
4250     android)
4251         disable symver
4252         enable section_data_rel_ro
4253         SLIB_INSTALL_NAME='$(SLIBNAME)'
4254         SLIB_INSTALL_LINKS=
4255         # soname not set on purpose
4256         SHFLAGS=-shared
4257         ;;
4258     haiku)
4259         prefix_default="/boot/common"
4260         network_extralibs="-lnetwork"
4261         host_libs=
4262         ;;
4263     sunos)
4264         SHFLAGS='-shared -Wl,-h,$$(@F)'
4265         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
4266         network_extralibs="-lsocket -lnsl"
4267         add_cppflags -D__EXTENSIONS__
4268         # When using suncc to build, the Solaris linker will mark
4269         # an executable with each instruction set encountered by
4270         # the Solaris assembler.  As our libraries contain their own
4271         # guards for processor-specific code, instead suppress
4272         # generation of the HWCAPS ELF section on Solaris x86 only.
4273         enabled_all suncc x86 &&
4274             echo "hwcap_1 = OVERRIDE;" > mapfile &&
4275             add_ldflags -Wl,-M,mapfile
4276         nm_default='nm -P -g'
4277         ;;
4278     netbsd)
4279         disable symver
4280         oss_indev_extralibs="-lossaudio"
4281         oss_outdev_extralibs="-lossaudio"
4282         enabled gcc || check_ldflags -Wl,-zmuldefs
4283         ;;
4284     openbsd|bitrig)
4285         disable symver
4286         SHFLAGS='-shared'
4287         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
4288         SLIB_INSTALL_LINKS=
4289         oss_indev_extralibs="-lossaudio"
4290         oss_outdev_extralibs="-lossaudio"
4291         ;;
4292     dragonfly)
4293         disable symver
4294         ;;
4295     freebsd)
4296         ;;
4297     bsd/os)
4298         add_extralibs -lpoll -lgnugetopt
4299         strip="strip -d"
4300         ;;
4301     darwin)
4302         enabled ppc && add_asflags -force_cpusubtype_ALL
4303         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
4304         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
4305         strip="${strip} -x"
4306         add_ldflags -Wl,-dynamic,-search_paths_first
4307         SLIBSUF=".dylib"
4308         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
4309         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
4310         objformat="macho"
4311         enabled x86_64 && objformat="macho64"
4312         enabled_any pic shared x86_64 ||
4313             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
4314         ;;
4315     mingw32*)
4316         if test $target_os = "mingw32ce"; then
4317             disable network
4318         else
4319             target_os=mingw32
4320         fi
4321         decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
4322         decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
4323         LIBTARGET=i386
4324         if enabled x86_64; then
4325             LIBTARGET="i386:x86-64"
4326         elif enabled arm; then
4327             LIBTARGET=arm-wince
4328         fi
4329         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4330         check_ldflags -Wl,--nxcompat
4331         check_ldflags -Wl,--dynamicbase
4332         enabled x86_32 && check_ldflags -Wl,--large-address-aware
4333         shlibdir_default="$bindir_default"
4334         SLIBPREF=""
4335         SLIBSUF=".dll"
4336         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4337         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4338         dlltool="${cross_prefix}dlltool"
4339         if check_cmd lib.exe -list; then
4340             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4341             if enabled x86_64; then
4342                 LIBTARGET=x64
4343             fi
4344         elif check_cmd $dlltool --version; then
4345             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)'
4346         fi
4347         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4348         SLIB_INSTALL_LINKS=
4349         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4350         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4351         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'
4352         objformat="win32"
4353         ranlib=:
4354         enable dos_paths
4355         ;;
4356     win32|win64)
4357         disable symver
4358         if enabled shared; then
4359             # Link to the import library instead of the normal static library
4360             # for shared libs.
4361             LD_LIB='%.lib'
4362             # Cannot build both shared and static libs with MSVC or icl.
4363             disable static
4364         fi
4365         enabled x86_32 && check_ldflags -LARGEADDRESSAWARE
4366         shlibdir_default="$bindir_default"
4367         SLIBPREF=""
4368         SLIBSUF=".dll"
4369         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4370         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4371         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4372         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4373         SLIB_INSTALL_LINKS=
4374         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4375         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4376         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4377         objformat="win32"
4378         ranlib=:
4379         enable dos_paths
4380         ;;
4381     cygwin*)
4382         target_os=cygwin
4383         shlibdir_default="$bindir_default"
4384         SLIBPREF="cyg"
4385         SLIBSUF=".dll"
4386         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
4387         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
4388         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4389         SLIB_INSTALL_LINKS=
4390         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
4391         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
4392         objformat="win32"
4393         enable dos_paths
4394         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
4395         ;;
4396     *-dos|freedos|opendos)
4397         network_extralibs="-lsocket"
4398         objformat="coff"
4399         enable dos_paths
4400         add_cppflags -U__STRICT_ANSI__
4401         ;;
4402     linux)
4403         enable dv1394
4404         enable section_data_rel_ro
4405         ;;
4406     irix*)
4407         target_os=irix
4408         ranlib="echo ignoring ranlib"
4409         ;;
4410     os/2*)
4411         strip="lxlite -CS"
4412         ln_s="cp -f"
4413         objformat="aout"
4414         add_cppflags -D_GNU_SOURCE
4415         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
4416         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4417         LIBSUF="_s.a"
4418         SLIBPREF=""
4419         SLIBSUF=".dll"
4420         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4421         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4422         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4423             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4424             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4425             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4426             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4427         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4428             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4429         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4430         enable dos_paths
4431         enable_weak os2threads
4432         ;;
4433     gnu/kfreebsd)
4434         add_cppflags -D_BSD_SOURCE
4435         ;;
4436     gnu)
4437         ;;
4438     qnx)
4439         add_cppflags -D_QNX_SOURCE
4440         network_extralibs="-lsocket"
4441         ;;
4442     symbian)
4443         SLIBSUF=".dll"
4444         enable dos_paths
4445         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4446         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4447         add_ldflags -Wl,--target1-abs,--no-undefined \
4448                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4449                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4450         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4451                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4452                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4453         ;;
4454     osf1)
4455         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4456         ;;
4457     minix)
4458         ;;
4459     plan9)
4460         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
4461                      -D_REENTRANT_SOURCE        \
4462                      -D_RESEARCH_SOURCE         \
4463                      -DFD_SETSIZE=96            \
4464                      -DHAVE_SOCK_OPTS
4465         add_compat strtod.o strtod=avpriv_strtod
4466         network_extralibs='-lbsd'
4467         exeobjs=compat/plan9/main.o
4468         disable ffserver
4469         cp_f='cp'
4470         ;;
4471     none)
4472         ;;
4473     *)
4474         die "Unknown OS '$target_os'."
4475         ;;
4476 esac
4477
4478 # determine libc flavour
4479
4480 probe_libc(){
4481     pfx=$1
4482     pfx_no_=${pfx%_}
4483     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4484     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4485         eval ${pfx}libc_type=uclibc
4486         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4487     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4488         eval ${pfx}libc_type=glibc
4489         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4490     # MinGW headers can be installed on Cygwin, so check for newlib first.
4491     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4492         eval ${pfx}libc_type=newlib
4493         add_${pfx}cppflags -U__STRICT_ANSI__
4494     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4495     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4496         eval ${pfx}libc_type=mingw64
4497         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
4498             add_compat msvcrt/snprintf.o
4499             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
4500         fi
4501         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4502         eval test \$${pfx_no_}cc_type = "gcc" &&
4503             add_${pfx}cppflags -D__printf__=__gnu_printf__
4504     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4505          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4506         eval ${pfx}libc_type=mingw32
4507         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4508             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4509             die "ERROR: MinGW32 runtime version must be >= 3.15."
4510         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4511         eval test \$${pfx_no_}cc_type = "gcc" &&
4512             add_${pfx}cppflags -D__printf__=__gnu_printf__
4513     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4514         eval ${pfx}libc_type=msvcrt
4515         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4516             if [ "$pfx" = host_ ]; then
4517                 add_host_cppflags -Dsnprintf=_snprintf
4518             else
4519                 add_compat strtod.o strtod=avpriv_strtod
4520                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4521                                              _snprintf=avpriv_snprintf  \
4522                                              vsnprintf=avpriv_vsnprintf
4523             fi
4524         fi
4525         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4526         # 0x601 by default unless something else is set by the user.
4527         # This can easily lead to us detecting functions only present
4528         # in such new versions and producing binaries requiring windows 7.0.
4529         # Therefore explicitly set the default to XP unless the user has
4530         # set something else on the command line.
4531         # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4532         # family. For these cases, configure is free to use any functions
4533         # found in the SDK headers by default. (Alternatively, we could force
4534         # _WIN32_WINNT to 0x0602 in that case.)
4535         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4536             { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4537 #ifdef WINAPI_FAMILY
4538 #include <winapifamily.h>
4539 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4540 #error not desktop
4541 #endif
4542 #endif
4543 EOF
4544     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4545         eval ${pfx}libc_type=klibc
4546     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4547         eval ${pfx}libc_type=bionic
4548     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4549         eval ${pfx}libc_type=solaris
4550         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4551     fi
4552     check_${pfx}cc <<EOF
4553 #include <time.h>
4554 void *v = localtime_r;
4555 EOF
4556 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
4557 #include <time.h>
4558 void *v = localtime_r;
4559 EOF
4560
4561 }
4562
4563 probe_libc
4564 test -n "$libc_type" && enable libc_$libc_type
4565 probe_libc host_
4566 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4567
4568 case $libc_type in
4569     bionic)
4570         add_compat strtod.o strtod=avpriv_strtod
4571         ;;
4572 esac
4573
4574 # hacks for compiler/libc/os combinations
4575
4576 if enabled_all tms470 libc_glibc; then
4577     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4578     add_cppflags -D__USER_LABEL_PREFIX__=
4579     add_cppflags -D__builtin_memset=memset
4580     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4581     add_cflags   -pds=48    # incompatible redefinition of macro
4582 fi
4583
4584 if enabled_all ccc libc_glibc; then
4585     add_ldflags -Wl,-z,now  # calls to libots crash without this
4586 fi
4587
4588 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4589     add_cppflags '-I\$(SRC_PATH)/compat/float'
4590
4591 esc(){
4592     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4593 }
4594
4595 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
4596
4597 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4598
4599 set_default libdir
4600 : ${shlibdir_default:="$libdir"}
4601 : ${pkgconfigdir_default:="$libdir/pkgconfig"}
4602
4603 set_default $PATHS_LIST
4604 set_default nm
4605
4606 # we need to build at least one lib type
4607 if ! enabled_any static shared; then
4608     cat <<EOF
4609 At least one library type must be built.
4610 Specify --enable-static to build the static libraries or --enable-shared to
4611 build the shared libraries as well. To only build the shared libraries specify
4612 --disable-static in addition to --enable-shared.
4613 EOF
4614     exit 1;
4615 fi
4616
4617 die_license_disabled() {
4618     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4619 }
4620
4621 die_license_disabled_gpl() {
4622     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
4623 }
4624
4625 die_license_disabled gpl frei0r
4626 die_license_disabled gpl libcdio
4627 die_license_disabled gpl libsmbclient
4628 die_license_disabled gpl libutvideo
4629 die_license_disabled gpl libvidstab
4630 die_license_disabled gpl libx264
4631 die_license_disabled gpl libx265
4632 die_license_disabled gpl libxavs
4633 die_license_disabled gpl libxvid
4634 die_license_disabled gpl libzvbi
4635 die_license_disabled gpl x11grab
4636
4637 die_license_disabled nonfree libaacplus
4638 die_license_disabled nonfree libfaac
4639 die_license_disabled nonfree nvenc
4640 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4641 enabled gpl && die_license_disabled_gpl nonfree openssl
4642
4643 die_license_disabled version3 libopencore_amrnb
4644 die_license_disabled version3 libopencore_amrwb
4645 die_license_disabled version3 libsmbclient
4646 die_license_disabled version3 libvo_aacenc
4647 die_license_disabled version3 libvo_amrwbenc
4648
4649 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4650
4651 disabled optimizations || check_cflags -fomit-frame-pointer
4652
4653 enable_weak_pic() {
4654     disabled pic && return
4655     enable pic
4656     add_cppflags -DPIC
4657     case "$target_os" in
4658     mingw*|cygwin*)
4659         ;;
4660     *)
4661         add_cflags -fPIC
4662         ;;
4663     esac
4664     add_asflags  -fPIC
4665 }
4666
4667 enabled pic && enable_weak_pic
4668
4669 check_cc <<EOF || die "Symbol mangling check failed."
4670 int ff_extern;
4671 EOF
4672 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4673 extern_prefix=${sym%%ff_extern*}
4674
4675 check_cc <<EOF && enable_weak inline_asm
4676 void foo(void) { __asm__ volatile ("" ::); }
4677 EOF
4678
4679 _restrict=
4680 for restrict_keyword in restrict __restrict__ __restrict; do
4681     check_cc <<EOF && _restrict=$restrict_keyword && break
4682 void foo(char * $restrict_keyword p);
4683 EOF
4684 done
4685
4686 check_cc <<EOF && enable pragma_deprecated
4687 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4688 EOF
4689
4690 check_cc <<EOF && enable attribute_packed
4691 struct { int x; } __attribute__((packed)) x;
4692 EOF
4693
4694 check_cc <<EOF && enable attribute_may_alias
4695 union { int x; } __attribute__((may_alias)) x;
4696 EOF
4697
4698 check_cc <<EOF || die "endian test failed"
4699 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4700 EOF
4701 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4702
4703 if ! enabled ppc64 || enabled bigendian; then
4704     disable vsx
4705 fi
4706
4707 check_gas() {
4708     log "check_gas using '$as' as AS"
4709     # :vararg is used on aarch64, arm and ppc altivec
4710     check_as <<EOF || return 1
4711 .macro m n, y:vararg=0
4712 \n: .int \y
4713 .endm
4714 m x
4715 EOF
4716     # .altmacro is only used in arm asm
4717     ! enabled arm || check_as <<EOF || return 1
4718 .altmacro
4719 EOF
4720     enable gnu_as
4721     return 0
4722 }
4723
4724 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4725     nogas=:
4726     enabled_any arm aarch64 && nogas=die
4727     enabled_all ppc altivec && [ $target_os_default != aix ] && nogas=warn
4728     as_noop=-v
4729
4730     case $as_type in
4731         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4732         gcc)  gaspp_as_type=gas ;;
4733         *)    gaspp_as_type=$as_type ;;
4734     esac
4735
4736     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4737
4738     test "${as#*gas-preprocessor.pl}" != "$as" ||
4739     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- ${as:=$cc} $as_noop &&
4740         gas="${gas:=gas-preprocessor.pl} -arch $arch -as-type $gaspp_as_type -- ${as:=$cc}"
4741
4742     if ! check_gas ; then
4743         as=${gas:=$as}
4744         check_gas || \
4745             $nogas "GNU assembler not found, install/update gas-preprocessor"
4746     fi
4747
4748     check_as <<EOF && enable as_func
4749 .func test
4750 .endfunc
4751 EOF
4752 fi
4753
4754 check_inline_asm inline_asm_labels '"1:\n"'
4755
4756 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4757
4758 if enabled aarch64; then
4759     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4760     # internal assembler in clang 3.3 does not support this instruction
4761     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4762     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4763
4764     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4765
4766 elif enabled alpha; then
4767
4768     check_cflags -mieee
4769
4770 elif enabled arm; then
4771
4772     enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4773
4774     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4775 float func(float a, float b){ return a+b; }
4776 EOF
4777
4778     enabled thumb && check_cflags -mthumb || check_cflags -marm
4779
4780     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4781         enable vfp_args
4782     elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4783         enable vfp_args
4784     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4785         case "${cross_prefix:-$cc}" in
4786             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4787             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4788 __asm__ (".eabi_attribute 28, 1");
4789 int main(void) { return 0; }
4790 EOF
4791         esac
4792         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4793     fi
4794
4795     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4796     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4797     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4798     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4799     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4800     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4801     enabled setend  && check_insn setend  'setend be'
4802
4803     [ $target_os = linux ] || [ $target_os = android ] ||
4804         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4805             $ARCH_EXT_LIST_ARM
4806
4807     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4808
4809     check_as <<EOF && enable as_dn_directive
4810 ra .dn d0.i16
4811 .unreq ra
4812 EOF
4813
4814     # llvm's integrated assembler supports .object_arch from llvm 3.5
4815     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
4816 .object_arch armv4
4817 EOF
4818
4819     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4820
4821 elif enabled mips; then
4822
4823     enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
4824     enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
4825     enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
4826
4827     # Enable minimum ISA based on selected options
4828     if enabled mips64 && (enabled mipsdspr1 || enabled mipsdspr2); then
4829         add_cflags "-mips64r2"
4830         add_asflags "-mips64r2"
4831     elif enabled mips64 && enabled mipsfpu && disabled loongson2 && disabled loongson3; then
4832         add_cflags "-mips64"
4833         add_asflags "-mips64"
4834     elif enabled mipsdspr1 || enabled mipsdspr2; then
4835         add_cflags "-mips32r2 -mfp32"
4836         add_asflags "-mips32r2 -mfp32"
4837     elif enabled mips32r5 || enabled mips64r6; then
4838         check_cflags "-mfp64"
4839         check_ldflags "-mfp64"
4840     fi
4841
4842     enabled mips32r5  && check_cflags "-mips32r5 -msched-weight -mload-store-pairs -funroll-loops" &&
4843      check_ldflags "-mips32r5" &&
4844      check_inline_asm mips32r5  '"ulw $t0, ($t1)"'
4845     enabled mips64r6  && check_cflags "-mips64r6 -msched-weight -mload-store-pairs -funroll-loops" &&
4846      check_ldflags "-mips64r6" &&
4847      check_inline_asm mips64r6  '"aui $t0, $t1, 1"'
4848     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4849      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4850     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4851      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4852     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4853      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4854     enabled msa       && check_cflags "-mmsa" && check_ldflags "-mmsa" &&
4855      check_inline_asm msa       '"addvi.b $w0, $w1, 1"'
4856
4857     enabled mips32r5 && add_asflags "-mips32r5 -mfp64"
4858     enabled mips64r6 && add_asflags "-mips64r6 -mfp64"
4859     enabled msa && add_asflags "-mmsa"
4860
4861 elif enabled parisc; then
4862
4863     if enabled gcc; then
4864         case $($cc -dumpversion) in
4865             4.[3-9].*) check_cflags -fno-optimize-sibling-calls ;;
4866         esac
4867     fi
4868
4869 elif enabled ppc; then
4870
4871     enable local_aligned_8 local_aligned_16 local_aligned_32
4872
4873     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4874     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4875     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4876     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4877
4878     # AltiVec flags: The FSF version of GCC differs from the Apple version
4879     if enabled altivec; then
4880         check_cflags -maltivec -mabi=altivec &&
4881         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4882         check_cflags -faltivec
4883
4884         # check if our compiler supports Motorola AltiVec C API
4885         check_cc <<EOF || disable altivec
4886 $inc_altivec_h
4887 int main(void) {
4888     vector signed int v1 = (vector signed int) { 0 };
4889     vector signed int v2 = (vector signed int) { 1 };
4890     v1 = vec_add(v1, v2);
4891     return 0;
4892 }
4893 EOF
4894
4895         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4896     fi
4897
4898     if enabled vsx; then
4899         check_cflags -mvsx &&
4900         check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
4901     fi
4902
4903     if enabled power8; then
4904         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4905     fi
4906
4907 elif enabled x86; then
4908
4909     check_builtin rdtsc    intrin.h   "__rdtsc()"
4910     check_builtin mm_empty mmintrin.h "_mm_empty()"
4911
4912     enable local_aligned_8 local_aligned_16 local_aligned_32
4913
4914     # check whether EBP is available on x86
4915     # As 'i' is stored on the stack, this program will crash
4916     # if the base pointer is used to access it because the
4917     # base pointer is cleared in the inline assembly code.
4918     check_exec_crash <<EOF && enable ebp_available
4919 volatile int i=0;
4920 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4921 return i;
4922 EOF
4923
4924     # check whether EBX is available on x86
4925     check_inline_asm ebx_available '""::"b"(0)' &&
4926         check_inline_asm ebx_available '"":::"%ebx"'
4927
4928     # check whether xmm clobbers are supported
4929     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4930
4931     check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test, %eax"' ||
4932         check_inline_asm inline_asm_direct_symbol_refs '"movl '$extern_prefix'test(%rip), %eax"'
4933
4934     # check whether binutils is new enough to compile SSSE3/MMXEXT
4935     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4936     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4937
4938     if ! disabled_any asm mmx yasm; then
4939         if check_cmd $yasmexe --version; then
4940             enabled x86_64 && yasm_extra="-m amd64"
4941             yasm_debug="-g dwarf2"
4942         elif check_cmd nasm -v; then
4943             yasmexe=nasm
4944             yasm_debug="-g -F dwarf"
4945             if enabled x86_64; then
4946                 case "$objformat" in
4947                     elf)   objformat=elf64 ;;
4948                     win32) objformat=win64 ;;
4949                 esac
4950             fi
4951         fi
4952
4953         YASMFLAGS="-f $objformat $yasm_extra"
4954         enabled pic               && append YASMFLAGS "-DPIC"
4955         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4956         case "$objformat" in
4957             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4958         esac
4959
4960         check_yasm "movbe ecx, [5]" && enable yasm ||
4961             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4962         check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4963         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4964         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4965         check_yasm "CPU amdnop" || disable cpunop
4966     fi
4967
4968     case "$cpu" in
4969         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4970             disable fast_clz
4971         ;;
4972     esac
4973
4974 fi
4975
4976 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4977
4978 check_ldflags -Wl,--as-needed
4979 check_ldflags -Wl,-z,noexecstack
4980
4981 if check_func dlopen; then
4982     ldl=
4983 elif check_func dlopen -ldl; then
4984     ldl=-ldl
4985 fi
4986
4987 frei0r_filter_extralibs='$ldl'
4988 frei0r_src_filter_extralibs='$ldl'
4989 ladspa_filter_extralibs='$ldl'
4990 nvenc_encoder_extralibs='$ldl'
4991
4992 if ! disabled network; then
4993     check_func getaddrinfo $network_extralibs
4994     check_func getservbyport $network_extralibs
4995     check_func inet_aton $network_extralibs
4996
4997     check_type netdb.h "struct addrinfo"
4998     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4999     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
5000     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
5001     check_type poll.h "struct pollfd"
5002     check_type netinet/sctp.h "struct sctp_event_subscribe"
5003     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
5004     check_type netinet/in.h "struct sockaddr_in6"
5005     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
5006     check_type "sys/types.h sys/socket.h" socklen_t
5007
5008     # Prefer arpa/inet.h over winsock2
5009     if check_header arpa/inet.h ; then
5010         check_func closesocket
5011     elif check_header winsock2.h ; then
5012         check_func_headers winsock2.h closesocket -lws2 &&
5013             network_extralibs="-lws2" ||
5014         { check_func_headers winsock2.h closesocket -lws2_32 &&
5015             network_extralibs="-lws2_32"; } || disable winsock2_h network
5016         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
5017
5018         check_type ws2tcpip.h socklen_t
5019         check_type ws2tcpip.h "struct addrinfo"
5020         check_type ws2tcpip.h "struct group_source_req"
5021         check_type ws2tcpip.h "struct ip_mreq_source"
5022         check_type ws2tcpip.h "struct ipv6_mreq"
5023         check_type winsock2.h "struct pollfd"
5024         check_struct winsock2.h "struct sockaddr" sa_len
5025         check_type ws2tcpip.h "struct sockaddr_in6"
5026         check_type ws2tcpip.h "struct sockaddr_storage"
5027     else
5028         disable network
5029     fi
5030 fi
5031
5032 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
5033 check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomic_compare_exchange_n(ptr, oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)"
5034 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
5035 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
5036 check_builtin sarestart signal.h "SA_RESTART"
5037 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
5038 check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
5039 check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
5040
5041 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
5042 check_func  ${malloc_prefix}memalign            && enable memalign
5043 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
5044
5045 check_func  access
5046 check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
5047 check_func  fcntl
5048 check_func  fork
5049 check_func  gethrtime
5050 check_func  getopt
5051 check_func  getrusage
5052 check_func  gettimeofday
5053 check_func  isatty
5054 check_func  mach_absolute_time
5055 check_func  mkstemp
5056 check_func  mmap
5057 check_func  mprotect
5058 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
5059 check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
5060 check_func  sched_getaffinity
5061 check_func  setrlimit
5062 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
5063 check_func  strerror_r
5064 check_func  sysconf
5065 check_func  sysctl
5066 check_func  usleep
5067
5068 check_func_headers conio.h kbhit
5069 check_func_headers io.h setmode
5070 check_func_headers lzo/lzo1x.h lzo1x_999_compress
5071 check_func_headers stdlib.h getenv
5072
5073 check_func_headers windows.h CoTaskMemFree -lole32
5074 check_func_headers windows.h GetProcessAffinityMask
5075 check_func_headers windows.h GetProcessTimes
5076 check_func_headers windows.h GetSystemTimeAsFileTime
5077 check_func_headers windows.h MapViewOfFile
5078 check_func_headers windows.h PeekNamedPipe
5079 check_func_headers windows.h SetConsoleTextAttribute
5080 check_func_headers windows.h SetConsoleCtrlHandler
5081 check_func_headers windows.h Sleep
5082 check_func_headers windows.h VirtualAlloc
5083 check_struct windows.h "CONDITION_VARIABLE" Ptr
5084 check_func_headers glob.h glob
5085 enabled xlib &&
5086     check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
5087
5088 check_header direct.h
5089 check_header dlfcn.h
5090 check_header d3d11.h
5091 check_header dxva.h
5092 check_header dxva2api.h -D_WIN32_WINNT=0x0600
5093 check_header io.h
5094 check_header libcrystalhd/libcrystalhd_if.h
5095 check_header mach/mach_time.h
5096 check_header malloc.h
5097 check_header net/udplite.h
5098 check_header poll.h
5099 check_header sys/mman.h
5100 check_header sys/param.h
5101 check_header sys/resource.h
5102 check_header sys/select.h
5103 check_header sys/time.h
5104 check_header sys/un.h
5105 check_header termios.h
5106 check_header unistd.h
5107 check_header valgrind/valgrind.h
5108 check_header vdpau/vdpau.h
5109 check_header vdpau/vdpau_x11.h
5110 check_header VideoDecodeAcceleration/VDADecoder.h
5111 check_header windows.h
5112 check_header X11/extensions/XvMClib.h
5113 check_header asm/types.h
5114
5115 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
5116 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
5117 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
5118
5119 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
5120
5121 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
5122 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
5123 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
5124
5125 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
5126
5127 if ! disabled w32threads && ! enabled pthreads; then
5128     check_func_headers "windows.h process.h" _beginthreadex &&
5129         enable w32threads || disable w32threads
5130 fi
5131
5132 # check for some common methods of building with pthread support
5133 # do this before the optional library checks as some of them require pthreads
5134 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
5135     enable pthreads
5136     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
5137         add_cflags -pthread
5138         add_extralibs -pthread
5139     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
5140         add_cflags -pthreads
5141         add_extralibs -pthreads
5142     elif check_func pthread_join -ldl -pthread && check_func pthread_create -ldl -pthread; then
5143         add_cflags -ldl -pthread
5144         add_extralibs -ldl -pthread
5145     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
5146         add_extralibs -lpthreadGC2
5147     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
5148         :
5149     elif ! check_func pthread_join && ! check_func pthread_create; then
5150         disable pthreads
5151     fi
5152     check_code cc "pthread.h" "static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER" || disable pthreads
5153 fi
5154
5155
5156 if enabled pthreads; then
5157   check_func pthread_cancel
5158 fi
5159
5160 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
5161 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
5162 disabled  lzma || check_lib2  lzma.h lzma_version_number -llzma || disable lzma
5163
5164 check_lib math.h sin -lm && LIBM="-lm"
5165 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
5166
5167 atan2f_args=2
5168 copysign_args=2
5169 ldexpf_args=2
5170 powf_args=2
5171
5172 for func in $MATH_FUNCS; do
5173     eval check_mathfunc $func \${${func}_args:-1}
5174 done
5175
5176 # these are off by default, so fail if requested and not available
5177 enabled avfoundation_indev && { check_header_oc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
5178 enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
5179                                 check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
5180 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
5181                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
5182                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
5183 enabled decklink          && { check_header DeckLinkAPI.h || die "ERROR: DeckLinkAPI.h header not found"; }
5184 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
5185 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
5186 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
5187 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
5188 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
5189 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
5190 enabled libbluray         && require_pkg_config libbluray libbluray/bluray.h bd_open
5191 enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
5192 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
5193                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
5194                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
5195 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
5196 enabled libdcadec         && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create &&
5197                              check_struct libdcadec/dca_context.h "struct dcadec_exss_info" matrix_encoding
5198 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
5199 enabled libfdk_aac        && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen ||
5200                                { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac &&
5201                                  warn "using libfdk without pkg-config"; } }
5202 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"
5203 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
5204 enabled fontconfig        && enable libfontconfig
5205 enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
5206 enabled libfreetype       && require_libfreetype
5207 enabled libfribidi        && require_pkg_config fribidi fribidi.h fribidi_version_info
5208 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
5209 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
5210                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
5211                                done || die "ERROR: libgsm not found"; }
5212 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5213 enabled libkvazaar        && require2 libkvazaar kvazaar.h kvz_api_get -lkvazaar
5214 enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
5215 enabled libmodplug        && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
5216 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
5217 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
5218 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
5219 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
5220 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
5221 enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
5222 enabled libopenjpeg       && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC ||
5223                                check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5224                                check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
5225                                die "ERROR: libopenjpeg not found"; }
5226 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
5227 enabled libpulse          && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new
5228 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
5229 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
5230 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
5231 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
5232 enabled libsmbclient      && { use_pkg_config smbclient libsmbclient.h smbc_init ||
5233                                require smbclient libsmbclient.h smbc_init -lsmbclient; }
5234 enabled libsnappy         && require snappy snappy-c.h snappy_compress -lsnappy
5235 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
5236 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
5237 enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
5238 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
5239     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
5240     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
5241 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
5242 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
5243                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
5244                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
5245 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
5246 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
5247 enabled libvidstab        && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
5248 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
5249 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
5250 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
5251
5252 enabled libvpx            && {
5253     enabled libvpx_vp8_decoder && {
5254         use_pkg_config "vpx >= 0.9.1" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
5255             check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
5256                 die "ERROR: libvpx decoder version must be >=0.9.1";
5257     }
5258     enabled libvpx_vp8_encoder && {
5259         use_pkg_config "vpx >= 0.9.7" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
5260             check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
5261                 die "ERROR: libvpx encoder version must be >=0.9.7";
5262     }
5263     enabled libvpx_vp9_decoder && {
5264         use_pkg_config "vpx >= 1.3.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
5265             check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx ||
5266                 disable libvpx_vp9_decoder;
5267     }
5268     enabled libvpx_vp9_encoder && {
5269         use_pkg_config "vpx >= 1.3.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
5270             check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx ||
5271                 disable libvpx_vp9_encoder;
5272     }
5273     if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
5274         die "libvpx enabled but no supported decoders found"
5275     fi
5276 }
5277
5278 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
5279 enabled libwebp           && {
5280     enabled libwebp_encoder      && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
5281     enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } }
5282 enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
5283                                { require libx264 x264.h x264_encoder_encode -lx264 &&
5284                                  warn "using libx264 without pkg-config"; } } &&
5285                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
5286                                die "ERROR: libx264 must be installed and version must be >= 0.118."; } &&
5287                              { check_cpp_condition x264.h "X264_MPEG2" &&
5288                                enable libx262; }
5289 enabled libx265           && require_pkg_config x265 x265.h x265_api_get &&
5290                              { check_cpp_condition x265.h "X265_BUILD >= 57" ||
5291                                die "ERROR: libx265 version must be >= 57."; }
5292 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
5293 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
5294 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
5295 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
5296 enabled mmal              && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
5297                                 { ! enabled cross_compile && {
5298                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ;
5299                                     add_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
5300                                     check_lib interface/mmal/mmal.h mmal_port_connect ; }
5301                                 check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
5302                                die "ERROR: mmal not found"; }
5303 enabled nvenc             && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } &&
5304                              { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
5305                                die "ERROR: NVENC API version 4 or older is not supported"; } &&
5306                              { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; }
5307 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
5308                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
5309                                die "ERROR: openal not found"; } &&
5310                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
5311                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
5312 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
5313                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
5314                                die "ERROR: opencl not found"; } &&
5315                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
5316                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
5317                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
5318 enabled opengl            && { check_lib GL/glx.h glXGetProcAddress "-lGL" ||
5319                                check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
5320                                check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
5321                                check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
5322                                die "ERROR: opengl not found."
5323                              }
5324 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
5325                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
5326                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
5327                                die "ERROR: openssl not found"; }
5328 enabled qtkit_indev      && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; }
5329
5330 if enabled gnutls; then
5331     { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
5332     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
5333 fi
5334
5335 # libdc1394 check
5336 if enabled libdc1394; then
5337     { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
5338         enable libdc1394_2; } ||
5339     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
5340         enable libdc1394_1; } ||
5341     die "ERROR: No version of libdc1394 found "
5342 fi
5343 if ! disabled sdl; then
5344     SDL_CONFIG="${cross_prefix}sdl-config"
5345     if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
5346         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5347         check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5348         enable sdl
5349     else
5350         if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5351             sdl_cflags=$("${SDL_CONFIG}" --cflags)
5352             sdl_libs=$("${SDL_CONFIG}" --libs)
5353             check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
5354             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
5355             check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
5356             enable sdl
5357         elif enabled sdl ; then
5358             die "ERROR: SDL not found"
5359         else
5360             disable sdl
5361         fi
5362     fi
5363 fi
5364 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
5365
5366 disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5367     check_lib2 "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
5368     enable securetransport; }
5369
5370 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
5371 enabled makeinfo \
5372     && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
5373     && enable makeinfo_html || disable makeinfo_html
5374 disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
5375 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
5376 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
5377 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
5378
5379 check_header linux/fb.h
5380 check_header linux/videodev.h
5381 check_header linux/videodev2.h
5382 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5383
5384 check_header sys/videoio.h
5385 check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
5386
5387 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
5388 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
5389 # w32api 3.12 had it defined wrong
5390 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
5391
5392 check_type "dshow.h" IBaseFilter
5393
5394 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
5395 { check_header dev/bktr/ioctl_meteor.h &&
5396   check_header dev/bktr/ioctl_bt848.h; } ||
5397 { check_header machine/ioctl_meteor.h &&
5398   check_header machine/ioctl_bt848.h; } ||
5399 { check_header dev/video/meteor/ioctl_meteor.h &&
5400   check_header dev/video/bktr/ioctl_bt848.h; } ||
5401 check_header dev/ic/bt8xx.h
5402
5403 check_header sndio.h
5404 if check_struct sys/soundcard.h audio_buf_info bytes; then
5405     enable_safe sys/soundcard.h
5406 else
5407     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
5408     #include <sys/soundcard.h>
5409     audio_buf_info abc;
5410 EOF
5411 fi
5412 check_header soundcard.h
5413
5414 enabled_any alsa_indev alsa_outdev &&
5415     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
5416
5417 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
5418     check_func jack_port_get_latency_range -ljack
5419
5420 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
5421
5422 if enabled libcdio; then
5423     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5424     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
5425     die "ERROR: No usable libcdio/cdparanoia found"
5426 fi
5427
5428 enabled xlib &&
5429     check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib
5430
5431 if ! disabled libxcb; then
5432     check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || {
5433         enabled libxcb && die "ERROR: libxcb >= 1.4 not found";
5434     } && disable x11grab && enable libxcb
5435
5436 if enabled libxcb; then
5437     disabled libxcb_shm || {
5438         check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
5439             enabled libxcb_shm && die "ERROR: libxcb_shm not found";
5440         } && check_header sys/shm.h && enable libxcb_shm; }
5441
5442     disabled libxcb_xfixes || {
5443         check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
5444             enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
5445         } && enable libxcb_xfixes; }
5446
5447     disabled libxcb_shape || {
5448         check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || {
5449             enabled libxcb_shape && die "ERROR: libxcb_shape not found";
5450         } && enable libxcb_shape; }
5451
5452     add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
5453     add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs
5454 fi
5455 fi
5456
5457 if enabled x11grab; then
5458     enabled xlib || die "ERROR: Xlib not found"
5459     require Xext X11/extensions/XShm.h XShmCreateImage -lXext
5460     require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
5461 fi
5462
5463 check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
5464
5465 enabled dxva2api_h &&
5466     check_cc <<EOF && enable dxva2api_cobj
5467 #define _WIN32_WINNT 0x0600
5468 #define COBJMACROS
5469 #include <windows.h>
5470 #include <d3d9.h>
5471 #include <dxva2api.h>
5472 int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; }
5473 EOF
5474
5475 enabled vaapi &&
5476     check_lib va/va.h vaInitialize -lva ||
5477     disable vaapi
5478
5479 enabled vaapi && enabled xlib &&
5480     check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
5481     enable vaapi_x11
5482
5483 enabled vdpau &&
5484     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
5485     disable vdpau
5486
5487 enabled vdpau && enabled xlib &&
5488     check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
5489     prepend ffmpeg_libs $($ldflags_filter "-lvdpau") &&
5490     enable vdpau_x11
5491
5492 # Funny iconv installations are not unusual, so check it after all flags have been set
5493 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
5494
5495 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
5496
5497 # add some useful compiler flags if supported
5498 check_cflags -Wdeclaration-after-statement
5499 check_cflags -Wall
5500 check_cflags -Wdisabled-optimization
5501 check_cflags -Wpointer-arith
5502 check_cflags -Wredundant-decls
5503 check_cflags -Wwrite-strings
5504 check_cflags -Wtype-limits
5505 check_cflags -Wundef
5506 check_cflags -Wmissing-prototypes
5507 check_cflags -Wno-pointer-to-int-cast
5508 check_cflags -Wstrict-prototypes
5509 check_cflags -Wempty-body
5510 enabled extra_warnings && check_cflags -Winline
5511
5512 check_disable_warning(){
5513     warning_flag=-W${1#-Wno-}
5514     test_cflags $warning_flag && add_cflags $1
5515 }
5516
5517 check_disable_warning -Wno-parentheses
5518 check_disable_warning -Wno-switch
5519 check_disable_warning -Wno-format-zero-length
5520 check_disable_warning -Wno-pointer-sign
5521
5522 # add some linker flags
5523 check_ldflags -Wl,--warn-common
5524 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
5525 enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
5526 enabled rpath && add_ldlibflags -Wl,-rpath,$libdir
5527 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
5528
5529 # add some strip flags
5530 # -wN '..@*' is more selective than -x, but not available everywhere.
5531 check_stripflags -wN \'..@*\' || check_stripflags -x
5532
5533 enabled neon_clobber_test &&
5534     check_ldflags -Wl,--wrap,avcodec_open2              \
5535                   -Wl,--wrap,avcodec_decode_audio4      \
5536                   -Wl,--wrap,avcodec_decode_video2      \
5537                   -Wl,--wrap,avcodec_decode_subtitle2   \
5538                   -Wl,--wrap,avcodec_encode_audio2      \
5539                   -Wl,--wrap,avcodec_encode_video2      \
5540                   -Wl,--wrap,avcodec_encode_subtitle    \
5541                   -Wl,--wrap,swr_convert                \
5542                   -Wl,--wrap,avresample_convert ||
5543     disable neon_clobber_test
5544
5545 enabled xmm_clobber_test &&
5546     check_ldflags -Wl,--wrap,avcodec_open2              \
5547                   -Wl,--wrap,avcodec_decode_audio4      \
5548                   -Wl,--wrap,avcodec_decode_video2      \
5549                   -Wl,--wrap,avcodec_decode_subtitle2   \
5550                   -Wl,--wrap,avcodec_encode_audio2      \
5551                   -Wl,--wrap,avcodec_encode_video       \
5552                   -Wl,--wrap,avcodec_encode_video2      \
5553                   -Wl,--wrap,avcodec_encode_subtitle    \
5554                   -Wl,--wrap,swr_convert                \
5555                   -Wl,--wrap,avresample_convert         \
5556                   -Wl,--wrap,sws_scale ||
5557     disable xmm_clobber_test
5558
5559 echo "X{};" > $TMPV
5560 if test_ldflags -Wl,--version-script,$TMPV; then
5561     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
5562     check_cc <<EOF && enable symver_asm_label
5563 void ff_foo(void) __asm__ ("av_foo@VERSION");
5564 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
5565 EOF
5566     check_cc <<EOF && enable symver_gnu_asm
5567 __asm__(".symver ff_foo,av_foo@VERSION");
5568 void ff_foo(void) {}
5569 EOF
5570 fi
5571
5572 if [ -z "$optflags" ]; then
5573     if enabled small; then
5574         optflags=$cflags_size
5575     elif enabled optimizations; then
5576         optflags=$cflags_speed
5577     else
5578         optflags=$cflags_noopt
5579     fi
5580 fi
5581
5582 check_optflags(){
5583     check_cflags "$@"
5584     enabled lto && check_ldflags "$@"
5585 }
5586
5587
5588 if enabled lto; then
5589     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
5590     check_cflags  -flto
5591     check_ldflags -flto $cpuflags
5592     disable inline_asm_direct_symbol_refs
5593 fi
5594
5595 check_optflags $optflags
5596 check_optflags -fno-math-errno
5597 check_optflags -fno-signed-zeros
5598
5599 enabled ftrapv && check_cflags -ftrapv
5600
5601 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
5602 int x;
5603 EOF
5604
5605
5606 if enabled icc; then
5607     # Just warnings, no remarks
5608     check_cflags -w1
5609     # -wd: Disable following warnings
5610     # 144, 167, 556: -Wno-pointer-sign
5611     # 188: enumerated type mixed with another type
5612     # 1292: attribute "foo" ignored
5613     # 1419: external declaration in primary source file
5614     # 10006: ignoring unknown option -fno-signed-zeros
5615     # 10148: ignoring unknown option -Wno-parentheses
5616     # 10156: ignoring option '-W'; no argument required
5617     # 13200: No EMMS instruction before call to function
5618     # 13203: No EMMS instruction before return from function
5619     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
5620     # 11030: Warning unknown option --as-needed
5621     # 10156: ignoring option '-export'; no argument required
5622     check_ldflags -wd10156,11030
5623     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
5624     enable ebp_available
5625     # The test above does not test linking
5626     enabled lto && disable symver_asm_label
5627     if enabled x86_32; then
5628         icc_version=$($cc -dumpversion)
5629         test ${icc_version%%.*} -ge 11 &&
5630             check_cflags -falign-stack=maintain-16-byte ||
5631             disable aligned_stack
5632     fi
5633 elif enabled ccc; then
5634     # disable some annoying warnings
5635     add_cflags -msg_disable bitnotint
5636     add_cflags -msg_disable mixfuncvoid
5637     add_cflags -msg_disable nonstandcast
5638     add_cflags -msg_disable unsupieee
5639 elif enabled gcc; then
5640     check_optflags -fno-tree-vectorize
5641     check_cflags -Werror=format-security
5642     check_cflags -Werror=implicit-function-declaration
5643     check_cflags -Werror=missing-prototypes
5644     check_cflags -Werror=return-type
5645     check_cflags -Werror=vla
5646     check_cflags -Wformat
5647     check_cflags -fdiagnostics-color=auto
5648     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
5649 elif enabled llvm_gcc; then
5650     check_cflags -mllvm -stack-alignment=16
5651 elif enabled clang; then
5652     check_cflags -mllvm -stack-alignment=16
5653     check_cflags -Qunused-arguments
5654     check_cflags -Werror=implicit-function-declaration
5655     check_cflags -Werror=missing-prototypes
5656     check_cflags -Werror=return-type
5657 elif enabled cparser; then
5658     add_cflags -Wno-missing-variable-declarations
5659     add_cflags -Wno-empty-statement
5660 elif enabled armcc; then
5661     add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
5662     add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
5663     # 2523: use of inline assembly is deprecated
5664     add_cflags -W${armcc_opt},--diag_suppress=2523
5665     add_cflags -W${armcc_opt},--diag_suppress=1207
5666     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
5667     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
5668     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
5669     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
5670 elif enabled tms470; then
5671     add_cflags -pds=824 -pds=837
5672     disable inline_asm
5673 elif enabled pathscale; then
5674     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
5675 elif enabled_any msvc icl; then
5676     enabled x86_32 && disable aligned_stack
5677     enabled_all x86_32 debug && add_cflags -Oy-
5678     enabled debug && add_ldflags -debug
5679     enable pragma_deprecated
5680     if enabled icl; then
5681         # -Qansi-alias is basically -fstrict-aliasing, but does not work
5682         # (correctly) on icl 13.x.
5683         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
5684             add_cflags -Qansi-alias
5685         # Some inline asm is not compilable in debug
5686         if enabled debug; then
5687             disable ebp_available
5688             disable ebx_available
5689         fi
5690     fi
5691     # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
5692     check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
5693     # The CRT headers contain __declspec(restrict) in a few places, but if redefining
5694     # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
5695     # (as it ends up if the restrict redefine is done before including stdlib.h), while
5696     # MSVC 2013 and newer can handle it fine.
5697     # If this declspec fails, force including stdlib.h before the restrict redefinition
5698     # happens in config.h.
5699     if [ $_restrict != restrict ]; then
5700         check_cc <<EOF || add_cflags -FIstdlib.h
5701 __declspec($_restrict) void* foo(int);
5702 EOF
5703     fi
5704     check_func strtoll || add_cflags -Dstrtoll=_strtoi64
5705 fi
5706
5707 for pfx in "" host_; do
5708     varname=${pfx%_}cc_type
5709     eval "type=\$$varname"
5710     if [ $type = "msvc" ]; then
5711         check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
5712 static inline int foo(int a) { return a; }
5713 EOF
5714     fi
5715 done
5716
5717 case $as_type in
5718     clang)
5719         add_asflags -Qunused-arguments
5720     ;;
5721 esac
5722
5723 case $ld_type in
5724     clang)
5725         check_ldflags -Qunused-arguments
5726     ;;
5727 esac
5728
5729 case $target_os in
5730     osf1)
5731         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
5732     ;;
5733     plan9)
5734         add_cppflags -Dmain=plan9_main
5735     ;;
5736 esac
5737
5738 enable frame_thread_encoder
5739
5740 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
5741
5742 check_deps $CONFIG_LIST       \
5743            $CONFIG_EXTRA      \
5744            $HAVE_LIST         \
5745            $ALL_COMPONENTS    \
5746
5747 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"
5748
5749
5750 if test $target_os = "haiku"; then
5751     disable memalign
5752     disable posix_memalign
5753 fi
5754
5755 enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
5756     prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
5757     enable dxva2_lib
5758
5759 ! enabled_any memalign posix_memalign aligned_malloc &&
5760     enabled simd_align_16 && enable memalign_hack
5761
5762 # add_dep lib dep
5763 # -> enable ${lib}_deps_${dep}
5764 # -> add $dep to ${lib}_deps only once
5765 add_dep() {
5766     lib=$1
5767     dep=$2
5768     enabled "${lib}_deps_${dep}" && return 0
5769     enable  "${lib}_deps_${dep}"
5770     prepend "${lib}_deps" $dep
5771 }
5772
5773 # merge deps lib components
5774 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
5775 merge_deps() {
5776     lib=$1
5777     shift
5778     for comp in $*; do
5779         enabled $comp || continue
5780         eval "dep=\"\$${comp}_deps\""
5781         for d in $dep; do
5782             add_dep $lib $d
5783         done
5784     done
5785 }
5786
5787 merge_deps libavfilter $FILTER_LIST
5788
5789 map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
5790
5791 for thread in $THREADS_LIST; do
5792     if enabled $thread; then
5793         test -n "$thread_type" &&
5794             die "ERROR: Only one thread type must be selected." ||
5795             thread_type="$thread"
5796     fi
5797 done
5798
5799 enabled zlib && add_cppflags -DZLIB_CONST
5800
5801 # conditional library dependencies, in linking order
5802 enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
5803 enabled aresample_filter    && prepend avfilter_deps "swresample"
5804 enabled asyncts_filter      && prepend avfilter_deps "avresample"
5805 enabled atempo_filter       && prepend avfilter_deps "avcodec"
5806 enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
5807 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
5808 enabled elbg_filter         && prepend avfilter_deps "avcodec"
5809 enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
5810 enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
5811 enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
5812 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
5813 enabled pan_filter          && prepend avfilter_deps "swresample"
5814 enabled pp_filter           && prepend avfilter_deps "postproc"
5815 enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
5816 enabled resample_filter && prepend avfilter_deps "avresample"
5817 enabled sab_filter          && prepend avfilter_deps "swscale"
5818 enabled scale_filter    && prepend avfilter_deps "swscale"
5819 enabled showspectrum_filter && prepend avfilter_deps "avcodec"
5820 enabled smartblur_filter    && prepend avfilter_deps "swscale"
5821 enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
5822 enabled uspp_filter         && prepend avfilter_deps "avcodec"
5823
5824 enabled lavfi_indev         && prepend avdevice_deps "avfilter"
5825
5826 enabled opus_decoder    && prepend avcodec_deps "swresample"
5827
5828 expand_deps(){
5829     lib_deps=${1}_deps
5830     eval "deps=\$$lib_deps"
5831     append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
5832     unique $lib_deps
5833 }
5834
5835 #we have to remove gpl from the deps here as some code assumes all lib deps are libs
5836 postproc_deps="$(filter_out 'gpl' $postproc_deps)"
5837
5838 map 'expand_deps $v' $LIBRARY_LIST
5839
5840 echo "install prefix            $prefix"
5841 echo "source path               $source_path"
5842 echo "C compiler                $cc"
5843 echo "C library                 $libc_type"
5844 if test "$host_cc" != "$cc"; then
5845     echo "host C compiler           $host_cc"
5846     echo "host C library            $host_libc_type"
5847 fi
5848 echo "ARCH                      $arch ($cpu)"
5849 if test "$build_suffix" != ""; then
5850     echo "build suffix              $build_suffix"
5851 fi
5852 if test "$progs_suffix" != ""; then
5853     echo "progs suffix              $progs_suffix"
5854 fi
5855 if test "$extra_version" != ""; then
5856     echo "version string suffix     $extra_version"
5857 fi
5858 echo "big-endian                ${bigendian-no}"
5859 echo "runtime cpu detection     ${runtime_cpudetect-no}"
5860 if enabled x86; then
5861     echo "${yasmexe}                      ${yasm-no}"
5862     echo "MMX enabled               ${mmx-no}"
5863     echo "MMXEXT enabled            ${mmxext-no}"
5864     echo "3DNow! enabled            ${amd3dnow-no}"
5865     echo "3DNow! extended enabled   ${amd3dnowext-no}"
5866     echo "SSE enabled               ${sse-no}"
5867     echo "SSSE3 enabled             ${ssse3-no}"
5868     echo "AVX enabled               ${avx-no}"
5869     echo "XOP enabled               ${xop-no}"
5870     echo "FMA3 enabled              ${fma3-no}"
5871     echo "FMA4 enabled              ${fma4-no}"
5872     echo "i686 features enabled     ${i686-no}"
5873     echo "CMOV is fast              ${fast_cmov-no}"
5874     echo "EBX available             ${ebx_available-no}"
5875     echo "EBP available             ${ebp_available-no}"
5876 fi
5877 if enabled aarch64; then
5878     echo "NEON enabled              ${neon-no}"
5879     echo "VFP enabled               ${vfp-no}"
5880 fi
5881 if enabled arm; then
5882     echo "ARMv5TE enabled           ${armv5te-no}"
5883     echo "ARMv6 enabled             ${armv6-no}"
5884     echo "ARMv6T2 enabled           ${armv6t2-no}"
5885     echo "VFP enabled               ${vfp-no}"
5886     echo "NEON enabled              ${neon-no}"
5887     echo "THUMB enabled             ${thumb-no}"
5888 fi
5889 if enabled mips; then
5890     echo "MIPS FPU enabled          ${mipsfpu-no}"
5891     echo "MIPS32R5 enabled          ${mips32r5-no}"
5892     echo "MIPS64R6 enabled          ${mips64r6-no}"
5893     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
5894     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
5895     echo "MIPS MSA enabled          ${msa-no}"
5896     echo "LOONGSON MMI enabled      ${mmi-no}"
5897 fi
5898 if enabled ppc; then
5899     echo "AltiVec enabled           ${altivec-no}"
5900     echo "VSX enabled               ${vsx-no}"
5901     echo "POWER8 enabled            ${power8-no}"
5902     echo "PPC 4xx optimizations     ${ppc4xx-no}"
5903     echo "dcbzl available           ${dcbzl-no}"
5904 fi
5905 echo "debug symbols             ${debug-no}"
5906 echo "strip symbols             ${stripping-no}"
5907 echo "optimize for size         ${small-no}"
5908 echo "optimizations             ${optimizations-no}"
5909 echo "static                    ${static-no}"
5910 echo "shared                    ${shared-no}"
5911 echo "postprocessing support    ${postproc-no}"
5912 echo "new filter support        ${avfilter-no}"
5913 echo "network support           ${network-no}"
5914 echo "threading support         ${thread_type-no}"
5915 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
5916 echo "SDL support               ${sdl-no}"
5917 echo "opencl enabled            ${opencl-no}"
5918 echo "texi2html enabled         ${texi2html-no}"
5919 echo "perl enabled              ${perl-no}"
5920 echo "pod2man enabled           ${pod2man-no}"
5921 echo "makeinfo enabled          ${makeinfo-no}"
5922 echo "makeinfo supports HTML    ${makeinfo_html-no}"
5923 test -n "$random_seed" &&
5924     echo "random seed               ${random_seed}"
5925 echo
5926
5927 echo "External libraries:"
5928 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
5929 echo
5930
5931 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5932     echo "Enabled ${type}s:"
5933     eval list=\$$(toupper $type)_LIST
5934     print_enabled '_*' $list | print_3_columns
5935     echo
5936 done
5937
5938 license="LGPL version 2.1 or later"
5939 if enabled nonfree; then
5940     license="nonfree and unredistributable"
5941 elif enabled gplv3; then
5942     license="GPL version 3 or later"
5943 elif enabled lgplv3; then
5944     license="LGPL version 3 or later"
5945 elif enabled gpl; then
5946     license="GPL version 2 or later"
5947 fi
5948
5949 echo "License: $license"
5950
5951 echo "Creating config.mak, config.h, and doc/config.texi..."
5952
5953 test -e Makefile || echo "include $source_path/Makefile" > Makefile
5954
5955 enabled stripping || strip="echo skipping strip"
5956
5957 config_files="$TMPH config.mak doc/config.texi"
5958
5959 cat > config.mak <<EOF
5960 # Automatically generated by configure - do not modify!
5961 ifndef FFMPEG_CONFIG_MAK
5962 FFMPEG_CONFIG_MAK=1
5963 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
5964 prefix=$prefix
5965 LIBDIR=\$(DESTDIR)$libdir
5966 SHLIBDIR=\$(DESTDIR)$shlibdir
5967 INCDIR=\$(DESTDIR)$incdir
5968 BINDIR=\$(DESTDIR)$bindir
5969 DATADIR=\$(DESTDIR)$datadir
5970 DOCDIR=\$(DESTDIR)$docdir
5971 MANDIR=\$(DESTDIR)$mandir
5972 PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
5973 SRC_PATH=$source_path
5974 ifndef MAIN_MAKEFILE
5975 SRC_PATH:=\$(SRC_PATH:.%=..%)
5976 endif
5977 CC_IDENT=$cc_ident
5978 ARCH=$arch
5979 INTRINSICS=$intrinsics
5980 CC=$cc
5981 CXX=$cxx
5982 AS=$as
5983 LD=$ld
5984 DEPCC=$dep_cc
5985 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
5986 DEPAS=$as
5987 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5988 YASM=$yasmexe
5989 DEPYASM=$yasmexe
5990 AR=$ar
5991 ARFLAGS=$arflags
5992 AR_O=$ar_o
5993 RANLIB=$ranlib
5994 STRIP=$strip
5995 CP=cp -p
5996 LN_S=$ln_s
5997 CPPFLAGS=$CPPFLAGS
5998 CFLAGS=$CFLAGS
5999 CXXFLAGS=$CXXFLAGS
6000 ASFLAGS=$ASFLAGS
6001 AS_C=$AS_C
6002 AS_O=$AS_O
6003 CC_C=$CC_C
6004 CC_E=$CC_E
6005 CC_O=$CC_O
6006 CXX_C=$CXX_C
6007 CXX_O=$CXX_O
6008 LD_O=$LD_O
6009 LD_LIB=$LD_LIB
6010 LD_PATH=$LD_PATH
6011 DLLTOOL=$dlltool
6012 WINDRES=$windres
6013 DEPWINDRES=$dep_cc
6014 DOXYGEN=$doxygen
6015 LDFLAGS=$LDFLAGS
6016 LDEXEFLAGS=$LDEXEFLAGS
6017 LDLIBFLAGS=$LDLIBFLAGS
6018 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
6019 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
6020 YASMFLAGS=$YASMFLAGS
6021 BUILDSUF=$build_suffix
6022 PROGSSUF=$progs_suffix
6023 FULLNAME=$FULLNAME
6024 LIBPREF=$LIBPREF
6025 LIBSUF=$LIBSUF
6026 LIBNAME=$LIBNAME
6027 SLIBPREF=$SLIBPREF
6028 SLIBSUF=$SLIBSUF
6029 EXESUF=$EXESUF
6030 EXTRA_VERSION=$extra_version
6031 CCDEP=$CCDEP
6032 CXXDEP=$CXXDEP
6033 CCDEP_FLAGS=$CCDEP_FLAGS
6034 ASDEP=$ASDEP
6035 ASDEP_FLAGS=$ASDEP_FLAGS
6036 CC_DEPFLAGS=$CC_DEPFLAGS
6037 AS_DEPFLAGS=$AS_DEPFLAGS
6038 HOSTCC=$host_cc
6039 HOSTLD=$host_ld
6040 HOSTCFLAGS=$host_cflags
6041 HOSTCPPFLAGS=$host_cppflags
6042 HOSTEXESUF=$HOSTEXESUF
6043 HOSTLDFLAGS=$host_ldflags
6044 HOSTLIBS=$host_libs
6045 DEPHOSTCC=$host_cc
6046 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
6047 HOSTCCDEP=$HOSTCCDEP
6048 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
6049 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
6050 HOSTCC_C=$HOSTCC_C
6051 HOSTCC_O=$HOSTCC_O
6052 HOSTLD_O=$HOSTLD_O
6053 TARGET_EXEC=$target_exec $target_exec_args
6054 TARGET_PATH=$target_path
6055 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
6056 CFLAGS-ffplay=$sdl_cflags
6057 ZLIB=$($ldflags_filter -lz)
6058 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
6059 EXTRALIBS=$extralibs
6060 COMPAT_OBJS=$compat_objs
6061 EXEOBJS=$exeobjs
6062 INSTALL=$install
6063 LIBTARGET=${LIBTARGET}
6064 SLIBNAME=${SLIBNAME}
6065 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
6066 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
6067 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
6068 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
6069 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
6070 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
6071 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
6072 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
6073 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
6074 NOREDZONE_FLAGS=$noredzone_flags
6075 EOF
6076
6077 get_version(){
6078     lcname=lib${1}
6079     name=$(toupper $lcname)
6080     file=$source_path/$lcname/version.h
6081     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
6082     enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100))
6083     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
6084     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
6085     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
6086     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
6087 }
6088
6089 map 'get_version $v' $LIBRARY_LIST
6090
6091 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
6092
6093 print_program_libs(){
6094     eval "program_libs=\$${1}_libs"
6095     eval echo "LIBS-${1}=${program_libs}" >> config.mak
6096 }
6097
6098 map 'print_program_libs $v' $PROGRAM_LIST
6099
6100 cat > $TMPH <<EOF
6101 /* Automatically generated by configure - do not modify! */
6102 #ifndef FFMPEG_CONFIG_H
6103 #define FFMPEG_CONFIG_H
6104 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
6105 #define FFMPEG_LICENSE "$(c_escape $license)"
6106 #define CONFIG_THIS_YEAR 2015
6107 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
6108 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
6109 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
6110 #define av_restrict $_restrict
6111 #define EXTERN_PREFIX "${extern_prefix}"
6112 #define EXTERN_ASM ${extern_prefix}
6113 #define BUILDSUF "$build_suffix"
6114 #define SLIBSUF "$SLIBSUF"
6115 #define HAVE_MMX2 HAVE_MMXEXT
6116 #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
6117 EOF
6118
6119 test -n "$assert_level" &&
6120     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
6121
6122 test -n "$malloc_prefix" &&
6123     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
6124
6125 if enabled yasm; then
6126     append config_files $TMPASM
6127     printf '' >$TMPASM
6128 fi
6129
6130 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
6131
6132
6133 mkdir -p doc
6134 mkdir -p tests
6135 mkdir -p tests/api
6136 echo "@c auto-generated by configure" > doc/config.texi
6137
6138 print_config ARCH_   "$config_files" $ARCH_LIST
6139 print_config HAVE_   "$config_files" $HAVE_LIST
6140 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
6141                                      $CONFIG_EXTRA      \
6142                                      $ALL_COMPONENTS    \
6143
6144 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
6145 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
6146
6147 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
6148 cp_if_changed $TMPH config.h
6149 touch .config
6150
6151 enabled yasm && cp_if_changed $TMPASM config.asm
6152
6153 cat > $TMPH <<EOF
6154 /* Generated by ffconf */
6155 #ifndef AVUTIL_AVCONFIG_H
6156 #define AVUTIL_AVCONFIG_H
6157 EOF
6158
6159 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
6160
6161 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
6162
6163 cp_if_changed $TMPH libavutil/avconfig.h
6164
6165 if test -n "$WARNINGS"; then
6166     printf "\n$WARNINGS"
6167     enabled fatal_warnings && exit 1
6168 fi
6169
6170 # build pkg-config files
6171
6172 lib_version(){
6173     eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \""
6174 }
6175
6176 pkgconfig_generate(){
6177     name=$1
6178     shortname=${name#lib}${build_suffix}
6179     comment=$2
6180     version=$3
6181     libs=$4
6182     requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
6183     requires=${requires%, }
6184     enabled ${name#lib} || return 0
6185     mkdir -p $name
6186     cat <<EOF > $name/$name${build_suffix}.pc
6187 prefix=$prefix
6188 exec_prefix=\${prefix}
6189 libdir=$libdir
6190 includedir=$incdir
6191
6192 Name: $name
6193 Description: $comment
6194 Version: $version
6195 Requires: $(enabled shared || echo $requires)
6196 Requires.private: $(enabled shared && echo $requires)
6197 Conflicts:
6198 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
6199 Libs.private: $(enabled shared && echo $libs)
6200 Cflags: -I\${includedir}
6201 EOF
6202
6203 mkdir -p doc/examples/pc-uninstalled
6204 includedir=${source_path}
6205 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
6206     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
6207 prefix=
6208 exec_prefix=
6209 libdir=\${pcfiledir}/../../../$name
6210 includedir=${includedir}
6211
6212 Name: $name
6213 Description: $comment
6214 Version: $version
6215 Requires: $requires
6216 Conflicts:
6217 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
6218 Cflags: -I\${includedir}
6219 EOF
6220 }
6221
6222 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
6223 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs"
6224 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs"
6225 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs"
6226 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs"
6227 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""
6228 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$LIBM"
6229 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"
6230 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"