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