configure: Don't assume a 16 byte aligned stack on BSDs on i386
[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-libaom AV1 video encoding/decoding
191 --enable-libbs2b Bauer stereophonic-to-binaural DSP
192 --enable-libcdio audio CD input
193 --enable-libdc1394 IEEE 1394/Firewire camera input
194 --enable-libdcadec DCA audio decoding
195 --enable-libfaac AAC audio encoding
196 --enable-libfdk-aac AAC audio encoding/decoding
197 --enable-libfontconfig font configuration and management
198 --enable-libfreetype font rendering
199 --enable-libgsm GSM audio encoding/decoding
200 --enable-libhdcd HDCD decoding filter
201 --enable-libilbc ILBC audio encoding/decoding
202 --enable-libjack JACK audio sound server
203 --enable-libkvazaar HEVC video encoding
204 --enable-libmp3lame MP3 audio encoding
205 --enable-libopencore-amrnb AMR-NB audio encoding/decoding
206 --enable-libopencore-amrwb AMR-WB audio decoding
207 --enable-libopencv computer vision
208 --enable-libopenh264 H.264 video encoding/decoding
209 --enable-libopenjpeg JPEG 2000 image encoding/decoding
210 --enable-libopus Opus audio encoding/decoding
211 --enable-libpulse Pulseaudio sound server
212 --enable-librtmp RTMP streaming
213 --enable-libschroedinger Dirac video encoding/decoding
214 --enable-libsnappy snappy compression
215 --enable-libspeex Speex audio encoding/decoding
216 --enable-libtheora Theora video encoding/decoding
217 --enable-libtwolame MP2 audio encoding
218 --enable-libvo-aacenc AAC audio encoding
219 --enable-libvo-amrwbenc AMR-WB audio encoding
220 --enable-libvorbis Vorbis audio encoding/decoding
221 --enable-libvpx VP* video encoding/decoding
222 --enable-libwavpack Wavpack audio encoding/decoding
223 --enable-libwebp WebP image encoding/decoding
224 --enable-libx264 H.264 video encoding
225 --enable-libx265 HEVC video encoding
226 --enable-libxavs Chinese AVS video encoding
227 --enable-libxcb X window system protocol communication
228 --enable-libxcb-shm X11 shm communication [auto]
229 --enable-libxcb-xfixes X11 mouse rendering [auto]
230 --enable-libxvid MPEG-4 ASP video encoding
231 --enable-openssl crypto
232 --enable-zlib compression [autodetect]
233
234 The following libraries provide various hardware acceleration features:
235 --enable-amf AMF video encoding code [auto]
236 --enable-cuda Nvidia CUDA (dynamically linked)
237 --enable-cuvid Nvidia CUVID video decode acceleration
238 --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
239 --enable-dxva2 Microsoft DirectX 9 video acceleration [auto]
240 --enable-libmfx Intel MediaSDK (AKA Quick Sync Video)
241 --enable-libnpp Nvidia CUDA processing
242 --enable-mmal Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
243 --enable-nvenc Nvidia video encoding
244 --enable-omx OpenMAX IL
245 --enable-omx-rpi OpenMAX IL for Raspberry Pi
246 --enable-vaapi Video Acceleration API (mainly Unix/Intel)
247 --enable-vda Apple Video Decode Acceleration [auto]
248 --enable-vdpau Nvidia Video Decode and Presentation API for Unix [auto]
249
250 Toolchain options:
251 --arch=ARCH select architecture [$arch]
252 --cpu=CPU select the minimum required CPU (affects
253 instruction selection, may crash on older CPUs)
254 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
255 --enable-cross-compile assume a cross-compiler is used
256 --sysroot=PATH root of cross-build tree
257 --sysinclude=PATH location of cross-build system headers
258 --target-os=OS compiler targets OS [$target_os]
259 --target-exec=CMD command to run executables on target
260 --target-path=DIR path to view of build directory on target
261 --target-samples=DIR path to samples directory on target
262 --toolchain=NAME set tool defaults according to NAME
263 --nm=NM use nm tool
264 --ar=AR use archive tool AR [$ar_default]
265 --as=AS use assembler AS [$as_default]
266 --cc=CC use C compiler CC [$cc_default]
267 --objcc=OCC use ObjC compiler OCC [$cc_default]
268 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
269 --ld=LD use linker LD
270 --x86asmexe=X86ASM use x86 assembler X86ASM
271 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
272 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
273 --host-cc=HOSTCC use host C compiler HOSTCC
274 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
275 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
276 --host-ld=HOSTLD use host linker HOSTLD
277 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
278 --host-libs=HLIBS use libs HLIBS when linking for host
279 --host-os=OS compiler host OS [$target_os]
280 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
281 --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
282 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
283 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
284 --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
285 --extra-libs=ELIBS add ELIBS [$ELIBS]
286 --extra-version=STRING version string suffix []
287 --optflags=OPTFLAGS override optimization-related compiler flags
288 --enable-pic build position-independent code
289 --enable-thumb compile for Thumb instruction set
290 --enable-lto use link-time optimization
291 --env="ENV=override" override the environment variables
292
293 Advanced options (experts only):
294 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
295 --custom-allocator=NAME use a supported custom allocator
296 --disable-symver disable symbol versioning
297 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
298 --disable-safe-bitstream-reader
299 disable buffer boundary checking in bitreaders
300 (faster, but may crash)
301 --enable-sram allow use of on-chip SRAM
302
303 Optimization options (experts only):
304 --disable-asm disable all assembly optimizations
305 --disable-altivec disable AltiVec optimizations
306 --disable-vsx disable VSX optimizations
307 --disable-power8 disable POWER8 optimizations
308 --disable-amd3dnow disable 3DNow! optimizations
309 --disable-amd3dnowext disable 3DNow! extended optimizations
310 --disable-mmx disable MMX optimizations
311 --disable-mmxext disable MMXEXT optimizations
312 --disable-sse disable SSE optimizations
313 --disable-sse2 disable SSE2 optimizations
314 --disable-sse3 disable SSE3 optimizations
315 --disable-ssse3 disable SSSE3 optimizations
316 --disable-sse4 disable SSE4 optimizations
317 --disable-sse42 disable SSE4.2 optimizations
318 --disable-avx disable AVX optimizations
319 --disable-xop disable XOP optimizations
320 --disable-fma3 disable FMA3 optimizations
321 --disable-fma4 disable FMA4 optimizations
322 --disable-avx2 disable AVX2 optimizations
323 --disable-armv5te disable armv5te optimizations
324 --disable-armv6 disable armv6 optimizations
325 --disable-armv6t2 disable armv6t2 optimizations
326 --disable-vfp disable VFP optimizations
327 --disable-neon disable NEON optimizations
328 --disable-inline-asm disable use of inline assembly
329 --disable-x86asm disable use of standalone x86 assembly
330
331 Developer options (useful when working on Libav itself):
332 --disable-debug disable debugging symbols
333 --enable-debug=LEVEL set the debug level [$debuglevel]
334 --disable-optimizations disable compiler optimizations
335 --enable-extra-warnings enable more compiler warnings
336 --samples=PATH location of test samples for FATE, if not set use
337 \$LIBAV_SAMPLES at make invocation time.
338 --enable-neon-clobber-test check NEON registers for clobbering (should be
339 used only for debugging purposes)
340 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
341 should be used only for debugging purposes)
342 --disable-valgrind-backtrace do not print a backtrace under Valgrind
343 (only applies to --disable-optimizations builds)
344 --ignore-tests=TESTS comma-separated list (without "fate-" prefix
345 in the name) of tests whose result is ignored
346
347 NOTE: Object files are built at the place where configure is launched.
348 EOF
349 exit 0
350 }
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 $(sanitize_var_name $var)
517 done
518 }
519
520 disable_sanitized(){
521 for var; do
522 disable $(sanitize_var_name $var)
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 test_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 test_cc(){
776 log test_cc "$@"
777 cat > $TMPC
778 log_file $TMPC
779 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
780 }
781
782 test_objcc(){
783 log test_objcc "$@"
784 cat > $TMPC
785 log_file $TMPC
786 test_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
787 }
788
789 test_cpp(){
790 log test_cpp "$@"
791 cat > $TMPC
792 log_file $TMPC
793 test_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
794 }
795
796 as_o(){
797 eval printf '%s\\n' $AS_O
798 }
799
800 test_as(){
801 log test_as "$@"
802 cat > $TMPS
803 log_file $TMPS
804 test_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
805 }
806
807 check_cmd(){
808 log check_cmd "$@"
809 cmd=$1
810 disabled $cmd && return
811 disable $cmd
812 test_cmd $@ && enable $cmd
813 }
814
815 check_as(){
816 log check_as "$@"
817 name=$1
818 code=$2
819 shift 2
820 disable $name
821 test_as $@ <<EOF && enable $name
822 $code
823 EOF
824 }
825
826 check_inline_asm(){
827 log check_inline_asm "$@"
828 name="$1"
829 code="$2"
830 shift 2
831 disable $name
832 test_cc "$@" <<EOF && enable $name
833 void foo(void){ __asm__ volatile($code); }
834 EOF
835 }
836
837 check_insn(){
838 log check_insn "$@"
839 check_inline_asm ${1}_inline "$2"
840 check_as ${1}_external "$2"
841 }
842
843 test_x86asm(){
844 log test_x86asm "$@"
845 echo "$1" > $TMPS
846 log_file $TMPS
847 shift 1
848 test_cmd $x86asmexe $X86ASMFLAGS "$@" -o $TMPO $TMPS
849 }
850
851 ld_o(){
852 eval printf '%s\\n' $LD_O
853 }
854
855 test_ld(){
856 log test_ld "$@"
857 flags=$(filter_out '-l*' "$@")
858 libs=$(filter '-l*' "$@")
859 test_cc $($cflags_filter $flags) || return
860 flags=$($ldflags_filter $flags)
861 libs=$($ldflags_filter $libs)
862 test_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
863 }
864
865 check_ld(){
866 log check_ld "$@"
867 name=$1
868 shift
869 disable $name
870 test_ld $@ && enable $name
871 }
872
873 print_include(){
874 hdr=$1
875 test "${hdr%.h}" = "${hdr}" &&
876 echo "#include $hdr" ||
877 echo "#include <$hdr>"
878 }
879
880 test_code(){
881 log test_code "$@"
882 check=$1
883 headers=$2
884 code=$3
885 shift 3
886 {
887 for hdr in $headers; do
888 print_include $hdr
889 done
890 echo "int main(void) { $code; return 0; }"
891 } | test_$check "$@"
892 }
893
894 check_cppflags(){
895 log check_cppflags "$@"
896 test_cpp "$@" <<EOF && add_cppflags "$@"
897 #include <stdlib.h>;
898 EOF
899 }
900
901 test_cflags(){
902 log test_cflags "$@"
903 set -- $($cflags_filter "$@")
904 test_cc "$@" <<EOF
905 int x;
906 EOF
907 }
908
909 check_cflags(){
910 log check_cflags "$@"
911 test_cflags "$@" && add_cflags "$@"
912 }
913
914 test_objcflags(){
915 log test_objcflags "$@"
916 set -- $($objcflags_filter "$@")
917 test_objcc "$@" <<EOF
918 int x;
919 EOF
920 }
921
922 check_objcflags(){
923 log check_objcflags "$@"
924 test_objcflags "$@" && add_objcflags "$@"
925 }
926
927 test_ldflags(){
928 log test_ldflags "$@"
929 set -- $($ldflags_filter "$@")
930 test_ld "$@" <<EOF
931 int main(void){ return 0; }
932 EOF
933 }
934
935 check_ldflags(){
936 log check_ldflags "$@"
937 test_ldflags "$@" && add_ldflags "$@"
938 }
939
940 test_stripflags(){
941 log test_stripflags "$@"
942 # call test_cc to get a fresh TMPO
943 test_cc <<EOF
944 int main(void) { return 0; }
945 EOF
946 test_cmd $strip $STRIPFLAGS "$@" $TMPO
947 }
948
949 check_stripflags(){
950 log check_stripflags "$@"
951 test_stripflags "$@" && add_stripflags "$@"
952 }
953
954 check_header(){
955 log check_header "$@"
956 headers=$1
957 shift
958 disable_sanitized $headers
959 {
960 for hdr in $headers; do
961 print_include $hdr
962 done
963 echo "int x;"
964 } | test_cpp "$@" && enable_sanitized $headers
965 }
966
967 check_func(){
968 log check_func "$@"
969 func=$1
970 shift
971 disable $func
972 test_ld "$@" <<EOF && enable $func
973 extern int $func();
974 int main(void){ $func(); }
975 EOF
976 }
977
978 check_mathfunc(){
979 log check_mathfunc "$@"
980 func=$1
981 narg=$2
982 shift 2
983 test $narg = 2 && args="f, g" || args="f"
984 disable $func
985 test_ld "$@" <<EOF && enable $func
986 #include <math.h>
987 float foo(float f, float g) { return $func($args); }
988 int main(void){ return 0; }
989 EOF
990 }
991
992 check_func_headers(){
993 log check_func_headers "$@"
994 headers=$1
995 funcs=$2
996 shift 2
997 {
998 for hdr in $headers; do
999 print_include $hdr
1000 done
1001 for func in $funcs; do
1002 echo "long check_$func(void) { return (long) $func; }"
1003 done
1004 echo "int main(void) { return 0; }"
1005 } | test_ld "$@" && enable $funcs && enable_sanitized $headers
1006 }
1007
1008 test_cpp_condition(){
1009 log test_cpp_condition "$@"
1010 header=$1
1011 condition=$2
1012 shift 2
1013 test_cpp "$@" <<EOF
1014 #include <$header>
1015 #if !($condition)
1016 #error "unsatisfied condition: $condition"
1017 #endif
1018 EOF
1019 }
1020
1021 check_cpp_condition(){
1022 log check_cpp_condition "$@"
1023 name=$1
1024 shift 1
1025 disable $name
1026 test_cpp_condition "$@" && enable $name
1027 }
1028
1029 test_cflags_cpp(){
1030 log test_cflags_cpp "$@"
1031 flags=$1
1032 condition=$2
1033 shift 2
1034 set -- $($cflags_filter "$flags")
1035 test_cpp "$@" <<EOF
1036 #if !($condition)
1037 #error "unsatisfied condition: $condition"
1038 #endif
1039 EOF
1040 }
1041
1042 check_lib(){
1043 log check_lib "$@"
1044 name="$1"
1045 headers="$2"
1046 funcs="$3"
1047 shift 3
1048 disable $name
1049 check_func_headers "$headers" "$funcs" "$@" &&
1050 enable $name && eval ${name}_extralibs="\$@"
1051 }
1052
1053 test_pkg_config(){
1054 log test_pkg_config "$@"
1055 name="$1"
1056 pkg_version="$2"
1057 pkg="${2%% *}"
1058 headers="$3"
1059 funcs="$4"
1060 shift 4
1061 disable $name
1062 test_cmd $pkg_config --exists --print-errors $pkg_version || return
1063 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1064 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1065 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1066 enable $name &&
1067 set_sanitized "${name}_cflags" $pkg_cflags &&
1068 set_sanitized "${name}_extralibs" $pkg_libs
1069 }
1070
1071 check_pkg_config(){
1072 log check_pkg_config "$@"
1073 name="$1"
1074 test_pkg_config "$@" &&
1075 eval add_cflags \$${name}_cflags
1076 }
1077
1078 test_exec(){
1079 log test_exec "$@"
1080 test_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1081 }
1082
1083 check_exec_crash(){
1084 log check_exec_crash "$@"
1085 code=$(cat)
1086
1087 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
1088 # are safe but may not be available everywhere. Thus we use
1089 # raise(SIGTERM) instead. The check is run in a subshell so we
1090 # can redirect the "Terminated" message from the shell. SIGBUS
1091 # is not defined by standard C so it is used conditionally.
1092
1093 (test_exec "$@") >> $logfile 2>&1 <<EOF
1094 #include <signal.h>
1095 static void sighandler(int sig){
1096 raise(SIGTERM);
1097 }
1098 int foo(void){
1099 $code
1100 }
1101 int (*func_ptr)(void) = foo;
1102 int main(void){
1103 signal(SIGILL, sighandler);
1104 signal(SIGFPE, sighandler);
1105 signal(SIGSEGV, sighandler);
1106 #ifdef SIGBUS
1107 signal(SIGBUS, sighandler);
1108 #endif
1109 return func_ptr();
1110 }
1111 EOF
1112 }
1113
1114 check_type(){
1115 log check_type "$@"
1116 headers=$1
1117 type=$2
1118 shift 2
1119 disable_sanitized "$type"
1120 test_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
1121 }
1122
1123 check_struct(){
1124 log check_struct "$@"
1125 headers=$1
1126 struct=$2
1127 member=$3
1128 shift 3
1129 disable_sanitized "${struct}_${member}"
1130 test_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1131 enable_sanitized "${struct}_${member}"
1132 }
1133
1134 check_builtin(){
1135 log check_builtin "$@"
1136 name=$1
1137 shift
1138 disable "$name"
1139 test_code ld "$@" && enable "$name"
1140 }
1141
1142 check_compile_assert(){
1143 log check_compile_assert "$@"
1144 name=$1
1145 headers=$2
1146 condition=$3
1147 shift 3
1148 disable "$name"
1149 test_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1150 }
1151
1152 check_cc(){
1153 log check_cc "$@"
1154 name=$1
1155 shift
1156 disable "$name"
1157 test_code cc "$@" && enable "$name"
1158 }
1159
1160 require(){
1161 log require "$@"
1162 name_version="$1"
1163 name="${1%% *}"
1164 shift
1165 check_lib $name "$@" || die "ERROR: $name_version not found"
1166 }
1167
1168 require_cc(){
1169 log require_cc "$@"
1170 name="$1"
1171 shift
1172 test_code cc "$@" || die "ERROR: $name failed"
1173 }
1174
1175 require_header(){
1176 log require_header "$@"
1177 headers="$1"
1178 check_header "$@" || die "ERROR: $headers not found"
1179 }
1180
1181 require_cpp_condition(){
1182 log require_cpp_condition "$@"
1183 condition="$2"
1184 test_cpp_condition "$@" || die "ERROR: $condition not satisfied"
1185 }
1186
1187 require_pkg_config(){
1188 log require_pkg_config "$@"
1189 pkg_version="$2"
1190 check_pkg_config "$@" || die "ERROR: $pkg_version not found"
1191 }
1192
1193 hostcc_e(){
1194 eval printf '%s\\n' $HOSTCC_E
1195 }
1196
1197 hostcc_o(){
1198 eval printf '%s\\n' $HOSTCC_O
1199 }
1200
1201 test_host_cc(){
1202 log test_host_cc "$@"
1203 cat > $TMPC
1204 log_file $TMPC
1205 test_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1206 }
1207
1208 test_host_cpp(){
1209 log test_host_cpp "$@"
1210 cat > $TMPC
1211 log_file $TMPC
1212 test_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1213 }
1214
1215 check_host_cppflags(){
1216 log check_host_cppflags "$@"
1217 test_host_cpp "$@" <<EOF && append host_cppflags "$@"
1218 #include <stdlib.h>;
1219 EOF
1220 }
1221
1222 check_host_cflags(){
1223 log check_host_cflags "$@"
1224 set -- $($host_cflags_filter "$@")
1225 test_host_cc "$@" <<EOF && append host_cflags "$@"
1226 int x;
1227 EOF
1228 }
1229
1230 test_host_cpp_condition(){
1231 log test_host_cpp_condition "$@"
1232 header=$1
1233 condition=$2
1234 shift 2
1235 test_host_cpp "$@" <<EOF
1236 #include <$header>
1237 #if !($condition)
1238 #error "unsatisfied condition: $condition"
1239 #endif
1240 EOF
1241 }
1242
1243 check_host_cpp_condition(){
1244 log check_host_cpp_condition "$@"
1245 name=$1
1246 shift 1
1247 disable $name
1248 test_host_cpp_condition "$@" && enable $name
1249 }
1250
1251 cp_if_changed(){
1252 cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1253 mkdir -p "$(dirname $2)"
1254 cp -f "$1" "$2"
1255 }
1256
1257 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1258 # system-dependent things.
1259
1260 AVCODEC_COMPONENTS="
1261 bsfs
1262 decoders
1263 encoders
1264 hwaccels
1265 parsers
1266 "
1267
1268 AVDEVICE_COMPONENTS="
1269 indevs
1270 "
1271 AVFILTER_COMPONENTS="
1272 filters
1273 "
1274 AVFORMAT_COMPONENTS="
1275 demuxers
1276 muxers
1277 protocols
1278 "
1279
1280 COMPONENT_LIST="
1281 $AVCODEC_COMPONENTS
1282 $AVDEVICE_COMPONENTS
1283 $AVFILTER_COMPONENTS
1284 $AVFORMAT_COMPONENTS
1285 "
1286
1287 EXAMPLE_LIST="
1288 decode_audio_example
1289 decode_video_example
1290 encode_audio_example
1291 encode_video_example
1292 filter_audio_example
1293 metadata_example
1294 output_example
1295 qsvdec_example
1296 transcode_aac_example
1297 "
1298
1299 # catchall list of things that require external libs to link
1300 EXTRALIBS_LIST="
1301 cpu_init
1302 cws2fws
1303 "
1304
1305 HWACCEL_LIBRARY_NONFREE_LIST="
1306 cuda
1307 cuvid
1308 libnpp
1309 "
1310 HWACCEL_LIBRARY_LIST="
1311 $HWACCEL_LIBRARY_NONFREE_LIST
1312 amf
1313 d3d11va
1314 dxva2
1315 libmfx
1316 mmal
1317 nvenc
1318 omx
1319 vaapi
1320 vda
1321 vdpau
1322 "
1323
1324 EXTERNAL_LIBRARY_GPL_LIST="
1325 libcdio
1326 libx264
1327 libx265
1328 libxavs
1329 libxvid
1330 "
1331
1332 EXTERNAL_LIBRARY_NONFREE_LIST="
1333 libfaac
1334 libfdk_aac
1335 openssl
1336 "
1337
1338 EXTERNAL_LIBRARY_VERSION3_LIST="
1339 libopencore_amrnb
1340 libopencore_amrwb
1341 libvo_aacenc
1342 libvo_amrwbenc
1343 "
1344
1345 EXTERNAL_LIBRARY_LIST="
1346 $EXTERNAL_LIBRARY_GPL_LIST
1347 $EXTERNAL_LIBRARY_NONFREE_LIST
1348 $EXTERNAL_LIBRARY_VERSION3_LIST
1349 avisynth
1350 avxsynth
1351 frei0r
1352 gnutls
1353 libaom
1354 libbs2b
1355 libdc1394
1356 libdcadec
1357 libfontconfig
1358 libfreetype
1359 libgsm
1360 libhdcd
1361 libilbc
1362 libjack
1363 libkvazaar
1364 libmp3lame
1365 libopencv
1366 libopenh264
1367 libopenjpeg
1368 libopus
1369 libpulse
1370 librtmp
1371 libschroedinger
1372 libsnappy
1373 libspeex
1374 libtheora
1375 libtwolame
1376 libvorbis
1377 libvpx
1378 libwavpack
1379 libwebp
1380 libxcb
1381 libxcb_shm
1382 libxcb_xfixes
1383 "
1384
1385 SYSTEM_LIBRARY_LIST="
1386 bzlib
1387 zlib
1388 "
1389
1390 FEATURE_LIST="
1391 gray
1392 hardcoded_tables
1393 omx_rpi
1394 runtime_cpudetect
1395 safe_bitstream_reader
1396 shared
1397 small
1398 sram
1399 static
1400 swscale_alpha
1401 "
1402
1403 LIBRARY_LIST="
1404 avcodec
1405 avdevice
1406 avfilter
1407 avformat
1408 avresample
1409 avutil
1410 swscale
1411 "
1412
1413 LICENSE_LIST="
1414 gpl
1415 nonfree
1416 version3
1417 "
1418
1419 PROGRAM_LIST="
1420 avconv
1421 avplay
1422 avprobe
1423 "
1424
1425 SUBSYSTEM_LIST="
1426 dct
1427 doc
1428 error_resilience
1429 faan
1430 fft
1431 lsp
1432 lzo
1433 mdct
1434 network
1435 rdft
1436 "
1437
1438 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1439 CONFIG_LIST="
1440 $EXAMPLE_LIST
1441 $EXTERNAL_LIBRARY_LIST
1442 $HWACCEL_LIBRARY_LIST
1443 $FEATURE_LIST
1444 $LICENSE_LIST
1445 $LIBRARY_LIST
1446 $PROGRAM_LIST
1447 $SUBSYSTEM_LIST
1448 $SYSTEM_LIBRARY_LIST
1449 neon_clobber_test
1450 pic
1451 pod2man
1452 texi2html
1453 thumb
1454 valgrind_backtrace
1455 xmm_clobber_test
1456 $COMPONENT_LIST
1457 "
1458
1459 THREADS_LIST="
1460 pthreads
1461 w32threads
1462 "
1463
1464 ATOMICS_LIST="
1465 atomics_gcc
1466 atomics_suncc
1467 atomics_win32
1468 "
1469
1470 ARCH_LIST="
1471 aarch64
1472 alpha
1473 arm
1474 avr32
1475 avr32_ap
1476 avr32_uc
1477 bfin
1478 ia64
1479 m68k
1480 mips
1481 mips64
1482 parisc
1483 ppc
1484 ppc64
1485 s390
1486 sh4
1487 sparc
1488 sparc64
1489 tilegx
1490 tilepro
1491 tomi
1492 x86
1493 x86_32
1494 x86_64
1495 "
1496
1497 ARCH_EXT_LIST_ARM="
1498 armv5te
1499 armv6
1500 armv6t2
1501 armv8
1502 neon
1503 vfp
1504 vfpv3
1505 "
1506
1507 ARCH_EXT_LIST_X86_SIMD="
1508 amd3dnow
1509 amd3dnowext
1510 avx
1511 avx2
1512 fma3
1513 fma4
1514 mmx
1515 mmxext
1516 sse
1517 sse2
1518 sse3
1519 sse4
1520 sse42
1521 ssse3
1522 xop
1523 "
1524
1525 ARCH_EXT_LIST_PPC="
1526 altivec
1527 dcbzl
1528 ldbrx
1529 power8
1530 ppc4xx
1531 vsx
1532 "
1533
1534 ARCH_EXT_LIST_X86="
1535 $ARCH_EXT_LIST_X86_SIMD
1536 cpunop
1537 i686
1538 "
1539
1540 ARCH_EXT_LIST_MIPS="
1541 loongson
1542 mips32r1
1543 mips64r1
1544 mips32r2
1545 mips64r2
1546 mips32r6
1547 mips64r6
1548 "
1549
1550 ARCH_EXT_LIST="
1551 $ARCH_EXT_LIST_ARM
1552 $ARCH_EXT_LIST_MIPS
1553 $ARCH_EXT_LIST_PPC
1554 $ARCH_EXT_LIST_X86
1555 vis
1556 "
1557
1558 ARCH_FEATURES="
1559 aligned_stack
1560 fast_64bit
1561 fast_clz
1562 fast_cmov
1563 local_aligned_8
1564 local_aligned_16
1565 local_aligned_32
1566 simd_align_16
1567 simd_align_32
1568 "
1569
1570 BUILTIN_LIST="
1571 atomic_cas_ptr
1572 machine_rw_barrier
1573 MemoryBarrier
1574 mm_empty
1575 rdtsc
1576 sem_timedwait
1577 sync_val_compare_and_swap
1578 "
1579 HAVE_LIST_CMDLINE="
1580 inline_asm
1581 symver
1582 x86asm
1583 "
1584
1585 HAVE_LIST_PUB="
1586 bigendian
1587 fast_unaligned
1588 "
1589
1590 HEADERS_LIST="
1591 AVFoundation_AVFoundation_h
1592 arpa_inet_h
1593 cdio_paranoia_h
1594 cdio_paranoia_paranoia_h
1595 dispatch_dispatch_h
1596 dev_bktr_ioctl_bt848_h
1597 dev_bktr_ioctl_meteor_h
1598 dev_ic_bt8xx_h
1599 dev_video_bktr_ioctl_bt848_h
1600 dev_video_meteor_ioctl_meteor_h
1601 direct_h
1602 dxgidebug_h
1603 dxva_h
1604 io_h
1605 machine_ioctl_bt848_h
1606 machine_ioctl_meteor_h
1607 malloc_h
1608 poll_h
1609 sys_param_h
1610 sys_resource_h
1611 sys_select_h
1612 sys_soundcard_h
1613 sys_time_h
1614 sys_un_h
1615 sys_videoio_h
1616 unistd_h
1617 valgrind_valgrind_h
1618 windows_h
1619 winsock2_h
1620 "
1621
1622 INTRINSICS_LIST="
1623 intrinsics_neon
1624 "
1625
1626 MATH_FUNCS="
1627 atanf
1628 atan2f
1629 cbrtf
1630 cosf
1631 exp2
1632 exp2f
1633 expf
1634 isinf
1635 isnan
1636 ldexpf
1637 llrint
1638 llrintf
1639 log2
1640 log2f
1641 log10f
1642 lrint
1643 lrintf
1644 powf
1645 rint
1646 round
1647 roundf
1648 sinf
1649 trunc
1650 truncf
1651 "
1652
1653 SYSTEM_FEATURES="
1654 dos_paths
1655 libc_msvcrt
1656 MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1657 section_data_rel_ro
1658 threads
1659 uwp
1660 "
1661
1662 SYSTEM_FUNCS="
1663 aligned_malloc
1664 clock_gettime
1665 closesocket
1666 CommandLineToArgvW
1667 fcntl
1668 getaddrinfo
1669 gethrtime
1670 getopt
1671 GetProcessAffinityMask
1672 GetProcessMemoryInfo
1673 GetProcessTimes
1674 getrusage
1675 GetSystemTimeAsFileTime
1676 gettimeofday
1677 gmtime_r
1678 inet_aton
1679 isatty
1680 localtime_r
1681 mach_absolute_time
1682 MapViewOfFile
1683 memalign
1684 mmap
1685 mprotect
1686 nanosleep
1687 posix_memalign
1688 sched_getaffinity
1689 SetConsoleTextAttribute
1690 setmode
1691 setrlimit
1692 Sleep
1693 strerror_r
1694 sysconf
1695 sysctl
1696 usleep
1697 VirtualAlloc
1698 "
1699
1700 SYSTEM_LIBRARIES="
1701 sdl
1702 vaapi_1
1703 vaapi_drm
1704 vaapi_x11
1705 vdpau_x11
1706 wincrypt
1707 "
1708
1709 TOOLCHAIN_FEATURES="
1710 as_arch_directive
1711 as_fpu_directive
1712 as_func
1713 as_object_arch
1714 asm_mod_q
1715 blocks_extension
1716 ebp_available
1717 ebx_available
1718 gnu_as
1719 ibm_asm
1720 inline_asm_labels
1721 pragma_deprecated
1722 symver_asm_label
1723 symver_gnu_asm
1724 vfp_args
1725 xform_asm
1726 xmm_clobbers
1727 "
1728
1729 TYPES_LIST="
1730 CONDITION_VARIABLE_Ptr
1731 CUVIDDECODECREATEINFO_bitDepthMinus8
1732 socklen_t
1733 struct_addrinfo
1734 struct_group_source_req
1735 struct_ip_mreq_source
1736 struct_ipv6_mreq
1737 struct_pollfd
1738 struct_rusage_ru_maxrss
1739 struct_sockaddr_in6
1740 struct_sockaddr_sa_len
1741 struct_sockaddr_storage
1742 struct_v4l2_frmivalenum_discrete
1743 "
1744
1745 HAVE_LIST="
1746 $ARCH_EXT_LIST
1747 $(add_suffix _external $ARCH_EXT_LIST)
1748 $(add_suffix _inline $ARCH_EXT_LIST)
1749 $ARCH_FEATURES
1750 $BUILTIN_LIST
1751 $HAVE_LIST_CMDLINE
1752 $HAVE_LIST_PUB
1753 $HEADERS_LIST
1754 $INTRINSICS_LIST
1755 $MATH_FUNCS
1756 $SYSTEM_FEATURES
1757 $SYSTEM_FUNCS
1758 $SYSTEM_LIBRARIES
1759 $THREADS_LIST
1760 $TOOLCHAIN_FEATURES
1761 $TYPES_LIST
1762 "
1763
1764 # options emitted with CONFIG_ prefix but not available on the command line
1765 CONFIG_EXTRA="
1766 aandcttables
1767 ac3dsp
1768 adts_header
1769 audio_frame_queue
1770 audiodsp
1771 blockdsp
1772 bswapdsp
1773 cabac
1774 cbs
1775 cbs_h264
1776 cbs_h265
1777 cbs_mpeg2
1778 dirac_parse
1779 dvprofile
1780 faandct
1781 faanidct
1782 fdctdsp
1783 flacdsp
1784 fmtconvert
1785 g722dsp
1786 gmp
1787 golomb
1788 gplv3
1789 h263dsp
1790 h264chroma
1791 h264dsp
1792 h264parse
1793 h264pred
1794 h264qpel
1795 hevcparse
1796 hpeldsp
1797 huffman
1798 huffyuvdsp
1799 huffyuvencdsp
1800 idctdsp
1801 iirfilter
1802 imdct15
1803 intrax8
1804 iso_media
1805 ividsp
1806 jpegtables
1807 lgplv3
1808 libx262
1809 libxcb_shape
1810 lpc
1811 lzf
1812 me_cmp
1813 mpeg_er
1814 mpegaudio
1815 mpegaudiodsp
1816 mpegaudioheader
1817 mpegvideo
1818 mpegvideoenc
1819 mss34dsp
1820 pixblockdsp
1821 qpeldsp
1822 qsv
1823 qsvdec
1824 qsvenc
1825 qsvvpp
1826 rangecoder
1827 riffdec
1828 riffenc
1829 rtpdec
1830 rtpenc_chain
1831 rv34dsp
1832 sinewin
1833 snappy
1834 srtp
1835 startcode
1836 texturedsp
1837 texturedspenc
1838 tpeldsp
1839 vaapi_encode
1840 vc1dsp
1841 videodsp
1842 vp3dsp
1843 vp56dsp
1844 vp8dsp
1845 wma_freqs
1846 wmv2dsp
1847 "
1848
1849 CMDLINE_SELECT="
1850 $ARCH_EXT_LIST
1851 $CONFIG_LIST
1852 $HAVE_LIST_CMDLINE
1853 $THREADS_LIST
1854 asm
1855 cross_compile
1856 debug
1857 extra_warnings
1858 logging
1859 lto
1860 optimizations
1861 rpath
1862 "
1863
1864 PATHS_LIST="
1865 bindir
1866 datadir
1867 docdir
1868 incdir
1869 libdir
1870 mandir
1871 prefix
1872 shlibdir
1873 "
1874
1875 CMDLINE_SET="
1876 $PATHS_LIST
1877 ar
1878 arch
1879 as
1880 cc
1881 objcc
1882 cpu
1883 cross_prefix
1884 custom_allocator
1885 dep_cc
1886 env
1887 extra_version
1888 host_cc
1889 host_cflags
1890 host_extralibs
1891 host_ld
1892 host_ldflags
1893 host_os
1894 ignore_tests
1895 ld
1896 logfile
1897 malloc_prefix
1898 nm
1899 optflags
1900 pkg_config
1901 pkg_config_flags
1902 samples
1903 sysinclude
1904 sysroot
1905 target_exec
1906 target_os
1907 target_path
1908 target_samples
1909 toolchain
1910 x86asmexe
1911 "
1912
1913 CMDLINE_APPEND="
1914 extra_cflags
1915 extra_objcflags
1916 host_cppflags
1917 "
1918
1919 # code dependency declarations
1920
1921 # architecture extensions
1922
1923 armv5te_deps="arm"
1924 armv6_deps="arm"
1925 armv6t2_deps="arm"
1926 armv8_deps="aarch64"
1927 neon_deps_any="aarch64 arm"
1928 intrinsics_neon_deps="neon"
1929 vfp_deps_any="aarch64 arm"
1930 vfpv3_deps="vfp"
1931
1932 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1933
1934 altivec_deps="ppc"
1935 dcbzl_deps="ppc"
1936 ldbrx_deps="ppc"
1937 ppc4xx_deps="ppc"
1938 vsx_deps="altivec"
1939 power8_deps="vsx"
1940
1941 loongson_deps="mips"
1942 mips32r1_deps="mips32"
1943 mips32r2_deps="mips32"
1944 mips32r6_deps="mips32"
1945 mips64r1_deps="mips64"
1946 mips64r2_deps="mips64"
1947 mips64r6_deps="mips64"
1948
1949 vis_deps="sparc"
1950
1951 cpunop_deps="i686"
1952 x86_64_select="i686"
1953 x86_64_suggest="fast_cmov"
1954
1955 amd3dnow_deps="mmx"
1956 amd3dnowext_deps="amd3dnow"
1957 i686_deps="x86"
1958 mmx_deps="x86"
1959 mmxext_deps="mmx"
1960 sse_deps="mmxext"
1961 sse2_deps="sse"
1962 sse3_deps="sse2"
1963 ssse3_deps="sse3"
1964 sse4_deps="ssse3"
1965 sse42_deps="sse4"
1966 avx_deps="sse42"
1967 xop_deps="avx"
1968 fma3_deps="avx"
1969 fma4_deps="avx"
1970 avx2_deps="avx"
1971
1972 mmx_external_deps="x86asm"
1973 mmx_inline_deps="inline_asm x86"
1974 mmx_suggest="mmx_external mmx_inline"
1975
1976 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1977 eval dep=\$${ext}_deps
1978 eval ${ext}_external_deps='"${dep}_external"'
1979 eval ${ext}_inline_deps='"${dep}_inline"'
1980 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1981 done
1982
1983 aligned_stack_if_any="aarch64 ppc x86"
1984 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1985 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1986 fast_unaligned_if_any="aarch64 ppc x86"
1987 simd_align_16_if_any="altivec neon sse"
1988 simd_align_32_if_any="avx"
1989
1990 # system capabilities
1991 symver_if_any="symver_asm_label symver_gnu_asm"
1992 valgrind_backtrace_conflict="optimizations"
1993 valgrind_backtrace_deps="valgrind_valgrind_h"
1994
1995 # threading support
1996 atomics_gcc_if="sync_val_compare_and_swap"
1997 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1998 atomics_win32_if="MemoryBarrier"
1999 atomics_native_if_any="$ATOMICS_LIST"
2000 w32threads_deps="atomics_native"
2001 threads_if_any="$THREADS_LIST"
2002
2003 # subsystems
2004 cbs_h264_select="cbs golomb"
2005 cbs_h265_select="cbs golomb"
2006 cbs_mpeg2_select="cbs"
2007 dct_select="rdft"
2008 dirac_parse_select="golomb"
2009 error_resilience_select="me_cmp"
2010 faandct_deps="faan"
2011 faandct_select="fdctdsp"
2012 faanidct_deps="faan"
2013 faanidct_select="idctdsp"
2014 h264dsp_select="startcode"
2015 hevcparse_select="golomb"
2016 intrax8_select="blockdsp idctdsp"
2017 mdct_select="fft"
2018 rdft_select="fft"
2019 me_cmp_select="fdctdsp idctdsp pixblockdsp"
2020 mpeg_er_select="error_resilience"
2021 mpegaudio_select="mpegaudiodsp mpegaudioheader"
2022 mpegaudiodsp_select="dct"
2023 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
2024 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
2025 vc1dsp_select="h264chroma qpeldsp startcode"
2026
2027 # decoders / encoders
2028 aac_decoder_select="adts_header imdct15 mdct sinewin"
2029 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
2030 aac_latm_decoder_select="aac_decoder aac_latm_parser"
2031 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
2032 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
2033 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
2034 adpcm_g722_decoder_select="g722dsp"
2035 adpcm_g722_encoder_select="g722dsp"
2036 aic_decoder_select="golomb idctdsp"
2037 alac_encoder_select="lpc"
2038 als_decoder_select="bswapdsp"
2039 amrnb_decoder_select="lsp"
2040 amrwb_decoder_select="lsp"
2041 amv_decoder_select="sp5x_decoder"
2042 ape_decoder_select="bswapdsp"
2043 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2044 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2045 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2046 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2047 atrac1_decoder_select="mdct sinewin"
2048 atrac3_decoder_select="mdct"
2049 atrac3p_decoder_select="mdct sinewin"
2050 bink_decoder_select="blockdsp hpeldsp"
2051 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2052 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2053 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2054 clearvideo_decoder_select="idctdsp"
2055 cllc_decoder_select="bswapdsp"
2056 comfortnoise_encoder_select="lpc"
2057 cook_decoder_select="audiodsp mdct sinewin"
2058 cscd_decoder_select="lzo"
2059 cscd_decoder_suggest="zlib"
2060 dca_decoder_select="fmtconvert mdct"
2061 dds_decoder_select="texturedsp"
2062 dnxhd_decoder_select="blockdsp idctdsp"
2063 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2064 dvvideo_decoder_select="dvprofile idctdsp"
2065 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2066 dxa_decoder_deps="zlib"
2067 dxv_decoder_select="lzf texturedsp"
2068 eac3_decoder_select="ac3_decoder"
2069 eac3_encoder_select="ac3_encoder"
2070 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2071 eatgq_decoder_select="aandcttables idctdsp"
2072 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2073 exr_decoder_deps="zlib"
2074 ffv1_decoder_select="rangecoder"
2075 ffv1_encoder_select="rangecoder"
2076 ffvhuff_decoder_select="huffyuv_decoder"
2077 ffvhuff_encoder_select="huffyuv_encoder"
2078 fic_decoder_select="golomb"
2079 flac_decoder_select="flacdsp"
2080 flac_encoder_select="bswapdsp flacdsp lpc"
2081 flashsv_decoder_deps="zlib"
2082 flashsv_encoder_deps="zlib"
2083 flashsv2_decoder_deps="zlib"
2084 flv_decoder_select="h263_decoder"
2085 flv_encoder_select="h263_encoder"
2086 fourxm_decoder_select="blockdsp bswapdsp"
2087 fraps_decoder_select="bswapdsp huffman"
2088 g2m_decoder_deps="zlib"
2089 g2m_decoder_select="blockdsp idctdsp jpegtables"
2090 h261_decoder_select="mpeg_er mpegvideo"
2091 h261_encoder_select="aandcttables mpegvideoenc"
2092 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2093 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2094 h263i_decoder_select="h263_decoder"
2095 h263p_encoder_select="h263_encoder"
2096 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2097 h264_decoder_suggest="error_resilience"
2098 hap_decoder_select="snappy texturedsp"
2099 hap_encoder_deps="libsnappy"
2100 hap_encoder_select="texturedspenc"
2101 hevc_decoder_select="bswapdsp cabac hevcparse videodsp"
2102 huffyuv_decoder_select="bswapdsp huffyuvdsp"
2103 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
2104 iac_decoder_select="imc_decoder"
2105 imc_decoder_select="bswapdsp fft mdct sinewin"
2106 indeo3_decoder_select="hpeldsp"
2107 indeo4_decoder_select="ividsp"
2108 indeo5_decoder_select="ividsp"
2109 interplay_video_decoder_select="hpeldsp"
2110 jpegls_decoder_select="mjpeg_decoder"
2111 jv_decoder_select="blockdsp"
2112 lagarith_decoder_select="huffyuvdsp"
2113 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2114 magicyuv_decoder_select="huffyuvdsp"
2115 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2116 metasound_decoder_select="lsp mdct sinewin"
2117 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2118 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2119 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2120 mjpegb_decoder_select="mjpeg_decoder"
2121 mlp_decoder_select="mlp_parser"
2122 motionpixels_decoder_select="bswapdsp"
2123 mp1_decoder_select="mpegaudio"
2124 mp1float_decoder_select="mpegaudio"
2125 mp2_decoder_select="mpegaudio"
2126 mp2float_decoder_select="mpegaudio"
2127 mp3_decoder_select="mpegaudio"
2128 mp3adu_decoder_select="mpegaudio"
2129 mp3adufloat_decoder_select="mpegaudio"
2130 mp3float_decoder_select="mpegaudio"
2131 mp3on4_decoder_select="mpegaudio"
2132 mp3on4float_decoder_select="mpegaudio"
2133 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2134 mpc8_decoder_select="mpegaudiodsp"
2135 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2136 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2137 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2138 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2139 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2140 mpeg4_encoder_select="h263_encoder"
2141 msa1_decoder_select="mss34dsp"
2142 msmpeg4v1_decoder_select="h263_decoder"
2143 msmpeg4v2_decoder_select="h263_decoder"
2144 msmpeg4v2_encoder_select="h263_encoder"
2145 msmpeg4v3_decoder_select="h263_decoder"
2146 msmpeg4v3_encoder_select="h263_encoder"
2147 mss2_decoder_select="error_resilience mpeg_er mpegvideo qpeldsp vc1_decoder"
2148 mts2_decoder_select="mss34dsp"
2149 mxpeg_decoder_select="mjpeg_decoder"
2150 nellymoser_decoder_select="mdct sinewin"
2151 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2152 nuv_decoder_select="idctdsp lzo"
2153 on2avc_decoder_select="mdct"
2154 opus_decoder_deps="avresample"
2155 opus_decoder_select="imdct15"
2156 png_decoder_deps="zlib"
2157 png_encoder_deps="zlib"
2158 png_encoder_select="huffyuvencdsp"
2159 prores_decoder_select="idctdsp"
2160 prores_encoder_select="fdctdsp"
2161 qcelp_decoder_select="lsp"
2162 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2163 ra_144_encoder_select="audio_frame_queue lpc"
2164 ralf_decoder_select="golomb"
2165 rscc_decoder_deps="zlib"
2166 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2167 rv10_encoder_select="h263_encoder"
2168 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2169 rv20_encoder_select="h263_encoder"
2170 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2171 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2172 screenpresso_decoder_deps="zlib"
2173 sipr_decoder_select="lsp"
2174 sp5x_decoder_select="mjpeg_decoder"
2175 svq1_decoder_select="hpeldsp"
2176 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2177 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2178 svq3_decoder_suggest="zlib"
2179 tak_decoder_select="audiodsp"
2180 tdsc_decoder_deps="zlib"
2181 tdsc_decoder_select="mjpeg_decoder"
2182 theora_decoder_select="vp3_decoder"
2183 thp_decoder_select="mjpeg_decoder"
2184 tiff_decoder_suggest="zlib"
2185 tiff_encoder_suggest="zlib"
2186 truehd_decoder_select="mlp_decoder"
2187 truemotion2_decoder_select="bswapdsp"
2188 truespeech_decoder_select="bswapdsp"
2189 tscc_decoder_deps="zlib"
2190 txd_decoder_select="texturedsp"
2191 twinvq_decoder_select="mdct lsp sinewin"
2192 utvideo_decoder_select="bswapdsp huffyuvdsp"
2193 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2194 vble_decoder_select="huffyuvdsp"
2195 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2196 vc1image_decoder_select="vc1_decoder"
2197 vorbis_decoder_select="mdct"
2198 vorbis_encoder_select="mdct"
2199 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2200 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2201 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2202 vp6a_decoder_select="vp6_decoder"
2203 vp6f_decoder_select="vp6_decoder"
2204 vp7_decoder_select="h264pred videodsp vp8dsp"
2205 vp8_decoder_select="h264pred videodsp vp8dsp"
2206 vp9_decoder_select="videodsp vp9_superframe_split_bsf"
2207 webp_decoder_select="vp8_decoder"
2208 wmapro_decoder_select="mdct sinewin wma_freqs"
2209 wmav1_decoder_select="mdct sinewin wma_freqs"
2210 wmav1_encoder_select="mdct sinewin wma_freqs"
2211 wmav2_decoder_select="mdct sinewin wma_freqs"
2212 wmav2_encoder_select="mdct sinewin wma_freqs"
2213 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2214 wmv1_decoder_select="h263_decoder"
2215 wmv1_encoder_select="h263_encoder"
2216 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2217 wmv2_encoder_select="h263_encoder wmv2dsp"
2218 wmv3_decoder_select="vc1_decoder"
2219 wmv3image_decoder_select="wmv3_decoder"
2220 zerocodec_decoder_deps="zlib"
2221 zlib_decoder_deps="zlib"
2222 zlib_encoder_deps="zlib"
2223 zmbv_decoder_deps="zlib"
2224 zmbv_encoder_deps="zlib"
2225
2226 # hardware accelerators
2227 d3d11va_deps="dxva_h ID3D11VideoDecoder"
2228 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32"
2229 vda_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension pthreads"
2230 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2231
2232 h263_vaapi_hwaccel_deps="vaapi"
2233 h263_vaapi_hwaccel_select="h263_decoder"
2234 h264_cuvid_hwaccel_deps="cuvid CUVIDH264PICPARAMS"
2235 h264_cuvid_hwaccel_select="h264_decoder"
2236 h264_d3d11va_hwaccel_deps="d3d11va"
2237 h264_d3d11va_hwaccel_select="h264_decoder"
2238 h264_d3d11va2_hwaccel_deps="d3d11va"
2239 h264_d3d11va2_hwaccel_select="h264_decoder"
2240 h264_dxva2_hwaccel_deps="dxva2"
2241 h264_dxva2_hwaccel_select="h264_decoder"
2242 h264_vaapi_hwaccel_deps="vaapi"
2243 h264_vaapi_hwaccel_select="h264_decoder"
2244 h264_vda_hwaccel_deps="vda"
2245 h264_vda_hwaccel_select="h264_decoder"
2246 h264_vda_old_hwaccel_deps="vda"
2247 h264_vda_old_hwaccel_select="h264_decoder"
2248 h264_vdpau_hwaccel_deps="vdpau"
2249 h264_vdpau_hwaccel_select="h264_decoder"
2250 hevc_cuvid_hwaccel_deps="cuvid CUVIDHEVCPICPARAMS"
2251 hevc_cuvid_hwaccel_select="hevc_decoder"
2252 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2253 hevc_d3d11va_hwaccel_select="hevc_decoder"
2254 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2255 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2256 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2257 hevc_dxva2_hwaccel_select="hevc_decoder"
2258 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2259 hevc_vaapi_hwaccel_select="hevc_decoder"
2260 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2261 hevc_vdpau_hwaccel_select="hevc_decoder"
2262 mpeg1_vdpau_hwaccel_deps="vdpau"
2263 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2264 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2265 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2266 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2267 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2268 mpeg2_dxva2_hwaccel_deps="dxva2"
2269 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2270 mpeg2_vaapi_hwaccel_deps="vaapi"
2271 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2272 mpeg2_vdpau_hwaccel_deps="vdpau"
2273 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2274 mpeg4_vaapi_hwaccel_deps="vaapi"
2275 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2276 mpeg4_vdpau_hwaccel_deps="vdpau"
2277 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2278 vc1_d3d11va_hwaccel_deps="d3d11va"
2279 vc1_d3d11va_hwaccel_select="vc1_decoder"
2280 vc1_d3d11va2_hwaccel_deps="d3d11va"
2281 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2282 vc1_dxva2_hwaccel_deps="dxva2"
2283 vc1_dxva2_hwaccel_select="vc1_decoder"
2284 vc1_vaapi_hwaccel_deps="vaapi"
2285 vc1_vaapi_hwaccel_select="vc1_decoder"
2286 vc1_vdpau_hwaccel_deps="vdpau"
2287 vc1_vdpau_hwaccel_select="vc1_decoder"
2288 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2289 vp8_vaapi_hwaccel_select="vp8_decoder"
2290 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2291 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2292 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2293 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2294 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2295
2296 # hardware-accelerated codecs
2297 amf_deps_any="libdl LoadLibrary"
2298 nvenc_deps_any="libdl LoadLibrary"
2299 omx_deps="libdl pthreads"
2300 omx_rpi_select="omx"
2301 qsv_deps="libmfx"
2302 qsvdec_select="qsv"
2303 qsvenc_select="qsv"
2304 qsvvpp_select="qsv"
2305 vaapi_encode_deps="vaapi"
2306
2307 hwupload_cuda_filter_deps="cuda"
2308 scale_npp_filter_deps="cuda libnpp"
2309
2310 h264_amf_encoder_deps="amf"
2311 h264_mmal_decoder_deps="mmal"
2312 h264_nvenc_encoder_deps="nvenc"
2313 h264_omx_encoder_deps="omx"
2314 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec"
2315 h264_qsv_encoder_select="qsvenc"
2316 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2317 h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
2318 hevc_amf_encoder_deps="amf"
2319 hevc_nvenc_encoder_deps="nvenc"
2320 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec"
2321 hevc_qsv_encoder_select="hevcparse qsvenc"
2322 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2323 hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
2324 mjpeg_qsv_encoder_deps="libmfx"
2325 mjpeg_qsv_encoder_select="qsvenc"
2326 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2327 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2328 mpeg2_mmal_decoder_deps="mmal"
2329 mpeg2_qsv_decoder_select="qsvdec mpegvideo_parser"
2330 mpeg2_qsv_encoder_select="qsvenc"
2331 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2332 mpeg2_vaapi_encoder_select="cbs_mpeg2 vaapi_encode"
2333 mpeg4_omx_encoder_deps="omx"
2334 vc1_mmal_decoder_deps="mmal"
2335 vc1_qsv_decoder_select="qsvdec vc1_parser"
2336 vp8_qsv_decoder_select="qsvdec vp8_parser"
2337 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2338 vp8_vaapi_encoder_select="vaapi_encode"
2339 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
2340 vp9_vaapi_encoder_select="vaapi_encode"
2341
2342 nvenc_h264_encoder_select="h264_nvenc_encoder"
2343 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2344
2345 # parsers
2346 aac_parser_select="adts_header"
2347 h264_parser_select="golomb h264dsp h264parse"
2348 hevc_parser_select="hevcparse"
2349 mpegaudio_parser_select="mpegaudioheader"
2350 mpegvideo_parser_select="mpegvideo"
2351 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2352 vc1_parser_select="vc1dsp"
2353
2354 # bitstream_filters
2355 aac_adtstoasc_bsf_select="adts_header"
2356 h264_metadata_bsf_select="cbs_h264"
2357 h264_redundant_pps_bsf_select="cbs_h264"
2358 hevc_metadata_bsf_select="cbs_h265"
2359 mjpeg2jpeg_bsf_select="jpegtables"
2360 mpeg2_metadata_bsf_select="cbs_mpeg2"
2361 trace_headers_bsf_select="cbs_h264 cbs_h265 cbs_mpeg2"
2362
2363 # external libraries
2364 avisynth_deps="LoadLibrary"
2365 avxsynth_deps="libdl"
2366 avisynth_demuxer_deps_any="avisynth avxsynth"
2367 avisynth_demuxer_select="riffdec"
2368 libaom_av1_decoder_deps="libaom"
2369 libaom_av1_encoder_deps="libaom"
2370 libdcadec_decoder_deps="libdcadec"
2371 libfaac_encoder_deps="libfaac"
2372 libfaac_encoder_select="audio_frame_queue"
2373 libfdk_aac_decoder_deps="libfdk_aac"
2374 libfdk_aac_encoder_deps="libfdk_aac"
2375 libfdk_aac_encoder_select="audio_frame_queue"
2376 libgsm_decoder_deps="libgsm"
2377 libgsm_encoder_deps="libgsm"
2378 libgsm_ms_decoder_deps="libgsm"
2379 libgsm_ms_encoder_deps="libgsm"
2380 libilbc_decoder_deps="libilbc"
2381 libilbc_encoder_deps="libilbc"
2382 libkvazaar_encoder_deps="libkvazaar"
2383 libmp3lame_encoder_deps="libmp3lame"
2384 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2385 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2386 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2387 libopencore_amrnb_encoder_select="audio_frame_queue"
2388 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2389 libopenh264_decoder_deps="libopenh264"
2390 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2391 libopenh264_encoder_deps="libopenh264"
2392 libopenjpeg_decoder_deps="libopenjpeg"
2393 libopenjpeg_encoder_deps="libopenjpeg"
2394 libopus_decoder_deps="libopus"
2395 libopus_encoder_deps="libopus"
2396 libopus_encoder_select="audio_frame_queue"
2397 libschroedinger_decoder_deps="libschroedinger"
2398 libschroedinger_encoder_deps="libschroedinger"
2399 libspeex_decoder_deps="libspeex"
2400 libspeex_encoder_deps="libspeex"
2401 libspeex_encoder_select="audio_frame_queue"
2402 libtheora_encoder_deps="libtheora"
2403 libtwolame_encoder_deps="libtwolame"
2404 libvo_aacenc_encoder_deps="libvo_aacenc"
2405 libvo_aacenc_encoder_select="audio_frame_queue"
2406 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2407 libvorbis_encoder_deps="libvorbis"
2408 libvorbis_encoder_select="audio_frame_queue"
2409 libvpx_vp8_decoder_deps="libvpx"
2410 libvpx_vp8_encoder_deps="libvpx"
2411 libvpx_vp9_decoder_deps="libvpx"
2412 libvpx_vp9_encoder_deps="libvpx"
2413 libwavpack_encoder_deps="libwavpack"
2414 libwavpack_encoder_select="audio_frame_queue"
2415 libwebp_encoder_deps="libwebp"
2416 libx262_encoder_deps="libx262"
2417 libx264_encoder_deps="libx264"
2418 libx265_encoder_deps="libx265"
2419 libxavs_encoder_deps="libxavs"
2420 libxvid_encoder_deps="libxvid mkstemp"
2421
2422 # demuxers / muxers
2423 ac3_demuxer_select="ac3_parser"
2424 asf_demuxer_select="riffdec"
2425 asf_muxer_select="riffenc"
2426 asf_stream_muxer_select="asf_muxer"
2427 avi_demuxer_select="iso_media riffdec"
2428 avi_muxer_select="riffenc"
2429 caf_demuxer_select="iso_media riffdec"
2430 dash_muxer_select="mp4_muxer"
2431 dirac_demuxer_select="dirac_parser"
2432 dv_demuxer_select="dvprofile"
2433 dv_muxer_select="dvprofile"
2434 dxa_demuxer_select="riffdec"
2435 eac3_demuxer_select="ac3_parser"
2436 f4v_muxer_select="mov_muxer"
2437 flac_demuxer_select="flac_parser"
2438 hds_muxer_select="flv_muxer"
2439 hls_muxer_select="mpegts_muxer"
2440 ipod_muxer_select="mov_muxer"
2441 ismv_muxer_select="mov_muxer"
2442 matroska_audio_muxer_select="matroska_muxer"
2443 matroska_demuxer_select="iso_media riffdec"
2444 matroska_demuxer_suggest="bzlib lzo zlib"
2445 matroska_muxer_select="iso_media riffenc"
2446 mmf_muxer_select="riffenc"
2447 mov_demuxer_select="iso_media riffdec"
2448 mov_demuxer_suggest="zlib"
2449 mov_muxer_select="iso_media riffenc rtpenc_chain"
2450 mp3_demuxer_select="mpegaudio_parser"
2451 mp3_muxer_select="mpegaudioheader"
2452 mp4_muxer_select="mov_muxer"
2453 mpegts_demuxer_select="iso_media"
2454 mpegts_muxer_select="adts_muxer latm_muxer"
2455 mpegtsraw_demuxer_select="mpegts_demuxer"
2456 mxf_d10_muxer_select="mxf_muxer"
2457 nut_muxer_select="riffenc"
2458 nuv_demuxer_select="riffdec"
2459 oga_muxer_select="ogg_muxer"
2460 ogg_demuxer_select="dirac_parse"
2461 opus_muxer_select="ogg_muxer"
2462 psp_muxer_select="mov_muxer"
2463 rtp_demuxer_select="sdp_demuxer"
2464 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2465 rtsp_demuxer_select="http_protocol rtpdec"
2466 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2467 sap_demuxer_select="sdp_demuxer"
2468 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2469 sdp_demuxer_select="rtpdec"
2470 smoothstreaming_muxer_select="ismv_muxer"
2471 spdif_demuxer_select="adts_header"
2472 spdif_muxer_select="adts_header"
2473 spx_muxer_select="ogg_muxer"
2474 swf_demuxer_suggest="zlib"
2475 tak_demuxer_select="tak_parser"
2476 tg2_muxer_select="mov_muxer"
2477 tgp_muxer_select="mov_muxer"
2478 w64_demuxer_select="wav_demuxer"
2479 wav_demuxer_select="riffdec"
2480 wav_muxer_select="riffenc"
2481 webm_muxer_select="iso_media riffenc"
2482 wtv_demuxer_select="mpegts_demuxer riffdec"
2483 xmv_demuxer_select="riffdec"
2484 xwma_demuxer_select="riffdec"
2485
2486 # indevs
2487 alsa_indev_deps="alsa"
2488 avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
2489 avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
2490 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2491 fbdev_indev_deps="linux_fb_h"
2492 jack_indev_deps="libjack"
2493 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2494 libcdio_indev_deps="libcdio"
2495 libdc1394_indev_deps="libdc1394"
2496 oss_indev_deps_any="sys_soundcard_h"
2497 pulse_indev_deps="libpulse"
2498 sndio_indev_deps="sndio"
2499 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2500 vfwcap_indev_deps="vfw32 vfwcap_defines"
2501 xcbgrab_indev_deps="libxcb libxcb_shape"
2502 xcbgrab_indev_suggest="libxcb_shm libxcb_xfixes"
2503
2504 # protocols
2505 ffrtmpcrypt_protocol_conflict="librtmp_protocol"
2506 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2507 ffrtmpcrypt_protocol_select="tcp_protocol"
2508 ffrtmphttp_protocol_conflict="librtmp_protocol"
2509 ffrtmphttp_protocol_select="http_protocol"
2510 gopher_protocol_select="network"
2511 http_protocol_select="tcp_protocol"
2512 http_protocol_suggest="zlib"
2513 httpproxy_protocol_select="tcp_protocol"
2514 httpproxy_protocol_suggest="zlib"
2515 https_protocol_select="tls_protocol"
2516 https_protocol_suggest="zlib"
2517 icecast_protocol_select="http_protocol"
2518 librtmp_protocol_deps="librtmp"
2519 librtmpe_protocol_deps="librtmp"
2520 librtmps_protocol_deps="librtmp"
2521 librtmpt_protocol_deps="librtmp"
2522 librtmpte_protocol_deps="librtmp"
2523 mmsh_protocol_select="http_protocol"
2524 mmst_protocol_select="network"
2525 rtmp_protocol_conflict="librtmp_protocol"
2526 rtmp_protocol_select="tcp_protocol"
2527 rtmp_protocol_suggest="zlib"
2528 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2529 rtmpe_protocol_suggest="zlib"
2530 rtmps_protocol_conflict="librtmp_protocol"
2531 rtmps_protocol_select="tls_protocol"
2532 rtmps_protocol_suggest="zlib"
2533 rtmpt_protocol_select="ffrtmphttp_protocol"
2534 rtmpt_protocol_suggest="zlib"
2535 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2536 rtmpte_protocol_suggest="zlib"
2537 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2538 rtmpts_protocol_suggest="zlib"
2539 rtp_protocol_select="udp_protocol"
2540 sctp_protocol_deps="struct_sctp_event_subscribe"
2541 sctp_protocol_select="network"
2542 srtp_protocol_select="rtp_protocol srtp"
2543 tcp_protocol_select="network"
2544 tls_protocol_deps_any="gnutls openssl"
2545 tls_protocol_select="tcp_protocol"
2546 udp_protocol_select="network"
2547 unix_protocol_deps="sys_un_h"
2548 unix_protocol_select="network"
2549
2550 # filters
2551 asyncts_filter_deps="avresample"
2552 blackframe_filter_deps="gpl"
2553 boxblur_filter_deps="gpl"
2554 bs2b_filter_deps="libbs2b"
2555 cropdetect_filter_deps="gpl"
2556 deinterlace_qsv_filter_deps="libmfx"
2557 deinterlace_vaapi_filter_deps="vaapi"
2558 delogo_filter_deps="gpl"
2559 drawtext_filter_deps="libfreetype"
2560 drawtext_filter_suggest="libfontconfig"
2561 frei0r_filter_deps="frei0r libdl"
2562 frei0r_src_filter_deps="frei0r libdl"
2563 hdcd_filter_deps="libhdcd"
2564 hqdn3d_filter_deps="gpl"
2565 interlace_filter_deps="gpl"
2566 movie_filter_deps="avcodec avformat"
2567 ocv_filter_deps="libopencv"
2568 overlay_qsv_filter_deps="libmfx"
2569 overlay_qsv_filter_select="qsvvpp"
2570 resample_filter_deps="avresample"
2571 scale_filter_deps="swscale"
2572 scale_qsv_filter_deps="libmfx"
2573 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2574 vpp_qsv_filter_deps="libmfx"
2575 vpp_qsv_filter_select="qsvvpp"
2576
2577 # examples
2578 decode_audio_example_deps="avcodec avutil"
2579 decode_video_example_deps="avcodec avutil"
2580 encode_audio_example_deps="avcodec avutil"
2581 encode_video_example_deps="avcodec avutil"
2582 filter_audio_example_deps="avfilter avutil"
2583 metadata_example_deps="avformat avutil"
2584 output_example_deps="avcodec avformat avresample avutil swscale"
2585 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2586 transcode_aac_example_deps="avcodec avformat avresample"
2587
2588 # EXTRALIBS_LIST
2589 cpu_init_extralibs="pthreads_extralibs"
2590 cws2fws_extralibs="zlib_extralibs"
2591
2592 # libraries, in linking order
2593 avcodec_deps="avutil"
2594 avcodec_select="null_bsf"
2595 avdevice_deps="avformat avcodec avutil"
2596 avfilter_deps="avutil"
2597 avformat_deps="avcodec avutil"
2598 avformat_suggest="network"
2599 avresample_deps="avutil"
2600 swscale_deps="avutil"
2601
2602 avcodec_extralibs="pthreads_extralibs libm_extralibs"
2603 avdevice_extralibs="libm_extralibs"
2604 avformat_extralibs="libm_extralibs"
2605 avfilter_extralibs="pthreads_extralibs libm_extralibs"
2606 avresample_extralibs="libm_extralibs"
2607 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"
2608 swscale_extralibs="libm_extralibs"
2609
2610 # programs
2611 avconv_deps="avcodec avfilter avformat avresample swscale"
2612 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2613 fps_filter null_filter resample_filter scale_filter
2614 trim_filter"
2615 avconv_suggest="psapi shell32"
2616 avplay_deps="avcodec avfilter avformat avresample sdl"
2617 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2618 avplay_suggest="shell32"
2619 avprobe_deps="avcodec avformat"
2620 avprobe_suggest="shell32"
2621
2622 # documentation
2623 pod2man_deps="doc"
2624 texi2html_deps="doc"
2625
2626 # default parameters
2627
2628 logfile="avbuild/config.log"
2629
2630 # installation paths
2631 prefix_default="/usr/local"
2632 bindir_default='${prefix}/bin'
2633 datadir_default='${prefix}/share/avconv'
2634 docdir_default='${prefix}/share/doc/libav'
2635 incdir_default='${prefix}/include'
2636 libdir_default='${prefix}/lib'
2637 mandir_default='${prefix}/share/man'
2638 shlibdir_default="$libdir_default"
2639
2640 # toolchain
2641 ar_default="ar"
2642 cc_default="gcc"
2643 host_cc_default="gcc"
2644 x86asmexe_default="nasm"
2645 ln_s="ln -s -f"
2646 nm_default="nm -g"
2647 pkg_config_default=pkg-config
2648 ranlib="ranlib"
2649 strip="strip"
2650 version_script='--version-script'
2651 objformat="elf32"
2652
2653 # machine
2654 arch_default=$(uname -m)
2655 cpu="generic"
2656 intrinsics="none"
2657
2658 # OS
2659 target_os_default=$(tolower $(uname -s))
2660 host_os=$target_os_default
2661
2662 # configurable options
2663 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2664
2665 enable asm
2666 enable debug
2667 enable doc
2668 enable faan faandct faanidct
2669 enable optimizations
2670 enable safe_bitstream_reader
2671 enable static
2672 enable swscale_alpha
2673 enable valgrind_backtrace
2674
2675 # By default, enable only those hwaccels that have no external dependencies.
2676 enable d3d11va dxva2 vda vdpau
2677
2678 # internal components are enabled by default
2679 enable $EXTRALIBS_LIST
2680
2681 # Avoid external, non-system, libraries getting enabled by dependency resolution
2682 disable $EXTERNAL_LIBRARY_LIST
2683
2684 # build settings
2685 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2686 LIBPREF="lib"
2687 LIBSUF=".a"
2688 LIBNAME='$(LIBPREF)$(NAME)$(LIBSUF)'
2689 SLIBPREF="lib"
2690 SLIBSUF=".so"
2691 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
2692 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2693 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2694 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2695 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2696 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2697 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2698
2699 asflags_filter=echo
2700 cflags_filter=echo
2701 ldflags_filter=echo
2702
2703 AS_C='-c'
2704 AS_O='-o $@'
2705 CC_C='-c'
2706 CC_E='-E -o $@'
2707 CC_O='-o $@'
2708 OBJCC_C='-c'
2709 OBJCC_E='-E -o $@'
2710 OBJCC_O='-o $@'
2711 X86ASM_O='-o $@'
2712 LD_O='-o $@'
2713 LD_LIB='-l%'
2714 LD_PATH='-L'
2715 HOSTCC_C='-c'
2716 HOSTCC_E='-E -o $@'
2717 HOSTCC_O='-o $@'
2718 HOSTLD_O='-o $@'
2719
2720 host_extralibs='-lm'
2721 host_cflags_filter=echo
2722 host_ldflags_filter=echo
2723
2724 target_path='$(CURDIR)'
2725
2726 # since the object filename is not given with the -MM flag, the compiler
2727 # is only able to print the basename, and we must add the path ourselves
2728 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2729 DEPFLAGS='-MM'
2730
2731 mkdir -p avbuild
2732
2733 # find source path
2734 if test -f configure; then
2735 source_path=.
2736 else
2737 source_path=$(cd $(dirname "$0"); pwd)
2738 echo "$source_path" | grep -q '[[:blank:]]' &&
2739 die "Out of tree builds are impossible with whitespace in source path."
2740 test -e "$source_path/config.h" &&
2741 die "Out of tree builds are impossible with config.h in source dir."
2742 fi
2743
2744 for v in "$@"; do
2745 r=${v#*=}
2746 l=${v%"$r"}
2747 r=$(sh_quote "$r")
2748 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2749 done
2750
2751 find_things(){
2752 thing=$1
2753 pattern=$2
2754 file=$source_path/$3
2755 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2756 }
2757
2758 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2759 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2760 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2761 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2762 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2763 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2764 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2765
2766 find_things_extern(){
2767 thing=$1
2768 pattern=$2
2769 file=$source_path/$3
2770 sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2771 }
2772
2773 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2774 HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h)
2775 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2776
2777 AVCODEC_COMPONENTS_LIST="
2778 $BSF_LIST
2779 $DECODER_LIST
2780 $ENCODER_LIST
2781 $HWACCEL_LIST
2782 $PARSER_LIST
2783 "
2784
2785 AVDEVICE_COMPONENTS_LIST="
2786 $INDEV_LIST
2787 "
2788
2789 AVFILTER_COMPONENTS_LIST="
2790 $FILTER_LIST
2791 "
2792
2793 AVFORMAT_COMPONENTS_LIST="
2794 $DEMUXER_LIST
2795 $MUXER_LIST
2796 $PROTOCOL_LIST
2797 "
2798
2799 ALL_COMPONENTS="
2800 $AVCODEC_COMPONENTS_LIST
2801 $AVDEVICE_COMPONENTS_LIST
2802 $AVFILTER_COMPONENTS_LIST
2803 $AVFORMAT_COMPONENTS_LIST
2804 "
2805
2806 for n in $COMPONENT_LIST; do
2807 v=$(toupper ${n%s})_LIST
2808 eval enable \$$v
2809 eval ${n}_if_any="\$$v"
2810 done
2811
2812 enable $ARCH_EXT_LIST
2813
2814 die_unknown(){
2815 echo "Unknown option \"$1\"."
2816 echo "See $0 --help for available options."
2817 exit 1
2818 }
2819
2820 print_3_columns() {
2821 printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2822 }
2823
2824 show_list() {
2825 suffix=_$1
2826 shift
2827 echo $* | sed s/$suffix//g | print_3_columns
2828 exit 0
2829 }
2830
2831 for opt do
2832 optval="${opt#*=}"
2833 case "$opt" in
2834 --extra-ldflags=*)
2835 add_ldflags $optval
2836 ;;
2837 --extra-ldexeflags=*)
2838 add_ldexeflags $optval
2839 ;;
2840 --extra-ldsoflags=*)
2841 add_ldsoflags $optval
2842 ;;
2843 --extra-libs=*)
2844 add_extralibs $optval
2845 ;;
2846 --disable-devices)
2847 disable $INDEV_LIST
2848 ;;
2849 --enable-debug=*)
2850 debuglevel="$optval"
2851 ;;
2852 --disable-programs)
2853 disable $PROGRAM_LIST
2854 ;;
2855 --disable-everything)
2856 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2857 ;;
2858 --disable-all)
2859 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2860 disable $LIBRARY_LIST $PROGRAM_LIST doc
2861 ;;
2862 --enable-*=*|--disable-*=*)
2863 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2864 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2865 eval list=\$$(toupper $thing)_LIST
2866 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2867 $action $(filter "$name" $list)
2868 ;;
2869 --enable-yasm|--disable-yasm)
2870 warn "The ${opt} option is only provided for compatibility and will be\n"\
2871 "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
2872 test $opt = --enable-yasm && x86asm=yes || x86asm=no
2873 ;;
2874 --enable-?*|--disable-?*)
2875 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2876 if is_in $option $COMPONENT_LIST; then
2877 test $action = disable && action=unset
2878 eval $action \$$(toupper ${option%s})_LIST
2879 elif is_in $option $CMDLINE_SELECT; then
2880 $action $option
2881 else
2882 die_unknown $opt
2883 fi
2884 ;;
2885 --list-*)
2886 NAME="${opt#--list-}"
2887 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2888 NAME=${NAME%s}
2889 eval show_list $NAME \$$(toupper $NAME)_LIST
2890 ;;
2891 --help|-h) show_help
2892 ;;
2893 --quiet|-q) quiet=yes
2894 ;;
2895 *)
2896 optname="${opt%%=*}"
2897 optname="${optname#--}"
2898 optname=$(echo "$optname" | sed 's/-/_/g')
2899 if is_in $optname $CMDLINE_SET; then
2900 eval $optname='$optval'
2901 elif is_in $optname $CMDLINE_APPEND; then
2902 append $optname "$optval"
2903 else
2904 die_unknown $opt
2905 fi
2906 ;;
2907 esac
2908 done
2909
2910 for e in $env; do
2911 eval "export $e"
2912 done
2913
2914 disabled logging && logfile=/dev/null
2915
2916 # command line configuration sanity checks
2917
2918 # we need to build at least one lib type
2919 if ! enabled_any static shared; then
2920 cat <<EOF
2921 At least one library type must be built.
2922 Specify --enable-static to build the static libraries or --enable-shared to
2923 build the shared libraries as well. To only build the shared libraries specify
2924 --disable-static in addition to --enable-shared.
2925 EOF
2926 exit 1
2927 fi
2928
2929 # Die early if licensing-related configure options are incompatible.
2930 die_license_disabled() {
2931 enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2932 }
2933
2934 map "die_license_disabled gpl" $EXTERNAL_LIBRARY_GPL_LIST
2935 map "die_license_disabled nonfree" $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2936 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2937
2938 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2939
2940 if enabled nonfree; then
2941 license="nonfree and unredistributable"
2942 elif enabled gplv3; then
2943 license="GPL version 3 or later"
2944 elif enabled lgplv3; then
2945 license="LGPL version 3 or later"
2946 elif enabled gpl; then
2947 license="GPL version 2 or later"
2948 else
2949 license="LGPL version 2.1 or later"
2950 fi
2951
2952 enabled_all gnutls openssl &&
2953 die "GnuTLS and OpenSSL must not be enabled at the same time."
2954
2955 # Disable all the library-specific components if the library itself
2956 # is disabled, see AVCODEC_LIST and following _LIST variables.
2957
2958 disable_components(){
2959 disabled ${1} && disable $(
2960 eval components="\$$(toupper ${1})_COMPONENTS"
2961 map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2962 )
2963 }
2964
2965 map 'disable_components $v' $LIBRARY_LIST
2966
2967 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2968 set >> $logfile
2969
2970 case "$toolchain" in
2971 *-asan)
2972 cc_default="${toolchain%-asan}"
2973 add_cflags -fsanitize=address
2974 add_ldflags -fsanitize=address
2975 ;;
2976 *-msan)
2977 cc_default="${toolchain%-msan}"
2978 add_cflags -fsanitize=memory -fsanitize-memory-track-origins
2979 add_ldflags -fsanitize=memory
2980 ;;
2981 *-tsan)
2982 cc_default="${toolchain%-tsan}"
2983 add_cflags -fsanitize=thread -fPIE
2984 add_ldflags -fsanitize=thread -pie
2985 case "$toolchain" in
2986 gcc-tsan)
2987 add_cflags -fPIC
2988 add_ldflags -fPIC
2989 ;;
2990 esac
2991 ;;
2992 *-usan)
2993 cc_default="${toolchain%-usan}"
2994 add_cflags -fsanitize=undefined
2995 add_ldflags -fsanitize=undefined
2996 case "$toolchain" in
2997 clang-usan)
2998 add_cflags -O1
2999 ;;
3000 esac
3001 ;;
3002 valgrind-*)
3003 target_exec_default="valgrind"
3004 case "$toolchain" in
3005 valgrind-massif)
3006 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
3007 ;;
3008 valgrind-memcheck)
3009 target_exec_args="--track-origins=yes --leak-check=full"
3010 ;;
3011 esac
3012 ;;
3013 msvc)
3014 # Check whether the current MSVC version needs the C99 converter.
3015 # From MSVC 2013 (compiler major version 18) onwards, it does actually
3016 # support enough of C99 to build libav. Default to the new
3017 # behaviour if the regexp was unable to match anything, since this
3018 # successfully parses the version number of existing supported
3019 # versions that require the converter (MSVC 2010 and 2012).
3020 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
3021 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
3022 cc_default="cl"
3023 else
3024 cc_default="c99wrap cl"
3025 fi
3026 ld_default="$source_path/compat/windows/mslink"
3027 nm_default="dumpbin -symbols"
3028 ar_default="lib"
3029 case "$arch" in
3030 aarch64|arm64)
3031 as_default="armasm64"
3032 ;;
3033 arm*)
3034 as_default="armasm"
3035 ;;
3036 esac
3037 target_os_default="win32"
3038 # Use a relative path for TMPDIR. This makes sure all the
3039 # ffconf temp files are written with a relative path, avoiding
3040 # issues with msys/win32 path conversion for MSVC parameters
3041 # such as -Fo<file> or -out:<file>.
3042 TMPDIR=.
3043 ;;
3044 icl)
3045 cc_default="icl"
3046 ld_default="xilink"
3047 nm_default="dumpbin -symbols"
3048 ar_default="xilib"
3049 target_os_default="win32"
3050 TMPDIR=.
3051 ;;
3052 gcov)
3053 add_cflags -fprofile-arcs -ftest-coverage
3054 add_ldflags -fprofile-arcs -ftest-coverage
3055 ;;
3056 llvm-cov)
3057 add_cflags -fprofile-arcs -ftest-coverage
3058 add_ldflags --coverage
3059 ;;
3060 hardened)
3061 add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3062 add_cflags -fno-strict-overflow -fstack-protector-all
3063 add_ldflags -Wl,-z,relro -Wl,-z,now
3064 ;;
3065 ?*)
3066 die "Unknown toolchain $toolchain"
3067 ;;
3068 esac
3069
3070 if test -n "$cross_prefix"; then
3071 test -n "$arch" && test -n "$target_os" ||
3072 die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
3073 enable cross_compile
3074 fi
3075
3076 ar_default="${cross_prefix}${ar_default}"
3077 cc_default="${cross_prefix}${cc_default}"
3078 objcc_default="${cross_prefix}${objcc_default}"
3079 x86asmexe_default="${cross_prefix}${x86asmexe_default}"
3080 nm_default="${cross_prefix}${nm_default}"
3081 pkg_config_default="${cross_prefix}${pkg_config_default}"
3082 ranlib="${cross_prefix}${ranlib}"
3083 strip="${cross_prefix}${strip}"
3084
3085 sysinclude_default="${sysroot}/usr/include"
3086
3087 set_default arch cc pkg_config sysinclude target_exec target_os x86asmexe
3088 enabled cross_compile || host_cc_default=$cc
3089 set_default host_cc
3090
3091 if ! $pkg_config --version >/dev/null 2>&1; then
3092 warn "$pkg_config not found, library detection may fail."
3093 pkg_config=false
3094 fi
3095
3096 exesuf() {
3097 case $1 in
3098 mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3099 esac
3100 }
3101
3102 EXESUF=$(exesuf $target_os)
3103 HOSTEXESUF=$(exesuf $host_os)
3104
3105 # set temporary file name
3106 : ${TMPDIR:=$TEMPDIR}
3107 : ${TMPDIR:=$TMP}
3108 : ${TMPDIR:=/tmp}
3109
3110 if ! test_cmd mktemp -u XXXXXX; then
3111 # simple replacement for missing mktemp
3112 # NOT SAFE FOR GENERAL USE
3113 mktemp(){
3114 tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3115 echo "$tmpname"
3116 mkdir "$tmpname"
3117 }
3118 fi
3119
3120 AVTMPDIR=$(mktemp -d "${TMPDIR}/avconf.XXXXXXXX" 2> /dev/null) ||
3121 die "Unable to create temporary directory in $TMPDIR."
3122
3123 tmpfile(){
3124 tmp="${AVTMPDIR}/test"$2
3125 (set -C; exec > $tmp) 2> /dev/null ||
3126 die "Unable to create temporary file in $AVTMPDIR."
3127 eval $1=$tmp
3128 }
3129
3130 trap 'rm -rf -- "$AVTMPDIR"' EXIT
3131 trap 'exit 2' INT
3132
3133 tmpfile TMPASM .asm
3134 tmpfile TMPC .c
3135 tmpfile TMPE $EXESUF
3136 tmpfile TMPH .h
3137 tmpfile TMPO .o
3138 tmpfile TMPS .S
3139 tmpfile TMPSH .sh
3140 tmpfile TMPV .ver
3141
3142 unset -f mktemp
3143
3144 chmod +x $TMPE
3145
3146 # make sure we can execute files in $TMPDIR
3147 cat > $TMPSH 2>> $logfile <<EOF
3148 #! /bin/sh
3149 EOF
3150 chmod +x $TMPSH >> $logfile 2>&1
3151 if ! $TMPSH >> $logfile 2>&1; then
3152 cat <<EOF
3153 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
3154 variable to another directory and make sure that it is not mounted noexec.
3155 EOF
3156 die "Sanity test failed."
3157 fi
3158
3159 armasm_flags(){
3160 for flag; do
3161 case $flag in
3162 # Filter out MSVC cl.exe options from cflags that shouldn't
3163 # be passed to gas-preprocessor
3164 -M[TD]*) ;;
3165 *) echo $flag ;;
3166 esac
3167 done
3168 }
3169
3170 cparser_flags(){
3171 for flag; do
3172 case $flag in
3173 -Wno-switch) echo -Wno-switch-enum ;;
3174 -Wno-format-zero-length) ;;
3175 -Wdisabled-optimization) ;;
3176 -Wno-pointer-sign) echo -Wno-other ;;
3177 *) echo $flag ;;
3178 esac
3179 done
3180 }
3181
3182 msvc_common_flags(){
3183 for flag; do
3184 case $flag in
3185 # In addition to specifying certain flags under the compiler
3186 # specific filters, they must be specified here as well or else the
3187 # generic catch all at the bottom will print the original flag.
3188 -Wall) ;;
3189 -Wextra) ;;
3190 -std=c99) ;;
3191 # Common flags
3192 -fomit-frame-pointer) ;;
3193 -g) echo -Z7 ;;
3194 -fno-math-errno) ;;
3195 -fno-common) ;;
3196 -fno-signed-zeros) ;;
3197 -fPIC) ;;
3198 -mthumb) ;;
3199 -march=*) ;;
3200 -lz) echo zlib.lib ;;
3201 -lx264) echo libx264.lib ;;
3202 -l*) echo ${flag#-l}.lib ;;
3203 -L*) echo -libpath:${flag#-L} ;;
3204 *) echo $flag ;;
3205 esac
3206 done
3207 }
3208
3209 msvc_flags(){
3210 msvc_common_flags "$@"
3211 for flag; do
3212 case $flag in
3213 -Wall) echo -W3 -wd4018 -wd4146 -wd4244 -wd4305 \
3214 -wd4554 ;;
3215 -Wextra) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
3216 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3217 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3218 -wd4273 -wd4554 -wd4701 -wd4703 ;;
3219 esac
3220 done
3221 }
3222
3223 icl_flags(){
3224 msvc_common_flags "$@"
3225 for flag; do
3226 case $flag in
3227 # Despite what Intel's documentation says -Wall, which is supported
3228 # on Windows, does enable remarks so disable them here.
3229 -Wall) echo $flag -Qdiag-disable:remark ;;
3230 -std=c99) echo -Qstd=c99 ;;
3231 esac
3232 done
3233 }
3234
3235 suncc_flags(){
3236 for flag; do
3237 case $flag in
3238 -march=*|-mcpu=*)
3239 case "${flag#*=}" in
3240 native) echo -xtarget=native ;;
3241 v9|niagara) echo -xarch=sparc ;;
3242 ultrasparc) echo -xarch=sparcvis ;;
3243 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
3244 i586|pentium) echo -xchip=pentium ;;
3245 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
3246 pentium3*|c3-2) echo -xtarget=pentium3 ;;
3247 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
3248 pentium4*) echo -xtarget=pentium4 ;;
3249 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
3250 *-sse3) echo -xarch=sse3 ;;
3251 core2) echo -xarch=ssse3 -xchip=core2 ;;
3252 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
3253 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
3254 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
3255 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
3256 k8|opteron|athlon64|athlon-fx)
3257 echo -xarch=sse2a ;;
3258 athlon*) echo -xarch=pentium_proa ;;
3259 esac
3260 ;;
3261 -std=c99) echo -xc99 ;;
3262 -fomit-frame-pointer) echo -xregs=frameptr ;;
3263 -fPIC) echo -KPIC -xcode=pic32 ;;
3264 -W*,*) echo $flag ;;
3265 -f*-*|-W*|-mimpure-text) ;;
3266 -shared) echo -G ;;
3267 *) echo $flag ;;
3268 esac
3269 done
3270 }
3271
3272 probe_cc(){
3273 pfx=$1
3274 _cc=$2
3275
3276 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3277 unset _ld_o _ldflags _ld_lib _ld_path
3278 unset _depflags _DEPCMD _DEPFLAGS
3279 _flags_filter=echo
3280
3281 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3282 _type=llvm_gcc
3283 gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3284 _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3285 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3286 _cflags_speed='-O3'
3287 _cflags_size='-Os'
3288 elif $_cc -v 2>&1 | grep -qi ^gcc; then
3289 _type=gcc
3290 gcc_version=$($_cc --version | head -n1)
3291 gcc_basever=$($_cc -dumpversion)
3292 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3293 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3294 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3295 if ! $_cc -dumpversion | grep -q '^2\.'; then
3296 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3297 fi
3298 _cflags_speed='-O3'
3299 _cflags_size='-Os'
3300 elif $_cc --version 2>/dev/null | grep -q ^icc; then
3301 _type=icc
3302 _ident=$($_cc --version | head -n1)
3303 _depflags='-MMD'
3304 _cflags_speed='-O3'
3305 _cflags_size='-Os'
3306 _cflags_noopt='-O1'
3307 elif $_cc -v 2>&1 | grep -q xlc; then
3308 _type=xlc
3309 _ident=$($_cc -qversion 2>/dev/null | head -n1)
3310 _cflags_speed='-O5'
3311 _cflags_size='-O5 -qcompact'
3312 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3313 test -d "$sysroot" || die "No valid sysroot specified."
3314 _type=armcc
3315 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3316 armcc_conf="$PWD/armcc.conf"
3317 $_cc --arm_linux_configure \
3318 --arm_linux_config_file="$armcc_conf" \
3319 --configure_sysroot="$sysroot" \
3320 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3321 die "Error creating armcc configuration file."
3322 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3323 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3324 as_default="${cross_prefix}gcc"
3325 _depflags='-MMD'
3326 _cflags_speed='-O3'
3327 _cflags_size='-Os'
3328 elif $_cc -v 2>&1 | grep -q clang; then
3329 _type=clang
3330 _ident=$($_cc --version 2>/dev/null | head -n1)
3331 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3332 _cflags_speed='-O3'
3333 _cflags_size='-Os'
3334 elif $_cc -V 2>&1 | grep -q Sun; then
3335 _type=suncc
3336 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3337 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3338 _DEPFLAGS='-xM1 -xc99'
3339 _ldflags='-std=c99'
3340 _cflags_speed='-O5'
3341 _cflags_size='-O5 -xspace'
3342 _flags_filter=suncc_flags
3343 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3344 _type=pathscale
3345 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3346 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3347 _cflags_speed='-O2'
3348 _cflags_size='-Os'
3349 _flags_filter='filter_out -Wdisabled-optimization'
3350 elif $_cc -v 2>&1 | grep -q Open64; then
3351 _type=open64
3352 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3353 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3354 _cflags_speed='-O2'
3355 _cflags_size='-Os'
3356 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3357 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3358 _type=armasm
3359 _ident=$($_cc | head -n1)
3360 # 4509: "This form of conditional instruction is deprecated"
3361 _flags="-nologo -ignore 4509"
3362 _flags_filter=armasm_flags
3363 elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3364 _type=msvc
3365 _ident=$($_cc 2>&1 | head -n1)
3366 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3367 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3368 _cflags_speed="-O2"
3369 _cflags_size="-O1"
3370 _cflags_noopt="-O1"
3371 if $_cc -nologo- 2>&1 | grep -q Linker; then
3372 _ld_o='-out:$@'
3373 else
3374 _ld_o='-Fe$@'
3375 fi
3376 _cc_o='-Fo$@'
3377 _cc_e='-P -Fi$@'
3378 _flags_filter=msvc_flags
3379 _ld_lib='lib%.a'
3380 _ld_path='-libpath:'
3381 _flags='-nologo'
3382 elif $_cc 2>&1 | grep -q Intel; then
3383 _type=icl
3384 _ident=$($_cc 2>&1 | head -n1)
3385 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3386 # Not only is O3 broken on 13.x+ but it is slower on all previous
3387 # versions (tested) as well.
3388 _cflags_speed="-O2"
3389 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3390 if $_cc 2>&1 | grep -q Linker; then
3391 _ld_o='-out:$@'
3392 else
3393 _ld_o='-Fe$@'
3394 fi
3395 _cc_o='-Fo$@'
3396 _cc_e='-P'
3397 _flags_filter=icl_flags
3398 _ld_lib='lib%.a'
3399 _ld_path='-libpath:'
3400 # -Qdiag-error to make icl error when seeing certain unknown arguments
3401 _flags='-nologo -Qdiag-error:4044,10157'
3402 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3403 # with MSVC which enables it by default.
3404 _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3405 elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3406 # lld can emulate multiple different linkers; in ms link.exe mode,
3407 # the -? parameter gives the help output which contains an identifyable
3408 # string, while it gives an error in other modes.
3409 _type=lld-link
3410 # The link.exe mode doesn't have a switch for getting the version,
3411 # but we can force it back to gnu mode and get the version from there.
3412 _ident=$($_cc -flavor gnu --version 2>/dev/null)
3413 _ld_o='-out:$@'
3414 _flags_filter=msvc_flags
3415 _ld_lib='lib%.a'
3416 _ld_path='-libpath:'
3417 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3418 _type=cparser
3419 _ident=$($_cc --version | head -n1)
3420 _depflags='-MMD'
3421 _cflags_speed='-O4'
3422 _cflags_size='-O2'
3423 _flags_filter=cparser_flags
3424 fi
3425
3426 eval ${pfx}_type=\$_type
3427 eval ${pfx}_ident=\$_ident
3428 }
3429
3430 set_ccvars(){
3431 eval ${1}_C=\${_cc_c-\${${1}_C}}
3432 eval ${1}_E=\${_cc_e-\${${1}_E}}
3433 eval ${1}_O=\${_cc_o-\${${1}_O}}
3434
3435 if [ -n "$_depflags" ]; then
3436 eval ${1}_DEPFLAGS=\$_depflags
3437 else
3438 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3439 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3440 eval DEP${1}FLAGS=\$_flags
3441 fi
3442 }
3443
3444 probe_cc cc "$cc"
3445 cflags_filter=$_flags_filter
3446 cflags_speed=$_cflags_speed
3447 cflags_size=$_cflags_size
3448 cflags_noopt=$_cflags_noopt
3449 add_cflags $_flags $_cflags
3450 cc_ldflags=$_ldflags
3451 set_ccvars CC
3452
3453 probe_cc hostcc "$host_cc"
3454 host_cflags_filter=$_flags_filter
3455 host_cflags_speed=$_cflags_speed
3456 add_host_cflags $_flags $_cflags
3457 set_ccvars HOSTCC
3458
3459 test -n "$cc_type" && enable $cc_type ||
3460 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3461
3462 : ${as_default:=$cc}
3463 : ${objcc_default:=$cc}
3464 : ${dep_cc_default:=$cc}
3465 : ${ld_default:=$cc}
3466 : ${host_ld_default:=$host_cc}
3467 set_default ar as objcc dep_cc ld host_ld
3468
3469 probe_cc as "$as"
3470 asflags_filter=$_flags_filter
3471 add_asflags $_flags $_cflags
3472 set_ccvars AS
3473
3474 probe_cc objcc "$objcc"
3475 objcflags_filter=$_flags_filter
3476 add_objcflags $_flags $_cflags
3477 set_ccvars OBJC
3478
3479 probe_cc ld "$ld"
3480 ldflags_filter=$_flags_filter
3481 add_ldflags $_flags $_ldflags
3482 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3483 LD_O=${_ld_o-$LD_O}
3484 LD_LIB=${_ld_lib-$LD_LIB}
3485 LD_PATH=${_ld_path-$LD_PATH}
3486
3487 probe_cc hostld "$host_ld"
3488 host_ldflags_filter=$_flags_filter
3489 add_host_ldflags $_flags $_ldflags
3490 HOSTLD_O=${_ld_o-$HOSTLD_O}
3491
3492 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3493 probe_cc depcc "$dep_cc"
3494 CCDEP=${_DEPCMD:-$DEPCMD}
3495 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3496 DEPCCFLAGS=$_flags
3497 fi
3498
3499 if $ar 2>&1 | grep -q Microsoft; then
3500 arflags="-nologo"
3501 ar_o='-out:$@'
3502 else
3503 arflags="rc"
3504 ar_o='$@'
3505 fi
3506
3507 add_cflags $extra_cflags
3508 add_objcflags $extra_objcflags
3509 add_asflags $extra_cflags
3510
3511 if test -n "$sysroot"; then
3512 case "$cc_type" in
3513 gcc|llvm_gcc|clang)
3514 add_cppflags --sysroot="$sysroot"
3515 add_ldflags --sysroot="$sysroot"
3516 ;;
3517 esac
3518 fi
3519
3520 if test "$cpu" = host; then
3521 enabled cross_compile &&
3522 die "--cpu=host makes no sense when cross-compiling."
3523
3524 case "$cc_type" in
3525 gcc|llvm_gcc)
3526 check_native(){
3527 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3528 sed -n "/cc1.*$1=/{
3529 s/.*$1=\\([^ ]*\\).*/\\1/
3530 p
3531 q
3532 }" $TMPE
3533 }
3534 cpu=$(check_native -march || check_native -mcpu)
3535 ;;
3536 esac
3537
3538 test "${cpu:-host}" = host &&
3539 die "--cpu=host not supported with compiler $cc"
3540 fi
3541
3542 # Deal with common $arch aliases
3543 case "$arch" in
3544 aarch64|arm64)
3545 arch="aarch64"
3546 ;;
3547 arm*)
3548 arch="arm"
3549 ;;
3550 mips*|IP*)
3551 case "$arch" in
3552 *el)
3553 add_cppflags -EL
3554 add_ldflags -EL
3555 ;;
3556 *eb)
3557 add_cppflags -EB
3558 add_ldflags -EB
3559 ;;
3560 esac
3561 arch="mips"
3562 ;;
3563 parisc*|hppa*)
3564 arch="parisc"
3565 ;;
3566 "Power Macintosh"|ppc*|powerpc*)
3567 arch="ppc"
3568 ;;
3569 s390|s390x)
3570 arch="s390"
3571 ;;
3572 sh4|sh)
3573 arch="sh4"
3574 ;;
3575 sun4u|sparc*)
3576 arch="sparc"
3577 ;;
3578 tilegx|tile-gx)
3579 arch="tilegx"
3580 ;;
3581 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3582 arch="x86"
3583 ;;
3584 esac
3585
3586 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3587 enable $arch
3588
3589 # Add processor-specific flags
3590 if enabled aarch64; then
3591
3592 case $cpu in
3593 armv*)
3594 cpuflags="-march=$cpu"
3595 ;;
3596 *)
3597 cpuflags="-mcpu=$cpu"
3598 ;;
3599 esac
3600
3601 elif enabled alpha; then
3602
3603 cpuflags="-mcpu=$cpu"
3604
3605 elif enabled arm; then
3606
3607 check_arm_arch() {
3608 test_cpp_condition stddef.h \
3609 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3610 $cpuflags
3611 }
3612
3613 probe_arm_arch() {
3614 if check_arm_arch 4; then echo armv4
3615 elif check_arm_arch 4T; then echo armv4t
3616 elif check_arm_arch 5; then echo armv5
3617 elif check_arm_arch 5E; then echo armv5e
3618 elif check_arm_arch 5T; then echo armv5t
3619 elif check_arm_arch 5TE; then echo armv5te
3620 elif check_arm_arch 5TEJ; then echo armv5te
3621 elif check_arm_arch 6; then echo armv6
3622 elif check_arm_arch 6J; then echo armv6j
3623 elif check_arm_arch 6K; then echo armv6k
3624 elif check_arm_arch 6Z; then echo armv6z
3625 elif check_arm_arch 6ZK; then echo armv6zk
3626 elif check_arm_arch 6T2; then echo armv6t2
3627 elif check_arm_arch 7; then echo armv7
3628 elif check_arm_arch 7A 7_A; then echo armv7-a
3629 elif check_arm_arch 7S; then echo armv7-a
3630 elif check_arm_arch 7R 7_R; then echo armv7-r
3631 elif check_arm_arch 7M 7_M; then echo armv7-m
3632 elif check_arm_arch 7EM 7E_M; then echo armv7-m
3633 elif check_arm_arch 8A 8_A; then echo armv8-a
3634 fi
3635 }
3636
3637 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3638
3639 case $cpu in
3640 armv*)
3641 cpuflags="-march=$cpu"
3642 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3643 ;;
3644 *)
3645 cpuflags="-mcpu=$cpu"
3646 case $cpu in
3647 cortex-a*) subarch=armv7a ;;
3648 cortex-r*) subarch=armv7r ;;
3649 cortex-m*) enable thumb; subarch=armv7m ;;
3650 arm11*) subarch=armv6 ;;
3651 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3652 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3653 *) subarch=$(probe_arm_arch) ;;
3654 esac
3655 ;;
3656 esac
3657
3658 case "$subarch" in
3659 armv5t*) enable fast_clz ;;
3660 armv[6-8]*) enable fast_clz fast_unaligned ;;
3661 esac
3662
3663 elif enabled avr32; then
3664
3665 case $cpu in
3666 ap7[02]0[0-2])
3667 subarch="avr32_ap"
3668 cpuflags="-mpart=$cpu"
3669 ;;
3670 ap)
3671 subarch="avr32_ap"
3672 cpuflags="-march=$cpu"
3673 ;;
3674 uc3[ab]*)
3675 subarch="avr32_uc"
3676 cpuflags="-mcpu=$cpu"
3677 ;;
3678 uc)
3679 subarch="avr32_uc"
3680 cpuflags="-march=$cpu"
3681 ;;
3682 esac
3683
3684 elif enabled bfin; then
3685
3686 cpuflags="-mcpu=$cpu"
3687
3688 elif enabled mips; then
3689
3690 cpuflags="-march=$cpu"
3691
3692 elif enabled ppc; then
3693
3694 disable ldbrx
3695
3696 case $(tolower $cpu) in
3697 601|ppc601|powerpc601)
3698 cpuflags="-mcpu=601"
3699 disable altivec
3700 ;;
3701 603*|ppc603*|powerpc603*)
3702 cpuflags="-mcpu=603"
3703 disable altivec
3704 ;;
3705 604*|ppc604*|powerpc604*)
3706 cpuflags="-mcpu=604"
3707 disable altivec
3708 ;;
3709 g3|75*|ppc75*|powerpc75*)
3710 cpuflags="-mcpu=750"
3711 disable altivec
3712 ;;
3713 g4|745*|ppc745*|powerpc745*)
3714 cpuflags="-mcpu=7450"
3715 disable vsx
3716 ;;
3717 74*|ppc74*|powerpc74*)
3718 cpuflags="-mcpu=7400"
3719 disable vsx
3720 ;;
3721 g5|970|ppc970|powerpc970)
3722 cpuflags="-mcpu=970"
3723 disable vsx
3724 ;;
3725 power[3-6]*)
3726 cpuflags="-mcpu=$cpu"
3727 disable vsx
3728 ;;
3729 power[7-8]*)
3730 cpuflags="-mcpu=$cpu"
3731 enable ldbrx
3732 ;;
3733 cell)
3734 cpuflags="-mcpu=cell"
3735 enable ldbrx
3736 disable vsx
3737 ;;
3738 e500mc)
3739 cpuflags="-mcpu=e500mc"
3740 disable altivec
3741 ;;
3742 e500v2)
3743 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3744 disable altivec
3745 disable dcbzl
3746 ;;
3747 e500)
3748 cpuflags="-mcpu=8540 -mhard-float"
3749 disable altivec