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