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