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