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