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