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