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