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