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