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