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