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