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