Prepare for 11_beta2 Release
[libav.git] / configure
... / ...
CommitLineData
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.
11LC_ALL=C
12export LC_ALL
13
14# make sure we are running under a compatible shell
15# try to make this part work with most shells
16
17try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
20}
21
22unset foo
23(: ${foo%%bar}) 2> /dev/null
24E1="$?"
25
26(: ${foo?}) 2> /dev/null
27E2="$?"
28
29if 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
55fi
56
57test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59show_help(){
60 cat <<EOF
61Usage: configure [options]
62Options: [defaults in brackets after descriptions]
63
64Help 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
78Standard options:
79 --logfile=FILE log tests and output to FILE [config.log]
80 --disable-logging do not log configure debug information
81 --prefix=PREFIX install in PREFIX [$prefix]
82 --bindir=DIR install binaries in DIR [PREFIX/bin]
83 --datadir=DIR install data files in DIR [PREFIX/share/avconv]
84 --docdir=DIR install documentation in DIR [PREFIX/share/doc/libav]
85 --libdir=DIR install libs in DIR [PREFIX/lib]
86 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
87 --incdir=DIR install includes in DIR [PREFIX/include]
88 --mandir=DIR install man page in DIR [PREFIX/share/man]
89
90Licensing options:
91 --enable-gpl allow use of GPL code, the resulting libs
92 and binaries will be under GPL [no]
93 --enable-version3 upgrade (L)GPL to version 3 [no]
94 --enable-nonfree allow use of nonfree code, the resulting libs
95 and binaries will be unredistributable [no]
96
97Configuration options:
98 --disable-static do not build static libraries [no]
99 --enable-shared build shared libraries [no]
100 --enable-small optimize for size instead of speed
101 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
102 --enable-gray enable full grayscale support (slower color)
103 --disable-swscale-alpha disable alpha channel support in swscale
104 --disable-all disable building components, libraries and programs
105
106Program options:
107 --disable-programs do not build command line programs
108 --disable-avconv disable avconv build
109 --disable-avplay disable avplay build
110 --disable-avprobe disable avprobe build
111 --disable-avserver deprecated, does nothing
112
113Component options:
114 --disable-doc do not build documentation
115 --disable-avdevice disable libavdevice build
116 --disable-avcodec disable libavcodec build
117 --disable-avformat disable libavformat build
118 --disable-avutil disable libavutil build
119 --disable-swscale disable libswscale build
120 --disable-avfilter disable video filter support [no]
121 --disable-avresample disable libavresample build [no]
122 --disable-pthreads disable pthreads [auto]
123 --disable-w32threads disable Win32 threads [auto]
124 --disable-network disable network support [no]
125 --disable-dct disable DCT code
126 --disable-error-resilience disable error resilience code
127 --disable-lsp disable LSP code
128 --disable-lzo disable LZO decoder code
129 --disable-mdct disable MDCT code
130 --disable-rdft disable RDFT code
131 --disable-fft disable FFT code
132
133Hardware accelerators:
134 --enable-dxva2 enable DXVA2 code
135 --enable-vaapi enable VAAPI code
136 --enable-vda enable VDA code
137 --enable-vdpau enable VDPAU code
138
139Individual component options:
140 --disable-everything disable all components listed below
141 --disable-encoder=NAME disable encoder NAME
142 --enable-encoder=NAME enable encoder NAME
143 --disable-encoders disable all encoders
144 --disable-decoder=NAME disable decoder NAME
145 --enable-decoder=NAME enable decoder NAME
146 --disable-decoders disable all decoders
147 --disable-hwaccel=NAME disable hwaccel NAME
148 --enable-hwaccel=NAME enable hwaccel NAME
149 --disable-hwaccels disable all hwaccels
150 --disable-muxer=NAME disable muxer NAME
151 --enable-muxer=NAME enable muxer NAME
152 --disable-muxers disable all muxers
153 --disable-demuxer=NAME disable demuxer NAME
154 --enable-demuxer=NAME enable demuxer NAME
155 --disable-demuxers disable all demuxers
156 --enable-parser=NAME enable parser NAME
157 --disable-parser=NAME disable parser NAME
158 --disable-parsers disable all parsers
159 --enable-bsf=NAME enable bitstream filter NAME
160 --disable-bsf=NAME disable bitstream filter NAME
161 --disable-bsfs disable all bitstream filters
162 --enable-protocol=NAME enable protocol NAME
163 --disable-protocol=NAME disable protocol NAME
164 --disable-protocols disable all protocols
165 --enable-indev=NAME enable input device NAME
166 --disable-indev=NAME disable input device NAME
167 --disable-indevs disable input devices
168 --enable-outdev=NAME enable output device NAME
169 --disable-outdev=NAME disable output device NAME
170 --disable-outdevs disable output devices
171 --disable-devices disable all devices
172 --enable-filter=NAME enable filter NAME
173 --disable-filter=NAME disable filter NAME
174 --disable-filters disable all filters
175
176External library support:
177 --enable-avisynth enable reading of AviSynth script files [no]
178 --enable-bzlib enable bzlib [autodetect]
179 --enable-frei0r enable frei0r video filtering
180 --enable-gnutls enable gnutls [no]
181 --enable-libbs2b enable bs2b DSP library [no]
182 --enable-libcdio enable audio CD grabbing with libcdio
183 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
184 and libraw1394 [no]
185 --enable-libfaac enable AAC encoding via libfaac [no]
186 --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
187 --enable-libfreetype enable libfreetype [no]
188 --enable-libgsm enable GSM de/encoding via libgsm [no]
189 --enable-libilbc enable iLBC de/encoding via libilbc [no]
190 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
191 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
192 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
193 --enable-libopencv enable video filtering via libopencv [no]
194 --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
195 --enable-libopus enable Opus de/encoding via libopus [no]
196 --enable-libpulse enable Pulseaudio input via libpulse [no]
197 --enable-librtmp enable RTMP[E] support via librtmp [no]
198 --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
199 --enable-libspeex enable Speex de/encoding via libspeex [no]
200 --enable-libtheora enable Theora encoding via libtheora [no]
201 --enable-libtwolame enable MP2 encoding via libtwolame [no]
202 --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no]
203 --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
204 --enable-libvorbis enable Vorbis encoding via libvorbis [no]
205 --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
206 --enable-libwavpack enable wavpack encoding via libwavpack [no]
207 --enable-libwebp enable WebP encoding via libwebp [no]
208 --enable-libx264 enable H.264 encoding via x264 [no]
209 --enable-libx265 enable HEVC encoding via x265 [no]
210 --enable-libxavs enable AVS encoding via xavs [no]
211 --enable-libxvid enable Xvid encoding via xvidcore,
212 native MPEG-4/Xvid encoder exists [no]
213 --enable-openssl enable openssl [no]
214 --enable-x11grab enable X11 grabbing [no]
215 --enable-zlib enable zlib [autodetect]
216
217Toolchain options:
218 --arch=ARCH select architecture [$arch]
219 --cpu=CPU select the minimum required CPU (affects
220 instruction selection, may crash on older CPUs)
221 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
222 --enable-cross-compile assume a cross-compiler is used
223 --sysroot=PATH root of cross-build tree
224 --sysinclude=PATH location of cross-build system headers
225 --target-os=OS compiler targets OS [$target_os]
226 --target-exec=CMD command to run executables on target
227 --target-path=DIR path to view of build directory on target
228 --target-samples=DIR path to samples directory on target
229 --toolchain=NAME set tool defaults according to NAME
230 --nm=NM use nm tool
231 --ar=AR use archive tool AR [$ar_default]
232 --as=AS use assembler AS [$as_default]
233 --cc=CC use C compiler CC [$cc_default]
234 --dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
235 --ld=LD use linker LD
236 --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
237 --pkg-config-flags=FLAGS pass additional flags to pkgconf []
238 --host-cc=HOSTCC use host C compiler HOSTCC
239 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
240 --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
241 --host-ld=HOSTLD use host linker HOSTLD
242 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
243 --host-libs=HLIBS use libs HLIBS when linking for host
244 --host-os=OS compiler host OS [$target_os]
245 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
246 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
247 --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
248 --extra-libs=ELIBS add ELIBS [$ELIBS]
249 --extra-version=STRING version string suffix []
250 --optflags=OPTFLAGS override optimization-related compiler flags
251 --build-suffix=SUFFIX library name suffix []
252 --enable-pic build position-independent code
253 --enable-thumb compile for Thumb instruction set
254 --enable-lto use link-time optimization
255
256Advanced options (experts only):
257 --malloc-prefix=PREFIX prefix malloc and related names with PREFIX
258 --disable-symver disable symbol versioning
259 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
260 --disable-safe-bitstream-reader
261 disable buffer boundary checking in bitreaders
262 (faster, but may crash)
263 --enable-memalign-hack emulate memalign, interferes with memory debuggers
264 --enable-sram allow use of on-chip SRAM
265
266Optimization options (experts only):
267 --disable-asm disable all assembly optimizations
268 --disable-altivec disable AltiVec optimizations
269 --disable-amd3dnow disable 3DNow! optimizations
270 --disable-amd3dnowext disable 3DNow! extended optimizations
271 --disable-mmx disable MMX optimizations
272 --disable-mmxext disable MMXEXT optimizations
273 --disable-sse disable SSE optimizations
274 --disable-sse2 disable SSE2 optimizations
275 --disable-sse3 disable SSE3 optimizations
276 --disable-ssse3 disable SSSE3 optimizations
277 --disable-sse4 disable SSE4 optimizations
278 --disable-sse42 disable SSE4.2 optimizations
279 --disable-avx disable AVX optimizations
280 --disable-xop disable XOP optimizations
281 --disable-fma3 disable FMA3 optimizations
282 --disable-fma4 disable FMA4 optimizations
283 --disable-avx2 disable AVX2 optimizations
284 --disable-armv5te disable armv5te optimizations
285 --disable-armv6 disable armv6 optimizations
286 --disable-armv6t2 disable armv6t2 optimizations
287 --disable-vfp disable VFP optimizations
288 --disable-neon disable NEON optimizations
289 --disable-inline-asm disable use of inline assembly
290 --disable-yasm disable use of nasm/yasm assembly
291
292Developer options (useful when working on Libav itself):
293 --disable-debug disable debugging symbols
294 --enable-debug=LEVEL set the debug level [$debuglevel]
295 --disable-optimizations disable compiler optimizations
296 --enable-extra-warnings enable more compiler warnings
297 --samples=PATH location of test samples for FATE, if not set use
298 \$LIBAV_SAMPLES at make invocation time.
299 --enable-neon-clobber-test check NEON registers for clobbering (should be
300 used only for debugging purposes)
301 --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
302 should be used only for debugging purposes)
303 --enable-random randomly enable/disable components
304 --disable-random
305 --enable-random=LIST randomly enable/disable specific components or
306 --disable-random=LIST component groups. LIST is a comma-separated list
307 of NAME[:PROB] entries where NAME is a component
308 (group) and PROB the probability associated with
309 NAME (default 0.5).
310 --random-seed=VALUE seed value for --enable/disable-random
311
312NOTE: Object files are built at the place where configure is launched.
313EOF
314 exit 0
315}
316
317quotes='""'
318
319log(){
320 echo "$@" >> $logfile
321}
322
323log_file(){
324 log BEGIN $1
325 pr -n -t $1 >> $logfile
326 log END $1
327}
328
329echolog(){
330 log "$@"
331 echo "$@"
332}
333
334warn(){
335 log "WARNING: $*"
336 WARNINGS="${WARNINGS}WARNING: $*\n"
337}
338
339die(){
340 echolog "$@"
341 cat <<EOF
342
343If you think configure made a mistake, make sure you are using the latest
344version from Git. If the latest version fails, report the problem to the
345libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
346EOF
347 if disabled logging; then
348 cat <<EOF
349Rerun configure with logging enabled (do not use --disable-logging), and
350include the log this produces with your report.
351EOF
352 else
353 cat <<EOF
354Include the log file "$logfile" produced by configure as this will help
355solving the problem.
356EOF
357 fi
358 exit 1
359}
360
361# Avoid locale weirdness, besides we really just want to translate ASCII.
362toupper(){
363 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
364}
365
366tolower(){
367 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
368}
369
370c_escape(){
371 echo "$*" | sed 's/["\\]/\\\0/g'
372}
373
374sh_quote(){
375 v=$(echo "$1" | sed "s/'/'\\\\''/g")
376 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
377 echo "$v"
378}
379
380cleanws(){
381 echo "$@" | sed 's/^ *//;s/ */ /g;s/ *$//'
382}
383
384filter(){
385 pat=$1
386 shift
387 for v; do
388 eval "case $v in $pat) echo $v ;; esac"
389 done
390}
391
392filter_out(){
393 pat=$1
394 shift
395 for v; do
396 eval "case $v in $pat) ;; *) echo $v ;; esac"
397 done
398}
399
400map(){
401 m=$1
402 shift
403 for v; do eval $m; done
404}
405
406add_suffix(){
407 suffix=$1
408 shift
409 for v; do echo ${v}${suffix}; done
410}
411
412set_all(){
413 value=$1
414 shift
415 for var in $*; do
416 eval $var=$value
417 done
418}
419
420set_weak(){
421 value=$1
422 shift
423 for var; do
424 eval : \${$var:=$value}
425 done
426}
427
428sanitize_var_name(){
429 echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
430}
431
432set_safe(){
433 var=$1
434 shift
435 eval $(sanitize_var_name "$var")='$*'
436}
437
438get_safe(){
439 eval echo \$$(sanitize_var_name "$1")
440}
441
442pushvar(){
443 for pvar in $*; do
444 eval level=\${${pvar}_level:=0}
445 eval ${pvar}_${level}="\$$pvar"
446 eval ${pvar}_level=$(($level+1))
447 done
448}
449
450popvar(){
451 for pvar in $*; do
452 eval level=\${${pvar}_level:-0}
453 test $level = 0 && continue
454 eval level=$(($level-1))
455 eval $pvar="\${${pvar}_${level}}"
456 eval ${pvar}_level=$level
457 eval unset ${pvar}_${level}
458 done
459}
460
461enable(){
462 set_all yes $*
463}
464
465disable(){
466 set_all no $*
467}
468
469enable_weak(){
470 set_weak yes $*
471}
472
473disable_weak(){
474 set_weak no $*
475}
476
477enable_safe(){
478 for var; do
479 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
480 done
481}
482
483disable_safe(){
484 for var; do
485 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
486 done
487}
488
489do_enable_deep(){
490 for var; do
491 enabled $var && continue
492 eval sel="\$${var}_select"
493 eval sgs="\$${var}_suggest"
494 pushvar var sgs
495 enable_deep $sel
496 popvar sgs
497 enable_deep_weak $sgs
498 popvar var
499 done
500}
501
502enable_deep(){
503 do_enable_deep $*
504 enable $*
505}
506
507enable_deep_weak(){
508 for var; do
509 disabled $var && continue
510 pushvar var
511 do_enable_deep $var
512 popvar var
513 enable_weak $var
514 done
515}
516
517enabled(){
518 test "${1#!}" = "$1" && op== || op=!=
519 eval test "x\$${1#!}" $op "xyes"
520}
521
522disabled(){
523 test "${1#!}" = "$1" && op== || op=!=
524 eval test "x\$${1#!}" $op "xno"
525}
526
527enabled_all(){
528 for opt; do
529 enabled $opt || return 1
530 done
531}
532
533disabled_all(){
534 for opt; do
535 disabled $opt || return 1
536 done
537}
538
539enabled_any(){
540 for opt; do
541 enabled $opt && return 0
542 done
543}
544
545disabled_any(){
546 for opt; do
547 disabled $opt && return 0
548 done
549 return 1
550}
551
552set_default(){
553 for opt; do
554 eval : \${$opt:=\$${opt}_default}
555 done
556}
557
558is_in(){
559 value=$1
560 shift
561 for var in $*; do
562 [ $var = $value ] && return 0
563 done
564 return 1
565}
566
567do_check_deps(){
568 for cfg; do
569 cfg="${cfg#!}"
570 enabled ${cfg}_checking && die "Circular dependency for $cfg."
571 disabled ${cfg}_checking && continue
572 enable ${cfg}_checking
573 append allopts $cfg
574
575 eval dep_all="\$${cfg}_deps"
576 eval dep_any="\$${cfg}_deps_any"
577 eval dep_sel="\$${cfg}_select"
578 eval dep_sgs="\$${cfg}_suggest"
579 eval dep_ifa="\$${cfg}_if"
580 eval dep_ifn="\$${cfg}_if_any"
581
582 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
583 do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
584 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
585
586 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
587 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
588 enabled_all $dep_all || disable $cfg
589 enabled_any $dep_any || disable $cfg
590 disabled_any $dep_sel && disable $cfg
591
592 if enabled $cfg; then
593 enable_deep $dep_sel
594 enable_deep_weak $dep_sgs
595 fi
596
597 disable ${cfg}_checking
598 done
599}
600
601check_deps(){
602 unset allopts
603
604 do_check_deps "$@"
605
606 for cfg in $allopts; do
607 enabled $cfg || continue
608 eval dep_extralibs="\$${cfg}_extralibs"
609 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
610 done
611}
612
613print_config(){
614 pfx=$1
615 files=$2
616 shift 2
617 map 'eval echo "$v \${$v:-no}"' "$@" |
618 awk "BEGIN { split(\"$files\", files) }
619 {
620 c = \"$pfx\" toupper(\$1);
621 v = \$2;
622 sub(/yes/, 1, v);
623 sub(/no/, 0, v);
624 for (f in files) {
625 file = files[f];
626 if (file ~ /\\.h\$/) {
627 printf(\"#define %s %d\\n\", c, v) >>file;
628 } else if (file ~ /\\.asm\$/) {
629 printf(\"%%define %s %d\\n\", c, v) >>file;
630 } else if (file ~ /\\.mak\$/) {
631 n = -v ? \"\" : \"!\";
632 printf(\"%s%s=yes\\n\", n, c) >>file;
633 }
634 }
635 }"
636}
637
638print_enabled(){
639 suf=$1
640 shift
641 for v; do
642 enabled $v && printf "%s\n" ${v%$suf};
643 done
644}
645
646append(){
647 var=$1
648 shift
649 eval "$var=\"\$$var $*\""
650}
651
652prepend(){
653 var=$1
654 shift
655 eval "$var=\"$* \$$var\""
656}
657
658unique(){
659 var=$1
660 uniq_list=""
661 for tok in $(eval echo \$$var); do
662 uniq_list="$(filter_out $tok $uniq_list) $tok"
663 done
664 eval "$var=\"${uniq_list}\""
665}
666
667add_cppflags(){
668 append CPPFLAGS "$@"
669}
670
671add_cflags(){
672 append CFLAGS $($cflags_filter "$@")
673}
674
675add_asflags(){
676 append ASFLAGS $($asflags_filter "$@")
677}
678
679add_ldflags(){
680 append LDFLAGS $($ldflags_filter "$@")
681}
682
683add_ldexeflags(){
684 append LDEXEFLAGS $($ldflags_filter "$@")
685}
686
687add_stripflags(){
688 append STRIPFLAGS "$@"
689}
690
691add_extralibs(){
692 prepend extralibs $($ldflags_filter "$@")
693}
694
695add_host_cppflags(){
696 append host_cppflags "$@"
697}
698
699add_host_cflags(){
700 append host_cflags $($host_cflags_filter "$@")
701}
702
703add_host_ldflags(){
704 append host_ldflags $($host_ldflags_filter "$@")
705}
706
707add_compat(){
708 append compat_objs $1
709 shift
710 map 'add_cppflags -D$v' "$@"
711}
712
713check_cmd(){
714 log "$@"
715 "$@" >> $logfile 2>&1
716}
717
718cc_o(){
719 eval printf '%s\\n' $CC_O
720}
721
722cc_e(){
723 eval printf '%s\\n' $CC_E
724}
725
726check_cc(){
727 log check_cc "$@"
728 cat > $TMPC
729 log_file $TMPC
730 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
731}
732
733check_cpp(){
734 log check_cpp "$@"
735 cat > $TMPC
736 log_file $TMPC
737 check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
738}
739
740as_o(){
741 eval printf '%s\\n' $AS_O
742}
743
744check_as(){
745 log check_as "$@"
746 cat > $TMPS
747 log_file $TMPS
748 check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
749}
750
751check_inline_asm(){
752 log check_inline_asm "$@"
753 name="$1"
754 code="$2"
755 shift 2
756 disable $name
757 check_cc "$@" <<EOF && enable $name
758void foo(void){ __asm__ volatile($code); }
759EOF
760}
761
762check_insn(){
763 log check_insn "$@"
764 check_inline_asm ${1}_inline "\"$2\""
765 echo "$2" | check_as && enable ${1}_external || disable ${1}_external
766}
767
768check_yasm(){
769 log check_yasm "$@"
770 echo "$1" > $TMPS
771 log_file $TMPS
772 shift 1
773 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
774}
775
776ld_o(){
777 eval printf '%s\\n' $LD_O
778}
779
780check_ld(){
781 log check_ld "$@"
782 flags=$(filter_out '-l*' "$@")
783 libs=$(filter '-l*' "$@")
784 check_cc $($cflags_filter $flags) || return
785 flags=$($ldflags_filter $flags)
786 libs=$($ldflags_filter $libs)
787 check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
788}
789
790print_include(){
791 hdr=$1
792 test "${hdr%.h}" = "${hdr}" &&
793 echo "#include $hdr" ||
794 echo "#include <$hdr>"
795}
796
797check_code(){
798 log check_code "$@"
799 check=$1
800 headers=$2
801 code=$3
802 shift 3
803 {
804 for hdr in $headers; do
805 print_include $hdr
806 done
807 echo "int main(void) { $code; return 0; }"
808 } | check_$check "$@"
809}
810
811check_cppflags(){
812 log check_cppflags "$@"
813 check_cc "$@" <<EOF && append CPPFLAGS "$@"
814int x;
815EOF
816}
817
818test_cflags(){
819 log test_cflags "$@"
820 set -- $($cflags_filter "$@")
821 check_cc "$@" <<EOF
822int x;
823EOF
824}
825
826check_cflags(){
827 log check_cflags "$@"
828 test_cflags "$@" && add_cflags "$@"
829}
830
831test_ldflags(){
832 log test_ldflags "$@"
833 check_ld "$@" <<EOF
834int main(void){ return 0; }
835EOF
836}
837
838check_ldflags(){
839 log check_ldflags "$@"
840 test_ldflags "$@" && add_ldflags "$@"
841}
842
843test_stripflags(){
844 log test_stripflags "$@"
845 # call check_cc to get a fresh TMPO
846 check_cc <<EOF
847int main(void) { return 0; }
848EOF
849 check_cmd $strip $STRIPFLAGS "$@" $TMPO
850}
851
852check_stripflags(){
853 log check_stripflags "$@"
854 test_stripflags "$@" && add_stripflags "$@"
855}
856
857check_header(){
858 log check_header "$@"
859 header=$1
860 shift
861 disable_safe $header
862 check_cpp "$@" <<EOF && enable_safe $header
863#include <$header>
864int x;
865EOF
866}
867
868check_func(){
869 log check_func "$@"
870 func=$1
871 shift
872 disable $func
873 check_ld "$@" <<EOF && enable $func
874extern int $func();
875int main(void){ $func(); }
876EOF
877}
878
879check_mathfunc(){
880 log check_mathfunc "$@"
881 func=$1
882 narg=$2
883 shift 2
884 test $narg = 2 && args="f, g" || args="f"
885 disable $func
886 check_ld "$@" <<EOF && enable $func
887#include <math.h>
888float foo(float f, float g) { return $func($args); }
889int main(void){ return 0; }
890EOF
891}
892
893check_func_headers(){
894 log check_func_headers "$@"
895 headers=$1
896 funcs=$2
897 shift 2
898 {
899 for hdr in $headers; do
900 print_include $hdr
901 done
902 for func in $funcs; do
903 echo "long check_$func(void) { return (long) $func; }"
904 done
905 echo "int main(void) { return 0; }"
906 } | check_ld "$@" && enable $funcs && enable_safe $headers
907}
908
909check_cpp_condition(){
910 log check_cpp_condition "$@"
911 header=$1
912 condition=$2
913 shift 2
914 check_cpp "$@" <<EOF
915#include <$header>
916#if !($condition)
917#error "unsatisfied condition: $condition"
918#endif
919EOF
920}
921
922check_lib(){
923 log check_lib "$@"
924 header="$1"
925 func="$2"
926 shift 2
927 check_header $header && check_func $func "$@" && add_extralibs "$@"
928}
929
930check_lib2(){
931 log check_lib2 "$@"
932 headers="$1"
933 funcs="$2"
934 shift 2
935 check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
936}
937
938check_pkg_config(){
939 log check_pkg_config "$@"
940 pkg="$1"
941 headers="$2"
942 funcs="$3"
943 shift 3
944 check_cmd $pkg_config --exists --print-errors $pkg || return
945 pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
946 pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
947 check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
948 set_safe ${pkg}_cflags $pkg_cflags &&
949 set_safe ${pkg}_libs $pkg_libs
950}
951
952check_exec(){
953 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
954}
955
956check_exec_crash(){
957 code=$(cat)
958
959 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
960 # are safe but may not be available everywhere. Thus we use
961 # raise(SIGTERM) instead. The check is run in a subshell so we
962 # can redirect the "Terminated" message from the shell. SIGBUS
963 # is not defined by standard C so it is used conditionally.
964
965 (check_exec "$@") >> $logfile 2>&1 <<EOF
966#include <signal.h>
967static void sighandler(int sig){
968 raise(SIGTERM);
969}
970int foo(void){
971 $code
972}
973int (*func_ptr)(void) = foo;
974int main(void){
975 signal(SIGILL, sighandler);
976 signal(SIGFPE, sighandler);
977 signal(SIGSEGV, sighandler);
978#ifdef SIGBUS
979 signal(SIGBUS, sighandler);
980#endif
981 return func_ptr();
982}
983EOF
984}
985
986check_type(){
987 log check_type "$@"
988 headers=$1
989 type=$2
990 shift 2
991 disable_safe "$type"
992 check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
993}
994
995check_struct(){
996 log check_struct "$@"
997 headers=$1
998 struct=$2
999 member=$3
1000 shift 3
1001 disable_safe "${struct}_${member}"
1002 check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1003 enable_safe "${struct}_${member}"
1004}
1005
1006check_builtin(){
1007 log check_builtin "$@"
1008 name=$1
1009 headers=$2
1010 builtin=$3
1011 shift 3
1012 disable "$name"
1013 check_code ld "$headers" "$builtin" "$@" && enable "$name"
1014}
1015
1016check_compile_assert(){
1017 log check_compile_assert "$@"
1018 name=$1
1019 headers=$2
1020 condition=$3
1021 shift 3
1022 disable "$name"
1023 check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1024}
1025
1026require(){
1027 name="$1"
1028 header="$2"
1029 func="$3"
1030 shift 3
1031 check_lib $header $func "$@" || die "ERROR: $name not found"
1032}
1033
1034require2(){
1035 name="$1"
1036 headers="$2"
1037 func="$3"
1038 shift 3
1039 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1040}
1041
1042require_pkg_config(){
1043 pkg="$1"
1044 check_pkg_config "$@" || die "ERROR: $pkg not found"
1045 add_cflags $(get_safe ${pkg}_cflags)
1046 add_extralibs $(get_safe ${pkg}_libs)
1047}
1048
1049hostcc_e(){
1050 eval printf '%s\\n' $HOSTCC_E
1051}
1052
1053hostcc_o(){
1054 eval printf '%s\\n' $HOSTCC_O
1055}
1056
1057check_host_cc(){
1058 log check_host_cc "$@"
1059 cat > $TMPC
1060 log_file $TMPC
1061 check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1062}
1063
1064check_host_cpp(){
1065 log check_host_cpp "$@"
1066 cat > $TMPC
1067 log_file $TMPC
1068 check_cmd $host_cc $HOSTCPPFLAGS $HOSTCFLAGS "$@" $(hostcc_e $TMPO) $TMPC
1069}
1070
1071check_host_cppflags(){
1072 log check_host_cppflags "$@"
1073 check_host_cc "$@" <<EOF && append host_cppflags "$@"
1074int x;
1075EOF
1076}
1077
1078check_host_cflags(){
1079 log check_host_cflags "$@"
1080 set -- $($host_cflags_filter "$@")
1081 check_host_cc "$@" <<EOF && append host_cflags "$@"
1082int x;
1083EOF
1084}
1085
1086check_host_cpp_condition(){
1087 log check_host_cpp_condition "$@"
1088 header=$1
1089 condition=$2
1090 shift 2
1091 check_host_cpp "$@" <<EOF
1092#include <$header>
1093#if !($condition)
1094#error "unsatisfied condition: $condition"
1095#endif
1096EOF
1097}
1098
1099apply(){
1100 file=$1
1101 shift
1102 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1103}
1104
1105cp_if_changed(){
1106 cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1107 mkdir -p "$(dirname $2)"
1108 $cp_f "$1" "$2"
1109}
1110
1111# CONFIG_LIST contains configurable options, while HAVE_LIST is for
1112# system-dependent things.
1113
1114COMPONENT_LIST="
1115 bsfs
1116 decoders
1117 demuxers
1118 encoders
1119 filters
1120 hwaccels
1121 indevs
1122 muxers
1123 outdevs
1124 parsers
1125 protocols
1126"
1127
1128EXAMPLE_LIST="
1129 avcodec_example
1130 filter_audio_example
1131 metadata_example
1132 output_example
1133 transcode_aac_example
1134"
1135
1136EXTERNAL_LIBRARY_LIST="
1137 avisynth
1138 bzlib
1139 frei0r
1140 gnutls
1141 libbs2b
1142 libcdio
1143 libdc1394
1144 libfaac
1145 libfdk_aac
1146 libfontconfig
1147 libfreetype
1148 libgsm
1149 libilbc
1150 libmp3lame
1151 libopencore_amrnb
1152 libopencore_amrwb
1153 libopencv
1154 libopenjpeg
1155 libopus
1156 libpulse
1157 librtmp
1158 libschroedinger
1159 libspeex
1160 libtheora
1161 libtwolame
1162 libvo_aacenc
1163 libvo_amrwbenc
1164 libvorbis
1165 libvpx
1166 libwavpack
1167 libwebp
1168 libx264
1169 libx265
1170 libxavs
1171 libxvid
1172 openssl
1173 x11grab
1174 zlib
1175"
1176
1177FEATURE_LIST="
1178 gray
1179 hardcoded_tables
1180 runtime_cpudetect
1181 safe_bitstream_reader
1182 shared
1183 small
1184 sram
1185 static
1186 swscale_alpha
1187"
1188
1189HWACCEL_LIST="
1190 dxva2
1191 vaapi
1192 vda
1193 vdpau
1194"
1195
1196LIBRARY_LIST="
1197 avcodec
1198 avdevice
1199 avfilter
1200 avformat
1201 avresample
1202 avutil
1203 swscale
1204"
1205
1206LICENSE_LIST="
1207 gpl
1208 nonfree
1209 version3
1210"
1211
1212PROGRAM_LIST="
1213 avconv
1214 avplay
1215 avprobe
1216"
1217
1218SUBSYSTEM_LIST="
1219 dct
1220 doc
1221 error_resilience
1222 fft
1223 lsp
1224 lzo
1225 mdct
1226 network
1227 rdft
1228"
1229
1230CONFIG_LIST="
1231 $COMPONENT_LIST
1232 $EXAMPLE_LIST
1233 $EXTERNAL_LIBRARY_LIST
1234 $FEATURE_LIST
1235 $HWACCEL_LIST
1236 $LICENSE_LIST
1237 $LIBRARY_LIST
1238 $PROGRAM_LIST
1239 $SUBSYSTEM_LIST
1240 memalign_hack
1241 neon_clobber_test
1242 pic
1243 pod2man
1244 texi2html
1245 thumb
1246 xmm_clobber_test
1247"
1248
1249THREADS_LIST="
1250 pthreads
1251 w32threads
1252"
1253
1254ATOMICS_LIST="
1255 atomics_gcc
1256 atomics_suncc
1257 atomics_win32
1258"
1259
1260ARCH_LIST="
1261 aarch64
1262 alpha
1263 arm
1264 avr32
1265 avr32_ap
1266 avr32_uc
1267 bfin
1268 ia64
1269 m68k
1270 mips
1271 mips64
1272 parisc
1273 ppc
1274 ppc64
1275 s390
1276 sh4
1277 sparc
1278 sparc64
1279 tilegx
1280 tilepro
1281 tomi
1282 x86
1283 x86_32
1284 x86_64
1285"
1286
1287ARCH_EXT_LIST_ARM="
1288 armv5te
1289 armv6
1290 armv6t2
1291 armv8
1292 neon
1293 vfp
1294 vfpv3
1295"
1296
1297ARCH_EXT_LIST_X86_SIMD="
1298 amd3dnow
1299 amd3dnowext
1300 avx
1301 avx2
1302 fma3
1303 fma4
1304 mmx
1305 mmxext
1306 sse
1307 sse2
1308 sse3
1309 sse4
1310 sse42
1311 ssse3
1312 xop
1313"
1314
1315ARCH_EXT_LIST_PPC="
1316 altivec
1317 dcbzl
1318 ldbrx
1319 ppc4xx
1320"
1321
1322ARCH_EXT_LIST_X86="
1323 $ARCH_EXT_LIST_X86_SIMD
1324 cpunop
1325 i686
1326"
1327
1328ARCH_EXT_LIST="
1329 $ARCH_EXT_LIST_ARM
1330 $ARCH_EXT_LIST_PPC
1331 $ARCH_EXT_LIST_X86
1332 loongson
1333 vis
1334"
1335
1336ARCH_FEATURES="
1337 aligned_stack
1338 fast_64bit
1339 fast_clz
1340 fast_cmov
1341 local_aligned_8
1342 local_aligned_16
1343 simd_align_16
1344"
1345
1346BUILTIN_LIST="
1347 atomic_cas_ptr
1348 machine_rw_barrier
1349 MemoryBarrier
1350 mm_empty
1351 rdtsc
1352 sync_val_compare_and_swap
1353"
1354HAVE_LIST_CMDLINE="
1355 inline_asm
1356 symver
1357 yasm
1358"
1359
1360HAVE_LIST_PUB="
1361 bigendian
1362 fast_unaligned
1363"
1364
1365HEADERS_LIST="
1366 alsa_asoundlib_h
1367 altivec_h
1368 arpa_inet_h
1369 cdio_paranoia_h
1370 cdio_paranoia_paranoia_h
1371 dev_bktr_ioctl_bt848_h
1372 dev_bktr_ioctl_meteor_h
1373 dev_ic_bt8xx_h
1374 dev_video_bktr_ioctl_bt848_h
1375 dev_video_meteor_ioctl_meteor_h
1376 direct_h
1377 dlfcn_h
1378 dxva_h
1379 gsm_h
1380 io_h
1381 mach_mach_time_h
1382 machine_ioctl_bt848_h
1383 machine_ioctl_meteor_h
1384 malloc_h
1385 poll_h
1386 sndio_h
1387 soundcard_h
1388 sys_mman_h
1389 sys_param_h
1390 sys_resource_h
1391 sys_select_h
1392 sys_soundcard_h
1393 sys_time_h
1394 sys_un_h
1395 sys_videoio_h
1396 unistd_h
1397 windows_h
1398 winsock2_h
1399"
1400
1401INTRINSICS_LIST="
1402 intrinsics_neon
1403"
1404
1405MATH_FUNCS="
1406 atanf
1407 atan2f
1408 cbrtf
1409 cosf
1410 exp2
1411 exp2f
1412 expf
1413 isinf
1414 isnan
1415 ldexpf
1416 llrint
1417 llrintf
1418 log2
1419 log2f
1420 log10f
1421 lrint
1422 lrintf
1423 powf
1424 rint
1425 round
1426 roundf
1427 sinf
1428 trunc
1429 truncf
1430"
1431
1432SYSTEM_FUNCS="
1433 aligned_malloc
1434 closesocket
1435 CommandLineToArgvW
1436 CoTaskMemFree
1437 CryptGenRandom
1438 dlopen
1439 fcntl
1440 flt_lim
1441 fork
1442 getaddrinfo
1443 gethrtime
1444 getopt
1445 GetProcessAffinityMask
1446 GetProcessMemoryInfo
1447 GetProcessTimes
1448 getrusage
1449 getservbyport
1450 GetSystemTimeAsFileTime
1451 gettimeofday
1452 inet_aton
1453 isatty
1454 jack_port_get_latency_range
1455 localtime_r
1456 mach_absolute_time
1457 MapViewOfFile
1458 memalign
1459 mkstemp
1460 mmap
1461 mprotect
1462 nanosleep
1463 posix_memalign
1464 sched_getaffinity
1465 SetConsoleTextAttribute
1466 setmode
1467 setrlimit
1468 Sleep
1469 strerror_r
1470 strptime
1471 sysconf
1472 sysctl
1473 usleep
1474 VirtualAlloc
1475"
1476
1477TOOLCHAIN_FEATURES="
1478 as_dn_directive
1479 as_func
1480 asm_mod_q
1481 attribute_may_alias
1482 attribute_packed
1483 ebp_available
1484 ebx_available
1485 gnu_as
1486 ibm_asm
1487 inline_asm_labels
1488 pragma_deprecated
1489 symver_asm_label
1490 symver_gnu_asm
1491 vfp_args
1492 xform_asm
1493 xmm_clobbers
1494"
1495
1496TYPES_LIST="
1497 socklen_t
1498 struct_addrinfo
1499 struct_group_source_req
1500 struct_ip_mreq_source
1501 struct_ipv6_mreq
1502 struct_pollfd
1503 struct_rusage_ru_maxrss
1504 struct_sockaddr_in6
1505 struct_sockaddr_sa_len
1506 struct_sockaddr_storage
1507 struct_v4l2_frmivalenum_discrete
1508"
1509
1510HAVE_LIST="
1511 $ARCH_EXT_LIST
1512 $(add_suffix _external $ARCH_EXT_LIST)
1513 $(add_suffix _inline $ARCH_EXT_LIST)
1514 $ARCH_FEATURES
1515 $ATOMICS_LIST
1516 $BUILTIN_LIST
1517 $HAVE_LIST_CMDLINE
1518 $HAVE_LIST_PUB
1519 $HEADERS_LIST
1520 $INTRINSICS_LIST
1521 $MATH_FUNCS
1522 $SYSTEM_FUNCS
1523 $THREADS_LIST
1524 $TOOLCHAIN_FEATURES
1525 $TYPES_LIST
1526 atomics_native
1527 dos_paths
1528 dxva2_lib
1529 libc_msvcrt
1530 libdc1394_1
1531 libdc1394_2
1532 sdl
1533 threads
1534 vdpau_x11
1535 xlib
1536"
1537
1538# options emitted with CONFIG_ prefix but not available on the command line
1539CONFIG_EXTRA="
1540 aandcttables
1541 ac3dsp
1542 audio_frame_queue
1543 audiodsp
1544 blockdsp
1545 bswapdsp
1546 cabac
1547 dvprofile
1548 fdctdsp
1549 gcrypt
1550 golomb
1551 gplv3
1552 h263dsp
1553 h264chroma
1554 h264dsp
1555 h264pred
1556 h264qpel
1557 hpeldsp
1558 huffman
1559 huffyuvdsp
1560 huffyuvencdsp
1561 idctdsp
1562 iirfilter
1563 intrax8
1564 lgplv3
1565 lpc
1566 me_cmp
1567 mpeg_er
1568 mpegaudio
1569 mpegaudiodsp
1570 mpegvideo
1571 mpegvideoenc
1572 nettle
1573 pixblockdsp
1574 qpeldsp
1575 rangecoder
1576 riffdec
1577 riffenc
1578 rtpdec
1579 rtpenc_chain
1580 sinewin
1581 startcode
1582 tpeldsp
1583 videodsp
1584 vp3dsp
1585"
1586
1587CMDLINE_SELECT="
1588 $ARCH_EXT_LIST
1589 $CONFIG_LIST
1590 $HAVE_LIST_CMDLINE
1591 $THREADS_LIST
1592 asm
1593 cross_compile
1594 debug
1595 extra_warnings
1596 logging
1597 lto
1598 optimizations
1599"
1600
1601PATHS_LIST="
1602 bindir
1603 datadir
1604 docdir
1605 incdir
1606 libdir
1607 mandir
1608 prefix
1609 shlibdir
1610"
1611
1612CMDLINE_SET="
1613 $PATHS_LIST
1614 ar
1615 arch
1616 as
1617 build_suffix
1618 cc
1619 cpu
1620 cross_prefix
1621 dep_cc
1622 extra_version
1623 host_cc
1624 host_cflags
1625 host_ld
1626 host_ldflags
1627 host_libs
1628 host_os
1629 ld
1630 logfile
1631 malloc_prefix
1632 nm
1633 optflags
1634 pkg_config
1635 pkg_config_flags
1636 random_seed
1637 samples
1638 sysinclude
1639 sysroot
1640 target_exec
1641 target_os
1642 target_path
1643 target_samples
1644 toolchain
1645"
1646
1647CMDLINE_APPEND="
1648 extra_cflags
1649 host_cppflags
1650"
1651
1652# code dependency declarations
1653
1654# architecture extensions
1655
1656armv5te_deps="arm"
1657armv6_deps="arm"
1658armv6t2_deps="arm"
1659armv8_deps="aarch64"
1660neon_deps_any="aarch64 arm"
1661intrinsics_neon_deps="neon"
1662vfp_deps_any="aarch64 arm"
1663vfpv3_deps="vfp"
1664
1665map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1666
1667altivec_deps="ppc"
1668ppc4xx_deps="ppc"
1669
1670cpunop_deps="i686"
1671x86_64_select="i686"
1672x86_64_suggest="fast_cmov"
1673
1674amd3dnow_deps="mmx"
1675amd3dnowext_deps="amd3dnow"
1676i686_deps="x86"
1677mmx_deps="x86"
1678mmxext_deps="mmx"
1679sse_deps="mmxext"
1680sse2_deps="sse"
1681sse3_deps="sse2"
1682ssse3_deps="sse3"
1683sse4_deps="ssse3"
1684sse42_deps="sse4"
1685avx_deps="sse42"
1686xop_deps="avx"
1687fma3_deps="avx"
1688fma4_deps="avx"
1689avx2_deps="avx"
1690
1691mmx_external_deps="yasm"
1692mmx_inline_deps="inline_asm"
1693mmx_suggest="mmx_external mmx_inline"
1694
1695for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1696 eval dep=\$${ext}_deps
1697 eval ${ext}_external_deps='"${dep}_external"'
1698 eval ${ext}_inline_deps='"${dep}_inline"'
1699 eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1700done
1701
1702aligned_stack_if_any="aarch64 ppc x86"
1703fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1704fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1705fast_unaligned_if_any="aarch64 ppc x86"
1706simd_align_16_if_any="altivec neon sse"
1707
1708# system capabilities
1709log2_deps="!libc_msvcrt"
1710
1711symver_if_any="symver_asm_label symver_gnu_asm"
1712
1713# threading support
1714atomics_gcc_if="sync_val_compare_and_swap"
1715atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1716atomics_win32_if="MemoryBarrier"
1717atomics_native_if_any="$ATOMICS_LIST"
1718w32threads_deps="atomics_native"
1719threads_if_any="$THREADS_LIST"
1720
1721# subsystems
1722dct_select="rdft"
1723error_resilience_select="me_cmp"
1724intrax8_select="error_resilience"
1725mdct_select="fft"
1726rdft_select="fft"
1727me_cmp_select="fdctdsp idctdsp pixblockdsp"
1728mpeg_er_select="error_resilience"
1729mpegaudio_select="mpegaudiodsp"
1730mpegaudiodsp_select="dct"
1731mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp videodsp"
1732mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1733
1734# decoders / encoders
1735aac_decoder_select="mdct sinewin"
1736aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1737aac_latm_decoder_select="aac_decoder aac_latm_parser"
1738ac3_decoder_select="ac3_parser ac3dsp bswapdsp mdct"
1739ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1740ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1741aic_decoder_select="golomb idctdsp"
1742alac_encoder_select="lpc"
1743als_decoder_select="bswapdsp"
1744amrnb_decoder_select="lsp"
1745amrwb_decoder_select="lsp"
1746amv_decoder_select="sp5x_decoder"
1747ape_decoder_select="bswapdsp"
1748asv1_decoder_select="blockdsp bswapdsp idctdsp"
1749asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1750asv2_decoder_select="blockdsp bswapdsp idctdsp"
1751asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1752atrac1_decoder_select="mdct sinewin"
1753atrac3_decoder_select="mdct"
1754atrac3p_decoder_select="mdct sinewin"
1755bink_decoder_select="blockdsp hpeldsp"
1756binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1757binkaudio_rdft_decoder_select="mdct rdft sinewin"
1758cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1759cllc_decoder_select="bswapdsp"
1760comfortnoise_encoder_select="lpc"
1761cook_decoder_select="audiodsp mdct sinewin"
1762cscd_decoder_select="lzo"
1763cscd_decoder_suggest="zlib"
1764dca_decoder_select="mdct"
1765dnxhd_decoder_select="blockdsp idctdsp"
1766dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1767dvvideo_decoder_select="dvprofile idctdsp"
1768dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1769dxa_decoder_deps="zlib"
1770eac3_decoder_select="ac3_decoder"
1771eac3_encoder_select="ac3_encoder"
1772eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1773eatgq_decoder_select="aandcttables idctdsp"
1774eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
1775exr_decoder_deps="zlib"
1776ffv1_decoder_select="golomb rangecoder"
1777ffv1_encoder_select="rangecoder"
1778ffvhuff_decoder_select="huffyuv_decoder"
1779ffvhuff_encoder_select="huffyuv_encoder"
1780fic_decoder_select="golomb"
1781flac_decoder_select="golomb"
1782flac_encoder_select="bswapdsp golomb lpc"
1783flashsv_decoder_deps="zlib"
1784flashsv_encoder_deps="zlib"
1785flashsv2_decoder_deps="zlib"
1786flv_decoder_select="h263_decoder"
1787flv_encoder_select="h263_encoder"
1788fourxm_decoder_select="blockdsp bswapdsp"
1789fraps_decoder_select="bswapdsp huffman"
1790g2m_decoder_deps="zlib"
1791g2m_decoder_select="blockdsp idctdsp"
1792h261_decoder_select="mpeg_er mpegvideo"
1793h261_encoder_select="aandcttables mpegvideoenc"
1794h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1795h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1796h263i_decoder_select="h263_decoder"
1797h263p_encoder_select="h263_encoder"
1798h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
1799h264_decoder_suggest="error_resilience"
1800hevc_decoder_select="bswapdsp cabac golomb videodsp"
1801huffyuv_decoder_select="bswapdsp huffyuvdsp"
1802huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1803iac_decoder_select="imc_decoder"
1804imc_decoder_select="bswapdsp fft mdct sinewin"
1805indeo3_decoder_select="hpeldsp"
1806interplay_video_decoder_select="hpeldsp"
1807jpegls_decoder_select="golomb mjpeg_decoder"
1808jpegls_encoder_select="golomb"
1809jv_decoder_select="blockdsp"
1810lagarith_decoder_select="huffyuvdsp"
1811ljpeg_encoder_select="aandcttables idctdsp"
1812loco_decoder_select="golomb"
1813mdec_decoder_select="blockdsp idctdsp mpegvideo"
1814metasound_decoder_select="lsp mdct sinewin"
1815mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
1816mjpeg_decoder_select="blockdsp hpeldsp idctdsp"
1817mjpeg_encoder_select="aandcttables mpegvideoenc"
1818mjpegb_decoder_select="mjpeg_decoder"
1819mlp_decoder_select="mlp_parser"
1820motionpixels_decoder_select="bswapdsp"
1821mp1_decoder_select="mpegaudio"
1822mp1float_decoder_select="mpegaudio"
1823mp2_decoder_select="mpegaudio"
1824mp2float_decoder_select="mpegaudio"
1825mp3_decoder_select="mpegaudio"
1826mp3adu_decoder_select="mpegaudio"
1827mp3adufloat_decoder_select="mpegaudio"
1828mp3float_decoder_select="mpegaudio"
1829mp3on4_decoder_select="mpegaudio"
1830mp3on4float_decoder_select="mpegaudio"
1831mpc7_decoder_select="bswapdsp mpegaudiodsp"
1832mpc8_decoder_select="mpegaudiodsp"
1833mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1834mpeg_xvmc_decoder_select="mpeg2video_decoder"
1835mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
1836mpeg1video_encoder_select="aandcttables mpegvideoenc"
1837mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
1838mpeg2video_encoder_select="aandcttables mpegvideoenc"
1839mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1840mpeg4_encoder_select="h263_encoder"
1841msmpeg4v1_decoder_select="h263_decoder"
1842msmpeg4v2_decoder_select="h263_decoder"
1843msmpeg4v2_encoder_select="h263_encoder"
1844msmpeg4v3_decoder_select="h263_decoder"
1845msmpeg4v3_encoder_select="h263_encoder"
1846mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
1847mxpeg_decoder_select="mjpeg_decoder"
1848nellymoser_decoder_select="mdct sinewin"
1849nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1850nuv_decoder_select="idctdsp lzo"
1851on2avc_decoder_select="mdct"
1852opus_decoder_deps="avresample"
1853png_decoder_deps="zlib"
1854png_encoder_deps="zlib"
1855png_encoder_select="huffyuvencdsp"
1856prores_decoder_select="idctdsp"
1857prores_encoder_select="fdctdsp"
1858qcelp_decoder_select="lsp"
1859qdm2_decoder_select="mdct rdft mpegaudiodsp"
1860ra_144_encoder_select="audio_frame_queue lpc"
1861ralf_decoder_select="golomb"
1862rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
1863rv10_encoder_select="h263_encoder"
1864rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
1865rv20_encoder_select="h263_encoder"
1866rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1867rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1868shorten_decoder_select="golomb"
1869sipr_decoder_select="lsp"
1870sp5x_decoder_select="mjpeg_decoder"
1871svq1_decoder_select="hpeldsp"
1872svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
1873svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
1874svq3_decoder_suggest="zlib"
1875tak_decoder_select="audiodsp"
1876theora_decoder_select="vp3_decoder"
1877thp_decoder_select="mjpeg_decoder"
1878tiff_decoder_suggest="zlib"
1879tiff_encoder_suggest="zlib"
1880truehd_decoder_select="mlp_decoder"
1881truemotion2_decoder_select="bswapdsp"
1882truespeech_decoder_select="bswapdsp"
1883tscc_decoder_deps="zlib"
1884twinvq_decoder_select="mdct lsp sinewin"
1885utvideo_decoder_select="bswapdsp"
1886utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
1887vble_decoder_select="huffyuvdsp"
1888vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
1889vc1image_decoder_select="vc1_decoder"
1890vorbis_decoder_select="mdct"
1891vorbis_encoder_select="mdct"
1892vp3_decoder_select="hpeldsp vp3dsp videodsp"
1893vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1894vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1895vp6a_decoder_select="vp6_decoder"
1896vp6f_decoder_select="vp6_decoder"
1897vp7_decoder_select="h264pred videodsp"
1898vp8_decoder_select="h264pred videodsp"
1899vp9_decoder_select="videodsp"
1900webp_decoder_select="vp8_decoder"
1901wmapro_decoder_select="mdct sinewin"
1902wmav1_decoder_select="mdct sinewin"
1903wmav1_encoder_select="mdct sinewin"
1904wmav2_decoder_select="mdct sinewin"
1905wmav2_encoder_select="mdct sinewin"
1906wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1907wmv1_decoder_select="h263_decoder"
1908wmv1_encoder_select="h263_encoder"
1909wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
1910wmv2_encoder_select="h263_encoder"
1911wmv3_decoder_select="vc1_decoder"
1912wmv3image_decoder_select="wmv3_decoder"
1913zerocodec_decoder_deps="zlib"
1914zlib_decoder_deps="zlib"
1915zlib_encoder_deps="zlib"
1916zmbv_decoder_deps="zlib"
1917zmbv_encoder_deps="zlib"
1918
1919# hardware accelerators
1920dxva2_deps="dxva2api_h"
1921vaapi_deps="va_va_h"
1922vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1923vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1924vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1925
1926h263_vaapi_hwaccel_deps="vaapi"
1927h263_vaapi_hwaccel_select="h263_decoder"
1928h263_vdpau_hwaccel_deps="vdpau"
1929h263_vdpau_hwaccel_select="h263_decoder"
1930h264_dxva2_hwaccel_deps="dxva2"
1931h264_dxva2_hwaccel_select="h264_decoder"
1932h264_vaapi_hwaccel_deps="vaapi"
1933h264_vaapi_hwaccel_select="h264_decoder"
1934h264_vda_hwaccel_deps="vda"
1935h264_vda_hwaccel_select="h264_decoder"
1936h264_vda_old_hwaccel_deps="vda"
1937h264_vda_old_hwaccel_select="h264_decoder"
1938h264_vdpau_hwaccel_deps="vdpau"
1939h264_vdpau_hwaccel_select="h264_decoder"
1940mpeg1_vdpau_hwaccel_deps="vdpau"
1941mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1942mpeg2_dxva2_hwaccel_deps="dxva2"
1943mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1944mpeg2_vaapi_hwaccel_deps="vaapi"
1945mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1946mpeg2_vdpau_hwaccel_deps="vdpau"
1947mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1948mpeg4_vaapi_hwaccel_deps="vaapi"
1949mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1950mpeg4_vdpau_hwaccel_deps="vdpau"
1951mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1952vc1_dxva2_hwaccel_deps="dxva2"
1953vc1_dxva2_hwaccel_select="vc1_decoder"
1954vc1_vaapi_hwaccel_deps="vaapi"
1955vc1_vaapi_hwaccel_select="vc1_decoder"
1956vc1_vdpau_hwaccel_deps="vdpau"
1957vc1_vdpau_hwaccel_select="vc1_decoder"
1958wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1959wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1960wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1961
1962# parsers
1963h264_parser_select="h264_decoder"
1964mpegvideo_parser_select="mpegvideo"
1965mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
1966vc1_parser_select="mpegvideo startcode"
1967
1968# external libraries
1969libfaac_encoder_deps="libfaac"
1970libfaac_encoder_select="audio_frame_queue"
1971libfdk_aac_decoder_deps="libfdk_aac"
1972libfdk_aac_encoder_deps="libfdk_aac"
1973libfdk_aac_encoder_select="audio_frame_queue"
1974libgsm_decoder_deps="libgsm"
1975libgsm_encoder_deps="libgsm"
1976libgsm_ms_decoder_deps="libgsm"
1977libgsm_ms_encoder_deps="libgsm"
1978libilbc_decoder_deps="libilbc"
1979libilbc_encoder_deps="libilbc"
1980libmp3lame_encoder_deps="libmp3lame"
1981libmp3lame_encoder_select="audio_frame_queue"
1982libopencore_amrnb_decoder_deps="libopencore_amrnb"
1983libopencore_amrnb_encoder_deps="libopencore_amrnb"
1984libopencore_amrnb_encoder_select="audio_frame_queue"
1985libopencore_amrwb_decoder_deps="libopencore_amrwb"
1986libopenjpeg_decoder_deps="libopenjpeg"
1987libopenjpeg_encoder_deps="libopenjpeg"
1988libopus_decoder_deps="libopus"
1989libopus_encoder_deps="libopus"
1990libopus_encoder_select="audio_frame_queue"
1991libschroedinger_decoder_deps="libschroedinger"
1992libschroedinger_encoder_deps="libschroedinger"
1993libspeex_decoder_deps="libspeex"
1994libspeex_encoder_deps="libspeex"
1995libspeex_encoder_select="audio_frame_queue"
1996libtheora_encoder_deps="libtheora"
1997libtwolame_encoder_deps="libtwolame"
1998libvo_aacenc_encoder_deps="libvo_aacenc"
1999libvo_aacenc_encoder_select="audio_frame_queue"
2000libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2001libvorbis_encoder_deps="libvorbis"
2002libvorbis_encoder_select="audio_frame_queue"
2003libvpx_vp8_decoder_deps="libvpx"
2004libvpx_vp8_encoder_deps="libvpx"
2005libvpx_vp9_decoder_deps="libvpx"
2006libvpx_vp9_encoder_deps="libvpx"
2007libwavpack_encoder_deps="libwavpack"
2008libwebp_encoder_deps="libwebp"
2009libx264_encoder_deps="libx264"
2010libx265_encoder_deps="libx265"
2011libxavs_encoder_deps="libxavs"
2012libxvid_encoder_deps="libxvid"
2013
2014# demuxers / muxers
2015ac3_demuxer_select="ac3_parser"
2016asf_demuxer_select="riffdec"
2017asf_muxer_select="riffenc"
2018asf_stream_muxer_select="asf_muxer"
2019avi_demuxer_select="riffdec"
2020avi_muxer_select="riffenc"
2021avisynth_demuxer_deps="avisynth"
2022avisynth_demuxer_select="riffdec"
2023caf_demuxer_select="riffdec"
2024dirac_demuxer_select="dirac_parser"
2025dv_demuxer_select="dvprofile"
2026dv_muxer_select="dvprofile"
2027dxa_demuxer_select="riffdec"
2028eac3_demuxer_select="ac3_parser"
2029f4v_muxer_select="mov_muxer"
2030flac_demuxer_select="flac_parser"
2031hds_muxer_select="flv_muxer"
2032hls_muxer_select="mpegts_muxer"
2033ipod_muxer_select="mov_muxer"
2034ismv_muxer_select="mov_muxer"
2035matroska_audio_muxer_select="matroska_muxer"
2036matroska_demuxer_select="riffdec"
2037matroska_demuxer_suggest="bzlib lzo zlib"
2038matroska_muxer_select="riffenc"
2039mmf_muxer_select="riffenc"
2040mov_demuxer_select="riffdec"
2041mov_demuxer_suggest="zlib"
2042mov_muxer_select="riffenc rtpenc_chain"
2043mp3_demuxer_select="mpegaudio_parser"
2044mp4_muxer_select="mov_muxer"
2045mpegts_muxer_select="adts_muxer latm_muxer"
2046mpegtsraw_demuxer_select="mpegts_demuxer"
2047mxf_d10_muxer_select="mxf_muxer"
2048nut_muxer_select="riffenc"
2049nuv_demuxer_select="riffdec"
2050oga_muxer_select="ogg_muxer"
2051ogg_demuxer_select="golomb"
2052opus_muxer_select="ogg_muxer"
2053psp_muxer_select="mov_muxer"
2054rtp_demuxer_select="sdp_demuxer"
2055rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2056rtsp_demuxer_select="http_protocol rtpdec"
2057rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2058sap_demuxer_select="sdp_demuxer"
2059sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2060sdp_demuxer_select="rtpdec"
2061smoothstreaming_muxer_select="ismv_muxer"
2062spdif_muxer_select="aac_parser"
2063spx_muxer_select="ogg_muxer"
2064tak_demuxer_select="tak_parser"
2065tg2_muxer_select="mov_muxer"
2066tgp_muxer_select="mov_muxer"
2067w64_demuxer_select="wav_demuxer"
2068wav_demuxer_select="riffdec"
2069wav_muxer_select="riffenc"
2070webm_muxer_select="riffenc"
2071wtv_demuxer_select="riffdec"
2072xmv_demuxer_select="riffdec"
2073xwma_demuxer_select="riffdec"
2074
2075# indevs / outdevs
2076alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2077alsa_outdev_deps="alsa_asoundlib_h"
2078bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2079dv1394_indev_deps="dv1394"
2080dv1394_indev_select="dv_demuxer"
2081fbdev_indev_deps="linux_fb_h"
2082jack_indev_deps="jack_jack_h pthreads"
2083libcdio_indev_deps="libcdio"
2084libdc1394_indev_deps="libdc1394"
2085oss_indev_deps_any="soundcard_h sys_soundcard_h"
2086oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2087pulse_indev_deps="libpulse"
2088sndio_indev_deps="sndio_h"
2089sndio_outdev_deps="sndio_h"
2090v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2091vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2092vfwcap_indev_extralibs="-lavicap32"
2093x11grab_indev_deps="x11grab XShmCreateImage"
2094
2095# protocols
2096ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2097ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2098ffrtmpcrypt_protocol_select="tcp_protocol"
2099ffrtmphttp_protocol_deps="!librtmp_protocol"
2100ffrtmphttp_protocol_select="http_protocol"
2101gopher_protocol_select="network"
2102http_protocol_select="tcp_protocol"
2103httpproxy_protocol_select="tcp_protocol"
2104https_protocol_select="tls_protocol"
2105icecast_protocol_select="http_protocol"
2106librtmp_protocol_deps="librtmp"
2107librtmpe_protocol_deps="librtmp"
2108librtmps_protocol_deps="librtmp"
2109librtmpt_protocol_deps="librtmp"
2110librtmpte_protocol_deps="librtmp"
2111mmsh_protocol_select="http_protocol"
2112mmst_protocol_select="network"
2113rtmp_protocol_deps="!librtmp_protocol"
2114rtmp_protocol_select="tcp_protocol"
2115rtmpe_protocol_select="ffrtmpcrypt_protocol"
2116rtmps_protocol_deps="!librtmp_protocol"
2117rtmps_protocol_select="tls_protocol"
2118rtmpt_protocol_select="ffrtmphttp_protocol"
2119rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2120rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2121rtp_protocol_select="udp_protocol"
2122sctp_protocol_deps="struct_sctp_event_subscribe"
2123sctp_protocol_select="network"
2124srtp_protocol_select="rtp_protocol"
2125tcp_protocol_select="network"
2126tls_protocol_deps_any="openssl gnutls"
2127tls_protocol_select="tcp_protocol"
2128udp_protocol_select="network"
2129unix_protocol_deps="sys_un_h"
2130unix_protocol_select="network"
2131
2132# filters
2133blackframe_filter_deps="gpl"
2134boxblur_filter_deps="gpl"
2135bs2b_filter_deps="libbs2b"
2136cropdetect_filter_deps="gpl"
2137delogo_filter_deps="gpl"
2138drawtext_filter_deps="libfreetype"
2139frei0r_filter_deps="frei0r dlopen"
2140frei0r_filter_extralibs='$ldl'
2141frei0r_src_filter_deps="frei0r dlopen"
2142frei0r_src_filter_extralibs='$ldl'
2143hqdn3d_filter_deps="gpl"
2144interlace_filter_deps="gpl"
2145ocv_filter_deps="libopencv"
2146resample_filter_deps="avresample"
2147scale_filter_deps="swscale"
2148
2149# examples
2150avcodec_example_deps="avcodec avutil"
2151filter_audio_example_deps="avfilter avutil"
2152metadata_example_deps="avformat avutil"
2153output_example_deps="avcodec avformat avutil swscale"
2154transcode_aac_example_deps="avcodec avformat avresample"
2155
2156# libraries, in linking order
2157avcodec_deps="avutil"
2158avdevice_deps="avformat avcodec avutil"
2159avfilter_deps="avutil"
2160avformat_deps="avcodec avutil"
2161avresample_deps="avutil"
2162swscale_deps="avutil"
2163
2164# programs
2165avconv_deps="avcodec avfilter avformat avresample swscale"
2166avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2167 fps_filter null_filter resample_filter scale_filter
2168 setpts_filter trim_filter"
2169avplay_deps="avcodec avformat avresample swscale sdl"
2170avplay_libs='$sdl_libs'
2171avplay_select="rdft"
2172avprobe_deps="avcodec avformat"
2173
2174# documentation
2175pod2man_deps="doc"
2176texi2html_deps="doc"
2177
2178# default parameters
2179
2180logfile="config.log"
2181
2182# installation paths
2183prefix_default="/usr/local"
2184bindir_default='${prefix}/bin'
2185datadir_default='${prefix}/share/avconv'
2186docdir_default='${prefix}/share/doc/libav'
2187incdir_default='${prefix}/include'
2188libdir_default='${prefix}/lib'
2189mandir_default='${prefix}/share/man'
2190shlibdir_default="$libdir_default"
2191
2192# toolchain
2193ar_default="ar"
2194cc_default="gcc"
2195host_cc_default="gcc"
2196cp_f="cp -f"
2197ln_s="ln -s -f"
2198nm_default="nm -g"
2199objformat="elf"
2200pkg_config_default=pkg-config
2201ranlib="ranlib"
2202strip="strip"
2203yasmexe="yasm"
2204
2205# machine
2206arch_default=$(uname -m)
2207cpu="generic"
2208intrinsics="none"
2209
2210# OS
2211target_os_default=$(tolower $(uname -s))
2212host_os=$target_os_default
2213
2214# configurable options
2215enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2216
2217enable asm
2218enable debug
2219enable doc
2220enable optimizations
2221enable safe_bitstream_reader
2222enable static
2223enable swscale_alpha
2224
2225# By default, enable only those hwaccels that have no external dependencies.
2226enable dxva2 vdpau
2227
2228# build settings
2229SHFLAGS='-shared -Wl,-soname,$$(@F)'
2230LIBPREF="lib"
2231LIBSUF=".a"
2232FULLNAME='$(NAME)$(BUILDSUF)'
2233LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2234SLIBPREF="lib"
2235SLIBSUF=".so"
2236SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2237SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2238SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2239LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2240SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2241SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2242
2243asflags_filter=echo
2244cflags_filter=echo
2245ldflags_filter=echo
2246
2247AS_C='-c'
2248AS_O='-o $@'
2249CC_C='-c'
2250CC_E='-E -o $@'
2251CC_O='-o $@'
2252LD_O='-o $@'
2253LD_LIB='-l%'
2254LD_PATH='-L'
2255HOSTCC_C='-c'
2256HOSTCC_E='-E -o $@'
2257HOSTCC_O='-o $@'
2258HOSTLD_O='-o $@'
2259
2260host_libs='-lm'
2261host_cflags_filter=echo
2262host_ldflags_filter=echo
2263
2264target_path='$(CURDIR)'
2265
2266# since the object filename is not given with the -MM flag, the compiler
2267# is only able to print the basename, and we must add the path ourselves
2268DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2269DEPFLAGS='-MM'
2270
2271# find source path
2272if test -f configure; then
2273 source_path=.
2274else
2275 source_path=$(cd $(dirname "$0"); pwd)
2276 echo "$source_path" | grep -q '[[:blank:]]' &&
2277 die "Out of tree builds are impossible with whitespace in source path."
2278 test -e "$source_path/config.h" &&
2279 die "Out of tree builds are impossible with config.h in source dir."
2280fi
2281
2282for v in "$@"; do
2283 r=${v#*=}
2284 l=${v%"$r"}
2285 r=$(sh_quote "$r")
2286 LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2287done
2288
2289find_things(){
2290 thing=$1
2291 pattern=$2
2292 file=$source_path/$3
2293 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2294}
2295
2296ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
2297DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
2298HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
2299PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
2300BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
2301MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
2302DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
2303OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
2304INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
2305PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2306FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
2307
2308ALL_COMPONENTS="
2309 $BSF_LIST
2310 $DECODER_LIST
2311 $DEMUXER_LIST
2312 $ENCODER_LIST
2313 $FILTER_LIST
2314 $HWACCEL_LIST
2315 $INDEV_LIST
2316 $MUXER_LIST
2317 $OUTDEV_LIST
2318 $PARSER_LIST
2319 $PROTOCOL_LIST
2320"
2321
2322for n in $COMPONENT_LIST; do
2323 v=$(toupper ${n%s})_LIST
2324 eval enable \$$v
2325 eval ${n}_if_any="\$$v"
2326done
2327
2328enable $ARCH_EXT_LIST
2329
2330die_unknown(){
2331 echo "Unknown option \"$1\"."
2332 echo "See $0 --help for available options."
2333 exit 1
2334}
2335
2336print_3_columns() {
2337 cat | tr ' ' '\n' | sort | pr -r -3 -t
2338}
2339
2340show_list() {
2341 suffix=_$1
2342 shift
2343 echo $* | sed s/$suffix//g | print_3_columns
2344 exit 0
2345}
2346
2347rand_list(){
2348 IFS=', '
2349 set -- $*
2350 unset IFS
2351 for thing; do
2352 comp=${thing%:*}
2353 prob=${thing#$comp}
2354 prob=${prob#:}
2355 is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2356 echo "prob ${prob:-0.5}"
2357 printf '%s\n' $comp
2358 done
2359}
2360
2361do_random(){
2362 action=$1
2363 shift
2364 random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2365 $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2366}
2367
2368for opt do
2369 optval="${opt#*=}"
2370 case "$opt" in
2371 --extra-ldflags=*)
2372 add_ldflags $optval
2373 ;;
2374 --extra-ldexeflags=*)
2375 add_ldexeflags $optval
2376 ;;
2377 --extra-libs=*)
2378 add_extralibs $optval
2379 ;;
2380 --disable-devices)
2381 disable $INDEV_LIST $OUTDEV_LIST
2382 ;;
2383 --enable-debug=*)
2384 debuglevel="$optval"
2385 ;;
2386 --disable-programs)
2387 disable $PROGRAM_LIST
2388 ;;
2389 --disable-everything)
2390 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2391 ;;
2392 --disable-all)
2393 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2394 disable $LIBRARY_LIST $PROGRAM_LIST doc
2395 ;;
2396 --enable-random|--disable-random)
2397 action=${opt%%-random}
2398 do_random ${action#--} $COMPONENT_LIST
2399 ;;
2400 --enable-random=*|--disable-random=*)
2401 action=${opt%%-random=*}
2402 do_random ${action#--} $optval
2403 ;;
2404 --enable-*=*|--disable-*=*)
2405 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2406 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2407 eval list=\$$(toupper $thing)_LIST
2408 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2409 $action $(filter "$name" $list)
2410 ;;
2411 --enable-avserver|--disable-avserver*)
2412 warn "avserver has been removed, the ${opt} option is only"\
2413 "provided for compatibility and will be removed in the future"
2414 ;;
2415 --enable-?*|--disable-?*)
2416 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2417 if is_in $option $COMPONENT_LIST; then
2418 test $action = disable && action=unset
2419 eval $action \$$(toupper ${option%s})_LIST
2420 elif is_in $option $CMDLINE_SELECT; then
2421 $action $option
2422 else
2423 die_unknown $opt
2424 fi
2425 ;;
2426 --list-*)
2427 NAME="${opt#--list-}"
2428 is_in $NAME $COMPONENT_LIST || die_unknown $opt
2429 NAME=${NAME%s}
2430 eval show_list $NAME \$$(toupper $NAME)_LIST
2431 ;;
2432 --help|-h) show_help
2433 ;;
2434 *)
2435 optname="${opt%%=*}"
2436 optname="${optname#--}"
2437 optname=$(echo "$optname" | sed 's/-/_/g')
2438 if is_in $optname $CMDLINE_SET; then
2439 eval $optname='$optval'
2440 elif is_in $optname $CMDLINE_APPEND; then
2441 append $optname "$optval"
2442 else
2443 die_unknown $opt
2444 fi
2445 ;;
2446 esac
2447done
2448
2449disabled logging && logfile=/dev/null
2450
2451echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2452set >> $logfile
2453
2454test -n "$cross_prefix" && enable cross_compile
2455
2456if enabled cross_compile; then
2457 test -n "$arch" && test -n "$target_os" ||
2458 die "Must specify target arch and OS when cross-compiling"
2459fi
2460
2461ar_default="${cross_prefix}${ar_default}"
2462cc_default="${cross_prefix}${cc_default}"
2463nm_default="${cross_prefix}${nm_default}"
2464pkg_config_default="${cross_prefix}${pkg_config_default}"
2465ranlib="${cross_prefix}${ranlib}"
2466strip="${cross_prefix}${strip}"
2467
2468sysinclude_default="${sysroot}/usr/include"
2469
2470case "$toolchain" in
2471 clang-asan)
2472 cc_default="clang"
2473 add_cflags -fsanitize=address
2474 add_ldflags -fsanitize=address
2475 ;;
2476 clang-tsan)
2477 cc_default="clang"
2478 add_cflags -fsanitize=thread -pie
2479 add_ldflags -fsanitize=thread -pie
2480 ;;
2481 clang-usan)
2482 cc_default="clang"
2483 add_cflags -fsanitize=undefined -O1
2484 add_ldflags -fsanitize=undefined
2485 ;;
2486 gcc-asan)
2487 cc_default="gcc"
2488 add_cflags -fsanitize=address
2489 add_ldflags -fsanitize=address
2490 ;;
2491 gcc-tsan)
2492 cc_default="gcc"
2493 add_cflags -fsanitize=thread -pie -fPIC
2494 add_ldflags -fsanitize=thread -pie -fPIC
2495 ;;
2496 gcc-usan)
2497 cc_default="gcc"
2498 add_cflags -fsanitize=undefined
2499 add_ldflags -fsanitize=undefined
2500 ;;
2501 valgrind-massif)
2502 target_exec_default="valgrind"
2503 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2504 ;;
2505 valgrind-memcheck)
2506 target_exec_default="valgrind"
2507 target_exec_args="--track-origins=yes --leak-check=full"
2508 ;;
2509 msvc)
2510 # Check whether the current MSVC version needs the C99 converter.
2511 # From MSVC 2013 (compiler major version 18) onwards, it does actually
2512 # support enough of C99 to build libav. Default to the new
2513 # behaviour if the regexp was unable to match anything, since this
2514 # successfully parses the version number of existing supported
2515 # versions that require the converter (MSVC 2010 and 2012).
2516 cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2517 if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2518 cc_default="cl"
2519 else
2520 cc_default="c99wrap cl"
2521 fi
2522 ld_default="link"
2523 nm_default="dumpbin -symbols"
2524 ar_default="lib"
2525 target_os_default="win32"
2526 # Use a relative path for TMPDIR. This makes sure all the
2527 # ffconf temp files are written with a relative path, avoiding
2528 # issues with msys/win32 path conversion for MSVC parameters
2529 # such as -Fo<file> or -out:<file>.
2530 TMPDIR=.
2531 ;;
2532 icl)
2533 cc_default="icl"
2534 ld_default="xilink"
2535 nm_default="dumpbin -symbols"
2536 ar_default="xilib"
2537 target_os_default="win32"
2538 TMPDIR=.
2539 ;;
2540 gcov)
2541 add_cflags -fprofile-arcs -ftest-coverage
2542 add_ldflags -fprofile-arcs -ftest-coverage
2543 ;;
2544 hardened)
2545 add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2546 add_ldflags -Wl,-z,relro -Wl,-z,now
2547 ;;
2548 ?*)
2549 die "Unknown toolchain $toolchain"
2550 ;;
2551esac
2552
2553set_default arch cc pkg_config sysinclude target_exec target_os
2554enabled cross_compile || host_cc_default=$cc
2555set_default host_cc
2556
2557if ! $pkg_config --version >/dev/null 2>&1; then
2558 warn "$pkg_config not found, library detection may fail."
2559 pkg_config=false
2560fi
2561
2562exesuf() {
2563 case $1 in
2564 mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2565 esac
2566}
2567
2568EXESUF=$(exesuf $target_os)
2569HOSTEXESUF=$(exesuf $host_os)
2570
2571# set temporary file name
2572: ${TMPDIR:=$TEMPDIR}
2573: ${TMPDIR:=$TMP}
2574: ${TMPDIR:=/tmp}
2575
2576if ! check_cmd mktemp -u XXXXXX; then
2577 # simple replacement for missing mktemp
2578 # NOT SAFE FOR GENERAL USE
2579 mktemp(){
2580 echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2581 }
2582fi
2583
2584tmpfile(){
2585 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2586 (set -C; exec > $tmp) 2>/dev/null ||
2587 die "Unable to create temporary file in $TMPDIR."
2588 append TMPFILES $tmp
2589 eval $1=$tmp
2590}
2591
2592trap 'rm -f -- $TMPFILES' EXIT
2593
2594tmpfile TMPASM .asm
2595tmpfile TMPC .c
2596tmpfile TMPE $EXESUF
2597tmpfile TMPH .h
2598tmpfile TMPO .o
2599tmpfile TMPS .S
2600tmpfile TMPSH .sh
2601tmpfile TMPV .ver
2602
2603unset -f mktemp
2604
2605chmod +x $TMPE
2606
2607# make sure we can execute files in $TMPDIR
2608cat > $TMPSH 2>> $logfile <<EOF
2609#! /bin/sh
2610EOF
2611chmod +x $TMPSH >> $logfile 2>&1
2612if ! $TMPSH >> $logfile 2>&1; then
2613 cat <<EOF
2614Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
2615variable to another directory and make sure that it is not mounted noexec.
2616EOF
2617 die "Sanity test failed."
2618fi
2619
2620armasm_flags(){
2621 for flag; do
2622 case $flag in
2623 # Filter out MSVC cl.exe options from cflags that shouldn't
2624 # be passed to gas-preprocessor
2625 -M[TD]*) ;;
2626 *) echo $flag ;;
2627 esac
2628 done
2629}
2630
2631ccc_flags(){
2632 for flag; do
2633 case $flag in
2634 -std=c99) echo -c99 ;;
2635 -mcpu=*) echo -arch ${flag#*=} ;;
2636 -mieee) echo -ieee ;;
2637 -O*|-fast) echo $flag ;;
2638 -fno-math-errno) echo -assume nomath_errno ;;
2639 -g) echo -g3 ;;
2640 -Wall) echo -msg_enable level2 ;;
2641 -Wno-pointer-sign) echo -msg_disable ptrmismatch1 ;;
2642 -Wl,*) echo $flag ;;
2643 -f*|-W*) ;;
2644 *) echo $flag ;;
2645 esac
2646 done
2647}
2648
2649cparser_flags(){
2650 for flag; do
2651 case $flag in
2652 -Wno-switch) echo -Wno-switch-enum ;;
2653 -Wno-format-zero-length) ;;
2654 -Wdisabled-optimization) ;;
2655 -Wno-pointer-sign) echo -Wno-other ;;
2656 *) echo $flag ;;
2657 esac
2658 done
2659}
2660
2661msvc_common_flags(){
2662 for flag; do
2663 case $flag in
2664 # In addition to specifying certain flags under the compiler
2665 # specific filters, they must be specified here as well or else the
2666 # generic catch all at the bottom will print the original flag.
2667 -Wall) ;;
2668 -std=c99) ;;
2669 # Common flags
2670 -fomit-frame-pointer) ;;
2671 -g) echo -Z7 ;;
2672 -fno-math-errno) ;;
2673 -fno-common) ;;
2674 -fno-signed-zeros) ;;
2675 -fPIC) ;;
2676 -mthumb) ;;
2677 -march=*) ;;
2678 -lz) echo zlib.lib ;;
2679 -lavifil32) echo vfw32.lib ;;
2680 -lavicap32) echo vfw32.lib user32.lib ;;
2681 -l*) echo ${flag#-l}.lib ;;
2682 *) echo $flag ;;
2683 esac
2684 done
2685}
2686
2687msvc_flags(){
2688 msvc_common_flags "$@"
2689 for flag; do
2690 case $flag in
2691 -Wall) echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2692 -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2693 -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2694 -wd4273 -wd4701 ;;
2695 esac
2696 done
2697}
2698
2699icl_flags(){
2700 msvc_common_flags "$@"
2701 for flag; do
2702 case $flag in
2703 # Despite what Intel's documentation says -Wall, which is supported
2704 # on Windows, does enable remarks so disable them here.
2705 -Wall) echo $flag -Qdiag-disable:remark ;;
2706 -std=c99) echo -Qstd=c99 ;;
2707 esac
2708 done
2709}
2710
2711pgi_flags(){
2712 for flag; do
2713 case $flag in
2714 -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
2715 -fomit-frame-pointer) echo -Mnoframe ;;
2716 -g) echo -gopt ;;
2717 *) echo $flag ;;
2718 esac
2719 done
2720}
2721
2722suncc_flags(){
2723 for flag; do
2724 case $flag in
2725 -march=*|-mcpu=*)
2726 case "${flag#*=}" in
2727 native) echo -xtarget=native ;;
2728 v9|niagara) echo -xarch=sparc ;;
2729 ultrasparc) echo -xarch=sparcvis ;;
2730 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
2731 i586|pentium) echo -xchip=pentium ;;
2732 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
2733 pentium3*|c3-2) echo -xtarget=pentium3 ;;
2734 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
2735 pentium4*) echo -xtarget=pentium4 ;;
2736 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
2737 *-sse3) echo -xarch=sse3 ;;
2738 core2) echo -xarch=ssse3 -xchip=core2 ;;
2739 corei7) echo -xarch=sse4_2 -xchip=nehalem ;;
2740 corei7-avx) echo -xarch=avx -xchip=sandybridge ;;
2741 amdfam10|barcelona|bdver*) echo -xarch=sse4_1 ;;
2742 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
2743 k8|opteron|athlon64|athlon-fx)
2744 echo -xarch=sse2a ;;
2745 athlon*) echo -xarch=pentium_proa ;;
2746 esac
2747 ;;
2748 -std=c99) echo -xc99 ;;
2749 -fomit-frame-pointer) echo -xregs=frameptr ;;
2750 -fPIC) echo -KPIC -xcode=pic32 ;;
2751 -W*,*) echo $flag ;;
2752 -f*-*|-W*|-mimpure-text) ;;
2753 -shared) echo -G ;;
2754 *) echo $flag ;;
2755 esac
2756 done
2757}
2758
2759tms470_flags(){
2760 for flag; do
2761 case $flag in
2762 -march=*|-mcpu=*)
2763 case "${flag#*=}" in
2764 armv7-a|cortex-a*) echo -mv=7a8 ;;
2765 armv7-r|cortex-r*) echo -mv=7r4 ;;
2766 armv7-m|cortex-m*) echo -mv=7m3 ;;
2767 armv6*|arm11*) echo -mv=6 ;;
2768 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2769 echo -mv=5e ;;
2770 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
2771 esac
2772 ;;
2773 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
2774 -mfpu=vfp) echo --float_support=vfpv2 ;;
2775 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
2776 -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
2777 -msoft-float) echo --float_support=vfplib ;;
2778 -O[0-3]|-mf=*) echo $flag ;;
2779 -g) echo -g -mn ;;
2780 -pds=*) echo $flag ;;
2781 -D*|-I*) echo $flag ;;
2782 --gcc|--abi=*) echo $flag ;;
2783 -me) echo $flag ;;
2784 esac
2785 done
2786}
2787
2788probe_cc(){
2789 pfx=$1
2790 _cc=$2
2791
2792 unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2793 unset _ld_o _ldflags _ld_lib _ld_path
2794 unset _depflags _DEPCMD _DEPFLAGS
2795 _flags_filter=echo
2796
2797 if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2798 _type=llvm_gcc
2799 gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2800 _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2801 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2802 _cflags_speed='-O3'
2803 _cflags_size='-Os'
2804 elif $_cc -v 2>&1 | grep -qi ^gcc; then
2805 _type=gcc
2806 gcc_version=$($_cc --version | head -n1)
2807 gcc_basever=$($_cc -dumpversion)
2808 gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2809 gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2810 _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2811 if ! $_cc -dumpversion | grep -q '^2\.'; then
2812 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2813 fi
2814 _cflags_speed='-O3'
2815 _cflags_size='-Os'
2816 elif $_cc --version 2>/dev/null | grep -q ^icc; then
2817 _type=icc
2818 _ident=$($_cc --version | head -n1)
2819 _depflags='-MMD'
2820 _cflags_speed='-O3'
2821 _cflags_size='-Os'
2822 _cflags_noopt='-O1'
2823 elif $_cc -v 2>&1 | grep -q xlc; then
2824 _type=xlc
2825 _ident=$($_cc -qversion 2>/dev/null | head -n1)
2826 _cflags_speed='-O5'
2827 _cflags_size='-O5 -qcompact'
2828 elif $_cc -V 2>/dev/null | grep -q Compaq; then
2829 _type=ccc
2830 _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2831 _DEPFLAGS='-M'
2832 _cflags_speed='-fast'
2833 _cflags_size='-O1'
2834 _flags_filter=ccc_flags
2835 elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
2836 test -d "$sysroot" || die "No valid sysroot specified."
2837 _type=armcc
2838 _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
2839 armcc_conf="$PWD/armcc.conf"
2840 $_cc --arm_linux_configure \
2841 --arm_linux_config_file="$armcc_conf" \
2842 --configure_sysroot="$sysroot" \
2843 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2844 die "Error creating armcc configuration file."
2845 $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2846 _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2847 as_default="${cross_prefix}gcc"
2848 _depflags='-MMD'
2849 _cflags_speed='-O3'
2850 _cflags_size='-Os'
2851 elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2852 _type=tms470
2853 _ident=$($_cc -version | head -n1 | tr -s ' ')
2854 _flags='--gcc --abi=eabi -me'
2855 _cc_e='-ppl -fe=$@'
2856 _cc_o='-fe=$@'
2857 _depflags='-ppa -ppd=$(@:.o=.d)'
2858 _cflags_speed='-O3 -mf=5'
2859 _cflags_size='-O3 -mf=2'
2860 _flags_filter=tms470_flags
2861 elif $_cc -v 2>&1 | grep -q clang; then
2862 _type=clang
2863 _ident=$($_cc --version | head -n1)
2864 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2865 _cflags_speed='-O3'
2866 _cflags_size='-Os'
2867 elif $_cc -V 2>&1 | grep -q Sun; then
2868 _type=suncc
2869 _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2870 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2871 _DEPFLAGS='-xM1 -xc99'
2872 _ldflags='-std=c99'
2873 _cflags_speed='-O5'
2874 _cflags_size='-O5 -xspace'
2875 _flags_filter=suncc_flags
2876 elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2877 _type=pathscale
2878 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2879 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2880 _cflags_speed='-O2'
2881 _cflags_size='-Os'
2882 _flags_filter='filter_out -Wdisabled-optimization'
2883 elif $_cc -v 2>&1 | grep -q Open64; then
2884 _type=open64
2885 _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2886 _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2887 _cflags_speed='-O2'
2888 _cflags_size='-Os'
2889 _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2890 elif $_cc -V 2>&1 | grep -q Portland; then
2891 _type=pgi
2892 _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2893 opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2894 _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2895 _cflags_size="-O2 -Munroll=c:1 $opt_common"
2896 _cflags_noopt="-O1"
2897 _flags_filter=pgi_flags
2898 elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
2899 _type=armasm
2900 _ident=$($_cc | head -n1)
2901 # 4509: "This form of conditional instruction is deprecated"
2902 _flags="-nologo -ignore 4509"
2903 _flags_filter=armasm_flags
2904 elif $_cc 2>&1 | grep -q Microsoft; then
2905 _type=msvc
2906 _ident=$($cc 2>&1 | head -n1)
2907 _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2908 _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2909 _cflags_speed="-O2"
2910 _cflags_size="-O1"
2911 if $_cc 2>&1 | grep -q Linker; then
2912 _ld_o='-out:$@'
2913 else
2914 _ld_o='-Fe$@'
2915 fi
2916 _cc_o='-Fo$@'
2917 _cc_e='-P -Fi$@'
2918 _flags_filter=msvc_flags
2919 _ld_lib='lib%.a'
2920 _ld_path='-libpath:'
2921 _flags='-nologo'
2922 _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2923 if [ $pfx = hostcc ]; then
2924 append _cflags -Dsnprintf=_snprintf
2925 fi
2926 elif $_cc 2>&1 | grep -q Intel; then
2927 _type=icl
2928 _ident=$($cc 2>&1 | head -n1)
2929 _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
2930 # Not only is O3 broken on 13.x+ but it is slower on all previous
2931 # versions (tested) as well.
2932 _cflags_speed="-O2"
2933 _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
2934 if $_cc 2>&1 | grep -q Linker; then
2935 _ld_o='-out:$@'
2936 else
2937 _ld_o='-Fe$@'
2938 fi
2939 _cc_o='-Fo$@'
2940 _cc_e='-P'
2941 _flags_filter=icl_flags
2942 _ld_lib='lib%.a'
2943 _ld_path='-libpath:'
2944 # -Qdiag-error to make icl error when seeing certain unknown arguments
2945 _flags='-nologo -Qdiag-error:4044,10157'
2946 # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
2947 # with MSVC which enables it by default.
2948 _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
2949 if [ $pfx = hostcc ]; then
2950 append _cflags -Dsnprintf=_snprintf
2951 fi
2952 elif $_cc --version 2>/dev/null | grep -q ^cparser; then
2953 _type=cparser
2954 _ident=$($_cc --version | head -n1)
2955 _depflags='-MMD'
2956 _cflags_speed='-O4'
2957 _cflags_size='-O2'
2958 _flags_filter=cparser_flags
2959 fi
2960
2961 eval ${pfx}_type=\$_type
2962 eval ${pfx}_ident=\$_ident
2963}
2964
2965set_ccvars(){
2966 eval ${1}_C=\${_cc_c-\${${1}_C}}
2967 eval ${1}_E=\${_cc_e-\${${1}_E}}
2968 eval ${1}_O=\${_cc_o-\${${1}_O}}
2969
2970 if [ -n "$_depflags" ]; then
2971 eval ${1}_DEPFLAGS=\$_depflags
2972 else
2973 eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2974 eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2975 eval DEP${1}FLAGS=\$_flags
2976 fi
2977}
2978
2979probe_cc cc "$cc"
2980cflags_filter=$_flags_filter
2981cflags_speed=$_cflags_speed
2982cflags_size=$_cflags_size
2983cflags_noopt=$_cflags_noopt
2984add_cflags $_flags $_cflags
2985cc_ldflags=$_ldflags
2986set_ccvars CC
2987
2988probe_cc hostcc "$host_cc"
2989host_cflags_filter=$_flags_filter
2990add_host_cflags $_flags $_cflags
2991set_ccvars HOSTCC
2992
2993test -n "$cc_type" && enable $cc_type ||
2994 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2995
2996: ${as_default:=$cc}
2997: ${dep_cc_default:=$cc}
2998: ${ld_default:=$cc}
2999: ${host_ld_default:=$host_cc}
3000set_default ar as dep_cc ld host_ld
3001
3002probe_cc as "$as"
3003asflags_filter=$_flags_filter
3004add_asflags $_flags $_cflags
3005set_ccvars AS
3006
3007probe_cc ld "$ld"
3008ldflags_filter=$_flags_filter
3009add_ldflags $_flags $_ldflags
3010test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3011LD_O=${_ld_o-$LD_O}
3012LD_LIB=${_ld_lib-$LD_LIB}
3013LD_PATH=${_ld_path-$LD_PATH}
3014
3015probe_cc hostld "$host_ld"
3016host_ldflags_filter=$_flags_filter
3017add_host_ldflags $_flags $_ldflags
3018HOSTLD_O=${_ld_o-$HOSTLD_O}
3019
3020if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3021 probe_cc depcc "$dep_cc"
3022 CCDEP=${_DEPCMD:-$DEPCMD}
3023 CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3024 DEPCCFLAGS=$_flags
3025fi
3026
3027if $ar 2>&1 | grep -q Microsoft; then
3028 arflags="-nologo"
3029 ar_o='-out:$@'
3030elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3031 arflags="rq"
3032 ar_o='$@'
3033elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3034 arflags='-Xany -r -c'
3035 ar_o='$@'
3036else
3037 arflags="rc"
3038 ar_o='$@'
3039fi
3040
3041add_cflags $extra_cflags
3042add_asflags $extra_cflags
3043
3044if test -n "$sysroot"; then
3045 case "$cc_type" in
3046 gcc|llvm_gcc|clang)
3047 add_cppflags --sysroot="$sysroot"
3048 add_ldflags --sysroot="$sysroot"
3049 ;;
3050 tms470)
3051 add_cppflags -I"$sysinclude"
3052 add_ldflags --sysroot="$sysroot"
3053 ;;
3054 esac
3055fi
3056
3057if test "$cpu" = host; then
3058 enabled cross_compile &&
3059 die "--cpu=host makes no sense when cross-compiling."
3060
3061 case "$cc_type" in
3062 gcc|llvm_gcc)
3063 check_native(){
3064 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3065 sed -n "/cc1.*$1=/{
3066 s/.*$1=\\([^ ]*\\).*/\\1/
3067 p
3068 q
3069 }" $TMPE
3070 }
3071 cpu=$(check_native -march || check_native -mcpu)
3072 ;;
3073 esac
3074
3075 test "${cpu:-host}" = host &&
3076 die "--cpu=host not supported with compiler $cc"
3077fi
3078
3079# Deal with common $arch aliases
3080case "$arch" in
3081 aarch64|arm64)
3082 arch="aarch64"
3083 ;;
3084 arm*)
3085 arch="arm"
3086 ;;
3087 mips*|IP*)
3088 arch="mips"
3089 ;;
3090 parisc*|hppa*)
3091 arch="parisc"
3092 ;;
3093 "Power Macintosh"|ppc*|powerpc*)
3094 arch="ppc"
3095 ;;
3096 s390|s390x)
3097 arch="s390"
3098 ;;
3099 sh4|sh)
3100 arch="sh4"
3101 ;;
3102 sun4u|sparc*)
3103 arch="sparc"
3104 ;;
3105 tilegx|tile-gx)
3106 arch="tilegx"
3107 ;;
3108 i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3109 arch="x86"
3110 ;;
3111esac
3112
3113is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3114enable $arch
3115
3116# Add processor-specific flags
3117if enabled aarch64; then
3118
3119 case $cpu in
3120 armv*)
3121 cpuflags="-march=$cpu"
3122 ;;
3123 *)
3124 cpuflags="-mcpu=$cpu"
3125 ;;
3126 esac
3127
3128elif enabled alpha; then
3129
3130 cpuflags="-mcpu=$cpu"
3131
3132elif enabled arm; then
3133
3134 check_arm_arch() {
3135 check_cpp_condition stddef.h \
3136 "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3137 $cpuflags
3138 }
3139
3140 probe_arm_arch() {
3141 if check_arm_arch 4; then echo armv4;
3142 elif check_arm_arch 4T; then echo armv4t;
3143 elif check_arm_arch 5; then echo armv5;
3144 elif check_arm_arch 5E; then echo armv5e;
3145 elif check_arm_arch 5T; then echo armv5t;
3146 elif check_arm_arch 5TE; then echo armv5te;
3147 elif check_arm_arch 5TEJ; then echo armv5te;
3148 elif check_arm_arch 6; then echo armv6;
3149 elif check_arm_arch 6J; then echo armv6j;
3150 elif check_arm_arch 6K; then echo armv6k;
3151 elif check_arm_arch 6Z; then echo armv6z;
3152 elif check_arm_arch 6ZK; then echo armv6zk;
3153 elif check_arm_arch 6T2; then echo armv6t2;
3154 elif check_arm_arch 7; then echo armv7;
3155 elif check_arm_arch 7A 7_A; then echo armv7-a;
3156 elif check_arm_arch 7R 7_R; then echo armv7-r;
3157 elif check_arm_arch 7M 7_M; then echo armv7-m;
3158 elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3159 elif check_arm_arch 8A 8_A; then echo armv8-a;
3160 fi
3161 }
3162
3163 [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3164
3165 case $cpu in
3166 armv*)
3167 cpuflags="-march=$cpu"
3168 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3169 ;;
3170 *)
3171 cpuflags="-mcpu=$cpu"
3172 case $cpu in
3173 cortex-a*) subarch=armv7a ;;
3174 cortex-r*) subarch=armv7r ;;
3175 cortex-m*) enable thumb; subarch=armv7m ;;
3176 arm11*) subarch=armv6 ;;
3177 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3178 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
3179 *) subarch=$(probe_arm_arch) ;;
3180 esac
3181 ;;
3182 esac
3183
3184 case "$subarch" in
3185 armv5t*) enable fast_clz ;;
3186 armv[6-8]*) enable fast_clz fast_unaligned ;;
3187 esac
3188
3189elif enabled avr32; then
3190
3191 case $cpu in
3192 ap7[02]0[0-2])
3193 subarch="avr32_ap"
3194 cpuflags="-mpart=$cpu"
3195 ;;
3196 ap)
3197 subarch="avr32_ap"
3198 cpuflags="-march=$cpu"
3199 ;;
3200 uc3[ab]*)
3201 subarch="avr32_uc"
3202 cpuflags="-mcpu=$cpu"
3203 ;;
3204 uc)
3205 subarch="avr32_uc"
3206 cpuflags="-march=$cpu"
3207 ;;
3208 esac
3209
3210elif enabled bfin; then
3211
3212 cpuflags="-mcpu=$cpu"
3213
3214elif enabled mips; then
3215
3216 cpuflags="-march=$cpu"
3217
3218elif enabled ppc; then
3219
3220 disable ldbrx
3221
3222 case $(tolower $cpu) in
3223 601|ppc601|powerpc601)
3224 cpuflags="-mcpu=601"
3225 disable altivec
3226 ;;
3227 603*|ppc603*|powerpc603*)
3228 cpuflags="-mcpu=603"
3229 disable altivec
3230 ;;
3231 604*|ppc604*|powerpc604*)
3232 cpuflags="-mcpu=604"
3233 disable altivec
3234 ;;
3235 g3|75*|ppc75*|powerpc75*)
3236 cpuflags="-mcpu=750"
3237 disable altivec
3238 ;;
3239 g4|745*|ppc745*|powerpc745*)
3240 cpuflags="-mcpu=7450"
3241 ;;
3242 74*|ppc74*|powerpc74*)
3243 cpuflags="-mcpu=7400"
3244 ;;
3245 g5|970|ppc970|powerpc970)
3246 cpuflags="-mcpu=970"
3247 ;;
3248 power[3-7]*)
3249 cpuflags="-mcpu=$cpu"
3250 ;;
3251 cell)
3252 cpuflags="-mcpu=cell"
3253 enable ldbrx
3254 ;;
3255 e500mc)
3256 cpuflags="-mcpu=e500mc"
3257 disable altivec
3258 ;;
3259 e500v2)
3260 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3261 disable altivec
3262 disable dcbzl
3263 ;;
3264 e500)
3265 cpuflags="-mcpu=8540 -mhard-float"
3266 disable altivec
3267 disable dcbzl
3268 ;;
3269 esac
3270
3271elif enabled sparc; then
3272
3273 case $cpu in
3274 cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3275 cpuflags="-mcpu=$cpu"
3276 ;;
3277 ultrasparc*|niagara[234])
3278 cpuflags="-mcpu=$cpu"
3279 ;;
3280 esac
3281
3282elif enabled x86; then
3283
3284 case $cpu in
3285 i[345]86|pentium)
3286 cpuflags="-march=$cpu"
3287 disable mmx
3288 ;;
3289 # targets that do NOT support nopl and conditional mov (cmov)
3290 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3291 cpuflags="-march=$cpu"
3292 disable i686
3293 ;;
3294 # targets that do support nopl and conditional mov (cmov)
3295 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*)
3296 cpuflags="-march=$cpu"
3297 enable i686
3298 enable fast_cmov
3299 ;;
3300 # targets that do support conditional mov but on which it's slow
3301 pentium4|pentium4m|prescott|nocona)
3302 cpuflags="-march=$cpu"
3303 enable i686
3304 disable fast_cmov
3305 ;;
3306 esac
3307
3308fi
3309
3310if [ "$cpu" != generic ]; then
3311 add_cflags $cpuflags
3312 add_asflags $cpuflags
3313fi
3314
3315# compiler sanity check
3316check_exec <<EOF
3317int main(void){ return 0; }
3318EOF
3319if test "$?" != 0; then
3320 echo "$cc is unable to create an executable file."
3321 if test -z "$cross_prefix" && ! enabled cross_compile ; then
3322 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3323 echo "Only do this if you know what cross compiling means."
3324 fi
3325 die "C compiler test failed."
3326fi
3327
3328add_cppflags -D_ISOC99_SOURCE
3329check_cflags -std=c99
3330check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3331#include <stdlib.h>
3332EOF
3333check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3334#include <stdlib.h>
3335EOF
3336
3337add_host_cppflags -D_ISOC99_SOURCE
3338check_host_cflags -std=c99
3339check_host_cflags -Wall
3340check_host_cflags -O3
3341
3342check_64bit(){
3343 arch32=$1
3344 arch64=$2
3345 expr=$3
3346 check_code cc "" "int test[2*($expr) - 1]" &&
3347 subarch=$arch64 || subarch=$arch32
3348}
3349
3350case "$arch" in
3351 aarch64|alpha|ia64)
3352 spic=$shared
3353 ;;
3354 mips)
3355 check_64bit mips mips64 '_MIPS_SIM > 1'
3356 spic=$shared
3357 ;;
3358 parisc)
3359 check_64bit parisc parisc64 'sizeof(void *) > 4'
3360 spic=$shared
3361 ;;
3362 ppc)
3363 check_64bit ppc ppc64 'sizeof(void *) > 4'
3364 spic=$shared
3365 ;;
3366 s390)
3367 check_64bit s390 s390x 'sizeof(void *) > 4'
3368 spic=$shared
3369 ;;
3370 sparc)
3371 check_64bit sparc sparc64 'sizeof(void *) > 4'
3372 spic=$shared
3373 ;;
3374 x86)
3375 check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3376 if test "$subarch" = "x86_64"; then
3377 spic=$shared
3378 fi
3379 ;;
3380esac
3381
3382enable $subarch
3383enabled spic && enable_weak pic
3384
3385# OS specific
3386case $target_os in
3387 aix)
3388 SHFLAGS=-shared
3389 add_cppflags '-I\$(SRC_PATH)/compat/aix'
3390 enabled shared && add_ldflags -Wl,-brtl
3391 ;;
3392 android)
3393 disable symver
3394 SLIB_INSTALL_NAME='$(SLIBNAME)'
3395 SLIB_INSTALL_LINKS=
3396 # soname not set on purpose
3397 SHFLAGS=-shared
3398 ;;
3399 haiku)
3400 prefix_default="/boot/common"
3401 network_extralibs="-lnetwork"
3402 host_libs=
3403 ;;
3404 sunos)
3405 SHFLAGS='-shared -Wl,-h,$$(@F)'
3406 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3407 network_extralibs="-lsocket -lnsl"
3408 # When using suncc to build, the Solaris linker will mark
3409 # an executable with each instruction set encountered by
3410 # the Solaris assembler. As our libraries contain their own
3411 # guards for processor-specific code, instead suppress
3412 # generation of the HWCAPS ELF section on Solaris x86 only.
3413 enabled_all suncc x86 &&
3414 echo "hwcap_1 = OVERRIDE;" > mapfile &&
3415 add_ldflags -Wl,-M,mapfile
3416 nm_default='nm -P -g'
3417 ;;
3418 netbsd)
3419 disable symver
3420 oss_indev_extralibs="-lossaudio"
3421 oss_outdev_extralibs="-lossaudio"
3422 ;;
3423 openbsd|bitrig)
3424 disable symver
3425 SHFLAGS='-shared'
3426 SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3427 SLIB_INSTALL_LINKS=
3428 oss_indev_extralibs="-lossaudio"
3429 oss_outdev_extralibs="-lossaudio"
3430 ;;
3431 dragonfly)
3432 disable symver
3433 ;;
3434 freebsd)
3435 ;;
3436 bsd/os)
3437 add_extralibs -lpoll -lgnugetopt
3438 ;;
3439 darwin)
3440 enabled ppc && add_asflags -force_cpusubtype_ALL
3441 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3442 enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3443 add_ldflags -Wl,-dynamic,-search_paths_first
3444 SLIBSUF=".dylib"
3445 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3446 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3447 objformat="macho"
3448 enabled x86_64 && objformat="macho64"
3449 enabled_any pic shared ||
3450 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3451 ;;
3452 mingw32*)
3453 if test $target_os = "mingw32ce"; then
3454 disable network
3455 else
3456 target_os=mingw32
3457 fi
3458 LIBTARGET=i386
3459 if enabled x86_64; then
3460 LIBTARGET="i386:x86-64"
3461 elif enabled arm; then
3462 LIBTARGET=arm-wince
3463 fi
3464 check_ldflags -Wl,--nxcompat
3465 check_ldflags -Wl,--dynamicbase
3466 shlibdir_default="$bindir_default"
3467 SLIBPREF=""
3468 SLIBSUF=".dll"
3469 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3470 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3471 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)'
3472 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3473 SLIB_INSTALL_LINKS=
3474 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3475 SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3476 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'
3477 objformat="win32"
3478 dlltool="${cross_prefix}dlltool"
3479 ranlib=:
3480 enable dos_paths
3481 ;;
3482 win32|win64)
3483 disable symver
3484 if enabled shared; then
3485 # Link to the import library instead of the normal static library
3486 # for shared libs.
3487 LD_LIB='%.lib'
3488 # Cannot build both shared and static libs with MSVC or icl.
3489 disable static
3490 fi
3491 shlibdir_default="$bindir_default"
3492 SLIBPREF=""
3493 SLIBSUF=".dll"
3494 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3495 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3496 SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3497 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3498 SLIB_INSTALL_LINKS=
3499 SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3500 SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3501 SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3502 objformat="win32"
3503 ranlib=:
3504 enable dos_paths
3505 ;;
3506 cygwin*)
3507 target_os=cygwin
3508 shlibdir_default="$bindir_default"
3509 SLIBPREF="cyg"
3510 SLIBSUF=".dll"
3511 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3512 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3513 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3514 SLIB_INSTALL_LINKS=
3515 SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3516 SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3517 objformat="win32"
3518 enable dos_paths
3519 ;;
3520 *-dos|freedos|opendos)
3521 network_extralibs="-lsocket"
3522 objformat="coff"
3523 enable dos_paths
3524 add_cppflags -U__STRICT_ANSI__
3525 ;;
3526 linux)
3527 enable dv1394
3528 ;;
3529 irix*)
3530 target_os=irix
3531 ranlib="echo ignoring ranlib"
3532 ;;
3533 os/2*)
3534 ln_s="cp -f"
3535 objformat="aout"
3536 add_cppflags -D_GNU_SOURCE
3537 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3538 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3539 LIBSUF="_s.a"
3540 SLIBPREF=""
3541 SLIBSUF=".dll"
3542 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3543 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3544 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3545 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3546 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3547 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3548 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3549 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3550 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3551 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3552 SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3553 enable dos_paths
3554 ;;
3555 gnu/kfreebsd)
3556 add_cppflags -D_BSD_SOURCE
3557 ;;
3558 gnu)
3559 ;;
3560 qnx)
3561 add_cppflags -D_QNX_SOURCE
3562 network_extralibs="-lsocket"
3563 ;;
3564 symbian)
3565 SLIBSUF=".dll"
3566 enable dos_paths
3567 add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3568 add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3569 add_ldflags -Wl,--target1-abs,--no-undefined \
3570 -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3571 -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3572 add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3573 -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3574 -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3575 ;;
3576 osf1)
3577 add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3578 ;;
3579 minix)
3580 ;;
3581 plan9)
3582 add_cppflags -D_C99_SNPRINTF_EXTENSION \
3583 -D_REENTRANT_SOURCE \
3584 -D_RESEARCH_SOURCE \
3585 -DFD_SETSIZE=96 \
3586 -DHAVE_SOCK_OPTS
3587 add_compat strtod.o strtod=avpriv_strtod
3588 network_extralibs='-lbsd'
3589 exeobjs=compat/plan9/main.o
3590 cp_f='cp'
3591 ;;
3592 none)
3593 ;;
3594 *)
3595 die "Unknown OS '$target_os'."
3596 ;;
3597esac
3598
3599# determine libc flavour
3600
3601probe_libc(){
3602 pfx=$1
3603 pfx_no_=${pfx%_}
3604 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3605 if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3606 eval ${pfx}libc_type=uclibc
3607 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3608 elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3609 eval ${pfx}libc_type=glibc
3610 add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3611 # MinGW headers can be installed on Cygwin, so check for newlib first.
3612 elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3613 eval ${pfx}libc_type=newlib
3614 add_${pfx}cppflags -U__STRICT_ANSI__
3615 # MinGW64 is backwards compatible with MinGW32, so check for it first.
3616 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3617 eval ${pfx}libc_type=mingw64
3618 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3619 eval test \$${pfx_no_}cc_type = "gcc" &&
3620 add_${pfx}cppflags -D__printf__=__gnu_printf__
3621 elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION" ||
3622 check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3623 eval ${pfx}libc_type=mingw32
3624 check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3625 (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3626 die "ERROR: MinGW32 runtime version must be >= 3.15."
3627 add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3628 eval test \$${pfx_no_}cc_type = "gcc" &&
3629 add_${pfx}cppflags -D__printf__=__gnu_printf__
3630 elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3631 eval ${pfx}libc_type=msvcrt
3632 # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3633 # 0x601 by default unless something else is set by the user.
3634 # This can easily lead to us detecting functions only present
3635 # in such new versions and producing binaries requiring windows 7.0.
3636 # Therefore explicitly set the default to XP unless the user has
3637 # set something else on the command line.
3638 check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3639 add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3640 elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3641 eval ${pfx}libc_type=klibc
3642 elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3643 eval ${pfx}libc_type=bionic
3644 elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3645 eval ${pfx}libc_type=solaris
3646 add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3647 fi
3648}
3649
3650probe_libc
3651test -n "$libc_type" && enable libc_$libc_type
3652probe_libc host_
3653test -n "$host_libc_type" && enable host_libc_$host_libc_type
3654
3655case $libc_type in
3656 bionic)
3657 add_compat strtod.o strtod=avpriv_strtod
3658 ;;
3659 msvcrt)
3660 add_compat strtod.o strtod=avpriv_strtod
3661 add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf \
3662 _snprintf=avpriv_snprintf \
3663 vsnprintf=avpriv_vsnprintf
3664 ;;
3665esac
3666
3667# hacks for compiler/libc/os combinations
3668
3669if enabled_all tms470 libc_glibc; then
3670 CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3671 add_cppflags -D__USER_LABEL_PREFIX__=
3672 add_cppflags -D__builtin_memset=memset
3673 add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3674 add_cflags -pds=48 # incompatible redefinition of macro
3675fi
3676
3677if enabled_all ccc libc_glibc; then
3678 add_ldflags -Wl,-z,now # calls to libots crash without this
3679fi
3680
3681check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3682 add_cppflags '-I\$(SRC_PATH)/compat/float'
3683
3684esc(){
3685 echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3686}
3687
3688echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3689
3690check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3691
3692set_default $PATHS_LIST
3693set_default nm
3694
3695# we need to build at least one lib type
3696if ! enabled_any static shared; then
3697 cat <<EOF
3698At least one library type must be built.
3699Specify --enable-static to build the static libraries or --enable-shared to
3700build the shared libraries as well. To only build the shared libraries specify
3701--disable-static in addition to --enable-shared.
3702EOF
3703 exit 1;
3704fi
3705
3706die_license_disabled() {
3707 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3708}
3709
3710die_license_disabled gpl libcdio
3711die_license_disabled gpl libx264
3712die_license_disabled gpl libx265
3713die_license_disabled gpl libxavs
3714die_license_disabled gpl libxvid
3715die_license_disabled gpl x11grab
3716
3717die_license_disabled nonfree libfaac
3718die_license_disabled nonfree libfdk_aac
3719die_license_disabled nonfree openssl
3720
3721die_license_disabled version3 libopencore_amrnb
3722die_license_disabled version3 libopencore_amrwb
3723die_license_disabled version3 libvo_aacenc
3724die_license_disabled version3 libvo_amrwbenc
3725
3726enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3727
3728disabled optimizations || check_cflags -fomit-frame-pointer
3729
3730enable_weak_pic() {
3731 disabled pic && return
3732 enable pic
3733 add_cppflags -DPIC
3734 case "$target_os" in
3735 mingw*|cygwin*)
3736 ;;
3737 *)
3738 add_cflags -fPIC
3739 ;;
3740 esac
3741 add_asflags -fPIC
3742}
3743
3744enabled pic && enable_weak_pic
3745
3746check_cc <<EOF || die "Symbol mangling check failed."
3747int ff_extern;
3748EOF
3749sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3750extern_prefix=${sym%%ff_extern*}
3751
3752check_cc <<EOF && enable_weak inline_asm
3753void foo(void) { __asm__ volatile ("" ::); }
3754EOF
3755
3756_restrict=
3757for restrict_keyword in restrict __restrict__ __restrict; do
3758 check_cc <<EOF && _restrict=$restrict_keyword && break
3759void foo(char * $restrict_keyword p);
3760EOF
3761done
3762
3763check_cc <<EOF && enable pragma_deprecated
3764void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3765EOF
3766
3767check_cc <<EOF && enable attribute_packed
3768struct { int x; } __attribute__((packed)) x;
3769EOF
3770
3771check_cc <<EOF && enable attribute_may_alias
3772union { int x; } __attribute__((may_alias)) x;
3773EOF
3774
3775check_cc <<EOF || die "endian test failed"
3776unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3777EOF
3778od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3779
3780check_gas() {
3781 log "check_gas using '$as' as AS"
3782 # :vararg is used on aarch64, arm and ppc altivec
3783 check_as <<EOF || return 1
3784.macro m n, y:vararg=0
3785\n: .int \y
3786.endm
3787m x
3788EOF
3789 # .altmacro is only used in arm asm
3790 ! enabled arm || check_as <<EOF || return 1
3791.altmacro
3792EOF
3793 enable gnu_as
3794 return 0
3795}
3796
3797if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
3798 nogas=:
3799 enabled_any arm aarch64 && nogas=die
3800 enabled_all ppc altivec && nogas=warn
3801 as_noop=-v
3802
3803 case $as_type in
3804 arm*) gaspp_as_type=armasm; as_noop=-h ;;
3805 gcc) gaspp_as_type=gas ;;
3806 *) gaspp_as_type=$as_type ;;
3807 esac
3808
3809 [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
3810
3811 check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
3812 gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
3813
3814 if ! check_gas ; then
3815 as=${gas:=$as}
3816 check_gas || \
3817 $nogas "GNU assembler not found, install/update gas-preprocessor"
3818 fi
3819
3820 check_as <<EOF && enable as_func
3821.func test
3822.endfunc
3823EOF
3824fi
3825
3826check_inline_asm inline_asm_labels '"1:\n"'
3827
3828if enabled aarch64; then
3829 enabled armv8 && check_insn armv8 'prfm pldl1strm, [x0]'
3830 # internal assembler in clang 3.3 does not support this instruction
3831 enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1'
3832 enabled vfp && check_insn vfp 'fmadd d0, d0, d1, d2'
3833
3834 map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3835
3836elif enabled alpha; then
3837
3838 check_cflags -mieee
3839
3840elif enabled arm; then
3841
3842 check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3843 enabled thumb && check_cflags -mthumb || check_cflags -marm
3844
3845 if check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3846 enable vfp_args
3847 elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3848 case "${cross_prefix:-$cc}" in
3849 *hardfloat*) enable vfp_args; fpabi=vfp ;;
3850 *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3851__asm__ (".eabi_attribute 28, 1");
3852int main(void) { return 0; }
3853EOF
3854 esac
3855 warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3856 fi
3857
3858 enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3859 enabled armv6 && check_insn armv6 'sadd16 r0, r0, r0'
3860 enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3861 enabled neon && check_insn neon 'vadd.i16 q0, q0, q0'
3862 enabled vfp && check_insn vfp 'fadds s0, s0, s0'
3863 enabled vfpv3 && check_insn vfpv3 'vmov.f32 s0, #1.0'
3864
3865 [ $target_os = linux ] || [ $target_os = android ] ||
3866 map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3867 $ARCH_EXT_LIST_ARM
3868
3869 check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3870
3871 check_as <<EOF && enable as_dn_directive
3872ra .dn d0.i16
3873.unreq ra
3874EOF
3875
3876 [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3877
3878elif enabled mips; then
3879
3880 check_inline_asm loongson '"dmult.g $1, $2, $3"'
3881
3882elif enabled parisc; then
3883
3884 if enabled gcc; then
3885 case $($cc -dumpversion) in
3886 4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3887 esac
3888 fi
3889
3890elif enabled ppc; then
3891
3892 enable local_aligned_8 local_aligned_16
3893
3894 check_inline_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
3895 check_inline_asm ibm_asm '"add 0, 0, 0"'
3896 check_inline_asm ppc4xx '"maclhw r10, r11, r12"'
3897 check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3898
3899 # AltiVec flags: The FSF version of GCC differs from the Apple version
3900 if enabled altivec; then
3901 check_cflags -maltivec -mabi=altivec &&
3902 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3903 check_cflags -faltivec
3904
3905 # check if our compiler supports Motorola AltiVec C API
3906 check_cc <<EOF || disable altivec
3907$inc_altivec_h
3908int main(void) {
3909 vector signed int v1 = (vector signed int) { 0 };
3910 vector signed int v2 = (vector signed int) { 1 };
3911 v1 = vec_add(v1, v2);
3912 return 0;
3913}
3914EOF
3915
3916 enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3917 fi
3918
3919elif enabled x86; then
3920
3921 check_builtin rdtsc intrin.h "__rdtsc()"
3922 check_builtin mm_empty mmintrin.h "_mm_empty()"
3923
3924 enable local_aligned_8 local_aligned_16
3925
3926 # check whether EBP is available on x86
3927 # As 'i' is stored on the stack, this program will crash
3928 # if the base pointer is used to access it because the
3929 # base pointer is cleared in the inline assembly code.
3930 check_exec_crash <<EOF && enable ebp_available
3931volatile int i=0;
3932__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3933return i;
3934EOF
3935
3936 # check whether EBX is available on x86
3937 check_inline_asm ebx_available '""::"b"(0)' &&
3938 check_inline_asm ebx_available '"":::"%ebx"'
3939
3940 # check whether xmm clobbers are supported
3941 check_inline_asm xmm_clobbers '"":::"%xmm0"'
3942
3943 # check whether binutils is new enough to compile SSSE3/MMXEXT
3944 enabled ssse3 && check_inline_asm ssse3_inline '"pabsw %xmm0, %xmm0"'
3945 enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3946
3947 if ! disabled_any asm mmx yasm; then
3948 if check_cmd $yasmexe --version; then
3949 enabled x86_64 && yasm_extra="-m amd64"
3950 yasm_debug="-g dwarf2"
3951 elif check_cmd nasm -v; then
3952 yasmexe=nasm
3953 yasm_debug="-g -F dwarf"
3954 enabled x86_64 && test "$objformat" = elf && objformat=elf64
3955 fi
3956
3957 YASMFLAGS="-f $objformat $yasm_extra"
3958 enabled pic && append YASMFLAGS "-DPIC"
3959 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
3960 case "$objformat" in
3961 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3962 esac
3963
3964 check_yasm "movbe ecx, [5]" && enable yasm ||
3965 die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
3966 check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
3967 check_yasm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external
3968 check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3969 check_yasm "CPU amdnop" || disable cpunop
3970 fi
3971
3972 case "$cpu" in
3973 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3974 disable fast_clz
3975 ;;
3976 esac
3977
3978fi
3979
3980check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
3981
3982check_ldflags -Wl,--as-needed
3983
3984if check_func dlopen; then
3985 ldl=
3986elif check_func dlopen -ldl; then
3987 ldl=-ldl
3988fi
3989
3990if ! disabled network; then
3991 check_func getaddrinfo $network_extralibs
3992 check_func getservbyport $network_extralibs
3993 check_func inet_aton $network_extralibs
3994
3995 check_type netdb.h "struct addrinfo"
3996 check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3997 check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3998 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3999 check_type poll.h "struct pollfd"
4000 check_type netinet/sctp.h "struct sctp_event_subscribe"
4001 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4002 check_type netinet/in.h "struct sockaddr_in6"
4003 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4004 check_type "sys/types.h sys/socket.h" socklen_t
4005
4006 # Prefer arpa/inet.h over winsock2
4007 if check_header arpa/inet.h ; then
4008 check_func closesocket
4009 elif check_header winsock2.h ; then
4010 check_func_headers winsock2.h closesocket -lws2 &&
4011 network_extralibs="-lws2" ||
4012 { check_func_headers winsock2.h closesocket -lws2_32 &&
4013 network_extralibs="-lws2_32"; } || disable winsock2_h network
4014 check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4015
4016 check_type ws2tcpip.h socklen_t
4017 check_type ws2tcpip.h "struct addrinfo"
4018 check_type ws2tcpip.h "struct group_source_req"
4019 check_type ws2tcpip.h "struct ip_mreq_source"
4020 check_type ws2tcpip.h "struct ipv6_mreq"
4021 check_type winsock2.h "struct pollfd"
4022 check_struct winsock2.h "struct sockaddr" sa_len
4023 check_type ws2tcpip.h "struct sockaddr_in6"
4024 check_type ws2tcpip.h "struct sockaddr_storage"
4025 else
4026 disable network
4027 fi
4028fi
4029
4030check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4031check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4032check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4033check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4034
4035check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
4036check_func ${malloc_prefix}memalign && enable memalign
4037check_func ${malloc_prefix}posix_memalign && enable posix_memalign
4038
4039check_func fcntl
4040check_func fork
4041check_func gethrtime
4042check_func getopt
4043check_func getrusage
4044check_func gettimeofday
4045check_func isatty
4046check_func localtime_r
4047check_func mach_absolute_time
4048check_func mkstemp
4049check_func mmap
4050check_func mprotect
4051# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4052check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4053check_func sched_getaffinity
4054check_func setrlimit
4055check_func strerror_r
4056check_func strptime
4057check_func sysconf
4058check_func sysctl
4059check_func usleep
4060
4061check_func_headers io.h setmode
4062check_func_headers stdlib.h getenv
4063
4064check_func_headers windows.h CoTaskMemFree -lole32
4065check_func_headers windows.h GetProcessAffinityMask
4066check_func_headers windows.h GetProcessTimes
4067check_func_headers windows.h GetSystemTimeAsFileTime
4068check_func_headers windows.h MapViewOfFile
4069check_func_headers windows.h SetConsoleTextAttribute
4070check_func_headers windows.h Sleep
4071check_func_headers windows.h VirtualAlloc
4072
4073check_header direct.h
4074check_header dlfcn.h
4075check_header dxva.h
4076check_header dxva2api.h
4077check_header io.h
4078check_header mach/mach_time.h
4079check_header malloc.h
4080check_header poll.h
4081check_header sys/mman.h
4082check_header sys/param.h
4083check_header sys/resource.h
4084check_header sys/select.h
4085check_header sys/time.h
4086check_header sys/un.h
4087check_header unistd.h
4088check_header vdpau/vdpau.h
4089check_header vdpau/vdpau_x11.h
4090check_header VideoDecodeAcceleration/VDADecoder.h
4091check_header windows.h
4092check_header X11/extensions/XvMClib.h
4093
4094check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4095check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4096check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4097
4098check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4099
4100if ! disabled w32threads && ! enabled pthreads; then
4101 check_func_headers "windows.h process.h" _beginthreadex &&
4102 enable w32threads || disable w32threads
4103fi
4104
4105# check for some common methods of building with pthread support
4106# do this before the optional library checks as some of them require pthreads
4107if ! disabled pthreads && ! enabled w32threads; then
4108 enable pthreads
4109 if check_func pthread_join -pthread; then
4110 add_cflags -pthread
4111 add_extralibs -pthread
4112 elif check_func pthread_join -pthreads; then
4113 add_cflags -pthreads
4114 add_extralibs -pthreads
4115 elif check_func pthread_join -lpthreadGC2; then
4116 add_extralibs -lpthreadGC2
4117 elif check_lib pthread.h pthread_join -lpthread; then
4118 :
4119 elif ! check_func pthread_join; then
4120 disable pthreads
4121 fi
4122fi
4123
4124disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
4125disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4126
4127check_lib math.h sin -lm && LIBM="-lm"
4128enabled vaapi && require vaapi va/va.h vaInitialize -lva
4129
4130atan2f_args=2
4131ldexpf_args=2
4132powf_args=2
4133
4134for func in $MATH_FUNCS; do
4135 eval check_mathfunc $func \${${func}_args:-1}
4136done
4137
4138# these are off by default, so fail if requested and not available
4139enabled avisynth && { { check_header "avisynth/avisynth_c.h" && check_lib2 "windows.h" LoadLibrary; } ||
4140 { check_header "avxsynth/avxsynth_c.h" && check_lib2 "dlfcn.h" dlopen -ldl; } ||
4141 die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4142enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4143enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4144enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
4145enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4146enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4147enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4148enabled libfreetype && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
4149enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4150 check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4151 done || die "ERROR: libgsm not found"; }
4152enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4153enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4154enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4155enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4156enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4157enabled libopenjpeg && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
4158 { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
4159enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4160enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4161enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4162enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4163enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
4164enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4165enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame
4166enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4167enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4168enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4169enabled libvpx && {
4170 enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4171 die "ERROR: libvpx decoder version must be >=0.9.1"; }
4172 enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
4173 die "ERROR: libvpx encoder version must be >=0.9.6"; }
4174 enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4175 enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4176enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
4177enabled libwebp && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4178enabled libx264 && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
4179 { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4180 die "ERROR: libx264 version must be >= 0.118."; }
4181enabled libx265 && require_pkg_config x265 x265.h x265_encoder_encode &&
4182 { check_cpp_condition x265.h "X265_BUILD >= 17" ||
4183 die "ERROR: libx265 version must be >= 17."; }
4184enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
4185enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
4186enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4187 check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4188 check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4189 die "ERROR: openssl not found"; }
4190
4191if enabled gnutls; then
4192 { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4193 { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4194fi
4195
4196# libdc1394 check
4197if enabled libdc1394; then
4198 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4199 enable libdc1394_2; } ||
4200 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4201 enable libdc1394_1; } ||
4202 die "ERROR: No version of libdc1394 found "
4203fi
4204
4205if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4206 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4207 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4208 enable sdl
4209fi
4210
4211pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4212texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4213
4214check_header linux/fb.h
4215check_header linux/videodev2.h
4216check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
4217
4218check_header sys/videoio.h
4219
4220check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4221# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4222# w32api 3.12 had it defined wrong
4223check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4224
4225# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4226{ check_header dev/bktr/ioctl_meteor.h &&
4227 check_header dev/bktr/ioctl_bt848.h; } ||
4228{ check_header machine/ioctl_meteor.h &&
4229 check_header machine/ioctl_bt848.h; } ||
4230{ check_header dev/video/meteor/ioctl_meteor.h &&
4231 check_header dev/video/bktr/ioctl_bt848.h; } ||
4232check_header dev/ic/bt8xx.h
4233
4234check_header sndio.h
4235check_header sys/soundcard.h
4236check_header soundcard.h
4237
4238enabled_any alsa_indev alsa_outdev &&
4239 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4240
4241enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
4242 check_func jack_port_get_latency_range -ljack
4243
4244enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4245
4246if enabled libcdio; then
4247 check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4248 check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
4249fi
4250
4251check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4252
4253enabled x11grab &&
4254require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4255require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes &&
4256{ enabled xlib || die "ERROR: Xlib not found"; }
4257
4258enabled vdpau &&
4259 check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4260 disable vdpau
4261
4262enabled vdpau && enabled xlib &&
4263 check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4264 prepend avconv_libs $($ldflags_filter "-lvdpau") &&
4265 enable vdpau_x11
4266
4267enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4268
4269# add some useful compiler flags if supported
4270check_cflags -Wdeclaration-after-statement
4271check_cflags -Wall
4272check_cflags -Wdisabled-optimization
4273check_cflags -Wpointer-arith
4274check_cflags -Wredundant-decls
4275check_cflags -Wcast-qual
4276check_cflags -Wwrite-strings
4277check_cflags -Wtype-limits
4278check_cflags -Wundef
4279check_cflags -Wmissing-prototypes
4280check_cflags -Wstrict-prototypes
4281enabled extra_warnings && check_cflags -Winline
4282
4283check_disable_warning(){
4284 warning_flag=-W${1#-Wno-}
4285 test_cflags $warning_flag && add_cflags $1
4286}
4287
4288check_disable_warning -Wno-parentheses
4289check_disable_warning -Wno-switch
4290check_disable_warning -Wno-format-zero-length
4291check_disable_warning -Wno-pointer-sign
4292
4293# add some linker flags
4294check_ldflags -Wl,--warn-common
4295check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4296test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4297
4298# add some strip flags
4299# -wN '..@*' is more selective than -x, but not available everywhere.
4300check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'
4301
4302enabled neon_clobber_test &&
4303 check_ldflags -Wl,--wrap,avcodec_open2 \
4304 -Wl,--wrap,avcodec_decode_audio4 \
4305 -Wl,--wrap,avcodec_decode_video2 \
4306 -Wl,--wrap,avcodec_decode_subtitle2 \
4307 -Wl,--wrap,avcodec_encode_audio2 \
4308 -Wl,--wrap,avcodec_encode_video2 \
4309 -Wl,--wrap,avcodec_encode_subtitle \
4310 -Wl,--wrap,avresample_convert ||
4311 disable neon_clobber_test
4312
4313enabled xmm_clobber_test &&
4314 check_ldflags -Wl,--wrap,avcodec_open2 \
4315 -Wl,--wrap,avcodec_decode_audio4 \
4316 -Wl,--wrap,avcodec_decode_video2 \
4317 -Wl,--wrap,avcodec_decode_subtitle2 \
4318 -Wl,--wrap,avcodec_encode_audio2 \
4319 -Wl,--wrap,avcodec_encode_video2 \
4320 -Wl,--wrap,avcodec_encode_subtitle \
4321 -Wl,--wrap,avresample_convert \
4322 -Wl,--wrap,sws_scale ||
4323 disable xmm_clobber_test
4324
4325echo "X{};" > $TMPV
4326if test_ldflags -Wl,--version-script,$TMPV; then
4327 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4328 check_cc <<EOF && enable symver_asm_label
4329void ff_foo(void) __asm__ ("av_foo@VERSION");
4330void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4331EOF
4332 check_cc <<EOF && enable symver_gnu_asm
4333__asm__(".symver ff_foo,av_foo@VERSION");
4334void ff_foo(void) {}
4335EOF
4336fi
4337
4338if [ -z "$optflags" ]; then
4339 if enabled small; then
4340 optflags=$cflags_size
4341 elif enabled optimizations; then
4342 optflags=$cflags_speed
4343 else
4344 optflags=$cflags_noopt
4345 fi
4346fi
4347
4348check_optflags(){
4349 check_cflags "$@"
4350 enabled lto && check_ldflags "$@"
4351}
4352
4353
4354if enabled lto; then
4355 test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4356 check_cflags -flto
4357 check_ldflags -flto $cpuflags
4358fi
4359
4360check_optflags $optflags
4361check_optflags -fno-math-errno
4362check_optflags -fno-signed-zeros
4363
4364if enabled icc; then
4365 # Just warnings, no remarks
4366 check_cflags -w1
4367 # -wd: Disable following warnings
4368 # 144, 167, 556: -Wno-pointer-sign
4369 # 1292: attribute "foo" ignored
4370 # 1419: external declaration in primary source file
4371 # 10006: ignoring unknown option -fno-signed-zeros
4372 # 10148: ignoring unknown option -Wno-parentheses
4373 # 10156: ignoring option '-W'; no argument required
4374 check_cflags -wd144,167,556,1292,1419,10006,10148,10156
4375 # 11030: Warning unknown option --as-needed
4376 # 10156: ignoring option '-export'; no argument required
4377 check_ldflags -wd10156,11030
4378 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4379 enable ebp_available
4380 if enabled x86_32; then
4381 icc_version=$($cc -dumpversion)
4382 test ${icc_version%%.*} -ge 11 &&
4383 check_cflags -falign-stack=maintain-16-byte ||
4384 disable aligned_stack
4385 fi
4386elif enabled ccc; then
4387 # disable some annoying warnings
4388 add_cflags -msg_disable bitnotint
4389 add_cflags -msg_disable mixfuncvoid
4390 add_cflags -msg_disable nonstandcast
4391 add_cflags -msg_disable unsupieee
4392elif enabled gcc; then
4393 check_optflags -fno-tree-vectorize
4394 check_cflags -Werror=implicit-function-declaration
4395 check_cflags -Werror=missing-prototypes
4396 check_cflags -Werror=return-type
4397 check_cflags -Werror=declaration-after-statement
4398 check_cflags -Werror=vla
4399 enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4400elif enabled llvm_gcc; then
4401 check_cflags -mllvm -stack-alignment=16
4402elif enabled clang; then
4403 check_cflags -mllvm -stack-alignment=16
4404 check_cflags -Qunused-arguments
4405 check_cflags -Werror=implicit-function-declaration
4406 check_cflags -Werror=missing-prototypes
4407 check_cflags -Werror=return-type
4408elif enabled cparser; then
4409 add_cflags -Wno-missing-variable-declarations
4410 add_cflags -Wno-empty-statement
4411elif enabled armcc; then
4412 add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
4413 add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4414 # 2523: use of inline assembly is deprecated
4415 add_cflags -W${armcc_opt},--diag_suppress=2523
4416 add_cflags -W${armcc_opt},--diag_suppress=1207
4417 add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4418 add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4419 add_cflags -W${armcc_opt},--diag_suppress=167 # pointer sign
4420 add_cflags -W${armcc_opt},--diag_suppress=513 # pointer sign
4421elif enabled tms470; then
4422 add_cflags -pds=824 -pds=837
4423 disable inline_asm
4424elif enabled pathscale; then
4425 add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4426elif enabled_any msvc icl; then
4427 enabled x86_32 && disable aligned_stack
4428 enabled_all x86_32 debug && add_cflags -Oy-
4429 enabled debug && add_ldflags -debug
4430 enable pragma_deprecated
4431 if enabled icl; then
4432 # -Qansi-alias is basically -fstrict-aliasing, but does not work
4433 # (correctly) on icl 13.x.
4434 check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4435 add_cflags -Qansi-alias
4436 # icl will pass the inline asm tests but inline asm is currently
4437 # not supported (build will fail)
4438 disable inline_asm
4439 fi
4440fi
4441
4442case $as_type in
4443 clang)
4444 add_asflags -Qunused-arguments
4445 ;;
4446esac
4447
4448case $ld_type in
4449 clang)
4450 check_ldflags -Qunused-arguments
4451 ;;
4452esac
4453
4454case $target_os in
4455 osf1)
4456 enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4457 ;;
4458 plan9)
4459 add_cppflags -Dmain=plan9_main
4460 ;;
4461esac
4462
4463enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4464
4465check_deps $CONFIG_LIST \
4466 $CONFIG_EXTRA \
4467 $HAVE_LIST \
4468 $ALL_COMPONENTS \
4469
4470enabled_all dxva2 CoTaskMemFree &&
4471 prepend avconv_libs $($ldflags_filter "-lole32") &&
4472 enable dxva2_lib
4473
4474! enabled_any memalign posix_memalign aligned_malloc &&
4475 enabled $simd_align_16 && enable memalign_hack
4476
4477map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
4478
4479for thread in $THREADS_LIST; do
4480 if enabled $thread; then
4481 test -n "$thread_type" &&
4482 die "ERROR: Only one thread type must be selected." ||
4483 thread_type="$thread"
4484 fi
4485done
4486
4487enabled zlib && add_cppflags -DZLIB_CONST
4488
4489# conditional library dependencies, in linking order
4490enabled movie_filter && prepend avfilter_deps "avformat avcodec"
4491enabled resample_filter && prepend avfilter_deps "avresample"
4492enabled scale_filter && prepend avfilter_deps "swscale"
4493
4494enabled opus_decoder && prepend avcodec_deps "avresample"
4495
4496expand_deps(){
4497 lib_deps=${1}_deps
4498 eval "deps=\$$lib_deps"
4499 append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
4500 unique $lib_deps
4501}
4502
4503map 'expand_deps $v' $LIBRARY_LIST
4504
4505echo "install prefix $prefix"
4506echo "source path $source_path"
4507echo "C compiler $cc"
4508echo "C library $libc_type"
4509if test "$host_cc" != "$cc"; then
4510 echo "host C compiler $host_cc"
4511 echo "host C library $host_libc_type"
4512fi
4513echo "ARCH $arch ($cpu)"
4514if test "$build_suffix" != ""; then
4515 echo "build suffix $build_suffix"
4516fi
4517if test "$extra_version" != ""; then
4518 echo "version string suffix $extra_version"
4519fi
4520echo "big-endian ${bigendian-no}"
4521echo "runtime cpu detection ${runtime_cpudetect-no}"
4522if enabled x86; then
4523 echo "${yasmexe} ${yasm-no}"
4524 echo "MMX enabled ${mmx-no}"
4525 echo "MMXEXT enabled ${mmxext-no}"
4526 echo "3DNow! enabled ${amd3dnow-no}"
4527 echo "3DNow! extended enabled ${amd3dnowext-no}"
4528 echo "SSE enabled ${sse-no}"
4529 echo "SSSE3 enabled ${ssse3-no}"
4530 echo "AVX enabled ${avx-no}"
4531 echo "XOP enabled ${xop-no}"
4532 echo "FMA3 enabled ${fma3-no}"
4533 echo "FMA4 enabled ${fma4-no}"
4534 echo "i686 features enabled ${i686-no}"
4535 echo "CMOV is fast ${fast_cmov-no}"
4536 echo "EBX available ${ebx_available-no}"
4537 echo "EBP available ${ebp_available-no}"
4538fi
4539if enabled aarch64; then
4540 echo "NEON enabled ${neon-no}"
4541 echo "VFP enabled ${vfp-no}"
4542fi
4543if enabled arm; then
4544 echo "ARMv5TE enabled ${armv5te-no}"
4545 echo "ARMv6 enabled ${armv6-no}"
4546 echo "ARMv6T2 enabled ${armv6t2-no}"
4547 echo "VFP enabled ${vfp-no}"
4548 echo "NEON enabled ${neon-no}"
4549fi
4550if enabled ppc; then
4551 echo "AltiVec enabled ${altivec-no}"
4552 echo "PPC 4xx optimizations ${ppc4xx-no}"
4553 echo "dcbzl available ${dcbzl-no}"
4554fi
4555echo "debug symbols ${debug-no}"
4556echo "optimize for size ${small-no}"
4557echo "optimizations ${optimizations-no}"
4558echo "static ${static-no}"
4559echo "shared ${shared-no}"
4560echo "new filter support ${avfilter-no}"
4561echo "network support ${network-no}"
4562echo "threading support ${thread_type-no}"
4563echo "safe bitstream reader ${safe_bitstream_reader-no}"
4564echo "SDL support ${sdl-no}"
4565test -n "$random_seed" &&
4566 echo "random seed ${random_seed}"
4567echo
4568
4569echo "External libraries:"
4570print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4571echo
4572
4573for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4574 echo "Enabled ${type}s:"
4575 eval list=\$$(toupper $type)_LIST
4576 print_enabled '_*' $list | print_3_columns
4577 echo
4578done
4579
4580license="LGPL version 2.1 or later"
4581if enabled nonfree; then
4582 license="nonfree and unredistributable"
4583elif enabled gplv3; then
4584 license="GPL version 3 or later"
4585elif enabled lgplv3; then
4586 license="LGPL version 3 or later"
4587elif enabled gpl; then
4588 license="GPL version 2 or later"
4589fi
4590
4591echo "License: $license"
4592
4593echo "Creating config.mak and config.h..."
4594
4595test -e Makefile || echo "include $source_path/Makefile" > Makefile
4596
4597config_files="$TMPH config.mak"
4598
4599cat > config.mak <<EOF
4600# Automatically generated by configure - do not modify!
4601LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
4602prefix=$prefix
4603LIBDIR=\$(DESTDIR)$libdir
4604SHLIBDIR=\$(DESTDIR)$shlibdir
4605INCDIR=\$(DESTDIR)$incdir
4606BINDIR=\$(DESTDIR)$bindir
4607DATADIR=\$(DESTDIR)$datadir
4608DOCDIR=\$(DESTDIR)$docdir
4609MANDIR=\$(DESTDIR)$mandir
4610SRC_PATH=$source_path
4611CC_IDENT=$cc_ident
4612ARCH=$arch
4613INTRINSICS=$intrinsics
4614CC=$cc
4615AS=$as
4616LD=$ld
4617DEPCC=$dep_cc
4618DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4619DEPAS=$as
4620DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4621YASM=$yasmexe
4622DEPYASM=$yasmexe
4623AR=$ar
4624ARFLAGS=$arflags
4625AR_O=$ar_o
4626RANLIB=$ranlib
4627STRIP=$strip
4628LN_S=$ln_s
4629CPPFLAGS=$CPPFLAGS
4630CFLAGS=$CFLAGS
4631ASFLAGS=$ASFLAGS
4632AS_C=$AS_C
4633AS_O=$AS_O
4634CC_C=$CC_C
4635CC_E=$CC_E
4636CC_O=$CC_O
4637LD_O=$LD_O
4638LD_LIB=$LD_LIB
4639LD_PATH=$LD_PATH
4640DLLTOOL=$dlltool
4641LDFLAGS=$LDFLAGS
4642LDEXEFLAGS=$LDEXEFLAGS
4643SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4644STRIPFLAGS=$STRIPFLAGS
4645YASMFLAGS=$YASMFLAGS
4646BUILDSUF=$build_suffix
4647FULLNAME=$FULLNAME
4648LIBPREF=$LIBPREF
4649LIBSUF=$LIBSUF
4650LIBNAME=$LIBNAME
4651SLIBPREF=$SLIBPREF
4652SLIBSUF=$SLIBSUF
4653EXESUF=$EXESUF
4654EXTRA_VERSION=$extra_version
4655CCDEP=$CCDEP
4656CCDEP_FLAGS=$CCDEP_FLAGS
4657ASDEP=$ASDEP
4658ASDEP_FLAGS=$ASDEP_FLAGS
4659CC_DEPFLAGS=$CC_DEPFLAGS
4660AS_DEPFLAGS=$AS_DEPFLAGS
4661HOSTCC=$host_cc
4662HOSTLD=$host_ld
4663HOSTCFLAGS=$host_cflags
4664HOSTCPPFLAGS=$host_cppflags
4665HOSTEXESUF=$HOSTEXESUF
4666HOSTLDFLAGS=$host_ldflags
4667HOSTLIBS=$host_libs
4668DEPHOSTCC=$host_cc
4669DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4670HOSTCCDEP=$HOSTCCDEP
4671HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4672HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4673HOSTCC_C=$HOSTCC_C
4674HOSTCC_O=$HOSTCC_O
4675HOSTLD_O=$HOSTLD_O
4676TARGET_EXEC=$target_exec $target_exec_args
4677TARGET_PATH=$target_path
4678TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
4679CFLAGS-avplay=$sdl_cflags
4680ZLIB=$($ldflags_filter -lz)
4681LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4682EXTRALIBS=$extralibs
4683COMPAT_OBJS=$compat_objs
4684EXEOBJS=$exeobjs
4685INSTALL=install
4686LIBTARGET=${LIBTARGET}
4687SLIBNAME=${SLIBNAME}
4688SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4689SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4690SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4691SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4692SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4693SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4694SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4695SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4696SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
4697EOF
4698
4699get_version(){
4700 lcname=lib${1}
4701 name=$(toupper $lcname)
4702 file=$source_path/$lcname/version.h
4703 eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4704 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4705 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4706 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4707 eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
4708}
4709
4710map 'get_version $v' $LIBRARY_LIST
4711
4712map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
4713
4714print_program_libs(){
4715 eval "program_libs=\$${1}_libs"
4716 eval echo "LIBS-${1}=${program_libs}" >> config.mak
4717}
4718
4719map 'print_program_libs $v' $PROGRAM_LIST
4720
4721cat > $TMPH <<EOF
4722/* Automatically generated by configure - do not modify! */
4723#ifndef LIBAV_CONFIG_H
4724#define LIBAV_CONFIG_H
4725#define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
4726#define LIBAV_LICENSE "$(c_escape $license)"
4727#define AVCONV_DATADIR "$(eval c_escape $datadir)"
4728#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4729#define restrict $_restrict
4730#define EXTERN_PREFIX "${extern_prefix}"
4731#define EXTERN_ASM ${extern_prefix}
4732#define SLIBSUF "$SLIBSUF"
4733EOF
4734
4735test -n "$malloc_prefix" &&
4736 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4737
4738if enabled yasm; then
4739 append config_files $TMPASM
4740 printf '' >$TMPASM
4741fi
4742
4743enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
4744
4745print_config ARCH_ "$config_files" $ARCH_LIST
4746print_config HAVE_ "$config_files" $HAVE_LIST
4747print_config CONFIG_ "$config_files" $CONFIG_LIST \
4748 $CONFIG_EXTRA \
4749 $ALL_COMPONENTS \
4750
4751echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
4752
4753# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4754cp_if_changed $TMPH config.h
4755touch .config
4756
4757enabled yasm && cp_if_changed $TMPASM config.asm
4758
4759cat > $TMPH <<EOF
4760/* Generated by ffconf */
4761#ifndef AVUTIL_AVCONFIG_H
4762#define AVUTIL_AVCONFIG_H
4763EOF
4764
4765print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4766
4767echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4768
4769cp_if_changed $TMPH libavutil/avconfig.h
4770
4771test -n "$WARNINGS" && printf "\n$WARNINGS"
4772
4773# build pkg-config files
4774
4775lib_version(){
4776 eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \""
4777}
4778
4779pkgconfig_generate(){
4780 name=$1
4781 shortname=${name#lib}${build_suffix}
4782 comment=$2
4783 version=$3
4784 libs=$4
4785 requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
4786 requires=${requires%, }
4787 enabled ${name#lib} || return 0
4788 mkdir -p $name
4789 cat <<EOF > $name/$name.pc
4790prefix=$prefix
4791exec_prefix=\${prefix}
4792libdir=$libdir
4793includedir=$incdir
4794
4795Name: $name
4796Description: $comment
4797Version: $version
4798Requires: $(enabled shared || echo $requires)
4799Requires.private: $(enabled shared && echo $requires)
4800Conflicts:
4801Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4802Libs.private: $(enabled shared && echo $libs)
4803Cflags: -I\${includedir}
4804EOF
4805 cat <<EOF > $name/$name-uninstalled.pc
4806prefix=
4807exec_prefix=
4808libdir=\${pcfiledir}
4809includedir=${source_path}
4810
4811Name: $name
4812Description: $comment
4813Version: $version
4814Requires: $requires
4815Conflicts:
4816Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
4817Cflags: -I\${includedir}
4818EOF
4819}
4820
4821pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4822pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs"
4823pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs"
4824pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs"
4825pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
4826pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
4827pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM"