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