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