hwcontext_d3d11va: add option to enable debug mode
[libav.git] / configure
1 #!/bin/sh
2 #
3 # Libav 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 LIBAV, 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 Libav."
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   --quiet                  Suppress showing informative output
67   --list-decoders          show all available decoders
68   --list-encoders          show all available encoders
69   --list-hwaccels          show all available hardware accelerators
70   --list-demuxers          show all available demuxers
71   --list-muxers            show all available muxers
72   --list-parsers           show all available parsers
73   --list-protocols         show all available protocols
74   --list-bsfs              show all available bitstream filters
75   --list-indevs            show all available input devices
76   --list-outdevs           show all available output devices
77   --list-filters           show all available filters
78
79 Standard options:
80   --logfile=FILE           log tests and output to FILE [avbuild/config.log]
81   --disable-logging        do not log configure debug information
82   --prefix=PREFIX          install in PREFIX [$prefix_default]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
85   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/libav]
86   --libdir=DIR             install libs in DIR [PREFIX/lib]
87   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
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 when linking programs (USE WITH CARE)
91
92 Licensing options:
93   --enable-gpl             allow use of GPL code, the resulting libs
94                            and binaries will be under GPL [no]
95   --enable-version3        upgrade (L)GPL to version 3 [no]
96   --enable-nonfree         allow use of nonfree code, the resulting libs
97                            and binaries will be unredistributable [no]
98
99 Configuration options:
100   --disable-static         do not build static libraries [no]
101   --enable-shared          build shared libraries [no]
102   --enable-small           optimize for size instead of speed
103   --enable-runtime-cpudetect detect CPU capabilities at runtime (bigger binary)
104   --enable-gray            enable full grayscale support (slower color)
105   --disable-swscale-alpha  disable alpha channel support in swscale
106   --disable-all            disable building components, libraries and programs
107
108 Program options:
109   --disable-programs       do not build command line programs
110   --disable-avconv         disable avconv build
111   --disable-avplay         disable avplay build
112   --disable-avprobe        disable avprobe build
113   --disable-avserver       deprecated, does nothing
114
115 Component options:
116   --disable-doc            do not build documentation
117   --disable-pod2man        do not build manual pages
118   --disable-texi2html      do not build HTML documentation
119   --disable-avdevice       disable libavdevice build
120   --disable-avcodec        disable libavcodec build
121   --disable-avformat       disable libavformat build
122   --disable-avutil         disable libavutil build
123   --disable-swscale        disable libswscale build
124   --disable-avfilter       disable video filter support [no]
125   --disable-avresample     disable libavresample build [no]
126   --disable-pthreads       disable pthreads [auto]
127   --disable-w32threads     disable Win32 threads [auto]
128   --disable-network        disable network support [no]
129   --disable-dct            disable DCT code
130   --disable-error-resilience disable error resilience code
131   --disable-lsp            disable LSP code
132   --disable-lzo            disable LZO decoder code
133   --disable-mdct           disable MDCT code
134   --disable-rdft           disable RDFT code
135   --disable-fft            disable FFT code
136   --disable-faan           disable floating point AAN (I)DCT code
137
138 Individual component options:
139   --disable-everything     disable all components listed below
140   --disable-encoder=NAME   disable encoder NAME
141   --enable-encoder=NAME    enable encoder NAME
142   --disable-encoders       disable all encoders
143   --disable-decoder=NAME   disable decoder NAME
144   --enable-decoder=NAME    enable decoder NAME
145   --disable-decoders       disable all decoders
146   --disable-hwaccel=NAME   disable hwaccel NAME
147   --enable-hwaccel=NAME    enable hwaccel NAME
148   --disable-hwaccels       disable all hwaccels
149   --disable-muxer=NAME     disable muxer NAME
150   --enable-muxer=NAME      enable muxer NAME
151   --disable-muxers         disable all muxers
152   --disable-demuxer=NAME   disable demuxer NAME
153   --enable-demuxer=NAME    enable demuxer NAME
154   --disable-demuxers       disable all demuxers
155   --enable-parser=NAME     enable parser NAME
156   --disable-parser=NAME    disable parser NAME
157   --disable-parsers        disable all parsers
158   --enable-bsf=NAME        enable bitstream filter NAME
159   --disable-bsf=NAME       disable bitstream filter NAME
160   --disable-bsfs           disable all bitstream filters
161   --enable-protocol=NAME   enable protocol NAME
162   --disable-protocol=NAME  disable protocol NAME
163   --disable-protocols      disable all protocols
164   --enable-indev=NAME      enable input device NAME
165   --disable-indev=NAME     disable input device NAME
166   --disable-indevs         disable input devices
167   --enable-outdev=NAME     enable output device NAME
168   --disable-outdev=NAME    disable output device NAME
169   --disable-outdevs        disable output devices
170   --disable-devices        disable all devices
171   --enable-filter=NAME     enable filter NAME
172   --disable-filter=NAME    disable filter NAME
173   --disable-filters        disable all filters
174
175 External library support:
176
177   Using any of the following switches will allow Libav to link to the
178   corresponding external library. All the components depending on that library
179   will become enabled, if all their other dependencies are met and they are not
180   explicitly disabled. E.g. --enable-libwavpack will enable linking to
181   libwavpack and allow the libwavpack encoder to be built, unless it is
182   specifically disabled with --disable-encoder=libwavpack.
183
184   Note that only the system libraries are auto-detected. All the other external
185   libraries must be explicitly enabled.
186
187   Also note that the following help text describes the purpose of the libraries
188   themselves, not all their features will necessarily be usable by Libav.
189
190   --enable-avisynth          video frameserver
191   --enable-avxsynth          Linux version of AviSynth
192   --enable-bzlib             bzip2 compression [autodetect]
193   --enable-frei0r            video filtering plugins
194   --enable-gnutls            crypto
195   --enable-libbs2b           Bauer stereophonic-to-binaural DSP
196   --enable-libcdio           audio CD input
197   --enable-libdc1394         IEEE 1394/Firewire camera input
198   --enable-libdcadec         DCA audio decoding
199   --enable-libfaac           AAC audio encoding
200   --enable-libfdk-aac        AAC audio encoding/decoding
201   --enable-libfontconfig     font configuration and management
202   --enable-libfreetype       font rendering
203   --enable-libgsm            GSM audio encoding/decoding
204   --enable-libhdcd           HDCD decoding filter
205   --enable-libilbc           ILBC audio encoding/decoding
206   --enable-libjack           JACK audio sound server
207   --enable-libkvazaar        HEVC video encoding
208   --enable-libmp3lame        MP3 audio encoding
209   --enable-libopencore-amrnb AMR-NB audio encoding/decoding
210   --enable-libopencore-amrwb AMR-WB audio decoding
211   --enable-libopencv         computer vision
212   --enable-libopenh264       H.264 video encoding/decoding
213   --enable-libopenjpeg       JPEG 2000 image encoding/decoding
214   --enable-libopus           Opus audio encoding/decoding
215   --enable-libpulse          Pulseaudio sound server
216   --enable-librtmp           RTMP streaming
217   --enable-libschroedinger   Dirac video encoding/decoding
218   --enable-libsnappy         snappy compression
219   --enable-libspeex          Speex audio encoding/decoding
220   --enable-libtheora         Theora video encoding/decoding
221   --enable-libtwolame        MP2 audio encoding
222   --enable-libvo-aacenc      AAC audio encoding
223   --enable-libvo-amrwbenc    AMR-WB audio encoding
224   --enable-libvorbis         Vorbis audio encoding/decoding
225   --enable-libvpx            VP* video encoding/decoding
226   --enable-libwavpack        Wavpack audio encoding/decoding
227   --enable-libwebp           WebP image encoding/decoding
228   --enable-libx264           H.264 video encoding
229   --enable-libx265           HEVC video encoding
230   --enable-libxavs           Chinese AVS video encoding
231   --enable-libxcb            X window system protocol communication
232   --enable-libxcb-shm        X11 shm communication [auto]
233   --enable-libxcb-xfixes     X11 mouse rendering [auto]
234   --enable-libxvid           MPEG-4 ASP video encoding
235   --enable-openssl           crypto
236   --enable-zlib              compression [autodetect]
237
238   The following libraries provide various hardware acceleration features:
239   --enable-cuda    Nvidia CUDA (dynamically linked)
240   --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
241   --enable-dxva2   Microsoft DirectX 9 video acceleration [auto]
242   --enable-libmfx  Intel MediaSDK (AKA Quick Sync Video)
243   --enable-libnpp  Nvidia CUDA processing
244   --enable-mmal    Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
245   --enable-nvenc   Nvidia video encoding
246   --enable-omx     OpenMAX IL
247   --enable-omx-rpi OpenMAX IL for Raspberry Pi
248   --enable-vaapi   Video Acceleration API (mainly Unix/Intel)
249   --enable-vda     Apple Video Decode Acceleration [auto]
250   --enable-vdpau   Nvidia Video Decode and Presentation API for Unix [auto]
251
252 Toolchain options:
253   --arch=ARCH              select architecture [$arch]
254   --cpu=CPU                select the minimum required CPU (affects
255                            instruction selection, may crash on older CPUs)
256   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
257   --enable-cross-compile   assume a cross-compiler is used
258   --sysroot=PATH           root of cross-build tree
259   --sysinclude=PATH        location of cross-build system headers
260   --target-os=OS           compiler targets OS [$target_os]
261   --target-exec=CMD        command to run executables on target
262   --target-path=DIR        path to view of build directory on target
263   --target-samples=DIR     path to samples directory on target
264   --toolchain=NAME         set tool defaults according to NAME
265   --nm=NM                  use nm tool
266   --ar=AR                  use archive tool AR [$ar_default]
267   --as=AS                  use assembler AS [$as_default]
268   --cc=CC                  use C compiler CC [$cc_default]
269   --objcc=OCC              use ObjC compiler OCC [$cc_default]
270   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
271   --ld=LD                  use linker LD
272   --x86asmexe=X86ASM       use x86 assembler X86ASM
273   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
274   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
275   --host-cc=HOSTCC         use host C compiler HOSTCC
276   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
277   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
278   --host-ld=HOSTLD         use host linker HOSTLD
279   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
280   --host-libs=HLIBS        use libs HLIBS when linking for host
281   --host-os=OS             compiler host OS [$target_os]
282   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
283   --extra-objcflags=FLAGS  add FLAGS to OBJCFLAGS [$CFLAGS]
284   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
285   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
286   --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
287   --extra-libs=ELIBS       add ELIBS [$ELIBS]
288   --extra-version=STRING   version string suffix []
289   --optflags=OPTFLAGS      override optimization-related compiler flags
290   --enable-pic             build position-independent code
291   --enable-thumb           compile for Thumb instruction set
292   --enable-lto             use link-time optimization
293   --env="ENV=override"     override the environment variables
294
295 Advanced options (experts only):
296   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
297   --custom-allocator=NAME  use a supported custom allocator
298   --disable-symver         disable symbol versioning
299   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
300   --disable-safe-bitstream-reader
301                            disable buffer boundary checking in bitreaders
302                            (faster, but may crash)
303   --enable-sram            allow use of on-chip SRAM
304
305 Optimization options (experts only):
306   --disable-asm            disable all assembly optimizations
307   --disable-altivec        disable AltiVec optimizations
308   --disable-vsx            disable VSX optimizations
309   --disable-power8         disable POWER8 optimizations
310   --disable-amd3dnow       disable 3DNow! optimizations
311   --disable-amd3dnowext    disable 3DNow! extended optimizations
312   --disable-mmx            disable MMX optimizations
313   --disable-mmxext         disable MMXEXT optimizations
314   --disable-sse            disable SSE optimizations
315   --disable-sse2           disable SSE2 optimizations
316   --disable-sse3           disable SSE3 optimizations
317   --disable-ssse3          disable SSSE3 optimizations
318   --disable-sse4           disable SSE4 optimizations
319   --disable-sse42          disable SSE4.2 optimizations
320   --disable-avx            disable AVX optimizations
321   --disable-xop            disable XOP optimizations
322   --disable-fma3           disable FMA3 optimizations
323   --disable-fma4           disable FMA4 optimizations
324   --disable-avx2           disable AVX2 optimizations
325   --disable-armv5te        disable armv5te optimizations
326   --disable-armv6          disable armv6 optimizations
327   --disable-armv6t2        disable armv6t2 optimizations
328   --disable-vfp            disable VFP optimizations
329   --disable-neon           disable NEON optimizations
330   --disable-inline-asm     disable use of inline assembly
331   --disable-x86asm         disable use of standalone x86 assembly
332
333 Developer options (useful when working on Libav itself):
334   --disable-debug          disable debugging symbols
335   --enable-debug=LEVEL     set the debug level [$debuglevel]
336   --disable-optimizations  disable compiler optimizations
337   --enable-extra-warnings  enable more compiler warnings
338   --samples=PATH           location of test samples for FATE, if not set use
339                            \$LIBAV_SAMPLES at make invocation time.
340   --enable-neon-clobber-test check NEON registers for clobbering (should be
341                            used only for debugging purposes)
342   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
343                            should be used only for debugging purposes)
344   --enable-random          randomly enable/disable components
345   --disable-random
346   --enable-random=LIST     randomly enable/disable specific components or
347   --disable-random=LIST    component groups. LIST is a comma-separated list
348                            of NAME[:PROB] entries where NAME is a component
349                            (group) and PROB the probability associated with
350                            NAME (default 0.5).
351   --random-seed=VALUE      seed value for --enable/disable-random
352   --disable-valgrind-backtrace do not print a backtrace under Valgrind
353                            (only applies to --disable-optimizations builds)
354   --ignore-tests=TESTS     comma-separated list (without "fate-" prefix
355                            in the name) of tests whose result is ignored
356
357 NOTE: Object files are built at the place where configure is launched.
358 EOF
359   exit 0
360 }
361
362 quotes='""'
363
364 log(){
365     echo "$@" >> $logfile
366 }
367
368 log_file(){
369     log BEGIN $1
370     i=1
371     while read line; do
372         printf '%5s   %s\n' "${i}" "${line}"
373         i=$(($i+1))
374     done < $1 >> $logfile
375     log END $1
376 }
377
378 echolog(){
379     log "$@"
380     echo "$@"
381 }
382
383 warn(){
384     log "WARNING: $*"
385     WARNINGS="${WARNINGS}WARNING: $*\n"
386 }
387
388 die(){
389     echolog "$@"
390     cat <<EOF
391
392 If you think configure made a mistake, make sure you are using the latest
393 version from Git.  If the latest version fails, report the problem to the
394 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
395 EOF
396     if disabled logging; then
397         cat <<EOF
398 Rerun configure with logging enabled (do not use --disable-logging), and
399 include the log this produces with your report.
400 EOF
401     else
402         cat <<EOF
403 Include the log file "$logfile" produced by configure as this will help
404 solving the problem.
405 EOF
406     fi
407     exit 1
408 }
409
410 # Avoid locale weirdness, besides we really just want to translate ASCII.
411 toupper(){
412     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
413 }
414
415 tolower(){
416     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
417 }
418
419 c_escape(){
420     echo "$*" | sed 's/["\\]/\\\0/g'
421 }
422
423 sh_quote(){
424     v=$(echo "$1" | sed "s/'/'\\\\''/g")
425     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
426     echo "$v"
427 }
428
429 cleanws(){
430     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
431 }
432
433 filter(){
434     pat=$1
435     shift
436     for v; do
437         eval "case '$v' in $pat) printf '%s ' '$v' ;; esac"
438     done
439 }
440
441 filter_out(){
442     pat=$1
443     shift
444     for v; do
445         eval "case '$v' in $pat) ;; *) printf '%s ' '$v' ;; esac"
446     done
447 }
448
449 map(){
450     m=$1
451     shift
452     for v; do eval $m; done
453 }
454
455 add_suffix(){
456     suffix=$1
457     shift
458     for v; do echo ${v}${suffix}; done
459 }
460
461 set_all(){
462     value=$1
463     shift
464     for var in $*; do
465         eval $var=$value
466     done
467 }
468
469 set_weak(){
470     value=$1
471     shift
472     for var; do
473         eval : \${$var:=$value}
474     done
475 }
476
477 sanitize_var_name(){
478     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
479 }
480
481 set_sanitized(){
482     var=$1
483     shift
484     eval $(sanitize_var_name "$var")='$*'
485 }
486
487 get_sanitized(){
488     eval echo \$$(sanitize_var_name "$1")
489 }
490
491 pushvar(){
492     for pvar in $*; do
493         eval level=\${${pvar}_level:=0}
494         eval ${pvar}_${level}="\$$pvar"
495         eval ${pvar}_level=$(($level+1))
496     done
497 }
498
499 popvar(){
500     for pvar in $*; do
501         eval level=\${${pvar}_level:-0}
502         test $level = 0 && continue
503         eval level=$(($level-1))
504         eval $pvar="\${${pvar}_${level}}"
505         eval ${pvar}_level=$level
506         eval unset ${pvar}_${level}
507     done
508 }
509
510 enable(){
511     set_all yes $*
512 }
513
514 disable(){
515     set_all no $*
516 }
517
518 enable_weak(){
519     set_weak yes $*
520 }
521
522 disable_weak(){
523     set_weak no $*
524 }
525
526 enable_sanitized(){
527     for var; do
528         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
529     done
530 }
531
532 disable_sanitized(){
533     for var; do
534         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
535     done
536 }
537
538 do_enable_deep(){
539     for var; do
540         enabled $var && continue
541         eval sel="\$${var}_select"
542         eval sgs="\$${var}_suggest"
543         pushvar var sgs
544         enable_deep $sel
545         popvar sgs
546         enable_deep_weak $sgs
547         popvar var
548     done
549 }
550
551 enable_deep(){
552     do_enable_deep $*
553     enable $*
554 }
555
556 enable_deep_weak(){
557     for var; do
558         disabled $var && continue
559         pushvar var
560         do_enable_deep $var
561         popvar var
562         enable_weak $var
563     done
564 }
565
566 enabled(){
567     test "${1#!}" = "$1" && op== || op=!=
568     eval test "x\$${1#!}" $op "xyes"
569 }
570
571 disabled(){
572     test "${1#!}" = "$1" && op== || op=!=
573     eval test "x\$${1#!}" $op "xno"
574 }
575
576 enabled_all(){
577     for opt; do
578         enabled $opt || return 1
579     done
580 }
581
582 disabled_all(){
583     for opt; do
584         disabled $opt || return 1
585     done
586 }
587
588 enabled_any(){
589     for opt; do
590         enabled $opt && return 0
591     done
592 }
593
594 disabled_any(){
595     for opt; do
596         disabled $opt && return 0
597     done
598     return 1
599 }
600
601 set_default(){
602     for opt; do
603         eval : \${$opt:=\$${opt}_default}
604     done
605 }
606
607 is_in(){
608     value=$1
609     shift
610     for var in $*; do
611         [ $var = $value ] && return 0
612     done
613     return 1
614 }
615
616 check_deps(){
617     for cfg; do
618         enabled ${cfg}_checking && die "Circular dependency for $cfg."
619         disabled ${cfg}_checking && continue
620         enable ${cfg}_checking
621
622         eval dep_all="\$${cfg}_deps"
623         eval dep_any="\$${cfg}_deps_any"
624         eval dep_con="\$${cfg}_conflict"
625         eval dep_sel="\$${cfg}_select"
626         eval dep_sgs="\$${cfg}_suggest"
627         eval dep_ifa="\$${cfg}_if"
628         eval dep_ifn="\$${cfg}_if_any"
629
630         pushvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
631         check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
632         popvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
633
634         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
635         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
636         enabled_all  $dep_all || disable $cfg
637         enabled_any  $dep_any || disable $cfg
638         disabled_all $dep_con || disable $cfg
639         disabled_any $dep_sel && disable $cfg
640
641         enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
642
643         for dep in $dep_all $dep_any $dep_sel $dep_sgs; do
644             # filter out library deps, these do not belong in extralibs
645             is_in $dep $LIBRARY_LIST && continue
646             enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
647         done
648
649         disable ${cfg}_checking
650     done
651 }
652
653 print_config(){
654     pfx=$1
655     files=$2
656     shift 2
657     map 'eval echo "$v \${$v:-no}"' "$@" |
658     awk "BEGIN { split(\"$files\", files) }
659         {
660             c = \"$pfx\" toupper(\$1);
661             v = \$2;
662             sub(/yes/, 1, v);
663             sub(/no/,  0, v);
664             for (f in files) {
665                 file = files[f];
666                 if (file ~ /\\.h\$/) {
667                     printf(\"#define %s %d\\n\", c, v) >>file;
668                 } else if (file ~ /\\.asm\$/) {
669                     printf(\"%%define %s %d\\n\", c, v) >>file;
670                 } else if (file ~ /\\.mak\$/) {
671                     n = -v ? \"\" : \"!\";
672                     printf(\"%s%s=yes\\n\", n, c) >>file;
673                 }
674             }
675         }"
676 }
677
678 print_enabled(){
679     suf=$1
680     shift
681     for v; do
682         enabled $v && printf "%s\n" ${v%$suf}
683     done
684 }
685
686 append(){
687     var=$1
688     shift
689     eval "$var=\"\$$var $*\""
690 }
691
692 prepend(){
693     var=$1
694     shift
695     eval "$var=\"$* \$$var\""
696 }
697
698 unique(){
699     var=$1
700     uniq_list=""
701     for tok in $(eval echo \$$var); do
702         uniq_list="$(filter_out $tok $uniq_list) $tok"
703     done
704     eval "$var=\"${uniq_list}\""
705 }
706
707 resolve(){
708     var=$1
709     tmpvar=
710     for entry in $(eval echo \$$var); do
711         tmpvar="$tmpvar $(eval echo \$${entry})"
712     done
713     eval "$var=\"${tmpvar}\""
714 }
715
716 add_cppflags(){
717     append CPPFLAGS "$@"
718 }
719
720 add_cflags(){
721     append CFLAGS $($cflags_filter "$@")
722 }
723
724 add_cflags_headers(){
725     append CFLAGS_HEADERS $($cflags_filter "$@")
726 }
727
728 add_asflags(){
729     append ASFLAGS $($asflags_filter "$@")
730 }
731
732 add_objcflags(){
733     append OBJCFLAGS $($objcflags_filter "$@")
734 }
735
736 add_ldflags(){
737     append LDFLAGS $($ldflags_filter "$@")
738 }
739
740 add_ldexeflags(){
741     append LDEXEFLAGS $($ldflags_filter "$@")
742 }
743
744 add_ldsoflags(){
745     append LDSOFLAGS $($ldflags_filter "$@")
746 }
747
748 add_stripflags(){
749     append STRIPFLAGS "$@"
750 }
751
752 add_extralibs(){
753     prepend extralibs $($ldflags_filter "$@")
754 }
755
756 add_host_cppflags(){
757     append host_cppflags "$@"
758 }
759
760 add_host_cflags(){
761     append host_cflags $($host_cflags_filter "$@")
762 }
763
764 add_host_ldflags(){
765     append host_ldflags $($host_ldflags_filter "$@")
766 }
767
768 add_compat(){
769     append compat_objs $1
770     shift
771     map 'add_cppflags -D$v' "$@"
772 }
773
774 check_cmd(){
775     log "$@"
776     "$@" >> $logfile 2>&1
777 }
778
779 cc_o(){
780     eval printf '%s\\n' $CC_O
781 }
782
783 cc_e(){
784     eval printf '%s\\n' $CC_E
785 }
786
787 check_cc(){
788     log check_cc "$@"
789     cat > $TMPC
790     log_file $TMPC
791     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
792 }
793
794 check_objcc(){
795     log check_objcc "$@"
796     cat > $TMPC
797     log_file $TMPC
798     check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
799 }
800
801 check_cpp(){
802     log check_cpp "$@"
803     cat > $TMPC
804     log_file $TMPC
805     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
806 }
807
808 as_o(){
809     eval printf '%s\\n' $AS_O
810 }
811
812 check_as(){
813     log check_as "$@"
814     cat > $TMPS
815     log_file $TMPS
816     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
817 }
818
819 check_inline_asm(){
820     log check_inline_asm "$@"
821     name="$1"
822     code="$2"
823     shift 2
824     disable $name
825     check_cc "$@" <<EOF && enable $name
826 void foo(void){ __asm__ volatile($code); }
827 EOF
828 }
829
830 check_insn(){
831     log check_insn "$@"
832     check_inline_asm ${1}_inline "\"$2\""
833     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
834 }
835
836 check_x86asm(){
837     log check_x86asm "$@"
838     echo "$1" > $TMPS
839     log_file $TMPS
840     shift 1
841     check_cmd $x86asmexe $X86ASMFLAGS "$@" -o $TMPO $TMPS
842 }
843
844 ld_o(){
845     eval printf '%s\\n' $LD_O
846 }
847
848 check_ld(){
849     log check_ld "$@"
850     flags=$(filter_out '-l*' "$@")
851     libs=$(filter '-l*' "$@")
852     check_cc $($cflags_filter $flags) || return
853     flags=$($ldflags_filter $flags)
854     libs=$($ldflags_filter $libs)
855     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
856 }
857
858 print_include(){
859     hdr=$1
860     test "${hdr%.h}" = "${hdr}" &&
861         echo "#include $hdr"    ||
862         echo "#include <$hdr>"
863 }
864
865 check_code(){
866     log check_code "$@"
867     check=$1
868     headers=$2
869     code=$3
870     shift 3
871     {
872         for hdr in $headers; do
873             print_include $hdr
874         done
875         echo "int main(void) { $code; return 0; }"
876     } | check_$check "$@"
877 }
878
879 check_cppflags(){
880     log check_cppflags "$@"
881     check_cpp "$@" <<EOF && append CPPFLAGS "$@"
882 #include <stdlib.h>;
883 EOF
884 }
885
886 test_cflags(){
887     log test_cflags "$@"
888     set -- $($cflags_filter "$@")
889     check_cc "$@" <<EOF
890 int x;
891 EOF
892 }
893
894 check_cflags(){
895     log check_cflags "$@"
896     test_cflags "$@" && add_cflags "$@"
897 }
898
899 test_objcflags(){
900     log test_objcflags "$@"
901     set -- $($objcflags_filter "$@")
902     check_objcc "$@" <<EOF
903 int x;
904 EOF
905 }
906
907 check_objcflags(){
908     log check_objcflags "$@"
909     test_objcflags "$@" && add_objcflags "$@"
910 }
911
912 test_ldflags(){
913     log test_ldflags "$@"
914     check_ld "$@" <<EOF
915 int main(void){ return 0; }
916 EOF
917 }
918
919 check_ldflags(){
920     log check_ldflags "$@"
921     test_ldflags "$@" && add_ldflags "$@"
922 }
923
924 test_stripflags(){
925     log test_stripflags "$@"
926     # call check_cc to get a fresh TMPO
927     check_cc <<EOF
928 int main(void) { return 0; }
929 EOF
930     check_cmd $strip $STRIPFLAGS "$@" $TMPO
931 }
932
933 check_stripflags(){
934     log check_stripflags "$@"
935     test_stripflags "$@" && add_stripflags "$@"
936 }
937
938 check_header(){
939     log check_header "$@"
940     header=$1
941     shift
942     disable_sanitized $header
943     check_cpp "$@" <<EOF && enable_sanitized $header
944 #include <$header>
945 int x;
946 EOF
947 }
948
949 check_func(){
950     log check_func "$@"
951     func=$1
952     shift
953     disable $func
954     check_ld "$@" <<EOF && enable $func
955 extern int $func();
956 int main(void){ $func(); }
957 EOF
958 }
959
960 check_mathfunc(){
961     log check_mathfunc "$@"
962     func=$1
963     narg=$2
964     shift 2
965     test $narg = 2 && args="f, g" || args="f"
966     disable $func
967     check_ld "$@" <<EOF && enable $func
968 #include <math.h>
969 float foo(float f, float g) { return $func($args); }
970 int main(void){ return 0; }
971 EOF
972 }
973
974 check_func_headers(){
975     log check_func_headers "$@"
976     headers=$1
977     funcs=$2
978     shift 2
979     {
980         for hdr in $headers; do
981             print_include $hdr
982         done
983         for func in $funcs; do
984             echo "long check_$func(void) { return (long) $func; }"
985         done
986         echo "int main(void) { return 0; }"
987     } | check_ld "$@" && enable $funcs && enable_sanitized $headers
988 }
989
990 check_cpp_condition(){
991     log check_cpp_condition "$@"
992     header=$1
993     condition=$2
994     shift 2
995     check_cpp "$@" <<EOF
996 #include <$header>
997 #if !($condition)
998 #error "unsatisfied condition: $condition"
999 #endif
1000 EOF
1001 }
1002
1003 test_cflags_cpp(){
1004     log test_cflags_cpp "$@"
1005     flags=$1
1006     condition=$2
1007     shift 2
1008     set -- $($cflags_filter "$flags")
1009     check_cpp "$@" <<EOF
1010 #if !($condition)
1011 #error "unsatisfied condition: $condition"
1012 #endif
1013 EOF
1014 }
1015
1016 check_lib(){
1017     log check_lib "$@"
1018     name="$1"
1019     headers="$2"
1020     funcs="$3"
1021     shift 3
1022     disable $name
1023     check_func_headers "$headers" "$funcs" "$@" &&
1024         enable $name && eval ${name}_extralibs="\$@"
1025 }
1026
1027 check_pkg_config(){
1028     log check_pkg_config "$@"
1029     name="$1"
1030     pkg_version="$2"
1031     pkg="${2%% *}"
1032     headers="$3"
1033     funcs="$4"
1034     shift 4
1035     disable $name
1036     check_cmd $pkg_config --exists --print-errors $pkg_version || return
1037     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1038     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1039     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1040         enable $name &&
1041         add_cflags    "$pkg_cflags" &&
1042         eval $(sanitize_var_name ${name}_extralibs)="\$pkg_libs"
1043 }
1044
1045 check_exec(){
1046     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1047 }
1048
1049 check_exec_crash(){
1050     log check_exec_crash "$@"
1051     code=$(cat)
1052
1053     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1054     # are safe but may not be available everywhere.  Thus we use
1055     # raise(SIGTERM) instead.  The check is run in a subshell so we
1056     # can redirect the "Terminated" message from the shell.  SIGBUS
1057     # is not defined by standard C so it is used conditionally.
1058
1059     (check_exec "$@") >> $logfile 2>&1 <<EOF
1060 #include <signal.h>
1061 static void sighandler(int sig){
1062     raise(SIGTERM);
1063 }
1064 int foo(void){
1065     $code
1066 }
1067 int (*func_ptr)(void) = foo;
1068 int main(void){
1069     signal(SIGILL, sighandler);
1070     signal(SIGFPE, sighandler);
1071     signal(SIGSEGV, sighandler);
1072 #ifdef SIGBUS
1073     signal(SIGBUS, sighandler);
1074 #endif
1075     return func_ptr();
1076 }
1077 EOF
1078 }
1079
1080 check_type(){
1081     log check_type "$@"
1082     headers=$1
1083     type=$2
1084     shift 2
1085     disable_sanitized "$type"
1086     check_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
1087 }
1088
1089 check_struct(){
1090     log check_struct "$@"
1091     headers=$1
1092     struct=$2
1093     member=$3
1094     shift 3
1095     disable_sanitized "${struct}_${member}"
1096     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1097         enable_sanitized "${struct}_${member}"
1098 }
1099
1100 check_builtin(){
1101     log check_builtin "$@"
1102     name=$1
1103     headers=$2
1104     builtin=$3
1105     shift 3
1106     disable "$name"
1107     check_code ld "$headers" "$builtin" "$@" && enable "$name"
1108 }
1109
1110 check_compile_assert(){
1111     log check_compile_assert "$@"
1112     name=$1
1113     headers=$2
1114     condition=$3
1115     shift 3
1116     disable "$name"
1117     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1118 }
1119
1120 require(){
1121     log require "$@"
1122     name_version="$1"
1123     name="${1%% *}"
1124     headers="$2"
1125     func="$3"
1126     shift 3
1127     check_lib $name "$headers" $func "$@" || die "ERROR: $name_version not found"
1128 }
1129
1130 require_header(){
1131     log require "$@"
1132     header="$1"
1133     shift
1134     check_header "$header" "$@" || die "ERROR: $header not found"
1135 }
1136
1137 require_cpp_condition(){
1138     log require "$@"
1139     header="$1"
1140     condition="$2"
1141     shift 2
1142     check_cpp_condition "$header" "$condition" "$@" || die "ERROR: $condition not satisfied"
1143 }
1144
1145 require_pkg_config(){
1146     log require_pkg_config "$@"
1147     pkg_version="$2"
1148     check_pkg_config "$@" || die "ERROR: $pkg_version not found"
1149 }
1150
1151 hostcc_e(){
1152     eval printf '%s\\n' $HOSTCC_E
1153 }
1154
1155 hostcc_o(){
1156     eval printf '%s\\n' $HOSTCC_O
1157 }
1158
1159 check_host_cc(){
1160     log check_host_cc "$@"
1161     cat > $TMPC
1162     log_file $TMPC
1163     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1164 }
1165
1166 check_host_cpp(){
1167     log check_host_cpp "$@"
1168     cat > $TMPC
1169     log_file $TMPC
1170     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1171 }
1172
1173 check_host_cppflags(){
1174     log check_host_cppflags "$@"
1175     check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1176 #include <stdlib.h>;
1177 EOF
1178 }
1179
1180 check_host_cflags(){
1181     log check_host_cflags "$@"
1182     set -- $($host_cflags_filter "$@")
1183     check_host_cc "$@" <<EOF && append host_cflags "$@"
1184 int x;
1185 EOF
1186 }
1187
1188 check_host_cpp_condition(){
1189     log check_host_cpp_condition "$@"
1190     header=$1
1191     condition=$2
1192     shift 2
1193     check_host_cpp "$@" <<EOF
1194 #include <$header>
1195 #if !($condition)
1196 #error "unsatisfied condition: $condition"
1197 #endif
1198 EOF
1199 }
1200
1201 apply(){
1202     file=$1
1203     shift
1204     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1205 }
1206
1207 cp_if_changed(){
1208     cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1209     mkdir -p "$(dirname $2)"
1210     cp -f "$1" "$2"
1211 }
1212
1213 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1214 # system-dependent things.
1215
1216 AVCODEC_COMPONENTS="
1217     bsfs
1218     decoders
1219     encoders
1220     hwaccels
1221     parsers
1222 "
1223
1224 AVDEVICE_COMPONENTS="
1225     indevs
1226     outdevs
1227 "
1228 AVFILTER_COMPONENTS="
1229     filters
1230 "
1231 AVFORMAT_COMPONENTS="
1232     demuxers
1233     muxers
1234     protocols
1235 "
1236
1237 AVRESAMPLE_COMPONENTS=""
1238 AVUTIL_COMPONENTS=""
1239
1240 COMPONENT_LIST="
1241     $AVCODEC_COMPONENTS
1242     $AVDEVICE_COMPONENTS
1243     $AVFILTER_COMPONENTS
1244     $AVFORMAT_COMPONENTS
1245     $AVRESAMPLE_COMPONENTS
1246     $AVUTIL_COMPONENTS
1247 "
1248
1249 EXAMPLE_LIST="
1250     decode_audio_example
1251     decode_video_example
1252     encode_audio_example
1253     encode_video_example
1254     filter_audio_example
1255     metadata_example
1256     output_example
1257     qsvdec_example
1258     transcode_aac_example
1259 "
1260
1261 # catchall list of things that require external libs to link
1262 EXTRALIBS_LIST="
1263     cpu_init
1264     cws2fws
1265 "
1266
1267 HWACCEL_LIBRARY_NONFREE_LIST="
1268     cuda
1269     libnpp
1270 "
1271 HWACCEL_LIBRARY_LIST="
1272     $HWACCEL_LIBRARY_NONFREE_LIST
1273     d3d11va
1274     dxva2
1275     libmfx
1276     mmal
1277     nvenc
1278     omx
1279     vaapi
1280     vda
1281     vdpau
1282 "
1283
1284 EXTERNAL_LIBRARY_GPL_LIST="
1285     libcdio
1286     libx264
1287     libx265
1288     libxavs
1289     libxvid
1290 "
1291
1292 EXTERNAL_LIBRARY_NONFREE_LIST="
1293     libfaac
1294     libfdk_aac
1295     openssl
1296 "
1297
1298 EXTERNAL_LIBRARY_VERSION3_LIST="
1299     libopencore_amrnb
1300     libopencore_amrwb
1301     libvo_aacenc
1302     libvo_amrwbenc
1303 "
1304
1305 EXTERNAL_LIBRARY_LIST="
1306     $EXTERNAL_LIBRARY_GPL_LIST
1307     $EXTERNAL_LIBRARY_NONFREE_LIST
1308     $EXTERNAL_LIBRARY_VERSION3_LIST
1309     avisynth
1310     avxsynth
1311     frei0r
1312     gnutls
1313     libbs2b
1314     libdc1394
1315     libdcadec
1316     libfontconfig
1317     libfreetype
1318     libgsm
1319     libhdcd
1320     libilbc
1321     libjack
1322     libkvazaar
1323     libmp3lame
1324     libopencv
1325     libopenh264
1326     libopenjpeg
1327     libopus
1328     libpulse
1329     librtmp
1330     libschroedinger
1331     libsnappy
1332     libspeex
1333     libtheora
1334     libtwolame
1335     libvorbis
1336     libvpx
1337     libwavpack
1338     libwebp
1339     libxcb
1340     libxcb_shm
1341     libxcb_xfixes
1342 "
1343
1344 SYSTEM_LIBRARY_LIST="
1345     bzlib
1346     zlib
1347 "
1348
1349 FEATURE_LIST="
1350     gray
1351     hardcoded_tables
1352     omx_rpi
1353     runtime_cpudetect
1354     safe_bitstream_reader
1355     shared
1356     small
1357     sram
1358     static
1359     swscale_alpha
1360 "
1361
1362 LIBRARY_LIST="
1363     avcodec
1364     avdevice
1365     avfilter
1366     avformat
1367     avresample
1368     avutil
1369     swscale
1370 "
1371
1372 LICENSE_LIST="
1373     gpl
1374     nonfree
1375     version3
1376 "
1377
1378 PROGRAM_LIST="
1379     avconv
1380     avplay
1381     avprobe
1382 "
1383
1384 SUBSYSTEM_LIST="
1385     dct
1386     doc
1387     error_resilience
1388     faan
1389     fft
1390     lsp
1391     lzo
1392     mdct
1393     network
1394     rdft
1395 "
1396
1397 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1398 CONFIG_LIST="
1399     $EXAMPLE_LIST
1400     $EXTERNAL_LIBRARY_LIST
1401     $HWACCEL_LIBRARY_LIST
1402     $FEATURE_LIST
1403     $LICENSE_LIST
1404     $LIBRARY_LIST
1405     $PROGRAM_LIST
1406     $SUBSYSTEM_LIST
1407     $SYSTEM_LIBRARY_LIST
1408     neon_clobber_test
1409     pic
1410     pod2man
1411     texi2html
1412     thumb
1413     valgrind_backtrace
1414     xmm_clobber_test
1415     $COMPONENT_LIST
1416 "
1417
1418 THREADS_LIST="
1419     pthreads
1420     w32threads
1421 "
1422
1423 ATOMICS_LIST="
1424     atomics_gcc
1425     atomics_suncc
1426     atomics_win32
1427 "
1428
1429 ARCH_LIST="
1430     aarch64
1431     alpha
1432     arm
1433     avr32
1434     avr32_ap
1435     avr32_uc
1436     bfin
1437     ia64
1438     m68k
1439     mips
1440     mips64
1441     parisc
1442     ppc
1443     ppc64
1444     s390
1445     sh4
1446     sparc
1447     sparc64
1448     tilegx
1449     tilepro
1450     tomi
1451     x86
1452     x86_32
1453     x86_64
1454 "
1455
1456 ARCH_EXT_LIST_ARM="
1457     armv5te
1458     armv6
1459     armv6t2
1460     armv8
1461     neon
1462     vfp
1463     vfpv3
1464 "
1465
1466 ARCH_EXT_LIST_X86_SIMD="
1467     amd3dnow
1468     amd3dnowext
1469     avx
1470     avx2
1471     fma3
1472     fma4
1473     mmx
1474     mmxext
1475     sse
1476     sse2
1477     sse3
1478     sse4
1479     sse42
1480     ssse3
1481     xop
1482 "
1483
1484 ARCH_EXT_LIST_PPC="
1485     altivec
1486     dcbzl
1487     ldbrx
1488     power8
1489     ppc4xx
1490     vsx
1491 "
1492
1493 ARCH_EXT_LIST_X86="
1494     $ARCH_EXT_LIST_X86_SIMD
1495     cpunop
1496     i686
1497 "
1498
1499 ARCH_EXT_LIST_MIPS="
1500     loongson
1501     mips32r1
1502     mips64r1
1503     mips32r2
1504     mips64r2
1505     mips32r6
1506     mips64r6
1507 "
1508
1509 ARCH_EXT_LIST="
1510     $ARCH_EXT_LIST_ARM
1511     $ARCH_EXT_LIST_MIPS
1512     $ARCH_EXT_LIST_PPC
1513     $ARCH_EXT_LIST_X86
1514     vis
1515 "
1516
1517 ARCH_FEATURES="
1518     aligned_stack
1519     fast_64bit
1520     fast_clz
1521     fast_cmov
1522     local_aligned_8
1523     local_aligned_16
1524     local_aligned_32
1525     simd_align_16
1526     simd_align_32
1527 "
1528
1529 BUILTIN_LIST="
1530     atomic_cas_ptr
1531     machine_rw_barrier
1532     MemoryBarrier
1533     mm_empty
1534     rdtsc
1535     sem_timedwait
1536     sync_val_compare_and_swap
1537 "
1538 HAVE_LIST_CMDLINE="
1539     inline_asm
1540     symver
1541     x86asm
1542 "
1543
1544 HAVE_LIST_PUB="
1545     bigendian
1546     fast_unaligned
1547 "
1548
1549 HEADERS_LIST="
1550     AVFoundation_AVFoundation_h
1551     alsa_asoundlib_h
1552     arpa_inet_h
1553     cdio_paranoia_h
1554     cdio_paranoia_paranoia_h
1555     d3d11_h
1556     dispatch_dispatch_h
1557     dev_bktr_ioctl_bt848_h
1558     dev_bktr_ioctl_meteor_h
1559     dev_ic_bt8xx_h
1560     dev_video_bktr_ioctl_bt848_h
1561     dev_video_meteor_ioctl_meteor_h
1562     direct_h
1563     dlfcn_h
1564     dxgidebug_h
1565     dxva_h
1566     gsm_h
1567     io_h
1568     mach_mach_time_h
1569     machine_ioctl_bt848_h
1570     machine_ioctl_meteor_h
1571     malloc_h
1572     poll_h
1573     sndio_h
1574     soundcard_h
1575     stdatomic_h
1576     sys_mman_h
1577     sys_param_h
1578     sys_resource_h
1579     sys_select_h
1580     sys_soundcard_h
1581     sys_time_h
1582     sys_un_h
1583     sys_videoio_h
1584     unistd_h
1585     valgrind_valgrind_h
1586     windows_h
1587     winsock2_h
1588 "
1589
1590 INTRINSICS_LIST="
1591     intrinsics_neon
1592 "
1593
1594 MATH_FUNCS="
1595     atanf
1596     atan2f
1597     cbrtf
1598     cosf
1599     exp2
1600     exp2f
1601     expf
1602     isinf
1603     isnan
1604     ldexpf
1605     llrint
1606     llrintf
1607     log2
1608     log2f
1609     log10f
1610     lrint
1611     lrintf
1612     powf
1613     rint
1614     round
1615     roundf
1616     sinf
1617     trunc
1618     truncf
1619 "
1620
1621 SYSTEM_FUNCS="
1622     aligned_malloc
1623     clock_gettime
1624     closesocket
1625     CommandLineToArgvW
1626     CoTaskMemFree
1627     CryptGenRandom
1628     fcntl
1629     flt_lim
1630     fork
1631     getaddrinfo
1632     gethrtime
1633     getopt
1634     GetProcessAffinityMask
1635     GetProcessMemoryInfo
1636     GetProcessTimes
1637     getrusage
1638     GetSystemTimeAsFileTime
1639     gettimeofday
1640     gmtime_r
1641     inet_aton
1642     isatty
1643     LoadLibrary
1644     localtime_r
1645     mach_absolute_time
1646     MapViewOfFile
1647     memalign
1648     mkstemp
1649     mmap
1650     mprotect
1651     nanosleep
1652     posix_memalign
1653     sched_getaffinity
1654     SetConsoleTextAttribute
1655     setmode
1656     setrlimit
1657     Sleep
1658     strerror_r
1659     sysconf
1660     sysctl
1661     usleep
1662     VirtualAlloc
1663 "
1664
1665 TOOLCHAIN_FEATURES="
1666     as_arch_directive
1667     as_fpu_directive
1668     as_func
1669     as_object_arch
1670     asm_mod_q
1671     attribute_may_alias
1672     attribute_packed
1673     blocks_extension
1674     ebp_available
1675     ebx_available
1676     gnu_as
1677     ibm_asm
1678     inline_asm_labels
1679     pragma_deprecated
1680     symver_asm_label
1681     symver_gnu_asm
1682     vfp_args
1683     xform_asm
1684     xmm_clobbers
1685 "
1686
1687 TYPES_LIST="
1688     CONDITION_VARIABLE_Ptr
1689     socklen_t
1690     struct_addrinfo
1691     struct_group_source_req
1692     struct_ip_mreq_source
1693     struct_ipv6_mreq
1694     struct_pollfd
1695     struct_rusage_ru_maxrss
1696     struct_sockaddr_in6
1697     struct_sockaddr_sa_len
1698     struct_sockaddr_storage
1699     struct_v4l2_frmivalenum_discrete
1700 "
1701
1702 HAVE_LIST="
1703     $ARCH_EXT_LIST
1704     $(add_suffix _external $ARCH_EXT_LIST)
1705     $(add_suffix _inline   $ARCH_EXT_LIST)
1706     $ARCH_FEATURES
1707     $BUILTIN_LIST
1708     $HAVE_LIST_CMDLINE
1709     $HAVE_LIST_PUB
1710     $HEADERS_LIST
1711     $INTRINSICS_LIST
1712     $MATH_FUNCS
1713     $SYSTEM_FUNCS
1714     $THREADS_LIST
1715     $TOOLCHAIN_FEATURES
1716     $TYPES_LIST
1717     dos_paths
1718     libc_msvcrt
1719     MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1720     sdl
1721     section_data_rel_ro
1722     threads
1723     vaapi_drm
1724     vaapi_x11
1725     vdpau_x11
1726 "
1727
1728 # options emitted with CONFIG_ prefix but not available on the command line
1729 CONFIG_EXTRA="
1730     aandcttables
1731     ac3dsp
1732     adts_header
1733     audio_frame_queue
1734     audiodsp
1735     blockdsp
1736     bswapdsp
1737     cabac
1738     dirac_parse
1739     dvprofile
1740     faandct
1741     faanidct
1742     fdctdsp
1743     flacdsp
1744     fmtconvert
1745     g722dsp
1746     gmp
1747     golomb
1748     gplv3
1749     h263dsp
1750     h264chroma
1751     h264dsp
1752     h264parse
1753     h264pred
1754     h264qpel
1755     hevc_ps
1756     hpeldsp
1757     huffman
1758     huffyuvdsp
1759     huffyuvencdsp
1760     idctdsp
1761     iirfilter
1762     imdct15
1763     intrax8
1764     iso_media
1765     ividsp
1766     jpegtables
1767     lgplv3
1768     libx262
1769     libxcb_shape
1770     lpc
1771     lzf
1772     me_cmp
1773     mpeg_er
1774     mpegaudio
1775     mpegaudiodsp
1776     mpegaudioheader
1777     mpegvideo
1778     mpegvideoenc
1779     mss34dsp
1780     pixblockdsp
1781     qpeldsp
1782     qsv
1783     qsvdec
1784     qsvenc
1785     rangecoder
1786     riffdec
1787     riffenc
1788     rtpdec
1789     rtpenc_chain
1790     rv34dsp
1791     sinewin
1792     snappy
1793     srtp
1794     startcode
1795     texturedsp
1796     texturedspenc
1797     tpeldsp
1798     vaapi_encode
1799     vc1dsp
1800     videodsp
1801     vp3dsp
1802     vp56dsp
1803     vp8dsp
1804     wma_freqs
1805     wmv2dsp
1806 "
1807
1808 CMDLINE_SELECT="
1809     $ARCH_EXT_LIST
1810     $CONFIG_LIST
1811     $HAVE_LIST_CMDLINE
1812     $THREADS_LIST
1813     asm
1814     cross_compile
1815     debug
1816     extra_warnings
1817     logging
1818     lto
1819     optimizations
1820     rpath
1821 "
1822
1823 PATHS_LIST="
1824     bindir
1825     datadir
1826     docdir
1827     incdir
1828     libdir
1829     mandir
1830     prefix
1831     shlibdir
1832 "
1833
1834 CMDLINE_SET="
1835     $PATHS_LIST
1836     ar
1837     arch
1838     as
1839     cc
1840     objcc
1841     cpu
1842     cross_prefix
1843     custom_allocator
1844     dep_cc
1845     env
1846     extra_version
1847     host_cc
1848     host_cflags
1849     host_extralibs
1850     host_ld
1851     host_ldflags
1852     host_os
1853     ignore_tests
1854     ld
1855     logfile
1856     malloc_prefix
1857     nm
1858     optflags
1859     pkg_config
1860     pkg_config_flags
1861     random_seed
1862     samples
1863     sysinclude
1864     sysroot
1865     target_exec
1866     target_os
1867     target_path
1868     target_samples
1869     toolchain
1870     x86asmexe
1871 "
1872
1873 CMDLINE_APPEND="
1874     extra_cflags
1875     extra_objcflags
1876     host_cppflags
1877 "
1878
1879 # code dependency declarations
1880
1881 # architecture extensions
1882
1883 armv5te_deps="arm"
1884 armv6_deps="arm"
1885 armv6t2_deps="arm"
1886 armv8_deps="aarch64"
1887 neon_deps_any="aarch64 arm"
1888 intrinsics_neon_deps="neon"
1889 vfp_deps_any="aarch64 arm"
1890 vfpv3_deps="vfp"
1891
1892 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1893
1894 altivec_deps="ppc"
1895 dcbzl_deps="ppc"
1896 ldbrx_deps="ppc"
1897 ppc4xx_deps="ppc"
1898 vsx_deps="altivec"
1899 power8_deps="vsx"
1900
1901 loongson_deps="mips"
1902 mips32r1_deps="mips32"
1903 mips32r2_deps="mips32"
1904 mips32r6_deps="mips32"
1905 mips64r1_deps="mips64"
1906 mips64r2_deps="mips64"
1907 mips64r6_deps="mips64"
1908
1909 vis_deps="sparc"
1910
1911 cpunop_deps="i686"
1912 x86_64_select="i686"
1913 x86_64_suggest="fast_cmov"
1914
1915 amd3dnow_deps="mmx"
1916 amd3dnowext_deps="amd3dnow"
1917 i686_deps="x86"
1918 mmx_deps="x86"
1919 mmxext_deps="mmx"
1920 sse_deps="mmxext"
1921 sse2_deps="sse"
1922 sse3_deps="sse2"
1923 ssse3_deps="sse3"
1924 sse4_deps="ssse3"
1925 sse42_deps="sse4"
1926 avx_deps="sse42"
1927 xop_deps="avx"
1928 fma3_deps="avx"
1929 fma4_deps="avx"
1930 avx2_deps="avx"
1931
1932 mmx_external_deps="x86asm"
1933 mmx_inline_deps="inline_asm x86"
1934 mmx_suggest="mmx_external mmx_inline"
1935
1936 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1937     eval dep=\$${ext}_deps
1938     eval ${ext}_external_deps='"${dep}_external"'
1939     eval ${ext}_inline_deps='"${dep}_inline"'
1940     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1941 done
1942
1943 aligned_stack_if_any="aarch64 ppc x86"
1944 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1945 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1946 fast_unaligned_if_any="aarch64 ppc x86"
1947 simd_align_16_if_any="altivec neon sse"
1948 simd_align_32_if_any="avx"
1949
1950 # system capabilities
1951 symver_if_any="symver_asm_label symver_gnu_asm"
1952 valgrind_backtrace_conflict="optimizations"
1953 valgrind_backtrace_deps="valgrind_valgrind_h"
1954
1955 # threading support
1956 atomics_gcc_if="sync_val_compare_and_swap"
1957 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1958 atomics_win32_if="MemoryBarrier"
1959 atomics_native_if_any="$ATOMICS_LIST"
1960 w32threads_deps="atomics_native"
1961 threads_if_any="$THREADS_LIST"
1962
1963 # subsystems
1964 dct_select="rdft"
1965 dirac_parse_select="golomb"
1966 error_resilience_select="me_cmp"
1967 faandct_deps="faan"
1968 faandct_select="fdctdsp"
1969 faanidct_deps="faan"
1970 faanidct_select="idctdsp"
1971 h264dsp_select="startcode"
1972 hevc_ps_select="golomb"
1973 intrax8_select="blockdsp idctdsp"
1974 mdct_select="fft"
1975 rdft_select="fft"
1976 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1977 mpeg_er_select="error_resilience"
1978 mpegaudio_select="mpegaudiodsp mpegaudioheader"
1979 mpegaudiodsp_select="dct"
1980 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1981 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1982 vc1dsp_select="h264chroma qpeldsp startcode"
1983
1984 # decoders / encoders
1985 aac_decoder_select="adts_header imdct15 mdct sinewin"
1986 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1987 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1988 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1989 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1990 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1991 adpcm_g722_decoder_select="g722dsp"
1992 adpcm_g722_encoder_select="g722dsp"
1993 aic_decoder_select="golomb idctdsp"
1994 alac_encoder_select="lpc"
1995 als_decoder_select="bswapdsp"
1996 amrnb_decoder_select="lsp"
1997 amrwb_decoder_select="lsp"
1998 amv_decoder_select="sp5x_decoder"
1999 ape_decoder_select="bswapdsp"
2000 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2001 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2002 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2003 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2004 atrac1_decoder_select="mdct sinewin"
2005 atrac3_decoder_select="mdct"
2006 atrac3p_decoder_select="mdct sinewin"
2007 bink_decoder_select="blockdsp hpeldsp"
2008 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2009 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2010 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2011 clearvideo_decoder_select="idctdsp"
2012 cllc_decoder_select="bswapdsp"
2013 comfortnoise_encoder_select="lpc"
2014 cook_decoder_select="audiodsp mdct sinewin"
2015 cscd_decoder_select="lzo"
2016 cscd_decoder_suggest="zlib"
2017 dca_decoder_select="fmtconvert mdct"
2018 dds_decoder_select="texturedsp"
2019 dnxhd_decoder_select="blockdsp idctdsp"
2020 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2021 dvvideo_decoder_select="dvprofile idctdsp"
2022 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2023 dxa_decoder_deps="zlib"
2024 dxv_decoder_select="lzf texturedsp"
2025 eac3_decoder_select="ac3_decoder"
2026 eac3_encoder_select="ac3_encoder"
2027 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2028 eatgq_decoder_select="aandcttables idctdsp"
2029 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2030 exr_decoder_deps="zlib"
2031 ffv1_decoder_select="rangecoder"
2032 ffv1_encoder_select="rangecoder"
2033 ffvhuff_decoder_select="huffyuv_decoder"
2034 ffvhuff_encoder_select="huffyuv_encoder"
2035 fic_decoder_select="golomb"
2036 flac_decoder_select="flacdsp"
2037 flac_encoder_select="bswapdsp flacdsp lpc"
2038 flashsv_decoder_deps="zlib"
2039 flashsv_encoder_deps="zlib"
2040 flashsv2_decoder_deps="zlib"
2041 flv_decoder_select="h263_decoder"
2042 flv_encoder_select="h263_encoder"
2043 fourxm_decoder_select="blockdsp bswapdsp"
2044 fraps_decoder_select="bswapdsp huffman"
2045 g2m_decoder_deps="zlib"
2046 g2m_decoder_select="blockdsp idctdsp jpegtables"
2047 h261_decoder_select="mpeg_er mpegvideo"
2048 h261_encoder_select="aandcttables mpegvideoenc"
2049 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2050 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2051 h263i_decoder_select="h263_decoder"
2052 h263p_encoder_select="h263_encoder"
2053 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2054 h264_decoder_suggest="error_resilience"
2055 hap_decoder_select="snappy texturedsp"
2056 hap_encoder_deps="libsnappy"
2057 hap_encoder_select="texturedspenc"
2058 hevc_decoder_select="bswapdsp cabac hevc_ps videodsp"
2059 huffyuv_decoder_select="bswapdsp huffyuvdsp"
2060 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
2061 iac_decoder_select="imc_decoder"
2062 imc_decoder_select="bswapdsp fft mdct sinewin"
2063 indeo3_decoder_select="hpeldsp"
2064 indeo4_decoder_select="ividsp"
2065 indeo5_decoder_select="ividsp"
2066 interplay_video_decoder_select="hpeldsp"
2067 jpegls_decoder_select="mjpeg_decoder"
2068 jv_decoder_select="blockdsp"
2069 lagarith_decoder_select="huffyuvdsp"
2070 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2071 magicyuv_decoder_select="huffyuvdsp"
2072 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2073 metasound_decoder_select="lsp mdct sinewin"
2074 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2075 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2076 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2077 mjpegb_decoder_select="mjpeg_decoder"
2078 mlp_decoder_select="mlp_parser"
2079 motionpixels_decoder_select="bswapdsp"
2080 mp1_decoder_select="mpegaudio"
2081 mp1float_decoder_select="mpegaudio"
2082 mp2_decoder_select="mpegaudio"
2083 mp2float_decoder_select="mpegaudio"
2084 mp3_decoder_select="mpegaudio"
2085 mp3adu_decoder_select="mpegaudio"
2086 mp3adufloat_decoder_select="mpegaudio"
2087 mp3float_decoder_select="mpegaudio"
2088 mp3on4_decoder_select="mpegaudio"
2089 mp3on4float_decoder_select="mpegaudio"
2090 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2091 mpc8_decoder_select="mpegaudiodsp"
2092 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2093 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2094 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2095 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2096 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2097 mpeg4_encoder_select="h263_encoder"
2098 msa1_decoder_select="mss34dsp"
2099 msmpeg4v1_decoder_select="h263_decoder"
2100 msmpeg4v2_decoder_select="h263_decoder"
2101 msmpeg4v2_encoder_select="h263_encoder"
2102 msmpeg4v3_decoder_select="h263_decoder"
2103 msmpeg4v3_encoder_select="h263_encoder"
2104 mss2_decoder_select="error_resilience mpeg_er mpegvideo qpeldsp vc1_decoder"
2105 mts2_decoder_select="mss34dsp"
2106 mxpeg_decoder_select="mjpeg_decoder"
2107 nellymoser_decoder_select="mdct sinewin"
2108 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2109 nuv_decoder_select="idctdsp lzo"
2110 on2avc_decoder_select="mdct"
2111 opus_decoder_deps="avresample"
2112 opus_decoder_select="imdct15"
2113 png_decoder_deps="zlib"
2114 png_encoder_deps="zlib"
2115 png_encoder_select="huffyuvencdsp"
2116 prores_decoder_select="idctdsp"
2117 prores_encoder_select="fdctdsp"
2118 qcelp_decoder_select="lsp"
2119 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2120 ra_144_encoder_select="audio_frame_queue lpc"
2121 ralf_decoder_select="golomb"
2122 rscc_decoder_deps="zlib"
2123 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2124 rv10_encoder_select="h263_encoder"
2125 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2126 rv20_encoder_select="h263_encoder"
2127 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2128 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2129 screenpresso_decoder_deps="zlib"
2130 sipr_decoder_select="lsp"
2131 sp5x_decoder_select="mjpeg_decoder"
2132 svq1_decoder_select="hpeldsp"
2133 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2134 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2135 svq3_decoder_suggest="zlib"
2136 tak_decoder_select="audiodsp"
2137 tdsc_decoder_deps="zlib"
2138 tdsc_decoder_select="mjpeg_decoder"
2139 theora_decoder_select="vp3_decoder"
2140 thp_decoder_select="mjpeg_decoder"
2141 tiff_decoder_suggest="zlib"
2142 tiff_encoder_suggest="zlib"
2143 truehd_decoder_select="mlp_decoder"
2144 truemotion2_decoder_select="bswapdsp"
2145 truespeech_decoder_select="bswapdsp"
2146 tscc_decoder_deps="zlib"
2147 txd_decoder_select="texturedsp"
2148 twinvq_decoder_select="mdct lsp sinewin"
2149 utvideo_decoder_select="bswapdsp huffyuvdsp"
2150 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2151 vble_decoder_select="huffyuvdsp"
2152 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2153 vc1image_decoder_select="vc1_decoder"
2154 vorbis_decoder_select="mdct"
2155 vorbis_encoder_select="mdct"
2156 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2157 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2158 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2159 vp6a_decoder_select="vp6_decoder"
2160 vp6f_decoder_select="vp6_decoder"
2161 vp7_decoder_select="h264pred videodsp vp8dsp"
2162 vp8_decoder_select="h264pred videodsp vp8dsp"
2163 vp9_decoder_select="videodsp vp9_superframe_split_bsf"
2164 webp_decoder_select="vp8_decoder"
2165 wmapro_decoder_select="mdct sinewin wma_freqs"
2166 wmav1_decoder_select="mdct sinewin wma_freqs"
2167 wmav1_encoder_select="mdct sinewin wma_freqs"
2168 wmav2_decoder_select="mdct sinewin wma_freqs"
2169 wmav2_encoder_select="mdct sinewin wma_freqs"
2170 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2171 wmv1_decoder_select="h263_decoder"
2172 wmv1_encoder_select="h263_encoder"
2173 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2174 wmv2_encoder_select="h263_encoder wmv2dsp"
2175 wmv3_decoder_select="vc1_decoder"
2176 wmv3image_decoder_select="wmv3_decoder"
2177 zerocodec_decoder_deps="zlib"
2178 zlib_decoder_deps="zlib"
2179 zlib_encoder_deps="zlib"
2180 zmbv_decoder_deps="zlib"
2181 zmbv_encoder_deps="zlib"
2182
2183 # hardware accelerators
2184 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2185 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32"
2186 vda_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension pthreads"
2187 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2188
2189 h263_vaapi_hwaccel_deps="vaapi"
2190 h263_vaapi_hwaccel_select="h263_decoder"
2191 h264_d3d11va_hwaccel_deps="d3d11va"
2192 h264_d3d11va_hwaccel_select="h264_decoder"
2193 h264_d3d11va2_hwaccel_deps="d3d11va"
2194 h264_d3d11va2_hwaccel_select="h264_decoder"
2195 h264_dxva2_hwaccel_deps="dxva2"
2196 h264_dxva2_hwaccel_select="h264_decoder"
2197 h264_mmal_hwaccel_deps="mmal"
2198 h264_qsv_hwaccel_deps="libmfx"
2199 h264_vaapi_hwaccel_deps="vaapi"
2200 h264_vaapi_hwaccel_select="h264_decoder"
2201 h264_vda_hwaccel_deps="vda"
2202 h264_vda_hwaccel_select="h264_decoder"
2203 h264_vda_old_hwaccel_deps="vda"
2204 h264_vda_old_hwaccel_select="h264_decoder"
2205 h264_vdpau_hwaccel_deps="vdpau"
2206 h264_vdpau_hwaccel_select="h264_decoder"
2207 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2208 hevc_d3d11va_hwaccel_select="hevc_decoder"
2209 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2210 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2211 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2212 hevc_dxva2_hwaccel_select="hevc_decoder"
2213 hevc_qsv_hwaccel_deps="libmfx"
2214 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2215 hevc_vaapi_hwaccel_select="hevc_decoder"
2216 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2217 hevc_vdpau_hwaccel_select="hevc_decoder"
2218 mpeg1_vdpau_hwaccel_deps="vdpau"
2219 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2220 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2221 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2222 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2223 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2224 mpeg2_dxva2_hwaccel_deps="dxva2"
2225 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2226 mpeg2_mmal_hwaccel_deps="mmal"
2227 mpeg2_qsv_hwaccel_deps="libmfx"
2228 mpeg2_vaapi_hwaccel_deps="vaapi"
2229 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2230 mpeg2_vdpau_hwaccel_deps="vdpau"
2231 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2232 mpeg4_vaapi_hwaccel_deps="vaapi"
2233 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2234 mpeg4_vdpau_hwaccel_deps="vdpau"
2235 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2236 vc1_d3d11va_hwaccel_deps="d3d11va"
2237 vc1_d3d11va_hwaccel_select="vc1_decoder"
2238 vc1_d3d11va2_hwaccel_deps="d3d11va"
2239 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2240 vc1_dxva2_hwaccel_deps="dxva2"
2241 vc1_dxva2_hwaccel_select="vc1_decoder"
2242 vc1_mmal_hwaccel_deps="mmal"
2243 vc1_qsv_hwaccel_deps="libmfx"
2244 vc1_vaapi_hwaccel_deps="vaapi"
2245 vc1_vaapi_hwaccel_select="vc1_decoder"
2246 vc1_vdpau_hwaccel_deps="vdpau"
2247 vc1_vdpau_hwaccel_select="vc1_decoder"
2248 vp8_qsv_hwaccel_deps="libmfx"
2249 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2250 vp8_vaapi_hwaccel_select="vp8_decoder"
2251 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2252 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2253 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2254 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2255 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2256
2257 # hardware-accelerated codecs
2258 nvenc_deps_any="libdl LoadLibrary"
2259 omx_deps="libdl pthreads"
2260 omx_rpi_select="omx"
2261 qsv_deps="libmfx"
2262 qsvdec_select="qsv"
2263 qsvenc_select="qsv"
2264 vaapi_encode_deps="vaapi"
2265
2266 hwupload_cuda_filter_deps="cuda"
2267 scale_npp_filter_deps="cuda libnpp"
2268
2269 h264_mmal_decoder_deps="mmal"
2270 h264_nvenc_encoder_deps="nvenc"
2271 h264_omx_encoder_deps="omx"
2272 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2273 h264_qsv_encoder_select="qsvenc"
2274 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2275 h264_vaapi_encoder_select="vaapi_encode golomb"
2276 hevc_nvenc_encoder_deps="nvenc"
2277 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
2278 hevc_qsv_encoder_select="hevc_ps qsvenc"
2279 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2280 hevc_vaapi_encoder_select="vaapi_encode golomb"
2281 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2282 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2283 mpeg2_mmal_decoder_deps="mmal"
2284 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2285 mpeg2_qsv_encoder_select="qsvenc"
2286 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2287 mpeg2_vaapi_encoder_select="vaapi_encode"
2288 mpeg4_omx_encoder_deps="omx"
2289 vc1_mmal_decoder_deps="mmal"
2290 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2291 vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2292 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2293 vp8_vaapi_encoder_select="vaapi_encode"
2294 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
2295 vp9_vaapi_encoder_select="vaapi_encode"
2296
2297 nvenc_h264_encoder_select="h264_nvenc_encoder"
2298 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2299
2300 # parsers
2301 aac_parser_select="adts_header"
2302 h264_parser_select="golomb h264dsp h264parse"
2303 hevc_parser_select="hevc_ps"
2304 mpegaudio_parser_select="mpegaudioheader"
2305 mpegvideo_parser_select="mpegvideo"
2306 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2307 vc1_parser_select="vc1dsp"
2308
2309 # bitstream_filters
2310 aac_adtstoasc_bsf_select="adts_header"
2311 mjpeg2jpeg_bsf_select="jpegtables"
2312
2313 # external libraries
2314 avisynth_deps="LoadLibrary"
2315 avxsynth_deps="libdl"
2316 avisynth_demuxer_deps_any="avisynth avxsynth"
2317 avisynth_demuxer_select="riffdec"
2318 libdcadec_decoder_deps="libdcadec"
2319 libfaac_encoder_deps="libfaac"
2320 libfaac_encoder_select="audio_frame_queue"
2321 libfdk_aac_decoder_deps="libfdk_aac"
2322 libfdk_aac_encoder_deps="libfdk_aac"
2323 libfdk_aac_encoder_select="audio_frame_queue"
2324 libgsm_decoder_deps="libgsm"
2325 libgsm_encoder_deps="libgsm"
2326 libgsm_ms_decoder_deps="libgsm"
2327 libgsm_ms_encoder_deps="libgsm"
2328 libilbc_decoder_deps="libilbc"
2329 libilbc_encoder_deps="libilbc"
2330 libkvazaar_encoder_deps="libkvazaar"
2331 libmp3lame_encoder_deps="libmp3lame"
2332 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2333 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2334 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2335 libopencore_amrnb_encoder_select="audio_frame_queue"
2336 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2337 libopenh264_decoder_deps="libopenh264"
2338 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2339 libopenh264_encoder_deps="libopenh264"
2340 libopenjpeg_decoder_deps="libopenjpeg"
2341 libopenjpeg_encoder_deps="libopenjpeg"
2342 libopus_decoder_deps="libopus"
2343 libopus_encoder_deps="libopus"
2344 libopus_encoder_select="audio_frame_queue"
2345 libschroedinger_decoder_deps="libschroedinger"
2346 libschroedinger_encoder_deps="libschroedinger"
2347 libspeex_decoder_deps="libspeex"
2348 libspeex_encoder_deps="libspeex"
2349 libspeex_encoder_select="audio_frame_queue"
2350 libtheora_encoder_deps="libtheora"
2351 libtwolame_encoder_deps="libtwolame"
2352 libvo_aacenc_encoder_deps="libvo_aacenc"
2353 libvo_aacenc_encoder_select="audio_frame_queue"
2354 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2355 libvorbis_encoder_deps="libvorbis"
2356 libvorbis_encoder_select="audio_frame_queue"
2357 libvpx_vp8_decoder_deps="libvpx"
2358 libvpx_vp8_encoder_deps="libvpx"
2359 libvpx_vp9_decoder_deps="libvpx"
2360 libvpx_vp9_encoder_deps="libvpx"
2361 libwavpack_encoder_deps="libwavpack"
2362 libwavpack_encoder_select="audio_frame_queue"
2363 libwebp_encoder_deps="libwebp"
2364 libx262_encoder_deps="libx262"
2365 libx264_encoder_deps="libx264"
2366 libx265_encoder_deps="libx265"
2367 libxavs_encoder_deps="libxavs"
2368 libxvid_encoder_deps="libxvid mkstemp"
2369
2370 # demuxers / muxers
2371 ac3_demuxer_select="ac3_parser"
2372 asf_demuxer_select="riffdec"
2373 asf_muxer_select="riffenc"
2374 asf_stream_muxer_select="asf_muxer"
2375 avi_demuxer_select="iso_media riffdec"
2376 avi_muxer_select="riffenc"
2377 caf_demuxer_select="iso_media riffdec"
2378 dash_muxer_select="mp4_muxer"
2379 dirac_demuxer_select="dirac_parser"
2380 dv_demuxer_select="dvprofile"
2381 dv_muxer_select="dvprofile"
2382 dxa_demuxer_select="riffdec"
2383 eac3_demuxer_select="ac3_parser"
2384 f4v_muxer_select="mov_muxer"
2385 flac_demuxer_select="flac_parser"
2386 hds_muxer_select="flv_muxer"
2387 hls_muxer_select="mpegts_muxer"
2388 ipod_muxer_select="mov_muxer"
2389 ismv_muxer_select="mov_muxer"
2390 matroska_audio_muxer_select="matroska_muxer"
2391 matroska_demuxer_select="iso_media riffdec"
2392 matroska_demuxer_suggest="bzlib lzo zlib"
2393 matroska_muxer_select="iso_media riffenc"
2394 mmf_muxer_select="riffenc"
2395 mov_demuxer_select="iso_media riffdec"
2396 mov_demuxer_suggest="zlib"
2397 mov_muxer_select="iso_media riffenc rtpenc_chain"
2398 mp3_demuxer_select="mpegaudio_parser"
2399 mp3_muxer_select="mpegaudioheader"
2400 mp4_muxer_select="mov_muxer"
2401 mpegts_demuxer_select="iso_media"
2402 mpegts_muxer_select="adts_muxer latm_muxer"
2403 mpegtsraw_demuxer_select="mpegts_demuxer"
2404 mxf_d10_muxer_select="mxf_muxer"
2405 nut_muxer_select="riffenc"
2406 nuv_demuxer_select="riffdec"
2407 oga_muxer_select="ogg_muxer"
2408 ogg_demuxer_select="dirac_parse"
2409 opus_muxer_select="ogg_muxer"
2410 psp_muxer_select="mov_muxer"
2411 rtp_demuxer_select="sdp_demuxer"
2412 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2413 rtsp_demuxer_select="http_protocol rtpdec"
2414 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2415 sap_demuxer_select="sdp_demuxer"
2416 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2417 sdp_demuxer_select="rtpdec"
2418 smoothstreaming_muxer_select="ismv_muxer"
2419 spdif_demuxer_select="adts_header"
2420 spdif_muxer_select="adts_header"
2421 spx_muxer_select="ogg_muxer"
2422 swf_demuxer_suggest="zlib"
2423 tak_demuxer_select="tak_parser"
2424 tg2_muxer_select="mov_muxer"
2425 tgp_muxer_select="mov_muxer"
2426 w64_demuxer_select="wav_demuxer"
2427 wav_demuxer_select="riffdec"
2428 wav_muxer_select="riffenc"
2429 webm_muxer_select="iso_media riffenc"
2430 wtv_demuxer_select="mpegts_demuxer riffdec"
2431 xmv_demuxer_select="riffdec"
2432 xwma_demuxer_select="riffdec"
2433
2434 # indevs / outdevs
2435 alsa_indev_deps="alsa"
2436 alsa_outdev_deps="alsa"
2437 avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
2438 avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
2439 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2440 dv1394_indev_deps="dv1394"
2441 dv1394_indev_select="dv_demuxer"
2442 fbdev_indev_deps="linux_fb_h"
2443 jack_indev_deps="libjack"
2444 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2445 libcdio_indev_deps="libcdio"
2446 libdc1394_indev_deps="libdc1394"
2447 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2448 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2449 pulse_indev_deps="libpulse"
2450 sndio_indev_deps="sndio"
2451 sndio_outdev_deps="sndio"
2452 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2453 vfwcap_indev_deps="vfw32 vfwcap_defines"
2454 xcbgrab_indev_deps="libxcb libxcb_shape"
2455 xcbgrab_indev_suggest="libxcb_shm libxcb_xfixes"
2456
2457 # protocols
2458 ffrtmpcrypt_protocol_conflict="librtmp_protocol"
2459 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2460 ffrtmpcrypt_protocol_select="tcp_protocol"
2461 ffrtmphttp_protocol_conflict="librtmp_protocol"
2462 ffrtmphttp_protocol_select="http_protocol"
2463 gopher_protocol_select="network"
2464 http_protocol_select="tcp_protocol"
2465 http_protocol_suggest="zlib"
2466 httpproxy_protocol_select="tcp_protocol"
2467 httpproxy_protocol_suggest="zlib"
2468 https_protocol_select="tls_protocol"
2469 https_protocol_suggest="zlib"
2470 icecast_protocol_select="http_protocol"
2471 librtmp_protocol_deps="librtmp"
2472 librtmpe_protocol_deps="librtmp"
2473 librtmps_protocol_deps="librtmp"
2474 librtmpt_protocol_deps="librtmp"
2475 librtmpte_protocol_deps="librtmp"
2476 mmsh_protocol_select="http_protocol"
2477 mmst_protocol_select="network"
2478 rtmp_protocol_conflict="librtmp_protocol"
2479 rtmp_protocol_select="tcp_protocol"
2480 rtmp_protocol_suggest="zlib"
2481 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2482 rtmpe_protocol_suggest="zlib"
2483 rtmps_protocol_conflict="librtmp_protocol"
2484 rtmps_protocol_select="tls_protocol"
2485 rtmps_protocol_suggest="zlib"
2486 rtmpt_protocol_select="ffrtmphttp_protocol"
2487 rtmpt_protocol_suggest="zlib"
2488 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2489 rtmpte_protocol_suggest="zlib"
2490 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2491 rtmpts_protocol_suggest="zlib"
2492 rtp_protocol_select="udp_protocol"
2493 sctp_protocol_deps="struct_sctp_event_subscribe"
2494 sctp_protocol_select="network"
2495 srtp_protocol_select="rtp_protocol srtp"
2496 tcp_protocol_select="network"
2497 tls_protocol_deps_any="gnutls openssl"
2498 tls_protocol_select="tcp_protocol"
2499 udp_protocol_select="network"
2500 unix_protocol_deps="sys_un_h"
2501 unix_protocol_select="network"
2502
2503 # filters
2504 asyncts_filter_deps="avresample"
2505 blackframe_filter_deps="gpl"
2506 boxblur_filter_deps="gpl"
2507 bs2b_filter_deps="libbs2b"
2508 cropdetect_filter_deps="gpl"
2509 deinterlace_qsv_filter_deps="libmfx"
2510 deinterlace_vaapi_filter_deps="vaapi"
2511 delogo_filter_deps="gpl"
2512 drawtext_filter_deps="libfreetype"
2513 drawtext_filter_suggest="libfontconfig"
2514 frei0r_filter_deps="frei0r libdl"
2515 frei0r_src_filter_deps="frei0r libdl"
2516 hdcd_filter_deps="libhdcd"
2517 hqdn3d_filter_deps="gpl"
2518 interlace_filter_deps="gpl"
2519 movie_filter_deps="avcodec avformat"
2520 ocv_filter_deps="libopencv"
2521 resample_filter_deps="avresample"
2522 scale_filter_deps="swscale"
2523 scale_qsv_filter_deps="libmfx"
2524 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2525
2526 # examples
2527 decode_audio_example_deps="avcodec avutil"
2528 decode_video_example_deps="avcodec avutil"
2529 encode_audio_example_deps="avcodec avutil"
2530 encode_video_example_deps="avcodec avutil"
2531 filter_audio_example_deps="avfilter avutil"
2532 metadata_example_deps="avformat avutil"
2533 output_example_deps="avcodec avformat avresample avutil swscale"
2534 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2535 transcode_aac_example_deps="avcodec avformat avresample"
2536
2537 # EXTRALIBS_LIST
2538 cpu_init_extralibs="pthreads_extralibs"
2539 cws2fws_extralibs="zlib_extralibs"
2540
2541 # libraries, in linking order
2542 avcodec_deps="avutil"
2543 avcodec_select="null_bsf"
2544 avdevice_deps="avformat avcodec avutil"
2545 avfilter_deps="avutil"
2546 avformat_deps="avcodec avutil"
2547 avformat_suggest="network"
2548 avresample_deps="avutil"
2549 swscale_deps="avutil"
2550
2551 avcodec_extralibs="pthreads_extralibs libm_extralibs"
2552 avdevice_extralibs="libm_extralibs"
2553 avformat_extralibs="libm_extralibs"
2554 avfilter_extralibs="pthreads_extralibs libm_extralibs"
2555 avresample_extralibs="libm_extralibs"
2556 avutil_extralibs="clock_gettime_extralibs cuda_extralibs libm_extralibs libmfx_extralibs nanosleep_extralibs pthreads_extralibs user32_extralibs vaapi_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs wincrypt_extralibs"
2557 swscale_extralibs="libm_extralibs"
2558
2559 # programs
2560 avconv_deps="avcodec avfilter avformat avresample swscale"
2561 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2562                fps_filter null_filter resample_filter scale_filter
2563                trim_filter"
2564 avconv_suggest="psapi shell32"
2565 avplay_deps="avcodec avfilter avformat avresample sdl"
2566 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2567 avplay_suggest="shell32"
2568 avprobe_deps="avcodec avformat"
2569 avprobe_suggest="shell32"
2570
2571 # documentation
2572 pod2man_deps="doc"
2573 texi2html_deps="doc"
2574
2575 # default parameters
2576
2577 logfile="avbuild/config.log"
2578
2579 # installation paths
2580 prefix_default="/usr/local"
2581 bindir_default='${prefix}/bin'
2582 datadir_default='${prefix}/share/avconv'
2583 docdir_default='${prefix}/share/doc/libav'
2584 incdir_default='${prefix}/include'
2585 libdir_default='${prefix}/lib'
2586 mandir_default='${prefix}/share/man'
2587 shlibdir_default="$libdir_default"
2588
2589 # toolchain
2590 ar_default="ar"
2591 cc_default="gcc"
2592 host_cc_default="gcc"
2593 x86asmexe_default="nasm"
2594 ln_s="ln -s -f"
2595 nm_default="nm -g"
2596 pkg_config_default=pkg-config
2597 ranlib="ranlib"
2598 strip="strip"
2599 version_script='--version-script'
2600
2601 # machine
2602 arch_default=$(uname -m)
2603 cpu="generic"
2604 intrinsics="none"
2605
2606 # OS
2607 target_os_default=$(tolower $(uname -s))
2608 host_os=$target_os_default
2609
2610 # configurable options
2611 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2612
2613 enable asm
2614 enable debug
2615 enable doc
2616 enable faan faandct faanidct
2617 enable optimizations
2618 enable safe_bitstream_reader
2619 enable static
2620 enable swscale_alpha
2621 enable valgrind_backtrace
2622
2623 # By default, enable only those hwaccels that have no external dependencies.
2624 enable d3d11va dxva2 vda vdpau
2625
2626 # internal components are enabled by default
2627 enable $EXTRALIBS_LIST
2628
2629 # Avoid external, non-system, libraries getting enabled by dependency resolution
2630 disable $EXTERNAL_LIBRARY_LIST
2631
2632 # build settings
2633 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2634 LIBPREF="lib"
2635 LIBSUF=".a"
2636 LIBNAME='$(LIBPREF)$(NAME)$(LIBSUF)'
2637 SLIBPREF="lib"
2638 SLIBSUF=".so"
2639 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
2640 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2641 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2642 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2643 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2644 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2645 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2646
2647 asflags_filter=echo
2648 cflags_filter=echo
2649 ldflags_filter=echo
2650
2651 AS_C='-c'
2652 AS_O='-o $@'
2653 CC_C='-c'
2654 CC_E='-E -o $@'
2655 CC_O='-o $@'
2656 OBJCC_C='-c'
2657 OBJCC_E='-E -o $@'
2658 OBJCC_O='-o $@'
2659 X86ASM_O='-o $@'
2660 LD_O='-o $@'
2661 LD_LIB='-l%'
2662 LD_PATH='-L'
2663 HOSTCC_C='-c'
2664 HOSTCC_E='-E -o $@'
2665 HOSTCC_O='-o $@'
2666 HOSTLD_O='-o $@'
2667
2668 host_extralibs='-lm'
2669 host_cflags_filter=echo
2670 host_ldflags_filter=echo
2671
2672 target_path='$(CURDIR)'
2673
2674 # since the object filename is not given with the -MM flag, the compiler
2675 # is only able to print the basename, and we must add the path ourselves
2676 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2677 DEPFLAGS='-MM'
2678
2679 mkdir -p avbuild
2680
2681 # find source path
2682 if test -f configure; then
2683     source_path=.
2684 else
2685     source_path=$(cd $(dirname "$0"); pwd)
2686     echo "$source_path" | grep -q '[[:blank:]]' &&
2687         die "Out of tree builds are impossible with whitespace in source path."
2688     test -e "$source_path/config.h" &&
2689         die "Out of tree builds are impossible with config.h in source dir."
2690 fi
2691
2692 for v in "$@"; do
2693     r=${v#*=}
2694     l=${v%"$r"}
2695     r=$(sh_quote "$r")
2696     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2697 done
2698
2699 find_things(){
2700     thing=$1
2701     pattern=$2
2702     file=$source_path/$3
2703     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2704 }
2705
2706 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2707 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2708 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2709 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2710 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2711 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2712 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2713 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2714 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2715
2716 find_things_extern(){
2717     thing=$1
2718     pattern=$2
2719     file=$source_path/$3
2720     sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2721 }
2722
2723 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2724 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2725
2726 AVCODEC_COMPONENTS_LIST="
2727     $BSF_LIST
2728     $DECODER_LIST
2729     $ENCODER_LIST
2730     $HWACCEL_LIST
2731     $PARSER_LIST
2732 "
2733
2734 AVDEVICE_COMPONENTS_LIST="
2735     $INDEV_LIST
2736     $OUTDEV_LIST
2737 "
2738
2739 AVFILTER_COMPONENTS_LIST="
2740     $FILTER_LIST
2741 "
2742
2743 AVFORMAT_COMPONENTS_LIST="
2744     $DEMUXER_LIST
2745     $MUXER_LIST
2746     $PROTOCOL_LIST
2747 "
2748
2749 ALL_COMPONENTS="
2750     $AVCODEC_COMPONENTS_LIST
2751     $AVDEVICE_COMPONENTS_LIST
2752     $AVFILTER_COMPONENTS_LIST
2753     $AVFORMAT_COMPONENTS_LIST
2754 "
2755
2756 for n in $COMPONENT_LIST; do
2757     v=$(toupper ${n%s})_LIST
2758     eval enable \$$v
2759     eval ${n}_if_any="\$$v"
2760 done
2761
2762 enable $ARCH_EXT_LIST
2763
2764 die_unknown(){
2765     echo "Unknown option \"$1\"."
2766     echo "See $0 --help for available options."
2767     exit 1
2768 }
2769
2770 print_3_columns() {
2771     printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2772 }
2773
2774 show_list() {
2775     suffix=_$1
2776     shift
2777     echo $* | sed s/$suffix//g | print_3_columns
2778     exit 0
2779 }
2780
2781 rand_list(){
2782     IFS=', '
2783     set -- $*
2784     unset IFS
2785     for thing; do
2786         comp=${thing%:*}
2787         prob=${thing#$comp}
2788         prob=${prob#:}
2789         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2790         echo "prob ${prob:-0.5}"
2791         printf '%s\n' $comp
2792     done
2793 }
2794
2795 do_random(){
2796     action=$1
2797     shift
2798     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2799     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2800 }
2801
2802 for opt do
2803     optval="${opt#*=}"
2804     case "$opt" in
2805         --extra-ldflags=*)
2806             add_ldflags $optval
2807         ;;
2808         --extra-ldexeflags=*)
2809             add_ldexeflags $optval
2810         ;;
2811         --extra-ldsoflags=*)
2812             add_ldsoflags $optval
2813         ;;
2814         --extra-libs=*)
2815             add_extralibs $optval
2816         ;;
2817         --disable-devices)
2818             disable $INDEV_LIST $OUTDEV_LIST
2819         ;;
2820         --enable-debug=*)
2821             debuglevel="$optval"
2822         ;;
2823         --disable-programs)
2824             disable $PROGRAM_LIST
2825         ;;
2826         --disable-everything)
2827             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2828         ;;
2829         --disable-all)
2830             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2831             disable $LIBRARY_LIST $PROGRAM_LIST doc
2832         ;;
2833         --enable-random|--disable-random)
2834             action=${opt%%-random}
2835             do_random ${action#--} $COMPONENT_LIST
2836         ;;
2837         --enable-random=*|--disable-random=*)
2838             action=${opt%%-random=*}
2839             do_random ${action#--} $optval
2840         ;;
2841         --enable-*=*|--disable-*=*)
2842             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2843             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2844             eval list=\$$(toupper $thing)_LIST
2845             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2846             $action $(filter "$name" $list)
2847         ;;
2848         --enable-avserver|--disable-avserver*)
2849             warn "avserver has been removed, the ${opt} option is only"\
2850                  "provided for compatibility and will be removed in the future"
2851         ;;
2852         --enable-yasm|--disable-yasm)
2853             warn "The ${opt} option is only provided for compatibility and will be\n"\
2854                  "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
2855             test $opt = --enable-yasm && x86asm=yes || x86asm=no
2856         ;;
2857         --enable-?*|--disable-?*)
2858             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2859             if is_in $option $COMPONENT_LIST; then
2860                 test $action = disable && action=unset
2861                 eval $action \$$(toupper ${option%s})_LIST
2862             elif is_in $option $CMDLINE_SELECT; then
2863                 $action $option
2864             else
2865                 die_unknown $opt
2866             fi
2867         ;;
2868         --list-*)
2869             NAME="${opt#--list-}"
2870             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2871             NAME=${NAME%s}
2872             eval show_list $NAME \$$(toupper $NAME)_LIST
2873         ;;
2874         --help|-h) show_help
2875         ;;
2876         --quiet|-q) quiet=yes
2877         ;;
2878         *)
2879             optname="${opt%%=*}"
2880             optname="${optname#--}"
2881             optname=$(echo "$optname" | sed 's/-/_/g')
2882             if is_in $optname $CMDLINE_SET; then
2883                 eval $optname='$optval'
2884             elif is_in $optname $CMDLINE_APPEND; then
2885                 append $optname "$optval"
2886             else
2887                 die_unknown $opt
2888             fi
2889         ;;
2890     esac
2891 done
2892
2893 for e in $env; do
2894     eval "export $e"
2895 done
2896
2897 disabled logging && logfile=/dev/null
2898
2899 # Die early if licensing-related configure options are incompatible.
2900 die_license_disabled() {
2901     enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2902 }
2903
2904 map "die_license_disabled gpl"      $EXTERNAL_LIBRARY_GPL_LIST
2905 map "die_license_disabled nonfree"  $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2906 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2907
2908 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2909
2910 enabled_all gnutls openssl &&
2911     die "GnuTLS and OpenSSL must not be enabled at the same time."
2912
2913 # Disable all the library-specific components if the library itself
2914 # is disabled, see AVCODEC_LIST and following _LIST variables.
2915
2916 disable_components(){
2917     disabled ${1} && disable $(
2918         eval components="\$$(toupper ${1})_COMPONENTS"
2919         map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2920     )
2921 }
2922
2923 map 'disable_components $v' $LIBRARY_LIST
2924
2925 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2926 set >> $logfile
2927
2928 case "$toolchain" in
2929     *-asan)
2930         cc_default="${toolchain%-asan}"
2931         add_cflags  -fsanitize=address
2932         add_ldflags -fsanitize=address
2933     ;;
2934     *-msan)
2935         cc_default="${toolchain%-msan}"
2936         add_cflags  -fsanitize=memory -fsanitize-memory-track-origins
2937         add_ldflags -fsanitize=memory
2938     ;;
2939     *-tsan)
2940         cc_default="${toolchain%-tsan}"
2941         add_cflags  -fsanitize=thread -fPIE
2942         add_ldflags -fsanitize=thread -pie
2943         case "$toolchain" in
2944             gcc-tsan)
2945                 add_cflags  -fPIC
2946                 add_ldflags -fPIC
2947                 ;;
2948         esac
2949     ;;
2950     *-usan)
2951         cc_default="${toolchain%-usan}"
2952         add_cflags  -fsanitize=undefined
2953         add_ldflags -fsanitize=undefined
2954         case "$toolchain" in
2955             clang-usan)
2956                 add_cflags -O1
2957                 ;;
2958         esac
2959     ;;
2960     valgrind-*)
2961         target_exec_default="valgrind"
2962         case "$toolchain" in
2963             valgrind-massif)
2964                 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2965                 ;;
2966             valgrind-memcheck)
2967                 target_exec_args="--track-origins=yes --leak-check=full"
2968                 ;;
2969         esac
2970     ;;
2971     msvc)
2972         # Check whether the current MSVC version needs the C99 converter.
2973         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2974         # support enough of C99 to build libav. Default to the new
2975         # behaviour if the regexp was unable to match anything, since this
2976         # successfully parses the version number of existing supported
2977         # versions that require the converter (MSVC 2010 and 2012).
2978         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2979         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2980             cc_default="cl"
2981         else
2982             cc_default="c99wrap cl"
2983         fi
2984         ld_default="$source_path/compat/windows/mslink"
2985         nm_default="dumpbin -symbols"
2986         ar_default="lib"
2987         case "$arch" in
2988         arm*)
2989             as_default="armasm"
2990             ;;
2991         esac
2992         target_os_default="win32"
2993         # Use a relative path for TMPDIR. This makes sure all the
2994         # ffconf temp files are written with a relative path, avoiding
2995         # issues with msys/win32 path conversion for MSVC parameters
2996         # such as -Fo<file> or -out:<file>.
2997         TMPDIR=.
2998     ;;
2999     icl)
3000         cc_default="icl"
3001         ld_default="xilink"
3002         nm_default="dumpbin -symbols"
3003         ar_default="xilib"
3004         target_os_default="win32"
3005         TMPDIR=.
3006     ;;
3007     gcov)
3008         add_cflags  -fprofile-arcs -ftest-coverage
3009         add_ldflags -fprofile-arcs -ftest-coverage
3010     ;;
3011     llvm-cov)
3012         add_cflags -fprofile-arcs -ftest-coverage
3013         add_ldflags --coverage
3014     ;;
3015     hardened)
3016         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3017         add_cflags   -fno-strict-overflow -fstack-protector-all
3018         add_ldflags  -Wl,-z,relro -Wl,-z,now
3019     ;;
3020     ?*)
3021         die "Unknown toolchain $toolchain"
3022     ;;
3023 esac
3024
3025 test -n "$cross_prefix" && enable cross_compile
3026
3027 if enabled cross_compile; then
3028     test -n "$arch" && test -n "$target_os" ||
3029         die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
3030 fi
3031
3032 ar_default="${cross_prefix}${ar_default}"
3033 cc_default="${cross_prefix}${cc_default}"
3034 objcc_default="${cross_prefix}${objcc_default}"
3035 x86asmexe_default="${cross_prefix}${x86asmexe_default}"
3036 nm_default="${cross_prefix}${nm_default}"
3037 pkg_config_default="${cross_prefix}${pkg_config_default}"
3038 ranlib="${cross_prefix}${ranlib}"
3039 strip="${cross_prefix}${strip}"
3040
3041 sysinclude_default="${sysroot}/usr/include"
3042
3043 set_default arch cc pkg_config sysinclude target_exec target_os x86asmexe
3044 enabled cross_compile || host_cc_default=$cc
3045 set_default host_cc
3046
3047 if ! $pkg_config --version >/dev/null 2>&1; then
3048     warn "$pkg_config not found, library detection may fail."
3049     pkg_config=false
3050 fi
3051
3052 exesuf() {
3053     case $1 in
3054         mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3055     esac
3056 }
3057
3058 EXESUF=$(exesuf $target_os)
3059 HOSTEXESUF=$(exesuf $host_os)
3060
3061 # set temporary file name
3062 : ${TMPDIR:=$TEMPDIR}
3063 : ${TMPDIR:=$TMP}
3064 : ${TMPDIR:=/tmp}
3065
3066 if ! check_cmd mktemp -u XXXXXX; then
3067     # simple replacement for missing mktemp
3068     # NOT SAFE FOR GENERAL USE
3069     mktemp(){
3070         tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3071         echo "$tmpname"
3072         mkdir "$tmpname"
3073     }
3074 fi
3075
3076 AVTMPDIR=$(mktemp -d "${TMPDIR}/avconf.XXXXXXXX" 2> /dev/null) ||
3077     die "Unable to create temporary directory in $TMPDIR."
3078
3079 tmpfile(){
3080     tmp="${AVTMPDIR}/test"$2
3081     (set -C; exec > $tmp) 2> /dev/null ||
3082         die "Unable to create temporary file in $AVTMPDIR."
3083     eval $1=$tmp
3084 }
3085
3086 trap 'rm -rf -- "$AVTMPDIR"' EXIT
3087 trap 'exit 2' INT
3088
3089 tmpfile TMPASM .asm
3090 tmpfile TMPC   .c
3091 tmpfile TMPE   $EXESUF
3092 tmpfile TMPH   .h
3093 tmpfile TMPO   .o
3094 tmpfile TMPS   .S
3095 tmpfile TMPSH  .sh
3096 tmpfile TMPV   .ver
3097
3098 unset -f mktemp
3099
3100 chmod +x $TMPE
3101
3102 # make sure we can execute files in $TMPDIR
3103 cat > $TMPSH 2>> $logfile <<EOF
3104 #! /bin/sh
3105 EOF
3106 chmod +x $TMPSH >> $logfile 2>&1
3107 if ! $TMPSH >> $logfile 2>&1; then
3108     cat <<EOF
3109 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3110 variable to another directory and make sure that it is not mounted noexec.
3111 EOF
3112     die "Sanity test failed."
3113 fi
3114
3115 armasm_flags(){
3116     for flag; do
3117         case $flag in
3118             # Filter out MSVC cl.exe options from cflags that shouldn't
3119             # be passed to gas-preprocessor
3120             -M[TD]*)                                            ;;
3121             *)                  echo $flag                      ;;
3122         esac
3123    done
3124 }
3125
3126 ccc_flags(){
3127     for flag; do
3128         case $flag in
3129             -std=c99)           echo -c99                       ;;
3130             -mcpu=*)            echo -arch ${flag#*=}           ;;
3131             -mieee)             echo -ieee                      ;;
3132             -O*|-fast)          echo $flag                      ;;
3133             -fno-math-errno)    echo -assume nomath_errno       ;;
3134             -g)                 echo -g3                        ;;
3135             -Wall)              echo -msg_enable level2         ;;
3136             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3137             -Wl,*)              echo $flag                      ;;
3138             -f*|-W*)                                            ;;
3139             *)                  echo $flag                      ;;
3140         esac
3141    done
3142 }
3143
3144 cparser_flags(){
3145     for flag; do
3146         case $flag in
3147             -Wno-switch)             echo -Wno-switch-enum ;;
3148             -Wno-format-zero-length) ;;
3149             -Wdisabled-optimization) ;;
3150             -Wno-pointer-sign)       echo -Wno-other ;;
3151             *)                       echo $flag ;;
3152         esac
3153     done
3154 }
3155
3156 msvc_common_flags(){
3157     for flag; do
3158         case $flag in
3159             # In addition to specifying certain flags under the compiler
3160             # specific filters, they must be specified here as well or else the
3161             # generic catch all at the bottom will print the original flag.
3162             -Wall)                ;;
3163             -Wextra)              ;;
3164             -std=c99)             ;;
3165             # Common flags
3166             -fomit-frame-pointer) ;;
3167             -g)                   echo -Z7 ;;
3168             -fno-math-errno)      ;;
3169             -fno-common)          ;;
3170             -fno-signed-zeros)    ;;
3171             -fPIC)                ;;
3172             -mthumb)              ;;
3173             -march=*)             ;;
3174             -lz)                  echo zlib.lib ;;
3175             -lx264)               echo libx264.lib ;;
3176             -l*)                  echo ${flag#-l}.lib ;;
3177             -L*)                  echo -libpath:${flag#-L} ;;
3178             *)                    echo $flag ;;
3179         esac
3180     done
3181 }
3182
3183 msvc_flags(){
3184     msvc_common_flags "$@"
3185     for flag; do
3186         case $flag in
3187             -Wall)                echo -W3 -wd4018 -wd4146 -wd4244 -wd4305     \
3188                                        -wd4554 ;;
3189             -Wextra)              echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3190                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3191                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3192                                        -wd4273 -wd4554 -wd4701 -wd4703 ;;
3193         esac
3194     done
3195 }
3196
3197 icl_flags(){
3198     msvc_common_flags "$@"
3199     for flag; do
3200         case $flag in
3201             # Despite what Intel's documentation says -Wall, which is supported
3202             # on Windows, does enable remarks so disable them here.
3203             -Wall)                echo $flag -Qdiag-disable:remark ;;
3204             -std=c99)             echo -Qstd=c99 ;;
3205         esac
3206     done
3207 }
3208
3209 pgi_flags(){
3210     for flag; do
3211         case $flag in
3212             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3213             -fomit-frame-pointer) echo -Mnoframe ;;
3214             -g)                   echo -gopt ;;
3215             *)                    echo $flag ;;
3216         esac
3217     done
3218 }
3219
3220 suncc_flags(){
3221     for flag; do
3222         case $flag in
3223             -march=*|-mcpu=*)
3224                 case "${flag#*=}" in
3225                     native)                   echo -xtarget=native       ;;
3226                     v9|niagara)               echo -xarch=sparc          ;;
3227                     ultrasparc)               echo -xarch=sparcvis       ;;
3228                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3229                     i586|pentium)             echo -xchip=pentium        ;;
3230                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3231                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3232                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3233                     pentium4*)          echo -xtarget=pentium4           ;;
3234                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3235                     *-sse3)             echo -xarch=sse3                 ;;
3236                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3237                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
3238                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
3239                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
3240                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3241                     k8|opteron|athlon64|athlon-fx)
3242                                                echo -xarch=sse2a         ;;
3243                     athlon*)                   echo -xarch=pentium_proa  ;;
3244                 esac
3245                 ;;
3246             -std=c99)             echo -xc99              ;;
3247             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3248             -fPIC)                echo -KPIC -xcode=pic32 ;;
3249             -W*,*)                echo $flag              ;;
3250             -f*-*|-W*|-mimpure-text)                      ;;
3251             -shared)              echo -G                 ;;
3252             *)                    echo $flag              ;;
3253         esac
3254     done
3255 }
3256
3257 tms470_flags(){
3258     for flag; do
3259         case $flag in
3260             -march=*|-mcpu=*)
3261                 case "${flag#*=}" in
3262                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3263                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3264                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3265                     armv6*|arm11*)          echo -mv=6   ;;
3266                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3267                                             echo -mv=5e  ;;
3268                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3269                 esac
3270                 ;;
3271             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3272             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3273             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3274             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3275             -msoft-float)   echo --float_support=vfplib       ;;
3276             -O[0-3]|-mf=*)  echo $flag                        ;;
3277             -g)             echo -g -mn                       ;;
3278             -pds=*)         echo $flag                        ;;
3279             -D*|-I*)        echo $flag                        ;;
3280             --gcc|--abi=*)  echo $flag                        ;;
3281             -me)            echo $flag                        ;;
3282         esac
3283     done
3284 }
3285
3286 probe_cc(){
3287     pfx=$1
3288     _cc=$2
3289
3290     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3291     unset _ld_o _ldflags _ld_lib _ld_path
3292     unset _depflags _DEPCMD _DEPFLAGS
3293     _flags_filter=echo
3294
3295     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3296         _type=llvm_gcc
3297         gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3298         _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3299         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3300         _cflags_speed='-O3'
3301         _cflags_size='-Os'
3302     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3303         _type=gcc
3304         gcc_version=$($_cc --version | head -n1)
3305         gcc_basever=$($_cc -dumpversion)
3306         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3307         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3308         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3309         if ! $_cc -dumpversion | grep -q '^2\.'; then
3310             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3311         fi
3312         _cflags_speed='-O3'
3313         _cflags_size='-Os'
3314     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3315         _type=icc
3316         _ident=$($_cc --version | head -n1)
3317         _depflags='-MMD'
3318         _cflags_speed='-O3'
3319         _cflags_size='-Os'
3320         _cflags_noopt='-O1'
3321     elif $_cc -v 2>&1 | grep -q xlc; then
3322         _type=xlc
3323         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3324         _cflags_speed='-O5'
3325         _cflags_size='-O5 -qcompact'
3326     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3327         _type=ccc
3328         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3329         _DEPFLAGS='-M'
3330         _cflags_speed='-fast'
3331         _cflags_size='-O1'
3332         _flags_filter=ccc_flags
3333     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3334         test -d "$sysroot" || die "No valid sysroot specified."
3335         _type=armcc
3336         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3337         armcc_conf="$PWD/armcc.conf"
3338         $_cc --arm_linux_configure                 \
3339              --arm_linux_config_file="$armcc_conf" \
3340              --configure_sysroot="$sysroot"        \
3341              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3342              die "Error creating armcc configuration file."
3343         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3344         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3345         as_default="${cross_prefix}gcc"
3346         _depflags='-MMD'
3347         _cflags_speed='-O3'
3348         _cflags_size='-Os'
3349     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3350         _type=tms470
3351         _ident=$($_cc -version | head -n1 | tr -s ' ')
3352         _flags='--gcc --abi=eabi -me'
3353         _cc_e='-ppl -fe=$@'
3354         _cc_o='-fe=$@'
3355         _depflags='-ppa -ppd=$(@:.o=.d)'
3356         _cflags_speed='-O3 -mf=5'
3357         _cflags_size='-O3 -mf=2'
3358         _flags_filter=tms470_flags
3359     elif $_cc -v 2>&1 | grep -q clang; then
3360         _type=clang
3361         _ident=$($_cc --version 2>/dev/null | head -n1)
3362         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3363         _cflags_speed='-O3'
3364         _cflags_size='-Os'
3365     elif $_cc -V 2>&1 | grep -q Sun; then
3366         _type=suncc
3367         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3368         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3369         _DEPFLAGS='-xM1 -xc99'
3370         _ldflags='-std=c99'
3371         _cflags_speed='-O5'
3372         _cflags_size='-O5 -xspace'
3373         _flags_filter=suncc_flags
3374     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3375         _type=pathscale
3376         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3377         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3378         _cflags_speed='-O2'
3379         _cflags_size='-Os'
3380         _flags_filter='filter_out -Wdisabled-optimization'
3381     elif $_cc -v 2>&1 | grep -q Open64; then
3382         _type=open64
3383         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3384         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3385         _cflags_speed='-O2'
3386         _cflags_size='-Os'
3387         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3388     elif $_cc -V 2>&1 | grep -q Portland; then
3389         _type=pgi
3390         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3391         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3392         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3393         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3394         _cflags_noopt="-O1"
3395         _flags_filter=pgi_flags
3396     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3397         _type=armasm
3398         _ident=$($_cc | head -n1)
3399         # 4509: "This form of conditional instruction is deprecated"
3400         _flags="-nologo -ignore 4509"
3401         _flags_filter=armasm_flags
3402     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3403         _type=msvc
3404         _ident=$($_cc 2>&1 | head -n1)
3405         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3406         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3407         _cflags_speed="-O2"
3408         _cflags_size="-O1"
3409         _cflags_noopt="-O1"
3410         if $_cc -nologo- 2>&1 | grep -q Linker; then
3411             _ld_o='-out:$@'
3412         else
3413             _ld_o='-Fe$@'
3414         fi
3415         _cc_o='-Fo$@'
3416         _cc_e='-P -Fi$@'
3417         _flags_filter=msvc_flags
3418         _ld_lib='lib%.a'
3419         _ld_path='-libpath:'
3420         _flags='-nologo'
3421     elif $_cc 2>&1 | grep -q Intel; then
3422         _type=icl
3423         _ident=$($_cc 2>&1 | head -n1)
3424         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3425         # Not only is O3 broken on 13.x+ but it is slower on all previous
3426         # versions (tested) as well.
3427         _cflags_speed="-O2"
3428         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3429         if $_cc 2>&1 | grep -q Linker; then
3430             _ld_o='-out:$@'
3431         else
3432             _ld_o='-Fe$@'
3433         fi
3434         _cc_o='-Fo$@'
3435         _cc_e='-P'
3436         _flags_filter=icl_flags
3437         _ld_lib='lib%.a'
3438         _ld_path='-libpath:'
3439         # -Qdiag-error to make icl error when seeing certain unknown arguments
3440         _flags='-nologo -Qdiag-error:4044,10157'
3441         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3442         # with MSVC which enables it by default.
3443         _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3444     elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3445         # lld can emulate multiple different linkers; in ms link.exe mode,
3446         # the -? parameter gives the help output which contains an identifyable
3447         # string, while it gives an error in other modes.
3448         _type=lld-link
3449         # The link.exe mode doesn't have a switch for getting the version,
3450         # but we can force it back to gnu mode and get the version from there.
3451         _ident=$($_cc -flavor gnu --version 2>/dev/null)
3452         _ld_o='-out:$@'
3453         _flags_filter=msvc_flags
3454         _ld_lib='lib%.a'
3455         _ld_path='-libpath:'
3456     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3457         _type=cparser
3458         _ident=$($_cc --version | head -n1)
3459         _depflags='-MMD'
3460         _cflags_speed='-O4'
3461         _cflags_size='-O2'
3462         _flags_filter=cparser_flags
3463     fi
3464
3465     eval ${pfx}_type=\$_type
3466     eval ${pfx}_ident=\$_ident
3467 }
3468
3469 set_ccvars(){
3470     eval ${1}_C=\${_cc_c-\${${1}_C}}
3471     eval ${1}_E=\${_cc_e-\${${1}_E}}
3472     eval ${1}_O=\${_cc_o-\${${1}_O}}
3473
3474     if [ -n "$_depflags" ]; then
3475         eval ${1}_DEPFLAGS=\$_depflags
3476     else
3477         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3478         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3479         eval DEP${1}FLAGS=\$_flags
3480     fi
3481 }
3482
3483 probe_cc cc "$cc"
3484 cflags_filter=$_flags_filter
3485 cflags_speed=$_cflags_speed
3486 cflags_size=$_cflags_size
3487 cflags_noopt=$_cflags_noopt
3488 add_cflags $_flags $_cflags
3489 cc_ldflags=$_ldflags
3490 set_ccvars CC
3491
3492 probe_cc hostcc "$host_cc"
3493 host_cflags_filter=$_flags_filter
3494 host_cflags_speed=$_cflags_speed
3495 add_host_cflags  $_flags $_cflags
3496 set_ccvars HOSTCC
3497
3498 test -n "$cc_type" && enable $cc_type ||
3499     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3500
3501 : ${as_default:=$cc}
3502 : ${objcc_default:=$cc}
3503 : ${dep_cc_default:=$cc}
3504 : ${ld_default:=$cc}
3505 : ${host_ld_default:=$host_cc}
3506 set_default ar as objcc dep_cc ld host_ld
3507
3508 probe_cc as "$as"
3509 asflags_filter=$_flags_filter
3510 add_asflags $_flags $_cflags
3511 set_ccvars AS
3512
3513 probe_cc objcc "$objcc"
3514 objcflags_filter=$_flags_filter
3515 add_objcflags $_flags $_cflags
3516 set_ccvars OBJC
3517
3518 probe_cc ld "$ld"
3519 ldflags_filter=$_flags_filter
3520 add_ldflags $_flags $_ldflags
3521 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3522 LD_O=${_ld_o-$LD_O}
3523 LD_LIB=${_ld_lib-$LD_LIB}
3524 LD_PATH=${_ld_path-$LD_PATH}
3525
3526 probe_cc hostld "$host_ld"
3527 host_ldflags_filter=$_flags_filter
3528 add_host_ldflags $_flags $_ldflags
3529 HOSTLD_O=${_ld_o-$HOSTLD_O}
3530
3531 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3532     probe_cc depcc "$dep_cc"
3533     CCDEP=${_DEPCMD:-$DEPCMD}
3534     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3535     DEPCCFLAGS=$_flags
3536 fi
3537
3538 if $ar 2>&1 | grep -q Microsoft; then
3539     arflags="-nologo"
3540     ar_o='-out:$@'
3541 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3542     arflags="rq"
3543     ar_o='$@'
3544 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3545     arflags='-Xany -r -c'
3546     ar_o='$@'
3547 else
3548     arflags="rc"
3549     ar_o='$@'
3550 fi
3551
3552 add_cflags $extra_cflags
3553 add_objcflags $extra_objcflags
3554 add_asflags $extra_cflags
3555
3556 if test -n "$sysroot"; then
3557     case "$cc_type" in
3558         gcc|llvm_gcc|clang)
3559             add_cppflags --sysroot="$sysroot"
3560             add_ldflags --sysroot="$sysroot"
3561         ;;
3562         tms470)
3563             add_cppflags -I"$sysinclude"
3564             add_ldflags  --sysroot="$sysroot"
3565         ;;
3566     esac
3567 fi
3568
3569 if test "$cpu" = host; then
3570     enabled cross_compile &&
3571         die "--cpu=host makes no sense when cross-compiling."
3572
3573     case "$cc_type" in
3574         gcc|llvm_gcc)
3575             check_native(){
3576                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3577                 sed -n "/cc1.*$1=/{
3578                             s/.*$1=\\([^ ]*\\).*/\\1/
3579                             p
3580                             q
3581                         }" $TMPE
3582             }
3583             cpu=$(check_native -march || check_native -mcpu)
3584         ;;
3585     esac
3586
3587     test "${cpu:-host}" = host &&
3588         die "--cpu=host not supported with compiler $cc"
3589 fi
3590
3591 # Deal with common $arch aliases
3592 case "$arch" in
3593     aarch64|arm64)
3594         arch="aarch64"
3595     ;;
3596     arm*)
3597         arch="arm"
3598     ;;
3599     mips*|IP*)
3600         case "$arch" in
3601         *el)
3602             add_cppflags -EL
3603             add_ldflags -EL
3604         ;;
3605         *eb)
3606             add_cppflags -EB
3607             add_ldflags -EB
3608         ;;
3609         esac
3610         arch="mips"
3611     ;;
3612     parisc*|hppa*)
3613         arch="parisc"
3614     ;;
3615     "Power Macintosh"|ppc*|powerpc*)
3616         arch="ppc"
3617     ;;
3618     s390|s390x)
3619         arch="s390"
3620     ;;
3621     sh4|sh)
3622         arch="sh4"
3623     ;;
3624     sun4u|sparc*)
3625         arch="sparc"
3626     ;;
3627     tilegx|tile-gx)
3628         arch="tilegx"
3629     ;;
3630     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3631         arch="x86"
3632     ;;
3633 esac
3634
3635 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3636 enable $arch
3637
3638 # Add processor-specific flags
3639 if enabled aarch64; then
3640
3641     case $cpu in
3642         armv*)
3643             cpuflags="-march=$cpu"
3644         ;;
3645         *)
3646             cpuflags="-mcpu=$cpu"
3647         ;;
3648     esac
3649
3650 elif enabled alpha; then
3651
3652     cpuflags="-mcpu=$cpu"
3653
3654 elif enabled arm; then
3655
3656     check_arm_arch() {
3657         check_cpp_condition stddef.h \
3658             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3659             $cpuflags
3660     }
3661
3662     probe_arm_arch() {
3663         if   check_arm_arch 4;        then echo armv4
3664         elif check_arm_arch 4T;       then echo armv4t
3665         elif check_arm_arch 5;        then echo armv5
3666         elif check_arm_arch 5E;       then echo armv5e
3667         elif check_arm_arch 5T;       then echo armv5t
3668         elif check_arm_arch 5TE;      then echo armv5te
3669         elif check_arm_arch 5TEJ;     then echo armv5te
3670         elif check_arm_arch 6;        then echo armv6
3671         elif check_arm_arch 6J;       then echo armv6j
3672         elif check_arm_arch 6K;       then echo armv6k
3673         elif check_arm_arch 6Z;       then echo armv6z
3674         elif check_arm_arch 6ZK;      then echo armv6zk
3675         elif check_arm_arch 6T2;      then echo armv6t2
3676         elif check_arm_arch 7;        then echo armv7
3677         elif check_arm_arch 7A  7_A;  then echo armv7-a
3678         elif check_arm_arch 7S;       then echo armv7-a
3679         elif check_arm_arch 7R  7_R;  then echo armv7-r
3680         elif check_arm_arch 7M  7_M;  then echo armv7-m
3681         elif check_arm_arch 7EM 7E_M; then echo armv7-m
3682         elif check_arm_arch 8A  8_A;  then echo armv8-a
3683         fi
3684     }
3685
3686     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3687
3688     case $cpu in
3689         armv*)
3690             cpuflags="-march=$cpu"
3691             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3692         ;;
3693         *)
3694             cpuflags="-mcpu=$cpu"
3695             case $cpu in
3696                 cortex-a*)                               subarch=armv7a  ;;
3697                 cortex-r*)                               subarch=armv7r  ;;
3698                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3699                 arm11*)                                  subarch=armv6   ;;
3700                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3701                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3702                 *)                             subarch=$(probe_arm_arch) ;;
3703             esac
3704         ;;
3705     esac
3706
3707     case "$subarch" in
3708         armv5t*)    enable fast_clz                ;;
3709         armv[6-8]*) enable fast_clz fast_unaligned ;;
3710     esac
3711
3712 elif enabled avr32; then
3713
3714     case $cpu in
3715         ap7[02]0[0-2])
3716             subarch="avr32_ap"
3717             cpuflags="-mpart=$cpu"
3718         ;;
3719         ap)
3720             subarch="avr32_ap"
3721             cpuflags="-march=$cpu"
3722         ;;
3723         uc3[ab]*)
3724             subarch="avr32_uc"
3725             cpuflags="-mcpu=$cpu"
3726         ;;
3727         uc)
3728             subarch="avr32_uc"
3729             cpuflags="-march=$cpu"
3730         ;;
3731     esac
3732
3733 elif enabled bfin; then
3734
3735     cpuflags="-mcpu=$cpu"
3736
3737 elif enabled mips; then
3738
3739     cpuflags="-march=$cpu"
3740
3741 elif enabled ppc; then
3742
3743     disable ldbrx
3744
3745     case $(tolower $cpu) in
3746         601|ppc601|powerpc601)
3747             cpuflags="-mcpu=601"
3748             disable altivec
3749         ;;
3750         603*|ppc603*|powerpc603*)
3751             cpuflags="-mcpu=603"
3752             disable altivec
3753         ;;
3754         604*|ppc604*|powerpc604*)
3755             cpuflags="-mcpu=604"
3756             disable altivec
3757         ;;
3758         g3|75*|ppc75*|powerpc75*)
3759             cpuflags="-mcpu=750"
3760             disable altivec
3761         ;;
3762         g4|745*|ppc745*|powerpc745*)
3763             cpuflags="-mcpu=7450"
3764             disable vsx
3765         ;;
3766         74*|ppc74*|powerpc74*)
3767             cpuflags="-mcpu=7400"
3768             disable vsx
3769         ;;
3770         g5|970|ppc970|powerpc970)
3771             cpuflags="-mcpu=970"
3772             disable vsx
3773         ;;
3774         power[3-6]*)
3775             cpuflags="-mcpu=$cpu"
3776             disable vsx
3777         ;;
3778         power[7-8]*)
3779             cpuflags="-mcpu=$cpu"
3780             enable ldbrx
3781         ;;
3782         cell)
3783             cpuflags="-mcpu=cell"
3784             enable ldbrx
3785             disable vsx
3786         ;;
3787         e500mc)
3788             cpuflags="-mcpu=e500mc"
3789             disable altivec
3790         ;;
3791         e500v2)
3792             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3793             disable altivec
3794             disable dcbzl
3795         ;;
3796         e500)
3797             cpuflags="-mcpu=8540 -mhard-float"
3798             disable altivec
3799             disable dcbzl
3800         ;;
3801     esac
3802
3803 elif enabled sparc; then
3804
3805     case $cpu in
3806         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3807             cpuflags="-mcpu=$cpu"
3808         ;;
3809         ultrasparc*|niagara[234])
3810             cpuflags="-mcpu=$cpu"
3811         ;;
3812     esac
3813
3814 elif enabled x86; then
3815
3816     case $cpu in
3817         i[345]86|pentium)
3818             cpuflags="-march=$cpu"
3819             disable i686
3820             disable mmx
3821         ;;
3822         # targets that do NOT support nopl and conditional mov (cmov)
3823         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3824             cpuflags="-march=$cpu"
3825             disable i686
3826         ;;
3827         # targets that do support nopl and conditional mov (cmov)
3828         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
3829             cpuflags="-march=$cpu"
3830             enable i686
3831             enable fast_cmov
3832         ;;
3833         # targets that do support conditional mov but on which it's slow
3834         pentium4|pentium4m|prescott|nocona)
3835             cpuflags="-march=$cpu"
3836             enable i686
3837             disable fast_cmov
3838         ;;
3839     esac
3840
3841 fi
3842
3843 if [ "$cpu" != generic ]; then
3844     add_cflags  $cpuflags
3845     add_asflags $cpuflags
3846     test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3847 fi
3848
3849 # compiler sanity check
3850 check_exec <<EOF
3851 int main(void){ return 0; }
3852 EOF
3853 if test "$?" != 0; then
3854     echo "$cc is unable to create an executable file."
3855     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3856         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3857         echo "Only do this if you know what cross compiling means."
3858     fi
3859     die "C compiler test failed."
3860 fi
3861
3862 add_cppflags -D_ISOC99_SOURCE
3863
3864 # some compilers silently accept -std=c11, so we also need to check that the
3865 # version macro is defined properly
3866 check_cpp_condition stdlib.h  "__STDC_VERSION__ >= 201112L" -std=c11 &&
3867     add_cflags -std=c11 ||
3868     check_cflags -std=c99
3869
3870 check_cppflags -D_FILE_OFFSET_BITS=64
3871 check_cppflags -D_LARGEFILE_SOURCE
3872
3873 add_host_cppflags -D_ISOC99_SOURCE
3874 check_host_cflags -std=c99
3875 check_host_cflags -Wall
3876 check_host_cflags $host_cflags_speed
3877
3878 check_64bit(){
3879     arch32=$1
3880     arch64=$2
3881     expr=$3
3882     check_code cc "" "int test[2*($expr) - 1]" &&
3883         subarch=$arch64 || subarch=$arch32
3884 }
3885
3886 case "$arch" in
3887     aarch64|alpha|ia64)
3888         spic=$shared
3889     ;;
3890     mips)
3891         check_64bit mips mips64 '_MIPS_SIM > 1'
3892         spic=$shared
3893     ;;
3894     parisc)
3895         check_64bit parisc parisc64 'sizeof(void *) > 4'
3896         spic=$shared
3897     ;;
3898     ppc)
3899         check_64bit ppc ppc64 'sizeof(void *) > 4'
3900         spic=$shared
3901     ;;
3902     s390)
3903         check_64bit s390 s390x 'sizeof(void *) > 4'
3904         spic=$shared
3905     ;;
3906     sparc)
3907         check_64bit sparc sparc64 'sizeof(void *) > 4'
3908         spic=$shared
3909     ;;
3910     x86)
3911         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3912         if test "$subarch" = "x86_64"; then
3913             spic=$shared
3914         fi
3915     ;;
3916 esac
3917
3918 enable $subarch
3919 enabled spic && enable_weak pic
3920
3921 enabled x86_64 && objformat=elf64 || objformat="elf32"
3922
3923 # OS specific
3924 case $target_os in
3925     aix)
3926         SHFLAGS=-shared
3927         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3928         enabled shared && add_ldflags -Wl,-brtl
3929         ;;
3930     android)
3931         disable symver
3932         enable section_data_rel_ro
3933         SLIB_INSTALL_NAME='$(SLIBNAME)'
3934         SLIB_INSTALL_LINKS=
3935         SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3936         ;;
3937     haiku)
3938         prefix_default="/boot/common"
3939         network_extralibs="-lnetwork"
3940         host_extralibs=
3941         ;;
3942     sunos)
3943         SHFLAGS='-shared -Wl,-h,$$(@F)'
3944         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3945         network_extralibs="-lsocket -lnsl"
3946         # When using suncc to build, the Solaris linker will mark
3947         # an executable with each instruction set encountered by
3948         # the Solaris assembler.  As our libraries contain their own
3949         # guards for processor-specific code, instead suppress
3950         # generation of the HWCAPS ELF section on Solaris x86 only.
3951         enabled_all suncc x86 &&
3952             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3953             add_ldflags -Wl,-M,mapfile
3954         nm_default='nm -P -g'
3955         version_script='-M'
3956         VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3957         ;;
3958     netbsd)
3959         disable symver
3960         oss_indev_extralibs="-lossaudio"
3961         oss_outdev_extralibs="-lossaudio"
3962         ;;
3963     openbsd|bitrig)
3964         disable symver
3965         SHFLAGS='-shared'
3966         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3967         SLIB_INSTALL_LINKS=
3968         oss_indev_extralibs="-lossaudio"
3969         oss_outdev_extralibs="-lossaudio"
3970         ;;
3971     dragonfly)
3972         disable symver
3973         ;;
3974     freebsd)
3975         ;;
3976     bsd/os)
3977         add_extralibs -lpoll -lgnugetopt
3978         ;;
3979     darwin)
3980         enabled ppc && add_asflags -force_cpusubtype_ALL
3981         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3982         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3983         add_ldflags -Wl,-dynamic,-search_paths_first
3984         check_cflags -Werror=partial-availability
3985         SLIBSUF=".dylib"
3986         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
3987         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
3988         enabled x86_64 && objformat="macho64" || objformat="macho32"
3989         enabled_any pic shared ||
3990             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3991         check_header dispatch/dispatch.h &&
3992             add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3993         if test -n "$sysroot"; then
3994             is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
3995             is_in -isysroot $ld $LDFLAGS          || check_ldflags  -isysroot $sysroot
3996         fi
3997         ;;
3998     msys*)
3999         die "Native MSYS builds are discouraged, please use the MINGW environment."
4000         ;;
4001     mingw32*|mingw64*)
4002         if test $target_os = "mingw32ce"; then
4003             disable network
4004         else
4005             target_os=mingw32
4006         fi
4007         LIBTARGET=i386
4008         if enabled x86_64; then
4009             LIBTARGET="i386:x86-64"
4010         elif enabled arm; then
4011             LIBTARGET=arm-wince
4012         fi
4013         check_ldflags -Wl,--nxcompat
4014         check_ldflags -Wl,--dynamicbase
4015         shlibdir_default="$bindir_default"
4016         SLIBPREF=""
4017         SLIBSUF=".dll"
4018         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4019         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
4020         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)'
4021         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4022         SLIB_INSTALL_LINKS=
4023         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4024         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4025         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'
4026         enabled x86_64 && objformat="win64" || objformat="win32"
4027         dlltool="${cross_prefix}dlltool"
4028         ranlib=:
4029         enable dos_paths
4030         ;;
4031     win32|win64)
4032         disable symver
4033         if enabled shared; then
4034             # Link to the import library instead of the normal static library
4035             # for shared libs.
4036             LD_LIB='%.lib'
4037             # Cannot build both shared and static libs with MSVC or icl.
4038             disable static
4039         fi
4040         shlibdir_default="$bindir_default"
4041         SLIBPREF=""
4042         SLIBSUF=".dll"
4043         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4044         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
4045         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4046         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4047         SLIB_INSTALL_LINKS=
4048         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4049         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4050         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4051         enabled x86_64 && objformat="win64" || objformat="win32"
4052         ranlib=:
4053         enable dos_paths
4054         ;;
4055     cygwin*)
4056         target_os=cygwin
4057         shlibdir_default="$bindir_default"
4058         SLIBPREF="cyg"
4059         SLIBSUF=".dll"
4060         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4061         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
4062         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4063         SLIB_INSTALL_LINKS=
4064         SLIB_INSTALL_EXTRA_LIB='lib$(NAME).dll.a'
4065         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(NAME).dll.a'
4066         enabled x86_64 && objformat="win64" || objformat="win32"
4067         enable dos_paths
4068         ;;
4069     *-dos|freedos|opendos)
4070         network_extralibs="-lsocket"
4071         objformat="coff"
4072         enable dos_paths
4073         add_cppflags -U__STRICT_ANSI__
4074         ;;
4075     linux)
4076         enable dv1394
4077         enable section_data_rel_ro
4078         ;;
4079     irix*)
4080         target_os=irix
4081         ranlib="echo ignoring ranlib"
4082         ;;
4083     os/2*)
4084         ln_s="cp -f"
4085         objformat="aout"
4086         add_cppflags -D_GNU_SOURCE
4087         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
4088         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4089         LIBSUF="_s.a"
4090         SLIBPREF=""
4091         SLIBSUF=".dll"
4092         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4093         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4094         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4095             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4096             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4097             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4098             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4099         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4100             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
4101         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
4102         enable dos_paths
4103         ;;
4104     gnu/kfreebsd)
4105         add_cppflags -D_BSD_SOURCE
4106         ;;
4107     gnu)
4108         ;;
4109     qnx)
4110         add_cppflags -D_QNX_SOURCE
4111         network_extralibs="-lsocket"
4112         ;;
4113     symbian)
4114         SLIBSUF=".dll"
4115         enable dos_paths
4116         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
4117         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
4118         add_ldflags -Wl,--target1-abs,--no-undefined \
4119                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
4120                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
4121         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
4122                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
4123                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
4124         ;;
4125     osf1)
4126         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
4127         ;;
4128     minix)
4129         ;;
4130     none)
4131         ;;
4132     *)
4133         die "Unknown OS '$target_os'."
4134         ;;
4135 esac
4136
4137 # determine libc flavour
4138
4139 probe_libc(){
4140     pfx=$1
4141     pfx_no_=${pfx%_}
4142     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
4143     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
4144         eval ${pfx}libc_type=uclibc
4145         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4146     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
4147         eval ${pfx}libc_type=glibc
4148         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
4149     # MinGW headers can be installed on Cygwin, so check for newlib first.
4150     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
4151         eval ${pfx}libc_type=newlib
4152         add_${pfx}cppflags -U__STRICT_ANSI__ -D_XOPEN_SOURCE=600
4153     # MinGW64 is backwards compatible with MinGW32, so check for it first.
4154     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
4155         eval ${pfx}libc_type=mingw64
4156         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4157         eval test \$${pfx_no_}cc_type = "gcc" &&
4158             add_${pfx}cppflags -D__printf__=__gnu_printf__
4159     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
4160          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
4161         eval ${pfx}libc_type=mingw32
4162         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
4163             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
4164             die "ERROR: MinGW32 runtime version must be >= 3.15."
4165         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
4166         check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
4167             add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
4168         check_${pfx}cpp_condition windows.h "defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0502" &&
4169             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
4170         eval test \$${pfx_no_}cc_type = "gcc" &&
4171             add_${pfx}cppflags -D__printf__=__gnu_printf__
4172     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
4173         eval ${pfx}libc_type=msvcrt
4174         if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
4175             if [ "$pfx" = host_ ]; then
4176                 add_host_cppflags -Dsnprintf=_snprintf
4177             else
4178                 add_compat strtod.o strtod=avpriv_strtod
4179                 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
4180                                              _snprintf=avpriv_snprintf  \
4181                                              vsnprintf=avpriv_vsnprintf
4182             fi
4183         fi
4184         add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
4185         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
4186         # 0x601 by default unless something else is set by the user.
4187         # This can easily lead to us detecting functions only present
4188         # in such new versions and producing binaries requiring windows 7.0.
4189         # Therefore explicitly set the default to XP unless the user has
4190         # set something else on the command line.
4191         # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
4192         # family. For these cases, configure is free to use any functions
4193         # found in the SDK headers by default. (Alternatively, we could force
4194         # _WIN32_WINNT to 0x0602 in that case.)
4195         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
4196             { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
4197 #ifdef WINAPI_FAMILY
4198 #include <winapifamily.h>
4199 #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
4200 #error not desktop
4201 #endif
4202 #endif
4203 EOF
4204         if [ "$pfx" = "" ]; then
4205             check_func strtoll || add_cflags -Dstrtoll=_strtoi64
4206         fi
4207     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
4208         eval ${pfx}libc_type=klibc
4209     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
4210         eval ${pfx}libc_type=bionic
4211     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
4212         eval ${pfx}libc_type=solaris
4213         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
4214     else
4215         eval ${pfx}libc_type=default
4216         add_${pfx}cppflags -D_DEFAULT_SOURCE
4217     fi
4218 }
4219
4220 probe_libc
4221 test -n "$libc_type" && enable libc_$libc_type
4222 probe_libc host_
4223 test -n "$host_libc_type" && enable host_libc_$host_libc_type
4224
4225 # hacks for compiler/libc/os combinations
4226
4227 case $libc_type in
4228     bionic)
4229         add_compat strtod.o strtod=avpriv_strtod
4230         ;;
4231     glibc)
4232         if enabled tms470; then
4233             CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
4234             add_cppflags -D__USER_LABEL_PREFIX__=
4235             add_cppflags -D__builtin_memset=memset
4236             add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
4237             add_cflags   -pds=48    # incompatible redefinition of macro
4238         elif enabled ccc; then
4239             add_ldflags -Wl,-z,now  # calls to libots crash without this
4240         fi
4241         ;;
4242 esac
4243
4244 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
4245     add_cppflags '-I\$(SRC_PATH)/compat/float'
4246
4247 esc(){
4248     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
4249 }
4250
4251 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" > avbuild/config.fate
4252
4253 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
4254
4255 set_default $PATHS_LIST
4256 set_default nm
4257
4258 # we need to build at least one lib type
4259 if ! enabled_any static shared; then
4260     cat <<EOF
4261 At least one library type must be built.
4262 Specify --enable-static to build the static libraries or --enable-shared to
4263 build the shared libraries as well. To only build the shared libraries specify
4264 --disable-static in addition to --enable-shared.
4265 EOF
4266     exit 1
4267 fi
4268
4269 disabled optimizations || check_cflags -fomit-frame-pointer
4270
4271 enable_weak_pic() {
4272     disabled pic && return
4273     enable pic
4274     add_cppflags -DPIC
4275     case "$target_os" in
4276     mingw*|cygwin*)
4277         ;;
4278     *)
4279         add_cflags -fPIC
4280         ;;
4281     esac
4282     add_asflags  -fPIC
4283 }
4284
4285 enabled pic && enable_weak_pic
4286
4287 check_cc <<EOF || die "Symbol mangling check failed."
4288 int ff_extern;
4289 EOF
4290 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4291 extern_prefix=${sym%%ff_extern*}
4292
4293 ! disabled inline_asm && check_inline_asm inline_asm '"" ::'
4294
4295 _restrict=
4296 for restrict_keyword in restrict __restrict__ __restrict; do
4297     check_cc <<EOF && _restrict=$restrict_keyword && break
4298 void foo(char * $restrict_keyword p);
4299 EOF
4300 done
4301
4302 check_cc <<EOF && enable pragma_deprecated
4303 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4304 EOF
4305
4306 check_cc <<EOF && enable attribute_packed
4307 struct { int x; } __attribute__((packed)) x;
4308 EOF
4309
4310 check_cc <<EOF && enable attribute_may_alias
4311 union { int x; } __attribute__((may_alias)) x;
4312 EOF
4313
4314 check_cc <<EOF || die "endian test failed"
4315 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4316 EOF
4317 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4318
4319 check_gas() {
4320     log "check_gas using '$as' as AS"
4321     # :vararg is used on aarch64, arm and ppc altivec
4322     check_as <<EOF || return 1
4323 .macro m n, y:vararg=0
4324 \n: .int \y
4325 .endm
4326 m x
4327 EOF
4328     # .altmacro is only used in arm asm
4329     ! enabled arm || check_as <<EOF || return 1
4330 .altmacro
4331 EOF
4332     enable gnu_as
4333     return 0
4334 }
4335
4336 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4337     nogas=:
4338     enabled_any arm aarch64 && nogas=die
4339     enabled_all ppc altivec && nogas=warn
4340     as_noop=-v
4341
4342     case $as_type in
4343         arm*) gaspp_as_type=armasm; as_noop=-h ;;
4344         gcc)  gaspp_as_type=gas ;;
4345         *)    gaspp_as_type=$as_type ;;
4346     esac
4347
4348     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
4349
4350     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
4351         gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4352
4353     if ! check_gas ; then
4354         as=${gas:=$as}
4355         check_gas || \
4356             $nogas "GNU assembler not found, install/update gas-preprocessor"
4357     fi
4358
4359     check_as <<EOF && enable as_func
4360 .func test
4361 .endfunc
4362 EOF
4363 fi
4364
4365 check_inline_asm inline_asm_labels '"1:\n"'
4366
4367 if enabled aarch64; then
4368     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4369     # internal assembler in clang 3.3 does not support this instruction
4370     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4371     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
4372
4373     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
4374
4375 elif enabled alpha; then
4376
4377     check_cflags -mieee
4378
4379 elif enabled arm; then
4380
4381     enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4382     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4383     enabled thumb && check_cflags -mthumb || check_cflags -marm
4384
4385     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4386         enable vfp_args
4387     elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
4388         enable vfp_args
4389     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
4390         case "${cross_prefix:-$cc}" in
4391             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4392             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4393 __asm__ (".eabi_attribute 28, 1");
4394 int main(void) { return 0; }
4395 EOF
4396         esac
4397         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4398     fi
4399
4400     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4401     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4402     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4403     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4404     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4405     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4406
4407     [ $target_os = linux ] || [ $target_os = android ] ||
4408         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4409             $ARCH_EXT_LIST_ARM
4410
4411     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4412
4413     check_as <<EOF && enable as_arch_directive
4414 .arch armv7-a
4415 EOF
4416     check_as <<EOF && enable as_fpu_directive
4417 .fpu neon
4418 EOF
4419
4420     # llvm's integrated assembler supports .object_arch from llvm 3.5
4421     [ "$objformat" = elf32 ] || [ "$objformat" = elf64 ] &&
4422         check_as <<EOF && enable as_object_arch
4423 .object_arch armv4
4424 EOF
4425
4426     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4427
4428 elif enabled mips; then
4429
4430     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4431
4432     # make sure that only an instruction set is enabled
4433     disable mips64r6 mips32r6 mips64r2 mips32r2 mips64r1 mips32r1
4434
4435     if enabled mips64; then
4436         check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
4437             check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
4438                 check_inline_asm mips64r1 '"daddi $0, $0, 0"'
4439     else
4440         check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
4441             check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4442                 check_inline_asm mips32r1 '"addi $0, $0, 0"'
4443     fi
4444
4445 elif enabled parisc; then
4446
4447     if enabled gcc; then
4448         case $($cc -dumpversion) in
4449             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4450         esac
4451     fi
4452
4453 elif enabled ppc; then
4454
4455     enable local_aligned_8 local_aligned_16 local_aligned_32
4456
4457     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4458     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4459     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4460     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4461
4462     if enabled altivec; then
4463         check_cflags -maltivec -mabi=altivec
4464
4465         # check if our compiler supports Motorola AltiVec C API
4466         check_code cc altivec.h "vector signed int v1 = (vector signed int) { 0 };
4467                                  vector signed int v2 = (vector signed int) { 1 };
4468                                  v1 = vec_add(v1, v2);" ||
4469             disable altivec
4470
4471         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4472     fi
4473
4474     if enabled vsx; then
4475         check_cflags -mvsx &&
4476         check_code cc altivec.h "int v[4] = { 0 };
4477                                  vector signed int v1 = vec_vsx_ld(0, v);" ||
4478             disable vsx
4479     fi
4480
4481     if enabled power8; then
4482         check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
4483     fi
4484
4485 elif enabled x86; then
4486
4487     check_builtin rdtsc    intrin.h   "__rdtsc()"
4488     check_builtin mm_empty mmintrin.h "_mm_empty()"
4489
4490     enable local_aligned_8 local_aligned_16 local_aligned_32
4491
4492     # check whether EBP is available on x86
4493     # As 'i' is stored on the stack, this program will crash
4494     # if the base pointer is used to access it because the
4495     # base pointer is cleared in the inline assembly code.
4496     check_exec_crash <<EOF && enable ebp_available
4497 volatile int i=0;
4498 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4499 return i;
4500 EOF
4501
4502     # check whether EBX is available on x86
4503     check_inline_asm ebx_available '""::"b"(0)' &&
4504         check_inline_asm ebx_available '"":::"%ebx"'
4505
4506     # check whether xmm clobbers are supported
4507     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4508
4509     # check whether binutils is new enough to compile SSSE3/MMXEXT
4510     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4511     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4512
4513     probe_x86asm(){
4514         x86asmexe_probe=$1
4515         if check_cmd $x86asmexe_probe -v; then
4516             x86asmexe=$x86asmexe_probe
4517             x86asm_type=nasm
4518             x86asm_debug="-g -F dwarf"
4519             X86ASMDEP=
4520             X86ASM_DEPFLAGS='-MD $(@:.o=.d)'
4521         elif check_cmd $x86asmexe_probe --version; then
4522             x86asmexe=$x86asmexe_probe
4523             x86asm_type=yasm
4524             x86asm_debug="-g dwarf2"
4525             X86ASMDEP='$(DEPX86ASM) $(X86ASMFLAGS) -M $(X86ASM_O) $< > $(@:.o=.d)'
4526             X86ASM_DEPFLAGS=
4527         fi
4528         check_x86asm "movbe ecx, [5]" && enable x86asm
4529     }
4530
4531     if ! disabled_any asm mmx x86asm; then
4532         disable x86asm
4533         for program in $x86asmexe nasm yasm; do
4534             probe_x86asm $program && break
4535         done
4536         disabled x86asm && die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build."
4537         X86ASMFLAGS="-f $objformat"
4538         enabled pic               && append X86ASMFLAGS "-DPIC"
4539         test -n "$extern_prefix"  && append X86ASMFLAGS "-DPREFIX"
4540         case "$objformat" in
4541             elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
4542         esac
4543
4544         check_x86asm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4545         check_x86asm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4546         check_x86asm "vfmadd132ps ymm0, ymm1, ymm2"    || disable fma3_external
4547         check_x86asm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4548         check_x86asm "CPU amdnop"                      || disable cpunop
4549     fi
4550
4551     case "$cpu" in
4552         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4553             disable fast_clz
4554         ;;
4555     esac
4556
4557 fi
4558
4559 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4560
4561 check_ldflags -Wl,--as-needed
4562
4563 if ! disabled network; then
4564     check_func getaddrinfo $network_extralibs
4565     check_func inet_aton $network_extralibs
4566
4567     check_type netdb.h "struct addrinfo"
4568     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4569     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4570     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4571     check_type poll.h "struct pollfd"
4572     check_type netinet/sctp.h "struct sctp_event_subscribe"
4573     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4574     check_type netinet/in.h "struct sockaddr_in6"
4575     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4576     check_type "sys/types.h sys/socket.h" socklen_t
4577
4578     # Prefer arpa/inet.h over winsock2
4579     if check_header arpa/inet.h ; then
4580         check_func closesocket
4581     elif check_header winsock2.h ; then
4582         check_func_headers winsock2.h closesocket -lws2 &&
4583             network_extralibs="-lws2" ||
4584         { check_func_headers winsock2.h closesocket -lws2_32 &&
4585             network_extralibs="-lws2_32"; } || disable winsock2_h network
4586         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4587
4588         check_type ws2tcpip.h socklen_t
4589         check_type ws2tcpip.h "struct addrinfo"
4590         check_type ws2tcpip.h "struct group_source_req"
4591         check_type ws2tcpip.h "struct ip_mreq_source"
4592         check_type ws2tcpip.h "struct ipv6_mreq"
4593         check_type winsock2.h "struct pollfd"
4594         check_struct winsock2.h "struct sockaddr" sa_len
4595         check_type ws2tcpip.h "struct sockaddr_in6"
4596         check_type ws2tcpip.h "struct sockaddr_storage"
4597     else
4598         disable network
4599     fi
4600 fi
4601
4602 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4603 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4604 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4605 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4606
4607 case "$custom_allocator" in
4608     jemalloc)
4609         # jemalloc by default does not use a prefix
4610         require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
4611     ;;
4612     tcmalloc)
4613         require_pkg_config libtcmalloc libtcmalloc gperftools/tcmalloc.h tc_malloc
4614         malloc_prefix=tc_
4615     ;;
4616 esac
4617
4618 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4619 check_func  ${malloc_prefix}memalign            && enable memalign
4620 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4621
4622 check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4623     { check_lib clock_gettime time.h clock_gettime ||
4624       check_lib clock_gettime time.h clock_gettime -lrt; }
4625
4626 check_func  fcntl
4627 check_func  fork
4628 check_func  gethrtime
4629 check_func  getopt
4630 check_func  getrusage
4631 check_func  gettimeofday
4632 check_func  gmtime_r
4633 check_func  isatty
4634 check_func  localtime_r
4635 check_func  mach_absolute_time
4636 check_func  mkstemp
4637 check_func  mmap
4638 check_func  mprotect
4639 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4640 check_func_headers time.h nanosleep || check_lib nanosleep time.h nanosleep -lrt
4641 check_func  sched_getaffinity
4642 check_func  setrlimit
4643 check_func  strerror_r
4644 check_func  sysconf
4645 check_func  sysctl
4646 check_func  usleep
4647
4648 check_func_headers io.h setmode
4649 check_func_headers stdlib.h getenv
4650
4651 check_func_headers windows.h GetProcessAffinityMask
4652 check_func_headers windows.h GetProcessTimes
4653 check_func_headers windows.h GetSystemTimeAsFileTime
4654 check_func_headers windows.h LoadLibrary
4655 check_func_headers windows.h MapViewOfFile
4656 check_func_headers windows.h SetConsoleTextAttribute
4657 check_func_headers windows.h Sleep
4658 check_func_headers windows.h VirtualAlloc
4659 check_struct windows.h "CONDITION_VARIABLE" Ptr
4660
4661 check_header d3d11.h
4662 check_header direct.h
4663 check_header dlfcn.h
4664 check_header dxgidebug.h
4665 check_header dxva.h
4666 check_header dxva2api.h
4667 check_header io.h
4668 check_header mach/mach_time.h
4669 check_header malloc.h
4670 check_header poll.h
4671 check_header sys/mman.h
4672 check_header sys/param.h
4673 check_header sys/resource.h
4674 check_header sys/select.h
4675 check_header sys/time.h
4676 check_header sys/un.h
4677 check_header unistd.h
4678 check_header valgrind/valgrind.h
4679 check_header VideoDecodeAcceleration/VDADecoder.h
4680 check_header windows.h
4681
4682 # it seems there are versions of clang in some distros that try to use the
4683 # gcc headers, which explodes for stdatomic
4684 # so we also check that atomics actually work here
4685 check_builtin stdatomic_h stdatomic.h "atomic_int foo; atomic_store(&foo, 0)"
4686
4687 check_lib ole32    "windows.h"            CoTaskMemFree        -lole32
4688 check_lib shell32  "windows.h shellapi.h" CommandLineToArgvW   -lshell32
4689 check_lib wincrypt "windows.h wincrypt.h" CryptGenRandom       -ladvapi32
4690 check_lib psapi    "windows.h psapi.h"    GetProcessMemoryInfo -lpsapi
4691
4692 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4693
4694 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
4695 check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4696 check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
4697
4698 check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
4699 check_type "va/va.h va/va_dec_vp8.h" "VAPictureParameterBufferVP8"
4700 check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
4701 check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
4702 check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
4703 check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
4704 check_type "va/va.h va/va_enc_mpeg2.h" "VAEncPictureParameterBufferMPEG2"
4705 check_type "va/va.h va/va_enc_vp8.h"  "VAEncPictureParameterBufferVP8"
4706 check_type "va/va.h va/va_enc_vp9.h"  "VAEncPictureParameterBufferVP9"
4707
4708 check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
4709
4710 if ! disabled w32threads && ! enabled pthreads; then
4711     check_lib w32threads "windows.h process.h" _beginthreadex
4712 fi
4713
4714 # check for some common methods of building with pthread support
4715 # do this before the optional library checks as some of them require pthreads
4716 if ! disabled pthreads && ! enabled w32threads; then
4717     if check_lib pthreads pthread.h pthread_join -pthread; then
4718         add_cflags -pthread
4719     elif check_lib pthreads pthread.h pthread_join -pthreads; then
4720         add_cflags -pthreads
4721     elif check_lib pthreads pthread.h pthread_join -lpthreadGC2; then
4722         :
4723     elif check_lib pthreads pthread.h pthread_join -lpthread; then
4724         :
4725     elif check_func pthread_join; then
4726         enable pthreads
4727     fi
4728 fi
4729
4730 enabled pthreads &&
4731     check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" $pthreads_extralibs
4732
4733 disabled  zlib || check_lib  zlib  zlib.h      zlibVersion -lz
4734 disabled bzlib || check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2
4735
4736 # On some systems dynamic loading requires no extra linker flags
4737 check_lib libdl dlfcn.h dlopen || check_lib libdl dlfcn.h dlopen -ldl
4738
4739 check_lib libm math.h sin -lm
4740
4741 atan2f_args=2
4742 ldexpf_args=2
4743 powf_args=2
4744
4745 for func in $MATH_FUNCS; do
4746     eval check_mathfunc $func \${${func}_args:-1} $libm_extralibs
4747 done
4748
4749 # these are off by default, so fail if requested and not available
4750 enabled avisynth          && require_header avisynth/avisynth_c.h
4751 enabled avxsynth          && require_header avxsynth/avxsynth_c.h
4752 enabled cuda              && require cuda cuda.h cuInit -lcuda
4753 enabled frei0r            && require_header frei0r.h
4754 enabled gnutls            && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
4755 enabled libbs2b           && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open
4756 enabled libdc1394         && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
4757 enabled libdcadec         && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
4758 enabled libfaac           && require libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4759 enabled libfdk_aac        && require_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
4760 enabled libfontconfig     && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
4761 enabled libfreetype       && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4762 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4763                                    check_lib libgsm "${gsm_hdr}" gsm_create -lgsm && break;
4764                                done || die "ERROR: libgsm not found"; }
4765 enabled libhdcd           && require_pkg_config libhdcd libhdcd "hdcd/hdcd_simple.h" hdcd_new
4766 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4767 enabled libkvazaar        && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
4768 enabled libmfx            && require_pkg_config libmfx libmfx "mfx/mfxvideo.h" MFXInit
4769 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4770 enabled libnpp            && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
4771 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4772 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4773 enabled libopencv         && require_pkg_config libopencv opencv opencv/cv.h cvCreateImageHeader
4774 enabled libopenh264       && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
4775 enabled libopenjpeg       && { check_lib libopenjpeg openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC ||
4776                                require_pkg_config libopenjpeg libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; }
4777 enabled libopus           && require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
4778 enabled libpulse          && require_pkg_config libpulse libpulse-simple pulse/simple.h pa_simple_new
4779 enabled librtmp           && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
4780 enabled libschroedinger   && require_pkg_config libschroedinger schroedinger-1.0 schroedinger/schro.h schro_init
4781 enabled libsnappy         && require libsnappy snappy-c.h snappy_compress -lsnappy
4782 enabled libspeex          && require_pkg_config libspeex speex speex/speex.h speex_decoder_init -lspeex
4783 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4784 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame
4785 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4786 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4787 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4788 enabled libvpx            && require_pkg_config libvpx "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version &&
4789                              { enabled libvpx_vp8_decoder &&
4790                                    check_pkg_config libvpx_vp8_decoder vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx
4791                                enabled libvpx_vp8_encoder &&
4792                                    check_pkg_config libvpx_vp8_encoder vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx
4793                                enabled libvpx_vp9_decoder &&
4794                                    check_pkg_config libvpx_vp9_decoder vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx
4795                                enabled libvpx_vp9_encoder &&
4796                                    check_pkg_config libvpx_vp9_encoder vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx
4797                                disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder &&
4798                                    die "libvpx enabled but no supported decoders/encoders found"
4799                              }
4800 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4801 enabled libwebp           && require_pkg_config libwebp libwebp webp/encode.h WebPGetEncoderVersion
4802 enabled libx264           && require_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode &&
4803                              require_cpp_condition x264.h "X264_BUILD >= 118" &&
4804                              { check_cpp_condition x264.h "X264_MPEG2" &&
4805                                enable libx262; }
4806 enabled libx265           && require_pkg_config libx265 x265 x265.h x265_api_get &&
4807                              require_cpp_condition x265.h "X265_BUILD >= 57"
4808 enabled libxavs           && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs
4809 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4810 enabled mmal              && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
4811                                { ! enabled cross_compile &&
4812                                  add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
4813                                  add_ldflags -L/opt/vc/lib/ &&
4814                                  check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
4815                                die "ERROR: mmal not found" &&
4816                                check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
4817 enabled omx               && require_header OMX_Core.h
4818 enabled omx_rpi           && { check_header OMX_Core.h ||
4819                                { ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_header OMX_Core.h ; } ||
4820                                die "ERROR: OpenMAX IL headers not found"; } && enable omx
4821 enabled openssl           && { { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
4822                                  check_pkg_config openssl openssl openssl/ssl.h SSL_library_init; } ||
4823                                check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4824                                check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4825                                check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4826                                die "ERROR: openssl not found"; }
4827
4828 enabled gnutls            && check_lib gmp gmp.h mpz_export -lgmp
4829