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