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