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