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