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