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