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