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