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