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