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