]> git.sesse.net Git - ffmpeg/blob - configure
54aefa303a75e74c0002db3e5ffb1318aecf5e11
[ffmpeg] / 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 dxva2_deps="dxva2api_h"
1623 vaapi_deps="va_va_h"
1624 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1625 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1626 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1627
1628 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1629 h263_vdpau_hwaccel_select="vdpau h263_decoder"
1630 h264_dxva2_hwaccel_deps="dxva2"
1631 h264_dxva2_hwaccel_select="h264_decoder"
1632 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1633 h264_vda_hwaccel_select="vda h264_decoder"
1634 h264_vdpau_decoder_select="vdpau h264_decoder"
1635 h264_vdpau_hwaccel_select="vdpau h264_decoder"
1636 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1637 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1638 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1639 mpeg2_dxva2_hwaccel_deps="dxva2"
1640 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1641 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1642 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1643 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1644 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1645 mpeg4_vdpau_hwaccel_select="vdpau mpeg4_decoder"
1646 vc1_dxva2_hwaccel_deps="dxva2"
1647 vc1_dxva2_hwaccel_select="vc1_decoder"
1648 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1649 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1650 vc1_vdpau_hwaccel_select="vdpau vc1_decoder"
1651 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1652 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1653 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1654 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1655
1656 # parsers
1657 h264_parser_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1658 mpeg4video_parser_select="error_resilience mpegvideo"
1659 mpegvideo_parser_select="error_resilience mpegvideo"
1660 vc1_parser_select="error_resilience mpegvideo"
1661
1662 # external libraries
1663 libfaac_encoder_deps="libfaac"
1664 libfaac_encoder_select="audio_frame_queue"
1665 libfdk_aac_encoder_deps="libfdk_aac"
1666 libfdk_aac_encoder_select="audio_frame_queue"
1667 libgsm_decoder_deps="libgsm"
1668 libgsm_encoder_deps="libgsm"
1669 libgsm_ms_decoder_deps="libgsm"
1670 libgsm_ms_encoder_deps="libgsm"
1671 libilbc_decoder_deps="libilbc"
1672 libilbc_encoder_deps="libilbc"
1673 libmp3lame_encoder_deps="libmp3lame"
1674 libmp3lame_encoder_select="audio_frame_queue"
1675 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1676 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1677 libopencore_amrnb_encoder_select="audio_frame_queue"
1678 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1679 libopenjpeg_decoder_deps="libopenjpeg"
1680 libopenjpeg_encoder_deps="libopenjpeg"
1681 libopus_decoder_deps="libopus"
1682 libopus_encoder_deps="libopus"
1683 libopus_encoder_select="audio_frame_queue"
1684 libschroedinger_decoder_deps="libschroedinger"
1685 libschroedinger_encoder_deps="libschroedinger"
1686 libspeex_decoder_deps="libspeex"
1687 libspeex_encoder_deps="libspeex"
1688 libspeex_encoder_select="audio_frame_queue"
1689 libtheora_encoder_deps="libtheora"
1690 libvo_aacenc_encoder_deps="libvo_aacenc"
1691 libvo_aacenc_encoder_select="audio_frame_queue"
1692 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1693 libvorbis_encoder_deps="libvorbis"
1694 libvorbis_encoder_select="audio_frame_queue"
1695 libvpx_vp8_decoder_deps="libvpx"
1696 libvpx_vp8_encoder_deps="libvpx"
1697 libvpx_vp9_decoder_deps="libvpx"
1698 libvpx_vp9_encoder_deps="libvpx"
1699 libx264_encoder_deps="libx264"
1700 libxavs_encoder_deps="libxavs"
1701 libxvid_encoder_deps="libxvid"
1702
1703 # demuxers / muxers
1704 ac3_demuxer_select="ac3_parser"
1705 asf_stream_muxer_select="asf_muxer"
1706 avisynth_demuxer_deps="avisynth"
1707 dirac_demuxer_select="dirac_parser"
1708 eac3_demuxer_select="ac3_parser"
1709 flac_demuxer_select="flac_parser"
1710 ipod_muxer_select="mov_muxer"
1711 ismv_muxer_select="mov_muxer"
1712 matroska_audio_muxer_select="matroska_muxer"
1713 matroska_demuxer_suggest="bzlib lzo zlib"
1714 mov_demuxer_suggest="zlib"
1715 mov_muxer_select="rtpenc_chain"
1716 mp3_demuxer_select="mpegaudio_parser"
1717 mp4_muxer_select="mov_muxer"
1718 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1719 mpegtsraw_demuxer_select="mpegts_demuxer"
1720 mxf_d10_muxer_select="mxf_muxer"
1721 ogg_demuxer_select="golomb"
1722 psp_muxer_select="mov_muxer"
1723 rtp_demuxer_select="sdp_demuxer"
1724 rtp_muxer_select="mpegvideo"
1725 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1726 rtsp_demuxer_select="http_protocol rtpdec"
1727 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
1728 sap_demuxer_select="sdp_demuxer"
1729 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
1730 sdp_demuxer_select="rtpdec"
1731 smoothstreaming_muxer_select="ismv_muxer"
1732 spdif_muxer_select="aac_parser"
1733 tak_demuxer_select="tak_parser"
1734 tg2_muxer_select="mov_muxer"
1735 tgp_muxer_select="mov_muxer"
1736 w64_demuxer_deps="wav_demuxer"
1737
1738 # indevs / outdevs
1739 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1740 alsa_outdev_deps="alsa_asoundlib_h"
1741 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1742 dv1394_indev_deps="dv1394 dv_demuxer"
1743 fbdev_indev_deps="linux_fb_h"
1744 jack_indev_deps="jack_jack_h"
1745 libcdio_indev_deps="libcdio"
1746 libdc1394_indev_deps="libdc1394"
1747 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1748 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1749 pulse_indev_deps="libpulse"
1750 sndio_indev_deps="sndio_h"
1751 sndio_outdev_deps="sndio_h"
1752 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1753 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1754 vfwcap_indev_extralibs="-lavicap32"
1755 x11grab_indev_deps="x11grab XShmCreateImage"
1756
1757 # protocols
1758 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1759 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1760 ffrtmpcrypt_protocol_select="tcp_protocol"
1761 ffrtmphttp_protocol_deps="!librtmp_protocol"
1762 ffrtmphttp_protocol_select="http_protocol"
1763 gopher_protocol_select="network"
1764 httpproxy_protocol_select="tcp_protocol"
1765 http_protocol_select="tcp_protocol"
1766 https_protocol_select="tls_protocol"
1767 librtmp_protocol_deps="librtmp"
1768 librtmpe_protocol_deps="librtmp"
1769 librtmps_protocol_deps="librtmp"
1770 librtmpt_protocol_deps="librtmp"
1771 librtmpte_protocol_deps="librtmp"
1772 mmsh_protocol_select="http_protocol"
1773 mmst_protocol_select="network"
1774 rtmp_protocol_deps="!librtmp_protocol"
1775 rtmp_protocol_select="tcp_protocol"
1776 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1777 rtmps_protocol_deps="!librtmp_protocol"
1778 rtmps_protocol_select="tls_protocol"
1779 rtmpt_protocol_select="ffrtmphttp_protocol"
1780 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1781 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1782 rtp_protocol_select="udp_protocol"
1783 sctp_protocol_deps="struct_sctp_event_subscribe"
1784 sctp_protocol_select="network"
1785 srtp_protocol_select="rtp_protocol"
1786 tcp_protocol_select="network"
1787 tls_protocol_deps_any="openssl gnutls"
1788 tls_protocol_select="tcp_protocol"
1789 udp_protocol_select="network"
1790
1791 # filters
1792 blackframe_filter_deps="gpl"
1793 boxblur_filter_deps="gpl"
1794 cropdetect_filter_deps="gpl"
1795 delogo_filter_deps="gpl"
1796 drawtext_filter_deps="libfreetype"
1797 frei0r_filter_deps="frei0r dlopen strtok_r"
1798 frei0r_filter_extralibs='$ldl'
1799 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1800 frei0r_src_filter_extralibs='$ldl'
1801 hqdn3d_filter_deps="gpl"
1802 resample_filter_deps="avresample"
1803 ocv_filter_deps="libopencv"
1804 scale_filter_deps="swscale"
1805 yadif_filter_deps="gpl"
1806
1807 # libraries
1808 avcodec_deps="avutil"
1809 avdevice_deps="avutil avcodec avformat"
1810 avfilter_deps="avutil"
1811 avformat_deps="avutil avcodec"
1812 avresample_deps="avutil"
1813 swscale_deps="avutil"
1814
1815 # programs
1816 avconv_deps="avcodec avfilter avformat avresample swscale"
1817 avconv_select="aformat_filter anull_filter asyncts_filter format_filter
1818                fps_filter null_filter resample_filter scale_filter
1819                setpts_filter"
1820 avplay_deps="avcodec avformat avresample swscale sdl"
1821 avplay_select="rdft"
1822 avprobe_deps="avcodec avformat"
1823 avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
1824 avserver_extralibs='$ldl'
1825
1826 doc_deps="texi2html"
1827
1828 # default parameters
1829
1830 logfile="config.log"
1831
1832 # installation paths
1833 prefix_default="/usr/local"
1834 bindir_default='${prefix}/bin'
1835 datadir_default='${prefix}/share/avconv'
1836 incdir_default='${prefix}/include'
1837 libdir_default='${prefix}/lib'
1838 mandir_default='${prefix}/share/man'
1839 shlibdir_default="$libdir_default"
1840
1841 # toolchain
1842 ar_default="ar"
1843 cc_default="gcc"
1844 host_cc_default="gcc"
1845 cp_f="cp -f"
1846 ln_s="ln -sf"
1847 nm_default="nm -g"
1848 objformat="elf"
1849 pkg_config_default=pkg-config
1850 ranlib="ranlib"
1851 yasmexe="yasm"
1852
1853 nogas=":"
1854
1855 # machine
1856 arch_default=$(uname -m)
1857 cpu="generic"
1858
1859 # OS
1860 target_os_default=$(tolower $(uname -s))
1861 host_os=$target_os_default
1862
1863 # configurable options
1864 enable $LIBRARY_LIST $PROGRAM_LIST
1865
1866 enable asm
1867 enable debug
1868 enable doc
1869 enable optimizations
1870 enable safe_bitstream_reader
1871 enable static
1872 enable swscale_alpha
1873
1874 # build settings
1875 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1876 AVSERVERLDFLAGS=-Wl,-E
1877 LIBPREF="lib"
1878 LIBSUF=".a"
1879 FULLNAME='$(NAME)$(BUILDSUF)'
1880 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1881 SLIBPREF="lib"
1882 SLIBSUF=".so"
1883 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1884 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1885 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1886 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1887 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1888 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1889
1890 asflags_filter=echo
1891 cflags_filter=echo
1892 ldflags_filter=echo
1893
1894 AS_C='-c'
1895 AS_O='-o $@'
1896 CC_C='-c'
1897 CC_E='-E -o $@'
1898 CC_O='-o $@'
1899 LD_O='-o $@'
1900 LD_LIB='-l%'
1901 LD_PATH='-L'
1902 HOSTCC_C='-c'
1903 HOSTCC_O='-o $@'
1904 HOSTLD_O='-o $@'
1905
1906 host_cflags='-O3 -g'
1907 host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
1908 host_libs='-lm'
1909 host_cflags_filter=echo
1910 host_ldflags_filter=echo
1911
1912 target_path='$(CURDIR)'
1913
1914 # since the object filename is not given with the -MM flag, the compiler
1915 # is only able to print the basename, and we must add the path ourselves
1916 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1917 DEPFLAGS='-MM'
1918
1919 # find source path
1920 if test -f configure; then
1921     source_path=.
1922 else
1923     source_path=$(cd $(dirname "$0"); pwd)
1924     echo "$source_path" | grep -q '[[:blank:]]' &&
1925         die "Out of tree builds are impossible with whitespace in source path."
1926     test -e "$source_path/config.h" &&
1927         die "Out of tree builds are impossible with config.h in source dir."
1928 fi
1929
1930 for v in "$@"; do
1931     r=${v#*=}
1932     l=${v%"$r"}
1933     r=$(sh_quote "$r")
1934     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
1935 done
1936
1937 find_things(){
1938     thing=$1
1939     pattern=$2
1940     file=$source_path/$3
1941     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1942 }
1943
1944 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1945 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1946 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1947 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1948 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1949 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1950 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1951 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1952 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1953 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1954 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1955
1956 ALL_COMPONENTS="
1957     $BSF_LIST
1958     $DECODER_LIST
1959     $DEMUXER_LIST
1960     $ENCODER_LIST
1961     $FILTER_LIST
1962     $HWACCEL_LIST
1963     $INDEV_LIST
1964     $MUXER_LIST
1965     $OUTDEV_LIST
1966     $PARSER_LIST
1967     $PROTOCOL_LIST
1968 "
1969
1970 for n in $COMPONENT_LIST; do
1971     v=$(toupper ${n%s})_LIST
1972     eval enable \$$v
1973     eval ${n}_if_any="\$$v"
1974 done
1975
1976 enable $ARCH_EXT_LIST
1977
1978 die_unknown(){
1979     echo "Unknown option \"$1\"."
1980     echo "See $0 --help for available options."
1981     exit 1
1982 }
1983
1984 print_3_columns() {
1985     cat | tr ' ' '\n' | sort | pr -r -3 -t
1986 }
1987
1988 show_list() {
1989     suffix=_$1
1990     shift
1991     echo $* | sed s/$suffix//g | print_3_columns
1992     exit 0
1993 }
1994
1995 rand_list(){
1996     IFS=', '
1997     set -- $*
1998     unset IFS
1999     for thing; do
2000         comp=${thing%:*}
2001         prob=${thing#$comp}
2002         prob=${prob#:}
2003         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2004         echo "prob ${prob:-0.5}"
2005         printf '%s\n' $comp
2006     done
2007 }
2008
2009 do_random(){
2010     action=$1
2011     shift
2012     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2013     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2014 }
2015
2016 for opt do
2017     optval="${opt#*=}"
2018     case "$opt" in
2019         --extra-ldflags=*)
2020             add_ldflags $optval
2021         ;;
2022         --extra-libs=*)
2023             add_extralibs $optval
2024         ;;
2025         --disable-devices)
2026             disable $INDEV_LIST $OUTDEV_LIST
2027         ;;
2028         --enable-debug=*)
2029             debuglevel="$optval"
2030         ;;
2031         --disable-programs)
2032             disable $PROGRAM_LIST
2033         ;;
2034         --disable-everything)
2035             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2036         ;;
2037         --disable-all)
2038             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2039             disable $LIBRARY_LIST $PROGRAM_LIST doc
2040         ;;
2041         --enable-random|--disable-random)
2042             action=${opt%%-random}
2043             do_random ${action#--} $COMPONENT_LIST
2044         ;;
2045         --enable-random=*|--disable-random=*)
2046             action=${opt%%-random=*}
2047             do_random ${action#--} $optval
2048         ;;
2049         --enable-*=*|--disable-*=*)
2050             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2051             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2052             eval list=\$$(toupper $thing)_LIST
2053             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2054             $action $(filter "$name" $list)
2055         ;;
2056         --enable-?*|--disable-?*)
2057             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2058             if is_in $option $COMPONENT_LIST; then
2059                 test $action = disable && action=unset
2060                 eval $action \$$(toupper ${option%s})_LIST
2061             elif is_in $option $CMDLINE_SELECT; then
2062                 $action $option
2063             else
2064                 die_unknown $opt
2065             fi
2066         ;;
2067         --list-*)
2068             NAME="${opt#--list-}"
2069             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2070             NAME=${NAME%s}
2071             eval show_list $NAME \$$(toupper $NAME)_LIST
2072         ;;
2073         --help|-h) show_help
2074         ;;
2075         *)
2076             optname="${opt%%=*}"
2077             optname="${optname#--}"
2078             optname=$(echo "$optname" | sed 's/-/_/g')
2079             if is_in $optname $CMDLINE_SET; then
2080                 eval $optname='$optval'
2081             elif is_in $optname $CMDLINE_APPEND; then
2082                 append $optname "$optval"
2083             else
2084                 die_unknown $opt
2085             fi
2086         ;;
2087     esac
2088 done
2089
2090 disabled logging && logfile=/dev/null
2091
2092 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2093 set >> $logfile
2094
2095 test -n "$cross_prefix" && enable cross_compile
2096
2097 if enabled cross_compile; then
2098     test -n "$arch" && test -n "$target_os" ||
2099         die "Must specify target arch and OS when cross-compiling"
2100 fi
2101
2102 ar_default="${cross_prefix}${ar_default}"
2103 cc_default="${cross_prefix}${cc_default}"
2104 nm_default="${cross_prefix}${nm_default}"
2105 pkg_config_default="${cross_prefix}${pkg_config_default}"
2106 ranlib="${cross_prefix}${ranlib}"
2107
2108 sysinclude_default="${sysroot}/usr/include"
2109
2110 case "$toolchain" in
2111     clang-asan)
2112         cc_default="clang"
2113         add_cflags  -faddress-sanitizer
2114         add_ldflags -faddress-sanitizer
2115     ;;
2116     clang-tsan)
2117         cc_default="clang"
2118         add_cflags  -fthread-sanitizer
2119         add_ldflags -fthread-sanitizer
2120     ;;
2121     msvc)
2122         cc_default="c99wrap cl"
2123         ld_default="c99wrap link"
2124         nm_default="dumpbin -symbols"
2125         ar_default="lib"
2126         target_os_default="win32"
2127     ;;
2128     ?*)
2129         die "Unknown toolchain $toolchain"
2130     ;;
2131 esac
2132
2133 set_default arch cc pkg_config sysinclude target_os
2134 enabled cross_compile || host_cc_default=$cc
2135 set_default host_cc
2136
2137 if ! $pkg_config --version >/dev/null 2>&1; then
2138     warn "$pkg_config not found, library detection may fail."
2139     pkg_config=false
2140 fi
2141
2142 exesuf() {
2143     case $1 in
2144         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2145     esac
2146 }
2147
2148 EXESUF=$(exesuf $target_os)
2149 HOSTEXESUF=$(exesuf $host_os)
2150
2151 # set temporary file name
2152 : ${TMPDIR:=$TEMPDIR}
2153 : ${TMPDIR:=$TMP}
2154 : ${TMPDIR:=/tmp}
2155
2156 if ! check_cmd mktemp -u XXXXXX; then
2157     # simple replacement for missing mktemp
2158     # NOT SAFE FOR GENERAL USE
2159     mktemp(){
2160         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2161     }
2162 fi
2163
2164 tmpfile(){
2165     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2166         (set -C; exec > $tmp) 2>/dev/null ||
2167         die "Unable to create temporary file in $TMPDIR."
2168     append TMPFILES $tmp
2169     eval $1=$tmp
2170 }
2171
2172 trap 'rm -f -- $TMPFILES' EXIT
2173
2174 tmpfile TMPASM .asm
2175 tmpfile TMPC   .c
2176 tmpfile TMPE   $EXESUF
2177 tmpfile TMPH   .h
2178 tmpfile TMPO   .o
2179 tmpfile TMPS   .S
2180 tmpfile TMPSH  .sh
2181 tmpfile TMPV   .ver
2182
2183 unset -f mktemp
2184
2185 chmod +x $TMPE
2186
2187 # make sure we can execute files in $TMPDIR
2188 cat > $TMPSH 2>> $logfile <<EOF
2189 #! /bin/sh
2190 EOF
2191 chmod +x $TMPSH >> $logfile 2>&1
2192 if ! $TMPSH >> $logfile 2>&1; then
2193     cat <<EOF
2194 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2195 variable to another directory and make sure that it is not mounted noexec.
2196 EOF
2197     die "Sanity test failed."
2198 fi
2199
2200 ccc_flags(){
2201     for flag; do
2202         case $flag in
2203             -std=c99)           echo -c99                       ;;
2204             -mcpu=*)            echo -arch ${flag#*=}           ;;
2205             -mieee)             echo -ieee                      ;;
2206             -O*|-fast)          echo $flag                      ;;
2207             -fno-math-errno)    echo -assume nomath_errno       ;;
2208             -g)                 echo -g3                        ;;
2209             -Wall)              echo -msg_enable level2         ;;
2210             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2211             -Wl,*)              echo $flag                      ;;
2212             -f*|-W*)                                            ;;
2213             *)                  echo $flag                      ;;
2214         esac
2215    done
2216 }
2217
2218 msvc_flags(){
2219     for flag; do
2220         case $flag in
2221             -fomit-frame-pointer) echo -Oy ;;
2222             -g)                   echo -Z7 ;;
2223             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
2224                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2225                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2226                                        -wd4996 -wd4273 ;;
2227             -std=c99)             ;;
2228             -fno-math-errno)      ;;
2229             -fno-common)          ;;
2230             -fno-signed-zeros)    ;;
2231             -fPIC)                ;;
2232             -lz)                  echo zlib.lib ;;
2233             -lavifil32)           echo vfw32.lib ;;
2234             -lavicap32)           echo vfw32.lib user32.lib ;;
2235             -l*)                  echo ${flag#-l}.lib ;;
2236             *)                    echo $flag ;;
2237         esac
2238     done
2239 }
2240
2241 pgi_flags(){
2242     for flag; do
2243         case $flag in
2244             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2245             -fomit-frame-pointer) echo -Mnoframe ;;
2246             -g)                   echo -gopt ;;
2247             *)                    echo $flag ;;
2248         esac
2249     done
2250 }
2251
2252 suncc_flags(){
2253     for flag; do
2254         case $flag in
2255             -march=*|-mcpu=*)
2256                 case "${flag#*=}" in
2257                     native)                   echo -xtarget=native       ;;
2258                     v9|niagara)               echo -xarch=sparc          ;;
2259                     ultrasparc)               echo -xarch=sparcvis       ;;
2260                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2261                     i586|pentium)             echo -xchip=pentium        ;;
2262                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2263                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2264                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2265                     pentium4*)          echo -xtarget=pentium4           ;;
2266                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2267                     *-sse3)             echo -xarch=sse3                 ;;
2268                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2269                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2270                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2271                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2272                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2273                     k8|opteron|athlon64|athlon-fx)
2274                                               echo -xarch=sse2a          ;;
2275                     athlon*)                  echo -xarch=pentium_proa   ;;
2276                 esac
2277                 ;;
2278             -std=c99)             echo -xc99              ;;
2279             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2280             -fPIC)                echo -KPIC -xcode=pic32 ;;
2281             -W*,*)                echo $flag              ;;
2282             -f*-*|-W*|-mimpure-text)                      ;;
2283             -shared)              echo -G                 ;;
2284             *)                    echo $flag              ;;
2285         esac
2286     done
2287 }
2288
2289 tms470_flags(){
2290     for flag; do
2291         case $flag in
2292             -march=*|-mcpu=*)
2293                 case "${flag#*=}" in
2294                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2295                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2296                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2297                     armv6*|arm11*)          echo -mv=6   ;;
2298                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2299                                             echo -mv=5e  ;;
2300                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2301                 esac
2302                 ;;
2303             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2304             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2305             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2306             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2307             -msoft-float)   echo --float_support=vfplib       ;;
2308             -O[0-3]|-mf=*)  echo $flag                        ;;
2309             -g)             echo -g -mn                       ;;
2310             -pds=*)         echo $flag                        ;;
2311             -D*|-I*)        echo $flag                        ;;
2312             --gcc|--abi=*)  echo $flag                        ;;
2313             -me)            echo $flag                        ;;
2314         esac
2315     done
2316 }
2317
2318 probe_cc(){
2319     pfx=$1
2320     _cc=$2
2321
2322     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2323     unset _ld_o _ldflags _ld_lib _ld_path
2324     unset _depflags _DEPCMD _DEPFLAGS
2325     _flags_filter=echo
2326
2327     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2328         _type=llvm_gcc
2329         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2330         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2331         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2332         _cflags_speed='-O3'
2333         _cflags_size='-Os'
2334     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2335         _type=gcc
2336         gcc_version=$($_cc --version | head -n1)
2337         gcc_basever=$($_cc -dumpversion)
2338         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2339         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2340         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2341         if ! $_cc -dumpversion | grep -q '^2\.'; then
2342             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2343         fi
2344         _cflags_speed='-O3'
2345         _cflags_size='-Os'
2346     elif $_cc --version 2>/dev/null | grep -q Intel; then
2347         _type=icc
2348         _ident=$($_cc --version | head -n1)
2349         _depflags='-MMD'
2350         _cflags_speed='-O3'
2351         _cflags_size='-Os'
2352         _cflags_noopt='-O1'
2353     elif $_cc -v 2>&1 | grep -q xlc; then
2354         _type=xlc
2355         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2356         _cflags_speed='-O5'
2357         _cflags_size='-O5 -qcompact'
2358     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2359         _type=ccc
2360         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2361         _DEPFLAGS='-M'
2362         _cflags_speed='-fast'
2363         _cflags_size='-O1'
2364         _flags_filter=ccc_flags
2365     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2366         test -d "$sysroot" || die "No valid sysroot specified."
2367         _type=armcc
2368         _ident=$($_cc --vsn | head -n1)
2369         armcc_conf="$PWD/armcc.conf"
2370         $_cc --arm_linux_configure                 \
2371              --arm_linux_config_file="$armcc_conf" \
2372              --configure_sysroot="$sysroot"        \
2373              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2374              die "Error creating armcc configuration file."
2375         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2376         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2377         as_default="${cross_prefix}gcc"
2378         _depflags='-MMD'
2379         _cflags_speed='-O3'
2380         _cflags_size='-Os'
2381     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2382         _type=tms470
2383         _ident=$($_cc -version | head -n1 | tr -s ' ')
2384         _flags='--gcc --abi=eabi -me'
2385         _cc_e='-ppl -fe=$@'
2386         _cc_o='-fe=$@'
2387         _depflags='-ppa -ppd=$(@:.o=.d)'
2388         _cflags_speed='-O3 -mf=5'
2389         _cflags_size='-O3 -mf=2'
2390         _flags_filter=tms470_flags
2391     elif $_cc -v 2>&1 | grep -q clang; then
2392         _type=clang
2393         _ident=$($_cc --version | head -n1)
2394         _depflags='-MMD'
2395         _cflags_speed='-O3'
2396         _cflags_size='-Os'
2397     elif $_cc -V 2>&1 | grep -q Sun; then
2398         _type=suncc
2399         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2400         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2401         _DEPFLAGS='-xM1 -xc99'
2402         _ldflags='-std=c99'
2403         _cflags_speed='-O5'
2404         _cflags_size='-O5 -xspace'
2405         _flags_filter=suncc_flags
2406     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2407         _type=pathscale
2408         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2409         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2410         _cflags_speed='-O2'
2411         _cflags_size='-Os'
2412         _flags_filter='filter_out -Wdisabled-optimization'
2413     elif $_cc -v 2>&1 | grep -q Open64; then
2414         _type=open64
2415         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2416         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2417         _cflags_speed='-O2'
2418         _cflags_size='-Os'
2419         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2420     elif $_cc -V 2>&1 | grep -q Portland; then
2421         _type=pgi
2422         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2423         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2424         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2425         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2426         _cflags_noopt="-O1"
2427         _flags_filter=pgi_flags
2428     elif $_cc 2>&1 | grep -q Microsoft; then
2429         _type=msvc
2430         _ident=$($cc 2>&1 | head -n1)
2431         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2432         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2433         _cflags_speed="-O2"
2434         _cflags_size="-O1"
2435         # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
2436         if $_cc 2>&1 | grep -q Linker; then
2437             _ld_o='-out $@'
2438         else
2439             _ld_o='-Fe$@'
2440         fi
2441         _cc_o='-Fo $@'
2442         _cc_e='-P -Fi $@'
2443         _flags_filter=msvc_flags
2444         _ld_lib='lib%.a'
2445         _ld_path='-libpath:'
2446         _flags='-nologo'
2447         _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2448         if [ $pfx = hostcc ]; then
2449             append _cflags -Dsnprintf=_snprintf
2450         fi
2451     fi
2452
2453     eval ${pfx}_type=\$_type
2454     eval ${pfx}_ident=\$_ident
2455 }
2456
2457 set_ccvars(){
2458     eval ${1}_C=\${_cc_c-\${${1}_C}}
2459     eval ${1}_E=\${_cc_e-\${${1}_E}}
2460     eval ${1}_O=\${_cc_o-\${${1}_O}}
2461
2462     if [ -n "$_depflags" ]; then
2463         eval ${1}_DEPFLAGS=\$_depflags
2464     else
2465         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2466         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2467         eval DEP${1}FLAGS=\$_flags
2468     fi
2469 }
2470
2471 probe_cc cc "$cc"
2472 cflags_filter=$_flags_filter
2473 cflags_speed=$_cflags_speed
2474 cflags_size=$_cflags_size
2475 cflags_noopt=$_cflags_noopt
2476 add_cflags $_flags $_cflags
2477 cc_ldflags=$_ldflags
2478 set_ccvars CC
2479
2480 probe_cc hostcc "$host_cc"
2481 host_cflags_filter=$_flags_filter
2482 add_host_cflags  $_flags $_cflags
2483 set_ccvars HOSTCC
2484
2485 test -n "$cc_type" && enable $cc_type ||
2486     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2487
2488 : ${as_default:=$cc}
2489 : ${dep_cc_default:=$cc}
2490 : ${ld_default:=$cc}
2491 : ${host_ld_default:=$host_cc}
2492 set_default ar as dep_cc ld host_ld
2493
2494 probe_cc as "$as"
2495 asflags_filter=$_flags_filter
2496 add_asflags $_flags $_cflags
2497 set_ccvars AS
2498
2499 probe_cc ld "$ld"
2500 ldflags_filter=$_flags_filter
2501 add_ldflags $_flags $_ldflags
2502 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2503 LD_O=${_ld_o-$LD_O}
2504 LD_LIB=${_ld_lib-$LD_LIB}
2505 LD_PATH=${_ld_path-$LD_PATH}
2506
2507 probe_cc hostld "$host_ld"
2508 host_ldflags_filter=$_flags_filter
2509 add_host_ldflags $_flags $_ldflags
2510 HOSTLD_O=${_ld_o-$HOSTLD_O}
2511
2512 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2513     probe_cc depcc "$dep_cc"
2514     CCDEP=${_DEPCMD:-$DEPCMD}
2515     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2516     DEPCCFLAGS=$_flags
2517 fi
2518
2519 if $ar 2>&1 | grep -q Microsoft; then
2520     arflags="-nologo"
2521     ar_o='-out:$@'
2522 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2523     arflags="rq"
2524     ar_o='$@'
2525 else
2526     arflags="rc"
2527     ar_o='$@'
2528 fi
2529
2530 add_cflags $extra_cflags
2531 add_asflags $extra_cflags
2532
2533 if test -n "$sysroot"; then
2534     case "$cc_type" in
2535         gcc|llvm_gcc|clang)
2536             add_cppflags --sysroot="$sysroot"
2537             add_ldflags --sysroot="$sysroot"
2538         ;;
2539         tms470)
2540             add_cppflags -I"$sysinclude"
2541             add_ldflags  --sysroot="$sysroot"
2542         ;;
2543     esac
2544 fi
2545
2546 if test "$cpu" = host; then
2547     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2548
2549     case "$cc_type" in
2550         gcc|llvm_gcc)
2551             check_native(){
2552                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2553                 sed -n "/cc1.*$1=/{
2554                             s/.*$1=\\([^ ]*\\).*/\\1/
2555                             p
2556                             q
2557                         }" $TMPE
2558             }
2559             cpu=$(check_native -march || check_native -mcpu)
2560         ;;
2561     esac
2562
2563     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2564 fi
2565
2566 # Deal with common $arch aliases
2567 case "$arch" in
2568     aarch64|arm64)
2569         arch="aarch64"
2570     ;;
2571     arm*)
2572         arch="arm"
2573     ;;
2574     mips*|IP*)
2575         arch="mips"
2576     ;;
2577     parisc*|hppa*)
2578         arch="parisc"
2579     ;;
2580     "Power Macintosh"|ppc*|powerpc*)
2581         arch="ppc"
2582     ;;
2583     s390|s390x)
2584         arch="s390"
2585     ;;
2586     sh4|sh)
2587         arch="sh4"
2588     ;;
2589     sun4u|sparc*)
2590         arch="sparc"
2591     ;;
2592     tilegx|tile-gx)
2593         arch="tilegx"
2594     ;;
2595     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2596         arch="x86"
2597     ;;
2598 esac
2599
2600 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2601 enable $arch
2602
2603 # Add processor-specific flags
2604 if enabled aarch64; then
2605
2606     case $cpu in
2607         armv*)
2608             cpuflags="-march=$cpu"
2609         ;;
2610         *)
2611             cpuflags="-mcpu=$cpu"
2612         ;;
2613     esac
2614
2615 elif enabled alpha; then
2616
2617     cpuflags="-mcpu=$cpu"
2618
2619 elif enabled arm; then
2620
2621     check_arm_arch() {
2622         check_cpp_condition stddef.h \
2623             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
2624             $cpuflags
2625     }
2626
2627     probe_arm_arch() {
2628         if   check_arm_arch 4;        then echo armv4;
2629         elif check_arm_arch 4T;       then echo armv4t;
2630         elif check_arm_arch 5;        then echo armv5;
2631         elif check_arm_arch 5E;       then echo armv5e;
2632         elif check_arm_arch 5T;       then echo armv5t;
2633         elif check_arm_arch 5TE;      then echo armv5te;
2634         elif check_arm_arch 5TEJ;     then echo armv5te;
2635         elif check_arm_arch 6;        then echo armv6;
2636         elif check_arm_arch 6J;       then echo armv6j;
2637         elif check_arm_arch 6K;       then echo armv6k;
2638         elif check_arm_arch 6Z;       then echo armv6z;
2639         elif check_arm_arch 6ZK;      then echo armv6zk;
2640         elif check_arm_arch 6T2;      then echo armv6t2;
2641         elif check_arm_arch 7;        then echo armv7;
2642         elif check_arm_arch 7A  7_A;  then echo armv7-a;
2643         elif check_arm_arch 7R  7_R;  then echo armv7-r;
2644         elif check_arm_arch 7M  7_M;  then echo armv7-m;
2645         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
2646         elif check_arm_arch 8A  8_A;  then echo armv8-a;
2647         fi
2648     }
2649
2650     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
2651
2652     case $cpu in
2653         armv*)
2654             cpuflags="-march=$cpu"
2655             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2656         ;;
2657         *)
2658             cpuflags="-mcpu=$cpu"
2659             case $cpu in
2660                 cortex-a*)                               subarch=armv7a  ;;
2661                 cortex-r*)                               subarch=armv7r  ;;
2662                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2663                 arm11*)                                  subarch=armv6   ;;
2664                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2665                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2666                 *)                             subarch=$(probe_arm_arch) ;;
2667             esac
2668         ;;
2669     esac
2670
2671     case "$subarch" in
2672         armv5t*)    enable fast_clz                ;;
2673         armv[6-8]*) enable fast_clz fast_unaligned ;;
2674     esac
2675
2676 elif enabled avr32; then
2677
2678     case $cpu in
2679         ap7[02]0[0-2])
2680             subarch="avr32_ap"
2681             cpuflags="-mpart=$cpu"
2682         ;;
2683         ap)
2684             subarch="avr32_ap"
2685             cpuflags="-march=$cpu"
2686         ;;
2687         uc3[ab]*)
2688             subarch="avr32_uc"
2689             cpuflags="-mcpu=$cpu"
2690         ;;
2691         uc)
2692             subarch="avr32_uc"
2693             cpuflags="-march=$cpu"
2694         ;;
2695     esac
2696
2697 elif enabled bfin; then
2698
2699     cpuflags="-mcpu=$cpu"
2700
2701 elif enabled mips; then
2702
2703     cpuflags="-march=$cpu"
2704
2705 elif enabled ppc; then
2706
2707     case $(tolower $cpu) in
2708         601|ppc601|powerpc601)
2709             cpuflags="-mcpu=601"
2710             disable altivec
2711         ;;
2712         603*|ppc603*|powerpc603*)
2713             cpuflags="-mcpu=603"
2714             disable altivec
2715         ;;
2716         604*|ppc604*|powerpc604*)
2717             cpuflags="-mcpu=604"
2718             disable altivec
2719         ;;
2720         g3|75*|ppc75*|powerpc75*)
2721             cpuflags="-mcpu=750"
2722             disable altivec
2723         ;;
2724         g4|745*|ppc745*|powerpc745*)
2725             cpuflags="-mcpu=7450"
2726         ;;
2727         74*|ppc74*|powerpc74*)
2728             cpuflags="-mcpu=7400"
2729         ;;
2730         g5|970|ppc970|powerpc970)
2731             cpuflags="-mcpu=970"
2732         ;;
2733         power[3-7]*)
2734             cpuflags="-mcpu=$cpu"
2735         ;;
2736         cell)
2737             cpuflags="-mcpu=cell"
2738             enable ldbrx
2739         ;;
2740         e500mc)
2741             cpuflags="-mcpu=e500mc"
2742             disable altivec
2743         ;;
2744         e500v2)
2745             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2746             disable altivec
2747         ;;
2748         e500)
2749             cpuflags="-mcpu=8540 -mhard-float"
2750             disable altivec
2751         ;;
2752     esac
2753
2754 elif enabled sparc; then
2755
2756     case $cpu in
2757         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2758             cpuflags="-mcpu=$cpu"
2759             disable vis
2760         ;;
2761         ultrasparc*|niagara[234])
2762             cpuflags="-mcpu=$cpu"
2763         ;;
2764     esac
2765
2766 elif enabled x86; then
2767
2768     case $cpu in
2769         i[345]86|pentium)
2770             cpuflags="-march=$cpu"
2771             disable mmx
2772         ;;
2773         # targets that do NOT support conditional mov (cmov)
2774         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2775             cpuflags="-march=$cpu"
2776             disable cmov
2777         ;;
2778         # targets that do support conditional mov (cmov)
2779         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*)
2780             cpuflags="-march=$cpu"
2781             enable cmov
2782             enable fast_cmov
2783         ;;
2784         # targets that do support conditional mov but on which it's slow
2785         pentium4|pentium4m|prescott|nocona)
2786             cpuflags="-march=$cpu"
2787             enable cmov
2788             disable fast_cmov
2789         ;;
2790     esac
2791
2792 fi
2793
2794 if [ "$cpu" != generic ]; then
2795     add_cflags  $cpuflags
2796     add_asflags $cpuflags
2797 fi
2798
2799 # compiler sanity check
2800 check_exec <<EOF
2801 int main(void){ return 0; }
2802 EOF
2803 if test "$?" != 0; then
2804     echo "$cc is unable to create an executable file."
2805     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2806         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2807         echo "Only do this if you know what cross compiling means."
2808     fi
2809     die "C compiler test failed."
2810 fi
2811
2812 add_cppflags -D_ISOC99_SOURCE
2813 check_cflags -std=c99
2814 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2815 #include <stdlib.h>
2816 EOF
2817 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2818 #include <stdlib.h>
2819 EOF
2820
2821 check_host_cflags -std=c99
2822 check_host_cflags -Wall
2823
2824 check_64bit(){
2825     arch32=$1
2826     arch64=$2
2827     expr=$3
2828     check_code cc "" "int test[2*($expr) - 1]" &&
2829         subarch=$arch64 || subarch=$arch32
2830 }
2831
2832 case "$arch" in
2833     aarch64|alpha|ia64)
2834         spic=$shared
2835     ;;
2836     mips)
2837         check_64bit mips mips64 '_MIPS_SIM > 1'
2838         spic=$shared
2839     ;;
2840     parisc)
2841         check_64bit parisc parisc64 'sizeof(void *) > 4'
2842         spic=$shared
2843     ;;
2844     ppc)
2845         check_64bit ppc ppc64 'sizeof(void *) > 4'
2846         spic=$shared
2847     ;;
2848     sparc)
2849         check_64bit sparc sparc64 'sizeof(void *) > 4'
2850         spic=$shared
2851     ;;
2852     x86)
2853         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
2854         if test "$subarch" = "x86_64"; then
2855             spic=$shared
2856         fi
2857     ;;
2858 esac
2859
2860 enable $subarch
2861 enabled spic && enable pic
2862
2863 # OS specific
2864 case $target_os in
2865     haiku)
2866         prefix_default="/boot/common"
2867         network_extralibs="-lnetwork"
2868         host_libs=
2869         ;;
2870     sunos)
2871         AVSERVERLDFLAGS=""
2872         SHFLAGS='-shared -Wl,-h,$$(@F)'
2873         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2874         network_extralibs="-lsocket -lnsl"
2875         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2876         # When using suncc to build, the Solaris linker will mark
2877         # an executable with each instruction set encountered by
2878         # the Solaris assembler.  As our libraries contain their own
2879         # guards for processor-specific code, instead suppress
2880         # generation of the HWCAPS ELF section on Solaris x86 only.
2881         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2882         nm_default='nm -P -g'
2883         ;;
2884     netbsd)
2885         disable symver
2886         oss_indev_extralibs="-lossaudio"
2887         oss_outdev_extralibs="-lossaudio"
2888         ;;
2889     openbsd|bitrig)
2890         disable symver
2891         SHFLAGS='-shared'
2892         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
2893         SLIB_INSTALL_LINKS=
2894         oss_indev_extralibs="-lossaudio"
2895         oss_outdev_extralibs="-lossaudio"
2896         ;;
2897     dragonfly)
2898         disable symver
2899         ;;
2900     freebsd)
2901         ;;
2902     bsd/os)
2903         add_extralibs -lpoll -lgnugetopt
2904         ;;
2905     darwin)
2906         gas="gas-preprocessor.pl $cc"
2907         enabled ppc && add_asflags -force_cpusubtype_ALL
2908         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2909         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2910         add_ldflags -Wl,-dynamic,-search_paths_first
2911         SLIBSUF=".dylib"
2912         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2913         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2914         AVSERVERLDFLAGS=-Wl,-bind_at_load
2915         objformat="macho"
2916         enabled x86_64 && objformat="macho64"
2917         enabled_any pic shared ||
2918             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2919         ;;
2920     mingw32*)
2921         if test $target_os = "mingw32ce"; then
2922             disable network
2923         else
2924             target_os=mingw32
2925         fi
2926         LIBTARGET=i386
2927         if enabled x86_64; then
2928             LIBTARGET="i386:x86-64"
2929         elif enabled arm; then
2930             LIBTARGET=arm-wince
2931         fi
2932         shlibdir_default="$bindir_default"
2933         SLIBPREF=""
2934         SLIBSUF=".dll"
2935         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2936         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2937         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)'
2938         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2939         SLIB_INSTALL_LINKS=
2940         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2941         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2942         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'
2943         objformat="win32"
2944         dlltool="${cross_prefix}dlltool"
2945         ranlib=:
2946         enable dos_paths
2947         ;;
2948     win32|win64)
2949         if enabled shared; then
2950             # Link to the import library instead of the normal static library
2951             # for shared libs.
2952             LD_LIB='%.lib'
2953             # Cannot build shared and static libraries at the same time with
2954             # MSVC.
2955             disable static
2956         fi
2957         shlibdir_default="$bindir_default"
2958         SLIBPREF=""
2959         SLIBSUF=".dll"
2960         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2961         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2962         SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
2963         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2964         SLIB_INSTALL_LINKS=
2965         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2966         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2967         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2968         objformat="win32"
2969         ranlib=:
2970         enable dos_paths
2971         ;;
2972     cygwin*)
2973         target_os=cygwin
2974         shlibdir_default="$bindir_default"
2975         SLIBPREF="cyg"
2976         SLIBSUF=".dll"
2977         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2978         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2979         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2980         SLIB_INSTALL_LINKS=
2981         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
2982         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
2983         objformat="win32"
2984         enable dos_paths
2985         ;;
2986     *-dos|freedos|opendos)
2987         network_extralibs="-lsocket"
2988         objformat="coff"
2989         enable dos_paths
2990         add_cppflags -U__STRICT_ANSI__
2991         ;;
2992     linux)
2993         enable dv1394
2994         ;;
2995     irix*)
2996         target_os=irix
2997         ranlib="echo ignoring ranlib"
2998         ;;
2999     os/2*)
3000         ln_s="cp -f"
3001         objformat="aout"
3002         add_cppflags -D_GNU_SOURCE
3003         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3004         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3005         AVSERVERLDFLAGS=""
3006         LIBSUF="_s.a"
3007         SLIBPREF=""
3008         SLIBSUF=".dll"
3009         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3010         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3011         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3012             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3013             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3014             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3015             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3016             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3017         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3018             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3019         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3020         enable dos_paths
3021         ;;
3022     gnu/kfreebsd)
3023         add_cppflags -D_BSD_SOURCE
3024         ;;
3025     gnu)
3026         ;;
3027     qnx)
3028         add_cppflags -D_QNX_SOURCE
3029         network_extralibs="-lsocket"
3030         ;;
3031     symbian)
3032         SLIBSUF=".dll"
3033         enable dos_paths
3034         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3035         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3036         add_ldflags -Wl,--target1-abs,--no-undefined \
3037                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3038                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3039         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3040                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3041                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3042         ;;
3043     osf1)
3044         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3045         AVSERVERLDFLAGS=
3046         ;;
3047     minix)
3048         ;;
3049     plan9)
3050         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3051                      -D_REENTRANT_SOURCE        \
3052                      -D_RESEARCH_SOURCE         \
3053                      -DFD_SETSIZE=96            \
3054                      -DHAVE_SOCK_OPTS
3055         add_compat strtod.o strtod=avpriv_strtod
3056         network_extralibs='-lbsd'
3057         exeobjs=compat/plan9/main.o
3058         disable avserver
3059         ln_s='ln -s -f'
3060         cp_f='cp'
3061         ;;
3062     none)
3063         ;;
3064     *)
3065         die "Unknown OS '$target_os'."
3066         ;;
3067 esac
3068
3069 # determine libc flavour
3070
3071 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3072 if check_cpp_condition features.h "defined __UCLIBC__"; then
3073     libc_type=uclibc
3074     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3075 elif check_cpp_condition features.h "defined __GLIBC__"; then
3076     libc_type=glibc
3077     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3078 # MinGW headers can be installed on Cygwin, so check for newlib first.
3079 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3080     libc_type=newlib
3081     add_cppflags -U__STRICT_ANSI__
3082 elif check_header _mingw.h; then
3083     libc_type=mingw
3084     check_cpp_condition _mingw.h \
3085         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3086             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3087         die "ERROR: MinGW runtime version must be >= 3.15."
3088     add_cppflags -U__STRICT_ANSI__
3089 elif check_func_headers stdlib.h _get_doserrno; then
3090     libc_type=msvcrt
3091     add_compat strtod.o strtod=avpriv_strtod
3092     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3093                                  _snprintf=avpriv_snprintf  \
3094                                  vsnprintf=avpriv_vsnprintf
3095 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3096     libc_type=klibc
3097 fi
3098
3099 test -n "$libc_type" && enable $libc_type
3100
3101 # hacks for compiler/libc/os combinations
3102
3103 if enabled_all tms470 glibc; then
3104     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3105     add_cppflags -D__USER_LABEL_PREFIX__=
3106     add_cppflags -D__builtin_memset=memset
3107     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3108     add_cflags   -pds=48    # incompatible redefinition of macro
3109 fi
3110
3111 if enabled_all ccc glibc; then
3112     add_ldflags -Wl,-z,now  # calls to libots crash without this
3113 fi
3114
3115 esc(){
3116     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3117 }
3118
3119 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3120
3121 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3122
3123 set_default $PATHS_LIST
3124 set_default nm
3125
3126 # we need to build at least one lib type
3127 if ! enabled_any static shared; then
3128     cat <<EOF
3129 At least one library type must be built.
3130 Specify --enable-static to build the static libraries or --enable-shared to
3131 build the shared libraries as well. To only build the shared libraries specify
3132 --disable-static in addition to --enable-shared.
3133 EOF
3134     exit 1;
3135 fi
3136
3137 die_license_disabled() {
3138     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3139 }
3140
3141 die_license_disabled gpl libcdio
3142 die_license_disabled gpl libx264
3143 die_license_disabled gpl libxavs
3144 die_license_disabled gpl libxvid
3145 die_license_disabled gpl x11grab
3146
3147 die_license_disabled nonfree libfaac
3148 die_license_disabled nonfree libfdk_aac
3149 die_license_disabled nonfree openssl
3150
3151 die_license_disabled version3 libopencore_amrnb
3152 die_license_disabled version3 libopencore_amrwb
3153 die_license_disabled version3 libvo_aacenc
3154 die_license_disabled version3 libvo_amrwbenc
3155
3156 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3157
3158 disabled optimizations || check_cflags -fomit-frame-pointer
3159
3160 enable_pic() {
3161     enable pic
3162     add_cppflags -DPIC
3163     add_cflags   -fPIC
3164     add_asflags  -fPIC
3165 }
3166
3167 enabled pic && enable_pic
3168
3169 check_cc <<EOF || die "Symbol mangling check failed."
3170 int ff_extern;
3171 EOF
3172 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3173 extern_prefix=${sym%%ff_extern*}
3174
3175 check_cc <<EOF && enable_weak inline_asm
3176 void foo(void) { __asm__ volatile ("" ::); }
3177 EOF
3178
3179 _restrict=
3180 for restrict_keyword in restrict __restrict__ __restrict; do
3181     check_cc <<EOF && _restrict=$restrict_keyword && break
3182 void foo(char * $restrict_keyword p);
3183 EOF
3184 done
3185
3186 check_cc <<EOF && enable attribute_packed
3187 struct { int x; } __attribute__((packed)) x;
3188 EOF
3189
3190 check_cc <<EOF && enable attribute_may_alias
3191 union { int x; } __attribute__((may_alias)) x;
3192 EOF
3193
3194 check_cc <<EOF || die "endian test failed"
3195 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3196 EOF
3197 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3198
3199 if enabled alpha; then
3200
3201     check_cflags -mieee
3202
3203 elif enabled arm; then
3204
3205     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3206     enabled thumb && check_cflags -mthumb || check_cflags -marm
3207     nogas=die
3208
3209     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3210         enable vfp_args
3211     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3212         case "${cross_prefix:-$cc}" in
3213             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3214             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3215 __asm__ (".eabi_attribute 28, 1");
3216 int main(void) { return 0; }
3217 EOF
3218         esac
3219         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3220     fi
3221
3222     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3223     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3224     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3225     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3226     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3227     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3228
3229     [ $target_os = linux ] ||
3230         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3231             $ARCH_EXT_LIST_ARM
3232
3233     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3234     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3235
3236     enabled_all armv6t2 shared !pic && enable_pic
3237
3238 elif enabled mips; then
3239
3240     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3241
3242 elif enabled parisc; then
3243
3244     if enabled gcc; then
3245         case $($cc -dumpversion) in
3246             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3247         esac
3248     fi
3249
3250 elif enabled ppc; then
3251
3252     enable local_aligned_8 local_aligned_16
3253
3254     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3255     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3256     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3257     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3258
3259     # AltiVec flags: The FSF version of GCC differs from the Apple version
3260     if enabled altivec; then
3261         nogas=warn
3262         check_cflags -maltivec -mabi=altivec &&
3263         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3264         check_cflags -faltivec
3265
3266         # check if our compiler supports Motorola AltiVec C API
3267         check_cc <<EOF || disable altivec
3268 $inc_altivec_h
3269 int main(void) {
3270     vector signed int v1 = (vector signed int) { 0 };
3271     vector signed int v2 = (vector signed int) { 1 };
3272     v1 = vec_add(v1, v2);
3273     return 0;
3274 }
3275 EOF
3276
3277         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3278     fi
3279
3280 elif enabled sparc; then
3281
3282     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3283
3284 elif enabled x86; then
3285
3286     check_code ld intrin.h "__rdtsc()" && enable rdtsc
3287
3288     check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
3289
3290     enable local_aligned_8 local_aligned_16
3291
3292     # check whether EBP is available on x86
3293     # As 'i' is stored on the stack, this program will crash
3294     # if the base pointer is used to access it because the
3295     # base pointer is cleared in the inline assembly code.
3296     check_exec_crash <<EOF && enable ebp_available
3297 volatile int i=0;
3298 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3299 return i;
3300 EOF
3301
3302     # check whether EBX is available on x86
3303     check_inline_asm ebx_available '""::"b"(0)' &&
3304         check_inline_asm ebx_available '"":::"%ebx"'
3305
3306     # check whether xmm clobbers are supported
3307     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3308
3309     # check whether binutils is new enough to compile SSSE3/MMXEXT
3310     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3311     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3312
3313     if ! disabled_any asm mmx yasm; then
3314         if check_cmd $yasmexe --version; then
3315             enabled x86_64 && yasm_extra="-m amd64"
3316             yasm_debug="-g dwarf2"
3317         elif check_cmd nasm -v; then
3318             yasmexe=nasm
3319             yasm_debug="-g -F dwarf"
3320             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3321         fi
3322
3323         YASMFLAGS="-f $objformat $yasm_extra"
3324         enabled pic               && append YASMFLAGS "-DPIC"
3325         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3326         case "$objformat" in
3327             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3328         esac
3329
3330         check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
3331             die "yasm not found, use --disable-yasm for a crippled build"
3332         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3333         check_yasm "CPU amdnop" && enable cpunop
3334     fi
3335
3336     case "$cpu" in
3337         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3338             disable fast_clz
3339         ;;
3340     esac
3341
3342 fi
3343
3344 if enabled asm; then
3345     as=${gas:=$as}
3346     check_as <<EOF && enable gnu_as || \
3347         $nogas "GNU assembler not found, install gas-preprocessor"
3348 .macro m n
3349 \n: .int 0
3350 .endm
3351 m x
3352 EOF
3353 fi
3354
3355 check_ldflags -Wl,--as-needed
3356
3357 if check_func dlopen; then
3358     ldl=
3359 elif check_func dlopen -ldl; then
3360     ldl=-ldl
3361 fi
3362
3363 if ! disabled network; then
3364     check_type "sys/types.h sys/socket.h" socklen_t
3365     check_type netdb.h "struct addrinfo"
3366     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3367     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3368     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3369     check_type netinet/in.h "struct sockaddr_in6"
3370     check_type poll.h "struct pollfd"
3371     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3372     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3373     check_type netinet/sctp.h "struct sctp_event_subscribe"
3374     check_func getaddrinfo $network_extralibs
3375     check_func getservbyport $network_extralibs
3376     # Prefer arpa/inet.h over winsock2
3377     if check_header arpa/inet.h ; then
3378         check_func closesocket
3379     elif check_header winsock2.h ; then
3380         check_func_headers winsock2.h closesocket -lws2 &&
3381             network_extralibs="-lws2" ||
3382         { check_func_headers winsock2.h closesocket -lws2_32 &&
3383             network_extralibs="-lws2_32"; }
3384         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3385         check_type ws2tcpip.h socklen_t
3386         check_type ws2tcpip.h "struct addrinfo"
3387         check_type ws2tcpip.h "struct group_source_req"
3388         check_type ws2tcpip.h "struct ip_mreq_source"
3389         check_type ws2tcpip.h "struct ipv6_mreq"
3390         check_type winsock2.h "struct pollfd"
3391         check_type ws2tcpip.h "struct sockaddr_in6"
3392         check_type ws2tcpip.h "struct sockaddr_storage"
3393         check_struct winsock2.h "struct sockaddr" sa_len
3394     else
3395         disable network
3396     fi
3397 fi
3398
3399 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3400 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3401
3402 check_func  fcntl
3403 check_func  fork
3404 check_func  gethrtime
3405 check_func  getopt
3406 check_func  getrusage
3407 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3408 check_func  gettimeofday
3409 check_func  inet_aton $network_extralibs
3410 check_func  isatty
3411 check_func  localtime_r
3412 check_func  ${malloc_prefix}memalign            && enable memalign
3413 check_func  mkstemp
3414 check_func  mmap
3415 check_func  mprotect
3416 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3417 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3418 check_func  setrlimit
3419 check_func  strerror_r
3420 check_func  strptime
3421 check_func  strtok_r
3422 check_func  sched_getaffinity
3423 check_func  sysconf
3424 check_func  sysctl
3425 check_func  usleep
3426 check_func_headers io.h setmode
3427 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3428 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3429 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3430 check_func_headers windows.h GetProcessAffinityMask
3431 check_func_headers windows.h GetProcessTimes
3432 check_func_headers windows.h GetSystemTimeAsFileTime
3433 check_func_headers windows.h MapViewOfFile
3434 check_func_headers windows.h SetConsoleTextAttribute
3435 check_func_headers windows.h Sleep
3436 check_func_headers windows.h VirtualAlloc
3437
3438 check_header direct.h
3439 check_header dlfcn.h
3440 check_header dxva.h
3441 check_header dxva2api.h
3442 check_header io.h
3443 check_header malloc.h
3444 check_header poll.h
3445 check_header sys/mman.h
3446 check_header sys/param.h
3447 check_header sys/resource.h
3448 check_header sys/select.h
3449 check_header sys/time.h
3450 check_header unistd.h
3451 check_header vdpau/vdpau.h
3452 check_header vdpau/vdpau_x11.h
3453 check_header VideoDecodeAcceleration/VDADecoder.h
3454 check_header windows.h
3455 check_header X11/extensions/XvMClib.h
3456
3457 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3458 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3459
3460 if ! disabled w32threads && ! enabled pthreads; then
3461     check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3462 fi
3463
3464 # check for some common methods of building with pthread support
3465 # do this before the optional library checks as some of them require pthreads
3466 if ! disabled pthreads && ! enabled w32threads; then
3467     enable pthreads
3468     if check_func pthread_create; then
3469         :
3470     elif check_func pthread_create -pthread; then
3471         add_cflags -pthread
3472         add_extralibs -pthread
3473     elif check_func pthread_create -pthreads; then
3474         add_cflags -pthreads
3475         add_extralibs -pthreads
3476     elif check_func pthread_create -lpthreadGC2; then
3477         add_extralibs -lpthreadGC2
3478     elif ! check_lib pthread.h pthread_create -lpthread; then
3479         disable pthreads
3480     fi
3481 fi
3482
3483 for thread in $THREADS_LIST; do
3484     if enabled $thread; then
3485         test -n "$thread_type" &&
3486             die "ERROR: Only one thread type must be selected." ||
3487             thread_type="$thread"
3488     fi
3489 done
3490
3491 check_lib math.h sin -lm && LIBM="-lm"
3492 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3493
3494 atan2f_args=2
3495 ldexpf_args=2
3496 powf_args=2
3497
3498 for func in $MATH_FUNCS; do
3499     eval check_mathfunc $func \${${func}_args:-1}
3500 done
3501
3502 # these are off by default, so fail if requested and not available
3503 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3504 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3505 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3506 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3507 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3508 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3509 enabled libgsm     && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
3510                             check_lib "${gsm_hdr}" gsm_create -lgsm && break;
3511                         done || die "ERROR: libgsm not found"; }
3512 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3513 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3514 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3515 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3516 enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3517 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3518 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3519 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3520 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3521 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3522 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3523 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3524 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3525 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3526 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3527 enabled libvpx     && {
3528     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3529                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3530     enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3531                                 die "ERROR: libvpx encoder version must be >=0.9.6"; }
3532     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder;  }
3533     enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
3534 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3535                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3536                         die "ERROR: libx264 version must be >= 0.118."; }
3537 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3538 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3539 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3540                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3541                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3542                         die "ERROR: openssl not found"; }
3543
3544 if enabled gnutls; then
3545     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3546     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3547 fi
3548
3549 # libdc1394 check
3550 if enabled libdc1394; then
3551     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3552         enable libdc1394_2; } ||
3553     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3554         enable libdc1394_1; } ||
3555     die "ERROR: No version of libdc1394 found "
3556 fi
3557
3558 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3559     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3560     enable sdl &&
3561     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3562 fi
3563
3564 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3565
3566 check_header linux/fb.h
3567 check_header linux/videodev2.h
3568 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3569
3570 check_header sys/videoio.h
3571
3572 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3573 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3574 # w32api 3.12 had it defined wrong
3575 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3576
3577 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3578 { check_header dev/bktr/ioctl_meteor.h &&
3579   check_header dev/bktr/ioctl_bt848.h; } ||
3580 { check_header machine/ioctl_meteor.h &&
3581   check_header machine/ioctl_bt848.h; } ||
3582 { check_header dev/video/meteor/ioctl_meteor.h &&
3583   check_header dev/video/bktr/ioctl_bt848.h; } ||
3584 check_header dev/ic/bt8xx.h
3585
3586 check_header sndio.h
3587 check_header sys/soundcard.h
3588 check_header soundcard.h
3589
3590 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3591
3592 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
3593     check_func jack_port_get_latency_range -ljack
3594
3595 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3596
3597 if enabled libcdio; then
3598     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
3599 fi
3600
3601 enabled x11grab                                           &&
3602 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3603 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3604 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3605
3606 enabled vdpau &&
3607     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3608     disable vdpau
3609
3610 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3611
3612 # add some useful compiler flags if supported
3613 check_cflags -Wdeclaration-after-statement
3614 check_cflags -Wall
3615 check_cflags -Wno-parentheses
3616 check_cflags -Wno-switch
3617 check_cflags -Wno-format-zero-length
3618 check_cflags -Wdisabled-optimization
3619 check_cflags -Wpointer-arith
3620 check_cflags -Wredundant-decls
3621 check_cflags -Wno-pointer-sign
3622 check_cflags -Wcast-qual
3623 check_cflags -Wwrite-strings
3624 check_cflags -Wtype-limits
3625 check_cflags -Wundef
3626 check_cflags -Wmissing-prototypes
3627 check_cflags -Wstrict-prototypes
3628 enabled extra_warnings && check_cflags -Winline
3629
3630 # add some linker flags
3631 check_ldflags -Wl,--warn-common
3632 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3633 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3634
3635 enabled xmm_clobber_test &&
3636     check_ldflags -Wl,--wrap,avcodec_open2              \
3637                   -Wl,--wrap,avcodec_decode_audio4      \
3638                   -Wl,--wrap,avcodec_decode_video2      \
3639                   -Wl,--wrap,avcodec_decode_subtitle2   \
3640                   -Wl,--wrap,avcodec_encode_audio2      \
3641                   -Wl,--wrap,avcodec_encode_video       \
3642                   -Wl,--wrap,avcodec_encode_subtitle    \
3643                   -Wl,--wrap,sws_scale ||
3644     disable xmm_clobber_test
3645
3646 echo "X{};" > $TMPV
3647 if test_ldflags -Wl,--version-script,$TMPV; then
3648     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3649     check_cc <<EOF && enable symver_asm_label
3650 void ff_foo(void) __asm__ ("av_foo@VERSION");
3651 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3652 EOF
3653     check_cc <<EOF && enable symver_gnu_asm
3654 __asm__(".symver ff_foo,av_foo@VERSION");
3655 void ff_foo(void) {}
3656 EOF
3657 fi
3658
3659 if [ -z "$optflags" ]; then
3660     if enabled small; then
3661         optflags=$cflags_size
3662     elif enabled optimizations; then
3663         optflags=$cflags_speed
3664     else
3665         optflags=$cflags_noopt
3666     fi
3667 fi
3668
3669 check_optflags(){
3670     check_cflags "$@"
3671     enabled lto && check_ldflags "$@"
3672 }
3673
3674
3675 if enabled lto; then
3676     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3677     check_cflags  -flto
3678     check_ldflags -flto $cpuflags
3679 fi
3680
3681 check_optflags $optflags
3682 check_optflags -fno-math-errno
3683 check_optflags -fno-signed-zeros
3684
3685 if enabled icc; then
3686     # Just warnings, no remarks
3687     check_cflags -w1
3688     # -wd: Disable following warnings
3689     # 144, 167, 556: -Wno-pointer-sign
3690     # 1292: attribute "foo" ignored
3691     # 1419: external declaration in primary source file
3692     # 10006: ignoring unknown option -fno-signed-zeros
3693     # 10148: ignoring unknown option -Wno-parentheses
3694     # 10156: ignoring option '-W'; no argument required
3695     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3696     # 11030: Warning unknown option --as-needed
3697     # 10156: ignoring option '-export'; no argument required
3698     check_ldflags -wd10156,11030
3699     # Allow to compile with optimizations
3700     check_ldflags -march=$cpu
3701     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3702     enable ebp_available
3703     if enabled x86_32; then
3704         icc_version=$($cc -dumpversion)
3705         test ${icc_version%%.*} -ge 11 &&
3706             check_cflags -falign-stack=maintain-16-byte ||
3707             disable aligned_stack
3708     fi
3709 elif enabled ccc; then
3710     # disable some annoying warnings
3711     add_cflags -msg_disable bitnotint
3712     add_cflags -msg_disable mixfuncvoid
3713     add_cflags -msg_disable nonstandcast
3714     add_cflags -msg_disable unsupieee
3715 elif enabled gcc; then
3716     check_optflags -fno-tree-vectorize
3717     check_cflags -Werror=implicit-function-declaration
3718     check_cflags -Werror=missing-prototypes
3719     check_cflags -Werror=return-type
3720     check_cflags -Werror=declaration-after-statement
3721     check_cflags -Werror=vla
3722 elif enabled llvm_gcc; then
3723     check_cflags -mllvm -stack-alignment=16
3724 elif enabled clang; then
3725     check_cflags -mllvm -stack-alignment=16
3726     check_cflags -Qunused-arguments
3727     check_cflags -Werror=implicit-function-declaration
3728     check_cflags -Werror=missing-prototypes
3729     check_cflags -Werror=return-type
3730 elif enabled armcc; then
3731     # 2523: use of inline assembler is deprecated
3732     add_cflags -W${armcc_opt},--diag_suppress=2523
3733     add_cflags -W${armcc_opt},--diag_suppress=1207
3734     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3735     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3736     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3737     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3738 elif enabled tms470; then
3739     add_cflags -pds=824 -pds=837
3740 elif enabled pathscale; then
3741     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3742 elif enabled msvc; then
3743     enabled x86_32 && disable aligned_stack
3744 fi
3745
3746 case $target_os in
3747     osf1)
3748         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
3749     ;;
3750     plan9)
3751         add_cppflags -Dmain=plan9_main
3752     ;;
3753 esac
3754
3755 enabled_any $THREADS_LIST      && enable threads
3756
3757 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3758
3759 check_deps $CONFIG_LIST       \
3760            $CONFIG_EXTRA      \
3761            $HAVE_LIST         \
3762            $ALL_COMPONENTS    \
3763
3764 ! enabled_any memalign posix_memalign aligned_malloc &&
3765     enabled_any $need_memalign && enable memalign_hack
3766
3767 echo "install prefix            $prefix"
3768 echo "source path               $source_path"
3769 echo "C compiler                $cc"
3770 echo "ARCH                      $arch ($cpu)"
3771 if test "$build_suffix" != ""; then
3772     echo "build suffix              $build_suffix"
3773 fi
3774 if test "$extra_version" != ""; then
3775     echo "version string suffix     $extra_version"
3776 fi
3777 echo "big-endian                ${bigendian-no}"
3778 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3779 if enabled x86; then
3780     echo "${yasmexe}                      ${yasm-no}"
3781     echo "MMX enabled               ${mmx-no}"
3782     echo "MMXEXT enabled            ${mmxext-no}"
3783     echo "3DNow! enabled            ${amd3dnow-no}"
3784     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3785     echo "SSE enabled               ${sse-no}"
3786     echo "SSSE3 enabled             ${ssse3-no}"
3787     echo "AVX enabled               ${avx-no}"
3788     echo "FMA4 enabled              ${fma4-no}"
3789     echo "CMOV enabled              ${cmov-no}"
3790     echo "CMOV is fast              ${fast_cmov-no}"
3791     echo "EBX available             ${ebx_available-no}"
3792     echo "EBP available             ${ebp_available-no}"
3793 fi
3794 if enabled arm; then
3795     echo "ARMv5TE enabled           ${armv5te-no}"
3796     echo "ARMv6 enabled             ${armv6-no}"
3797     echo "ARMv6T2 enabled           ${armv6t2-no}"
3798     echo "VFP enabled               ${vfp-no}"
3799     echo "NEON enabled              ${neon-no}"
3800 fi
3801 if enabled ppc; then
3802     echo "AltiVec enabled           ${altivec-no}"
3803     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3804     echo "dcbzl available           ${dcbzl-no}"
3805 fi
3806 if enabled sparc; then
3807     echo "VIS enabled               ${vis-no}"
3808 fi
3809 echo "debug symbols             ${debug-no}"
3810 echo "optimize for size         ${small-no}"
3811 echo "optimizations             ${optimizations-no}"
3812 echo "static                    ${static-no}"
3813 echo "shared                    ${shared-no}"
3814 echo "new filter support        ${avfilter-no}"
3815 echo "network support           ${network-no}"
3816 echo "threading support         ${thread_type-no}"
3817 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3818 echo "SDL support               ${sdl-no}"
3819 echo "AVISynth enabled          ${avisynth-no}"
3820 echo "frei0r enabled            ${frei0r-no}"
3821 echo "gnutls enabled            ${gnutls-no}"
3822 echo "libcdio support           ${libcdio-no}"
3823 echo "libdc1394 support         ${libdc1394-no}"
3824 echo "libfaac enabled           ${libfaac-no}"
3825 echo "libfdk-aac enabled        ${libfdk_aac-no}"
3826 echo "libgsm enabled            ${libgsm-no}"
3827 echo "libilbc enabled           ${libilbc-no}"
3828 echo "libmp3lame enabled        ${libmp3lame-no}"
3829 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3830 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3831 echo "libopencv support         ${libopencv-no}"
3832 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3833 echo "libopus enabled           ${libopus-no}"
3834 echo "libpulse enabled          ${libpulse-no}"
3835 echo "librtmp enabled           ${librtmp-no}"
3836 echo "libschroedinger enabled   ${libschroedinger-no}"
3837 echo "libspeex enabled          ${libspeex-no}"
3838 echo "libtheora enabled         ${libtheora-no}"
3839 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3840 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3841 echo "libvorbis enabled         ${libvorbis-no}"
3842 echo "libvpx enabled            ${libvpx-no}"
3843 echo "libx264 enabled           ${libx264-no}"
3844 echo "libxavs enabled           ${libxavs-no}"
3845 echo "libxvid enabled           ${libxvid-no}"
3846 echo "openssl enabled           ${openssl-no}"
3847 echo "zlib enabled              ${zlib-no}"
3848 echo "bzlib enabled             ${bzlib-no}"
3849 test -n "$random_seed" &&
3850     echo "random seed               ${random_seed}"
3851 echo
3852
3853 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3854     echo "Enabled ${type}s:"
3855     eval list=\$$(toupper $type)_LIST
3856     print_enabled '_*' $list | print_3_columns
3857     echo
3858 done
3859
3860 license="LGPL version 2.1 or later"
3861 if enabled nonfree; then
3862     license="nonfree and unredistributable"
3863 elif enabled gplv3; then
3864     license="GPL version 3 or later"
3865 elif enabled lgplv3; then
3866     license="LGPL version 3 or later"
3867 elif enabled gpl; then
3868     license="GPL version 2 or later"
3869 fi
3870
3871 echo "License: $license"
3872
3873 echo "Creating config.mak and config.h..."
3874
3875 test -e Makefile || $ln_s "$source_path/Makefile" .
3876
3877 config_files="$TMPH config.mak"
3878
3879 cat > config.mak <<EOF
3880 # Automatically generated by configure - do not modify!
3881 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3882 prefix=$prefix
3883 LIBDIR=\$(DESTDIR)$libdir
3884 SHLIBDIR=\$(DESTDIR)$shlibdir
3885 INCDIR=\$(DESTDIR)$incdir
3886 BINDIR=\$(DESTDIR)$bindir
3887 DATADIR=\$(DESTDIR)$datadir
3888 MANDIR=\$(DESTDIR)$mandir
3889 SRC_PATH=$source_path
3890 CC_IDENT=$cc_ident
3891 ARCH=$arch
3892 CC=$cc
3893 AS=$as
3894 LD=$ld
3895 DEPCC=$dep_cc
3896 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3897 DEPAS=$as
3898 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3899 YASM=$yasmexe
3900 DEPYASM=$yasmexe
3901 AR=$ar
3902 ARFLAGS=$arflags
3903 AR_O=$ar_o
3904 RANLIB=$ranlib
3905 LN_S=$ln_s
3906 CPPFLAGS=$CPPFLAGS
3907 CFLAGS=$CFLAGS
3908 ASFLAGS=$ASFLAGS
3909 AS_C=$AS_C
3910 AS_O=$AS_O
3911 CC_C=$CC_C
3912 CC_E=$CC_E
3913 CC_O=$CC_O
3914 LD_O=$LD_O
3915 LD_LIB=$LD_LIB
3916 LD_PATH=$LD_PATH
3917 DLLTOOL=$dlltool
3918 LDFLAGS=$LDFLAGS
3919 LDFLAGS-avserver=$AVSERVERLDFLAGS
3920 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
3921 YASMFLAGS=$YASMFLAGS
3922 BUILDSUF=$build_suffix
3923 FULLNAME=$FULLNAME
3924 LIBPREF=$LIBPREF
3925 LIBSUF=$LIBSUF
3926 LIBNAME=$LIBNAME
3927 SLIBPREF=$SLIBPREF
3928 SLIBSUF=$SLIBSUF
3929 EXESUF=$EXESUF
3930 EXTRA_VERSION=$extra_version
3931 CCDEP=$CCDEP
3932 CCDEP_FLAGS=$CCDEP_FLAGS
3933 ASDEP=$ASDEP
3934 ASDEP_FLAGS=$ASDEP_FLAGS
3935 CC_DEPFLAGS=$CC_DEPFLAGS
3936 AS_DEPFLAGS=$AS_DEPFLAGS
3937 HOSTCC=$host_cc
3938 HOSTLD=$host_ld
3939 HOSTCFLAGS=$host_cflags
3940 HOSTCPPFLAGS=$host_cppflags
3941 HOSTEXESUF=$HOSTEXESUF
3942 HOSTLDFLAGS=$host_ldflags
3943 HOSTLIBS=$host_libs
3944 DEPHOSTCC=$host_cc
3945 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3946 HOSTCCDEP=$HOSTCCDEP
3947 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3948 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3949 HOSTCC_C=$HOSTCC_C
3950 HOSTCC_O=$HOSTCC_O
3951 HOSTLD_O=$HOSTLD_O
3952 TARGET_EXEC=$target_exec
3953 TARGET_PATH=$target_path
3954 LIBS-avplay=$sdl_libs
3955 CFLAGS-avplay=$sdl_cflags
3956 ZLIB=$($ldflags_filter -lz)
3957 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3958 EXTRALIBS=$extralibs
3959 COMPAT_OBJS=$compat_objs
3960 EXEOBJS=$exeobjs
3961 INSTALL=install
3962 LIBTARGET=${LIBTARGET}
3963 SLIBNAME=${SLIBNAME}
3964 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3965 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3966 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3967 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3968 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3969 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3970 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3971 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3972 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
3973 EOF
3974
3975 get_version(){
3976     lcname=lib${1}
3977     name=$(toupper $lcname)
3978     file=$source_path/$lcname/version.h
3979     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
3980     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3981     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3982     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3983     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
3984 }
3985
3986 map 'get_version $v' $LIBRARY_LIST
3987
3988 cat > $TMPH <<EOF
3989 /* Automatically generated by configure - do not modify! */
3990 #ifndef LIBAV_CONFIG_H
3991 #define LIBAV_CONFIG_H
3992 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3993 #define LIBAV_LICENSE "$(c_escape $license)"
3994 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3995 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
3996 #define restrict $_restrict
3997 #define EXTERN_PREFIX "${extern_prefix}"
3998 #define EXTERN_ASM ${extern_prefix}
3999 #define SLIBSUF "$SLIBSUF"
4000 EOF
4001
4002 test -n "$malloc_prefix" &&
4003     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4004
4005 if enabled yasm; then
4006     append config_files $TMPASM
4007     printf '' >$TMPASM
4008 fi
4009
4010 print_config ARCH_   "$config_files" $ARCH_LIST
4011 print_config HAVE_   "$config_files" $HAVE_LIST
4012 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4013                                      $CONFIG_EXTRA      \
4014                                      $ALL_COMPONENTS    \
4015
4016 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
4017
4018 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4019 cp_if_changed $TMPH config.h
4020 touch .config
4021
4022 enabled yasm && cp_if_changed $TMPASM config.asm
4023
4024 cat > $TMPH <<EOF
4025 /* Generated by ffconf */
4026 #ifndef AVUTIL_AVCONFIG_H
4027 #define AVUTIL_AVCONFIG_H
4028 EOF
4029
4030 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4031
4032 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4033
4034 cp_if_changed $TMPH libavutil/avconfig.h
4035
4036 test -n "$WARNINGS" && printf "\n$WARNINGS"
4037
4038 # build pkg-config files
4039
4040 pkgconfig_generate(){
4041     name=$1
4042     shortname=${name#lib}${build_suffix}
4043     comment=$2
4044     version=$3
4045     libs=$4
4046     requires=$5
4047     enabled ${name#lib} || return 0
4048     mkdir -p $name
4049     cat <<EOF > $name/$name.pc
4050 prefix=$prefix
4051 exec_prefix=\${prefix}
4052 libdir=$libdir
4053 includedir=$incdir
4054
4055 Name: $name
4056 Description: $comment
4057 Version: $version
4058 Requires: $(enabled shared || echo $requires)
4059 Requires.private: $(enabled shared && echo $requires)
4060 Conflicts:
4061 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4062 Libs.private: $(enabled shared && echo $libs)
4063 Cflags: -I\${includedir}
4064 EOF
4065     cat <<EOF > $name/$name-uninstalled.pc
4066 prefix=
4067 exec_prefix=
4068 libdir=\${pcfiledir}
4069 includedir=${source_path}
4070
4071 Name: $name
4072 Description: $comment
4073 Version: $version
4074 Requires: $requires
4075 Conflicts:
4076 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
4077 Cflags: -I\${includedir}
4078 EOF
4079 }
4080
4081 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4082 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4083 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4084 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
4085 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4086 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4087 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"