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