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