]> git.sesse.net Git - ffmpeg/blob - configure
configure: Add docdir configuration option
[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-user@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     $pkg_config --exists $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 wmapro_decoder_select="mdct sinewin"
1696 wmav1_decoder_select="mdct sinewin"
1697 wmav1_encoder_select="mdct sinewin"
1698 wmav2_decoder_select="mdct sinewin"
1699 wmav2_encoder_select="mdct sinewin"
1700 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1701 wmv1_decoder_select="h263_decoder"
1702 wmv1_encoder_select="h263_encoder"
1703 wmv2_decoder_select="h263_decoder videodsp"
1704 wmv2_encoder_select="h263_encoder"
1705 wmv3_decoder_select="vc1_decoder"
1706 wmv3image_decoder_select="wmv3_decoder"
1707 zerocodec_decoder_deps="zlib"
1708 zlib_decoder_deps="zlib"
1709 zlib_encoder_deps="zlib"
1710 zmbv_decoder_deps="zlib"
1711 zmbv_encoder_deps="zlib"
1712
1713 # hardware accelerators
1714 dxva2_deps="dxva2api_h"
1715 vaapi_deps="va_va_h"
1716 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1717 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1718 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1719
1720 h263_vaapi_hwaccel_deps="vaapi"
1721 h263_vaapi_hwaccel_select="h263_decoder"
1722 h263_vdpau_hwaccel_deps="vdpau"
1723 h263_vdpau_hwaccel_select="h263_decoder"
1724 h264_dxva2_hwaccel_deps="dxva2"
1725 h264_dxva2_hwaccel_select="h264_decoder"
1726 h264_vaapi_hwaccel_deps="vaapi"
1727 h264_vaapi_hwaccel_select="h264_decoder"
1728 h264_vda_hwaccel_deps="vda"
1729 h264_vda_hwaccel_select="h264_decoder"
1730 h264_vdpau_hwaccel_deps="vdpau"
1731 h264_vdpau_hwaccel_select="h264_decoder"
1732 mpeg1_vdpau_hwaccel_deps="vdpau"
1733 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1734 mpeg2_dxva2_hwaccel_deps="dxva2"
1735 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1736 mpeg2_vaapi_hwaccel_deps="vaapi"
1737 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1738 mpeg2_vdpau_hwaccel_deps="vdpau"
1739 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1740 mpeg4_vaapi_hwaccel_deps="vaapi"
1741 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1742 mpeg4_vdpau_hwaccel_deps="vdpau"
1743 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1744 vc1_dxva2_hwaccel_deps="dxva2"
1745 vc1_dxva2_hwaccel_select="vc1_decoder"
1746 vc1_vaapi_hwaccel_deps="vaapi"
1747 vc1_vaapi_hwaccel_select="vc1_decoder"
1748 vc1_vdpau_hwaccel_deps="vdpau"
1749 vc1_vdpau_hwaccel_select="vc1_decoder"
1750 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1751 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1752 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1753
1754 # parsers
1755 h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1756 mpeg4video_parser_select="error_resilience mpegvideo"
1757 mpegvideo_parser_select="error_resilience mpegvideo"
1758 vc1_parser_select="mpegvideo"
1759
1760 # external libraries
1761 libfaac_encoder_deps="libfaac"
1762 libfaac_encoder_select="audio_frame_queue"
1763 libfdk_aac_decoder_deps="libfdk_aac"
1764 libfdk_aac_encoder_deps="libfdk_aac"
1765 libfdk_aac_encoder_select="audio_frame_queue"
1766 libgsm_decoder_deps="libgsm"
1767 libgsm_encoder_deps="libgsm"
1768 libgsm_ms_decoder_deps="libgsm"
1769 libgsm_ms_encoder_deps="libgsm"
1770 libilbc_decoder_deps="libilbc"
1771 libilbc_encoder_deps="libilbc"
1772 libmp3lame_encoder_deps="libmp3lame"
1773 libmp3lame_encoder_select="audio_frame_queue"
1774 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1775 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1776 libopencore_amrnb_encoder_select="audio_frame_queue"
1777 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1778 libopenjpeg_decoder_deps="libopenjpeg"
1779 libopenjpeg_encoder_deps="libopenjpeg"
1780 libopus_decoder_deps="libopus"
1781 libopus_encoder_deps="libopus"
1782 libopus_encoder_select="audio_frame_queue"
1783 libschroedinger_decoder_deps="libschroedinger"
1784 libschroedinger_encoder_deps="libschroedinger"
1785 libspeex_decoder_deps="libspeex"
1786 libspeex_encoder_deps="libspeex"
1787 libspeex_encoder_select="audio_frame_queue"
1788 libtheora_encoder_deps="libtheora"
1789 libvo_aacenc_encoder_deps="libvo_aacenc"
1790 libvo_aacenc_encoder_select="audio_frame_queue"
1791 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1792 libvorbis_encoder_deps="libvorbis"
1793 libvorbis_encoder_select="audio_frame_queue"
1794 libvpx_vp8_decoder_deps="libvpx"
1795 libvpx_vp8_encoder_deps="libvpx"
1796 libvpx_vp9_decoder_deps="libvpx"
1797 libvpx_vp9_encoder_deps="libvpx"
1798 libwavpack_encoder_deps="libwavpack"
1799 libx264_encoder_deps="libx264"
1800 libxavs_encoder_deps="libxavs"
1801 libxvid_encoder_deps="libxvid"
1802
1803 # demuxers / muxers
1804 ac3_demuxer_select="ac3_parser"
1805 asf_demuxer_select="riffdec"
1806 asf_muxer_select="riffenc"
1807 asf_stream_muxer_select="asf_muxer"
1808 avi_demuxer_select="riffdec"
1809 avi_muxer_select="riffenc"
1810 avisynth_demuxer_deps="avisynth"
1811 avisynth_demuxer_select="riffdec"
1812 caf_demuxer_select="riffdec"
1813 dirac_demuxer_select="dirac_parser"
1814 dxa_demuxer_select="riffdec"
1815 eac3_demuxer_select="ac3_parser"
1816 flac_demuxer_select="flac_parser"
1817 hls_muxer_select="mpegts_muxer"
1818 ipod_muxer_select="mov_muxer"
1819 ismv_muxer_select="mov_muxer"
1820 matroska_audio_muxer_select="matroska_muxer"
1821 matroska_demuxer_select="riffdec"
1822 matroska_demuxer_suggest="bzlib lzo zlib"
1823 matroska_muxer_select="riffenc"
1824 mmf_muxer_select="riffenc"
1825 mov_demuxer_select="riffdec"
1826 mov_demuxer_suggest="zlib"
1827 mov_muxer_select="riffenc rtpenc_chain"
1828 mp3_demuxer_select="mpegaudio_parser"
1829 mp4_muxer_select="mov_muxer"
1830 mpegts_muxer_select="adts_muxer latm_muxer"
1831 mpegtsraw_demuxer_select="mpegts_demuxer"
1832 mxf_d10_muxer_select="mxf_muxer"
1833 nut_muxer_select="riffenc"
1834 nuv_demuxer_select="riffdec"
1835 ogg_demuxer_select="golomb"
1836 psp_muxer_select="mov_muxer"
1837 rtp_demuxer_select="sdp_demuxer"
1838 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1839 rtsp_demuxer_select="http_protocol rtpdec"
1840 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
1841 sap_demuxer_select="sdp_demuxer"
1842 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
1843 sdp_demuxer_select="rtpdec"
1844 smoothstreaming_muxer_select="ismv_muxer"
1845 spdif_muxer_select="aac_parser"
1846 tak_demuxer_select="tak_parser"
1847 tg2_muxer_select="mov_muxer"
1848 tgp_muxer_select="mov_muxer"
1849 w64_demuxer_select="wav_demuxer"
1850 wav_demuxer_select="riffdec"
1851 wav_muxer_select="riffenc"
1852 webm_muxer_select="riffenc"
1853 wtv_demuxer_select="riffdec"
1854 xmv_demuxer_select="riffdec"
1855 xwma_demuxer_select="riffdec"
1856
1857 # indevs / outdevs
1858 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1859 alsa_outdev_deps="alsa_asoundlib_h"
1860 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1861 dv1394_indev_deps="dv1394"
1862 dv1394_indev_select="dv_demuxer"
1863 fbdev_indev_deps="linux_fb_h"
1864 jack_indev_deps="jack_jack_h pthreads"
1865 libcdio_indev_deps="libcdio"
1866 libdc1394_indev_deps="libdc1394"
1867 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1868 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1869 pulse_indev_deps="libpulse"
1870 sndio_indev_deps="sndio_h"
1871 sndio_outdev_deps="sndio_h"
1872 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1873 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1874 vfwcap_indev_extralibs="-lavicap32"
1875 x11grab_indev_deps="x11grab XShmCreateImage"
1876
1877 # protocols
1878 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1879 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1880 ffrtmpcrypt_protocol_select="tcp_protocol"
1881 ffrtmphttp_protocol_deps="!librtmp_protocol"
1882 ffrtmphttp_protocol_select="http_protocol"
1883 gopher_protocol_select="network"
1884 httpproxy_protocol_select="tcp_protocol"
1885 http_protocol_select="tcp_protocol"
1886 https_protocol_select="tls_protocol"
1887 librtmp_protocol_deps="librtmp"
1888 librtmpe_protocol_deps="librtmp"
1889 librtmps_protocol_deps="librtmp"
1890 librtmpt_protocol_deps="librtmp"
1891 librtmpte_protocol_deps="librtmp"
1892 mmsh_protocol_select="http_protocol"
1893 mmst_protocol_select="network"
1894 rtmp_protocol_deps="!librtmp_protocol"
1895 rtmp_protocol_select="tcp_protocol"
1896 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1897 rtmps_protocol_deps="!librtmp_protocol"
1898 rtmps_protocol_select="tls_protocol"
1899 rtmpt_protocol_select="ffrtmphttp_protocol"
1900 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1901 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1902 rtp_protocol_select="udp_protocol"
1903 sctp_protocol_deps="struct_sctp_event_subscribe"
1904 sctp_protocol_select="network"
1905 srtp_protocol_select="rtp_protocol"
1906 tcp_protocol_select="network"
1907 tls_protocol_deps_any="openssl gnutls"
1908 tls_protocol_select="tcp_protocol"
1909 udp_protocol_select="network"
1910 unix_protocol_deps="sys_un_h"
1911 unix_protocol_select="network"
1912
1913 # filters
1914 blackframe_filter_deps="gpl"
1915 boxblur_filter_deps="gpl"
1916 cropdetect_filter_deps="gpl"
1917 delogo_filter_deps="gpl"
1918 drawtext_filter_deps="libfreetype"
1919 frei0r_filter_deps="frei0r dlopen strtok_r"
1920 frei0r_filter_extralibs='$ldl'
1921 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1922 frei0r_src_filter_extralibs='$ldl'
1923 hqdn3d_filter_deps="gpl"
1924 interlace_filter_deps="gpl"
1925 resample_filter_deps="avresample"
1926 ocv_filter_deps="libopencv"
1927 scale_filter_deps="swscale"
1928 yadif_filter_deps="gpl"
1929
1930 # libraries
1931 avcodec_deps="avutil"
1932 avdevice_deps="avutil avcodec avformat"
1933 avfilter_deps="avutil"
1934 avformat_deps="avutil avcodec"
1935 avresample_deps="avutil"
1936 swscale_deps="avutil"
1937
1938 # programs
1939 avconv_deps="avcodec avfilter avformat avresample swscale"
1940 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
1941                fps_filter null_filter resample_filter scale_filter
1942                setpts_filter trim_filter"
1943 avplay_deps="avcodec avformat avresample swscale sdl"
1944 avplay_select="rdft"
1945 avprobe_deps="avcodec avformat"
1946 avserver_deps="avformat fork !shared"
1947 avserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
1948 avserver_extralibs='$ldl'
1949
1950 doc_deps="texi2html"
1951
1952 # default parameters
1953
1954 logfile="config.log"
1955
1956 # installation paths
1957 prefix_default="/usr/local"
1958 bindir_default='${prefix}/bin'
1959 datadir_default='${prefix}/share/avconv'
1960 docdir_default='${prefix}/share/doc/libav'
1961 incdir_default='${prefix}/include'
1962 libdir_default='${prefix}/lib'
1963 mandir_default='${prefix}/share/man'
1964 shlibdir_default="$libdir_default"
1965
1966 # toolchain
1967 ar_default="ar"
1968 cc_default="gcc"
1969 host_cc_default="gcc"
1970 cp_f="cp -f"
1971 ln_s="ln -s -f"
1972 nm_default="nm -g"
1973 objformat="elf"
1974 pkg_config_default=pkg-config
1975 ranlib="ranlib"
1976 yasmexe="yasm"
1977
1978 nogas=":"
1979
1980 # machine
1981 arch_default=$(uname -m)
1982 cpu="generic"
1983
1984 # OS
1985 target_os_default=$(tolower $(uname -s))
1986 host_os=$target_os_default
1987
1988 # configurable options
1989 enable $LIBRARY_LIST $PROGRAM_LIST
1990
1991 enable asm
1992 enable debug
1993 enable doc
1994 enable optimizations
1995 enable safe_bitstream_reader
1996 enable static
1997 enable swscale_alpha
1998
1999 # By default, enable only those hwaccels that have no external dependencies.
2000 enable dxva2 vdpau
2001
2002 # build settings
2003 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2004 LIBPREF="lib"
2005 LIBSUF=".a"
2006 FULLNAME='$(NAME)$(BUILDSUF)'
2007 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2008 SLIBPREF="lib"
2009 SLIBSUF=".so"
2010 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2011 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2012 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2013 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2014 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2015 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2016
2017 asflags_filter=echo
2018 cflags_filter=echo
2019 ldflags_filter=echo
2020
2021 AS_C='-c'
2022 AS_O='-o $@'
2023 CC_C='-c'
2024 CC_E='-E -o $@'
2025 CC_O='-o $@'
2026 LD_O='-o $@'
2027 LD_LIB='-l%'
2028 LD_PATH='-L'
2029 HOSTCC_C='-c'
2030 HOSTCC_O='-o $@'
2031 HOSTLD_O='-o $@'
2032
2033 host_cflags='-O3 -g'
2034 host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
2035 host_libs='-lm'
2036 host_cflags_filter=echo
2037 host_ldflags_filter=echo
2038
2039 target_path='$(CURDIR)'
2040
2041 # since the object filename is not given with the -MM flag, the compiler
2042 # is only able to print the basename, and we must add the path ourselves
2043 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2044 DEPFLAGS='-MM'
2045
2046 # find source path
2047 if test -f configure; then
2048     source_path=.
2049 else
2050     source_path=$(cd $(dirname "$0"); pwd)
2051     echo "$source_path" | grep -q '[[:blank:]]' &&
2052         die "Out of tree builds are impossible with whitespace in source path."
2053     test -e "$source_path/config.h" &&
2054         die "Out of tree builds are impossible with config.h in source dir."
2055 fi
2056
2057 for v in "$@"; do
2058     r=${v#*=}
2059     l=${v%"$r"}
2060     r=$(sh_quote "$r")
2061     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2062 done
2063
2064 find_things(){
2065     thing=$1
2066     pattern=$2
2067     file=$source_path/$3
2068     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2069 }
2070
2071 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2072 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2073 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2074 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2075 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2076 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2077 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2078 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2079 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2080 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2081 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2082
2083 ALL_COMPONENTS="
2084     $BSF_LIST
2085     $DECODER_LIST
2086     $DEMUXER_LIST
2087     $ENCODER_LIST
2088     $FILTER_LIST
2089     $HWACCEL_LIST
2090     $INDEV_LIST
2091     $MUXER_LIST
2092     $OUTDEV_LIST
2093     $PARSER_LIST
2094     $PROTOCOL_LIST
2095 "
2096
2097 for n in $COMPONENT_LIST; do
2098     v=$(toupper ${n%s})_LIST
2099     eval enable \$$v
2100     eval ${n}_if_any="\$$v"
2101 done
2102
2103 enable $ARCH_EXT_LIST
2104
2105 die_unknown(){
2106     echo "Unknown option \"$1\"."
2107     echo "See $0 --help for available options."
2108     exit 1
2109 }
2110
2111 print_3_columns() {
2112     cat | tr ' ' '\n' | sort | pr -r -3 -t
2113 }
2114
2115 show_list() {
2116     suffix=_$1
2117     shift
2118     echo $* | sed s/$suffix//g | print_3_columns
2119     exit 0
2120 }
2121
2122 rand_list(){
2123     IFS=', '
2124     set -- $*
2125     unset IFS
2126     for thing; do
2127         comp=${thing%:*}
2128         prob=${thing#$comp}
2129         prob=${prob#:}
2130         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2131         echo "prob ${prob:-0.5}"
2132         printf '%s\n' $comp
2133     done
2134 }
2135
2136 do_random(){
2137     action=$1
2138     shift
2139     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2140     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2141 }
2142
2143 for opt do
2144     optval="${opt#*=}"
2145     case "$opt" in
2146         --extra-ldflags=*)
2147             add_ldflags $optval
2148         ;;
2149         --extra-libs=*)
2150             add_extralibs $optval
2151         ;;
2152         --disable-devices)
2153             disable $INDEV_LIST $OUTDEV_LIST
2154         ;;
2155         --enable-debug=*)
2156             debuglevel="$optval"
2157         ;;
2158         --disable-programs)
2159             disable $PROGRAM_LIST
2160         ;;
2161         --disable-everything)
2162             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2163         ;;
2164         --disable-all)
2165             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2166             disable $LIBRARY_LIST $PROGRAM_LIST doc
2167         ;;
2168         --enable-random|--disable-random)
2169             action=${opt%%-random}
2170             do_random ${action#--} $COMPONENT_LIST
2171         ;;
2172         --enable-random=*|--disable-random=*)
2173             action=${opt%%-random=*}
2174             do_random ${action#--} $optval
2175         ;;
2176         --enable-*=*|--disable-*=*)
2177             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2178             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2179             eval list=\$$(toupper $thing)_LIST
2180             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2181             $action $(filter "$name" $list)
2182         ;;
2183         --enable-?*|--disable-?*)
2184             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2185             if is_in $option $COMPONENT_LIST; then
2186                 test $action = disable && action=unset
2187                 eval $action \$$(toupper ${option%s})_LIST
2188             elif is_in $option $CMDLINE_SELECT; then
2189                 $action $option
2190             else
2191                 die_unknown $opt
2192             fi
2193         ;;
2194         --list-*)
2195             NAME="${opt#--list-}"
2196             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2197             NAME=${NAME%s}
2198             eval show_list $NAME \$$(toupper $NAME)_LIST
2199         ;;
2200         --help|-h) show_help
2201         ;;
2202         *)
2203             optname="${opt%%=*}"
2204             optname="${optname#--}"
2205             optname=$(echo "$optname" | sed 's/-/_/g')
2206             if is_in $optname $CMDLINE_SET; then
2207                 eval $optname='$optval'
2208             elif is_in $optname $CMDLINE_APPEND; then
2209                 append $optname "$optval"
2210             else
2211                 die_unknown $opt
2212             fi
2213         ;;
2214     esac
2215 done
2216
2217 disabled logging && logfile=/dev/null
2218
2219 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2220 set >> $logfile
2221
2222 test -n "$cross_prefix" && enable cross_compile
2223
2224 if enabled cross_compile; then
2225     test -n "$arch" && test -n "$target_os" ||
2226         die "Must specify target arch and OS when cross-compiling"
2227 fi
2228
2229 ar_default="${cross_prefix}${ar_default}"
2230 cc_default="${cross_prefix}${cc_default}"
2231 nm_default="${cross_prefix}${nm_default}"
2232 pkg_config_default="${cross_prefix}${pkg_config_default}"
2233 ranlib="${cross_prefix}${ranlib}"
2234
2235 sysinclude_default="${sysroot}/usr/include"
2236
2237 case "$toolchain" in
2238     clang-asan)
2239         cc_default="clang"
2240         add_cflags  -fsanitize=address
2241         add_ldflags -fsanitize=address
2242     ;;
2243     clang-tsan)
2244         cc_default="clang"
2245         add_cflags  -fsanitize=thread -pie
2246         add_ldflags -fsanitize=thread -pie
2247     ;;
2248     gcc-asan)
2249         cc_default="gcc"
2250         add_cflags  -fsanitize=address
2251         add_ldflags -fsanitize=address
2252     ;;
2253     gcc-tsan)
2254         cc_default="gcc"
2255         add_cflags  -fsanitize=thread -pie -fPIC
2256         add_ldflags -fsanitize=thread -pie -fPIC
2257     ;;
2258     valgrind-massif)
2259         target_exec_default="valgrind"
2260         target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2261     ;;
2262     valgrind-memcheck)
2263         target_exec_default="valgrind"
2264         target_exec_args="--track-origins=yes --leak-check=full"
2265     ;;
2266     msvc)
2267         cc_default="c99wrap cl"
2268         ld_default="c99wrap link"
2269         nm_default="dumpbin -symbols"
2270         ar_default="lib"
2271         target_os_default="win32"
2272     ;;
2273     icl)
2274         cc_default="c99wrap -noconv icl"
2275         ld_default="c99wrap xilink"
2276         nm_default="dumpbin -symbols"
2277         ar_default="xilib"
2278         target_os_default="win32"
2279     ;;
2280     gcov)
2281         add_cflags  -fprofile-arcs -ftest-coverage
2282         add_ldflags -fprofile-arcs -ftest-coverage
2283     ;;
2284     ?*)
2285         die "Unknown toolchain $toolchain"
2286     ;;
2287 esac
2288
2289 set_default arch cc pkg_config sysinclude target_exec target_os
2290 enabled cross_compile || host_cc_default=$cc
2291 set_default host_cc
2292
2293 if ! $pkg_config --version >/dev/null 2>&1; then
2294     warn "$pkg_config not found, library detection may fail."
2295     pkg_config=false
2296 fi
2297
2298 exesuf() {
2299     case $1 in
2300         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2301     esac
2302 }
2303
2304 EXESUF=$(exesuf $target_os)
2305 HOSTEXESUF=$(exesuf $host_os)
2306
2307 # set temporary file name
2308 : ${TMPDIR:=$TEMPDIR}
2309 : ${TMPDIR:=$TMP}
2310 : ${TMPDIR:=/tmp}
2311
2312 if ! check_cmd mktemp -u XXXXXX; then
2313     # simple replacement for missing mktemp
2314     # NOT SAFE FOR GENERAL USE
2315     mktemp(){
2316         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2317     }
2318 fi
2319
2320 tmpfile(){
2321     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2322         (set -C; exec > $tmp) 2>/dev/null ||
2323         die "Unable to create temporary file in $TMPDIR."
2324     append TMPFILES $tmp
2325     eval $1=$tmp
2326 }
2327
2328 trap 'rm -f -- $TMPFILES' EXIT
2329
2330 tmpfile TMPASM .asm
2331 tmpfile TMPC   .c
2332 tmpfile TMPE   $EXESUF
2333 tmpfile TMPH   .h
2334 tmpfile TMPO   .o
2335 tmpfile TMPS   .S
2336 tmpfile TMPSH  .sh
2337 tmpfile TMPV   .ver
2338
2339 unset -f mktemp
2340
2341 chmod +x $TMPE
2342
2343 # make sure we can execute files in $TMPDIR
2344 cat > $TMPSH 2>> $logfile <<EOF
2345 #! /bin/sh
2346 EOF
2347 chmod +x $TMPSH >> $logfile 2>&1
2348 if ! $TMPSH >> $logfile 2>&1; then
2349     cat <<EOF
2350 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2351 variable to another directory and make sure that it is not mounted noexec.
2352 EOF
2353     die "Sanity test failed."
2354 fi
2355
2356 ccc_flags(){
2357     for flag; do
2358         case $flag in
2359             -std=c99)           echo -c99                       ;;
2360             -mcpu=*)            echo -arch ${flag#*=}           ;;
2361             -mieee)             echo -ieee                      ;;
2362             -O*|-fast)          echo $flag                      ;;
2363             -fno-math-errno)    echo -assume nomath_errno       ;;
2364             -g)                 echo -g3                        ;;
2365             -Wall)              echo -msg_enable level2         ;;
2366             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2367             -Wl,*)              echo $flag                      ;;
2368             -f*|-W*)                                            ;;
2369             *)                  echo $flag                      ;;
2370         esac
2371    done
2372 }
2373
2374 msvc_common_flags(){
2375     for flag; do
2376         case $flag in
2377             # In addition to specifying certain flags under the compiler
2378             # specific filters, they must be specified here as well or else the
2379             # generic catch all at the bottom will print the original flag.
2380             -Wall)                ;;
2381             -std=c99)             ;;
2382             # Common flags
2383             -fomit-frame-pointer) ;;
2384             -g)                   echo -Z7 ;;
2385             -fno-math-errno)      ;;
2386             -fno-common)          ;;
2387             -fno-signed-zeros)    ;;
2388             -fPIC)                ;;
2389             -mthumb)              ;;
2390             -march=*)             ;;
2391             -lz)                  echo zlib.lib ;;
2392             -lavifil32)           echo vfw32.lib ;;
2393             -lavicap32)           echo vfw32.lib user32.lib ;;
2394             -l*)                  echo ${flag#-l}.lib ;;
2395             *)                    echo $flag ;;
2396         esac
2397     done
2398 }
2399
2400 msvc_flags(){
2401     msvc_common_flags "$@"
2402     for flag; do
2403         case $flag in
2404             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2405                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2406                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2407                                        -wd4996 -wd4273 ;;
2408         esac
2409     done
2410 }
2411
2412 icl_flags(){
2413     msvc_common_flags "$@"
2414     for flag; do
2415         case $flag in
2416             # Despite what Intel's documentation says -Wall, which is supported
2417             # on Windows, does enable remarks so disable them here.
2418             -Wall)                echo $flag -Qdiag-disable:remark ;;
2419             -std=c99)             echo -Qstd=c99 ;;
2420         esac
2421     done
2422 }
2423
2424 pgi_flags(){
2425     for flag; do
2426         case $flag in
2427             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2428             -fomit-frame-pointer) echo -Mnoframe ;;
2429             -g)                   echo -gopt ;;
2430             *)                    echo $flag ;;
2431         esac
2432     done
2433 }
2434
2435 suncc_flags(){
2436     for flag; do
2437         case $flag in
2438             -march=*|-mcpu=*)
2439                 case "${flag#*=}" in
2440                     native)                   echo -xtarget=native       ;;
2441                     v9|niagara)               echo -xarch=sparc          ;;
2442                     ultrasparc)               echo -xarch=sparcvis       ;;
2443                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2444                     i586|pentium)             echo -xchip=pentium        ;;
2445                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2446                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2447                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2448                     pentium4*)          echo -xtarget=pentium4           ;;
2449                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2450                     *-sse3)             echo -xarch=sse3                 ;;
2451                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2452                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2453                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2454                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2455                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2456                     k8|opteron|athlon64|athlon-fx)
2457                                                echo -xarch=sse2a         ;;
2458                     athlon*)                   echo -xarch=pentium_proa  ;;
2459                 esac
2460                 ;;
2461             -std=c99)             echo -xc99              ;;
2462             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2463             -fPIC)                echo -KPIC -xcode=pic32 ;;
2464             -W*,*)                echo $flag              ;;
2465             -f*-*|-W*|-mimpure-text)                      ;;
2466             -shared)              echo -G                 ;;
2467             *)                    echo $flag              ;;
2468         esac
2469     done
2470 }
2471
2472 tms470_flags(){
2473     for flag; do
2474         case $flag in
2475             -march=*|-mcpu=*)
2476                 case "${flag#*=}" in
2477                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2478                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2479                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2480                     armv6*|arm11*)          echo -mv=6   ;;
2481                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2482                                             echo -mv=5e  ;;
2483                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2484                 esac
2485                 ;;
2486             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2487             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2488             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2489             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2490             -msoft-float)   echo --float_support=vfplib       ;;
2491             -O[0-3]|-mf=*)  echo $flag                        ;;
2492             -g)             echo -g -mn                       ;;
2493             -pds=*)         echo $flag                        ;;
2494             -D*|-I*)        echo $flag                        ;;
2495             --gcc|--abi=*)  echo $flag                        ;;
2496             -me)            echo $flag                        ;;
2497         esac
2498     done
2499 }
2500
2501 probe_cc(){
2502     pfx=$1
2503     _cc=$2
2504
2505     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2506     unset _ld_o _ldflags _ld_lib _ld_path
2507     unset _depflags _DEPCMD _DEPFLAGS
2508     _flags_filter=echo
2509
2510     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2511         _type=llvm_gcc
2512         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2513         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2514         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2515         _cflags_speed='-O3'
2516         _cflags_size='-Os'
2517     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2518         _type=gcc
2519         gcc_version=$($_cc --version | head -n1)
2520         gcc_basever=$($_cc -dumpversion)
2521         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2522         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2523         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2524         if ! $_cc -dumpversion | grep -q '^2\.'; then
2525             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2526         fi
2527         _cflags_speed='-O3'
2528         _cflags_size='-Os'
2529     elif $_cc --version 2>/dev/null | grep -q ^icc; then
2530         _type=icc
2531         _ident=$($_cc --version | head -n1)
2532         _depflags='-MMD'
2533         _cflags_speed='-O3'
2534         _cflags_size='-Os'
2535         _cflags_noopt='-O1'
2536     elif $_cc -v 2>&1 | grep -q xlc; then
2537         _type=xlc
2538         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2539         _cflags_speed='-O5'
2540         _cflags_size='-O5 -qcompact'
2541     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2542         _type=ccc
2543         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2544         _DEPFLAGS='-M'
2545         _cflags_speed='-fast'
2546         _cflags_size='-O1'
2547         _flags_filter=ccc_flags
2548     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2549         test -d "$sysroot" || die "No valid sysroot specified."
2550         _type=armcc
2551         _ident=$($_cc --vsn | head -n1)
2552         armcc_conf="$PWD/armcc.conf"
2553         $_cc --arm_linux_configure                 \
2554              --arm_linux_config_file="$armcc_conf" \
2555              --configure_sysroot="$sysroot"        \
2556              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2557              die "Error creating armcc configuration file."
2558         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2559         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2560         as_default="${cross_prefix}gcc"
2561         _depflags='-MMD'
2562         _cflags_speed='-O3'
2563         _cflags_size='-Os'
2564     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2565         _type=tms470
2566         _ident=$($_cc -version | head -n1 | tr -s ' ')
2567         _flags='--gcc --abi=eabi -me'
2568         _cc_e='-ppl -fe=$@'
2569         _cc_o='-fe=$@'
2570         _depflags='-ppa -ppd=$(@:.o=.d)'
2571         _cflags_speed='-O3 -mf=5'
2572         _cflags_size='-O3 -mf=2'
2573         _flags_filter=tms470_flags
2574     elif $_cc -v 2>&1 | grep -q clang; then
2575         _type=clang
2576         _ident=$($_cc --version | head -n1)
2577         _depflags='-MMD'
2578         _cflags_speed='-O3'
2579         _cflags_size='-Os'
2580     elif $_cc -V 2>&1 | grep -q Sun; then
2581         _type=suncc
2582         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2583         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2584         _DEPFLAGS='-xM1 -xc99'
2585         _ldflags='-std=c99'
2586         _cflags_speed='-O5'
2587         _cflags_size='-O5 -xspace'
2588         _flags_filter=suncc_flags
2589     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2590         _type=pathscale
2591         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2592         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2593         _cflags_speed='-O2'
2594         _cflags_size='-Os'
2595         _flags_filter='filter_out -Wdisabled-optimization'
2596     elif $_cc -v 2>&1 | grep -q Open64; then
2597         _type=open64
2598         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2599         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2600         _cflags_speed='-O2'
2601         _cflags_size='-Os'
2602         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2603     elif $_cc -V 2>&1 | grep -q Portland; then
2604         _type=pgi
2605         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2606         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2607         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2608         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2609         _cflags_noopt="-O1"
2610         _flags_filter=pgi_flags
2611     elif $_cc 2>&1 | grep -q Microsoft; then
2612         _type=msvc
2613         _ident=$($cc 2>&1 | head -n1)
2614         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2615         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2616         _cflags_speed="-O2"
2617         _cflags_size="-O1"
2618         # Nonstandard output options, to avoid msys path conversion issues.
2619         # Relies on wrapper to remap it.
2620         if $_cc 2>&1 | grep -q Linker; then
2621             _ld_o='-out $@'
2622         else
2623             _ld_o='-Fe$@'
2624         fi
2625         _cc_o='-Fo $@'
2626         _cc_e='-P -Fi $@'
2627         _flags_filter=msvc_flags
2628         _ld_lib='lib%.a'
2629         _ld_path='-libpath:'
2630         _flags='-nologo'
2631         _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2632         if [ $pfx = hostcc ]; then
2633             append _cflags -Dsnprintf=_snprintf
2634         fi
2635     elif $_cc 2>&1 | grep -q Intel; then
2636         _type=icl
2637         _ident=$($cc 2>&1 | head -n1)
2638         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
2639         # Not only is O3 broken on 13.x+ but it is slower on all previous
2640         # versions (tested) as well.
2641         _cflags_speed="-O2"
2642         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
2643         # Nonstandard output options, to avoid msys path conversion issues.
2644         # Relies on wrapper to remap it.
2645         if $_cc 2>&1 | grep -q Linker; then
2646             _ld_o='-out $@'
2647         else
2648             _ld_o='-Fe$@'
2649         fi
2650         _cc_o='-Fo $@'
2651         _cc_e='-P'
2652         _flags_filter=icl_flags
2653         _ld_lib='lib%.a'
2654         _ld_path='-libpath:'
2655         # -Qdiag-error to make icl error when seeing certain unknown arguments
2656         _flags='-nologo -Qdiag-error:4044,10157'
2657         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
2658         # with MSVC which enables it by default.
2659         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
2660         if [ $pfx = hostcc ]; then
2661             append _cflags -Dsnprintf=_snprintf
2662         fi
2663     fi
2664
2665     eval ${pfx}_type=\$_type
2666     eval ${pfx}_ident=\$_ident
2667 }
2668
2669 set_ccvars(){
2670     eval ${1}_C=\${_cc_c-\${${1}_C}}
2671     eval ${1}_E=\${_cc_e-\${${1}_E}}
2672     eval ${1}_O=\${_cc_o-\${${1}_O}}
2673
2674     if [ -n "$_depflags" ]; then
2675         eval ${1}_DEPFLAGS=\$_depflags
2676     else
2677         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2678         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2679         eval DEP${1}FLAGS=\$_flags
2680     fi
2681 }
2682
2683 probe_cc cc "$cc"
2684 cflags_filter=$_flags_filter
2685 cflags_speed=$_cflags_speed
2686 cflags_size=$_cflags_size
2687 cflags_noopt=$_cflags_noopt
2688 add_cflags $_flags $_cflags
2689 cc_ldflags=$_ldflags
2690 set_ccvars CC
2691
2692 probe_cc hostcc "$host_cc"
2693 host_cflags_filter=$_flags_filter
2694 add_host_cflags  $_flags $_cflags
2695 set_ccvars HOSTCC
2696
2697 test -n "$cc_type" && enable $cc_type ||
2698     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2699
2700 : ${as_default:=$cc}
2701 : ${dep_cc_default:=$cc}
2702 : ${ld_default:=$cc}
2703 : ${host_ld_default:=$host_cc}
2704 set_default ar as dep_cc ld host_ld
2705
2706 probe_cc as "$as"
2707 asflags_filter=$_flags_filter
2708 add_asflags $_flags $_cflags
2709 set_ccvars AS
2710
2711 probe_cc ld "$ld"
2712 ldflags_filter=$_flags_filter
2713 add_ldflags $_flags $_ldflags
2714 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2715 LD_O=${_ld_o-$LD_O}
2716 LD_LIB=${_ld_lib-$LD_LIB}
2717 LD_PATH=${_ld_path-$LD_PATH}
2718
2719 probe_cc hostld "$host_ld"
2720 host_ldflags_filter=$_flags_filter
2721 add_host_ldflags $_flags $_ldflags
2722 HOSTLD_O=${_ld_o-$HOSTLD_O}
2723
2724 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2725     probe_cc depcc "$dep_cc"
2726     CCDEP=${_DEPCMD:-$DEPCMD}
2727     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2728     DEPCCFLAGS=$_flags
2729 fi
2730
2731 if $ar 2>&1 | grep -q Microsoft; then
2732     arflags="-nologo"
2733     ar_o='-out:$@'
2734 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
2735     arflags="rq"
2736     ar_o='$@'
2737 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
2738     arflags='-Xany -r -c'
2739     ar_o='$@'
2740 else
2741     arflags="rc"
2742     ar_o='$@'
2743 fi
2744
2745 add_cflags $extra_cflags
2746 add_asflags $extra_cflags
2747
2748 if test -n "$sysroot"; then
2749     case "$cc_type" in
2750         gcc|llvm_gcc|clang)
2751             add_cppflags --sysroot="$sysroot"
2752             add_ldflags --sysroot="$sysroot"
2753         ;;
2754         tms470)
2755             add_cppflags -I"$sysinclude"
2756             add_ldflags  --sysroot="$sysroot"
2757         ;;
2758     esac
2759 fi
2760
2761 if test "$cpu" = host; then
2762     enabled cross_compile &&
2763         die "--cpu=host makes no sense when cross-compiling."
2764
2765     case "$cc_type" in
2766         gcc|llvm_gcc)
2767             check_native(){
2768                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2769                 sed -n "/cc1.*$1=/{
2770                             s/.*$1=\\([^ ]*\\).*/\\1/
2771                             p
2772                             q
2773                         }" $TMPE
2774             }
2775             cpu=$(check_native -march || check_native -mcpu)
2776         ;;
2777     esac
2778
2779     test "${cpu:-host}" = host &&
2780         die "--cpu=host not supported with compiler $cc"
2781 fi
2782
2783 # Deal with common $arch aliases
2784 case "$arch" in
2785     aarch64|arm64)
2786         arch="aarch64"
2787     ;;
2788     arm*)
2789         arch="arm"
2790     ;;
2791     mips*|IP*)
2792         arch="mips"
2793     ;;
2794     parisc*|hppa*)
2795         arch="parisc"
2796     ;;
2797     "Power Macintosh"|ppc*|powerpc*)
2798         arch="ppc"
2799     ;;
2800     s390|s390x)
2801         arch="s390"
2802     ;;
2803     sh4|sh)
2804         arch="sh4"
2805     ;;
2806     sun4u|sparc*)
2807         arch="sparc"
2808     ;;
2809     tilegx|tile-gx)
2810         arch="tilegx"
2811     ;;
2812     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2813         arch="x86"
2814     ;;
2815 esac
2816
2817 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2818 enable $arch
2819
2820 # Add processor-specific flags
2821 if enabled aarch64; then
2822
2823     case $cpu in
2824         armv*)
2825             cpuflags="-march=$cpu"
2826         ;;
2827         *)
2828             cpuflags="-mcpu=$cpu"
2829         ;;
2830     esac
2831
2832 elif enabled alpha; then
2833
2834     cpuflags="-mcpu=$cpu"
2835
2836 elif enabled arm; then
2837
2838     check_arm_arch() {
2839         check_cpp_condition stddef.h \
2840             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
2841             $cpuflags
2842     }
2843
2844     probe_arm_arch() {
2845         if   check_arm_arch 4;        then echo armv4;
2846         elif check_arm_arch 4T;       then echo armv4t;
2847         elif check_arm_arch 5;        then echo armv5;
2848         elif check_arm_arch 5E;       then echo armv5e;
2849         elif check_arm_arch 5T;       then echo armv5t;
2850         elif check_arm_arch 5TE;      then echo armv5te;
2851         elif check_arm_arch 5TEJ;     then echo armv5te;
2852         elif check_arm_arch 6;        then echo armv6;
2853         elif check_arm_arch 6J;       then echo armv6j;
2854         elif check_arm_arch 6K;       then echo armv6k;
2855         elif check_arm_arch 6Z;       then echo armv6z;
2856         elif check_arm_arch 6ZK;      then echo armv6zk;
2857         elif check_arm_arch 6T2;      then echo armv6t2;
2858         elif check_arm_arch 7;        then echo armv7;
2859         elif check_arm_arch 7A  7_A;  then echo armv7-a;
2860         elif check_arm_arch 7R  7_R;  then echo armv7-r;
2861         elif check_arm_arch 7M  7_M;  then echo armv7-m;
2862         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
2863         elif check_arm_arch 8A  8_A;  then echo armv8-a;
2864         fi
2865     }
2866
2867     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
2868
2869     case $cpu in
2870         armv*)
2871             cpuflags="-march=$cpu"
2872             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2873         ;;
2874         *)
2875             cpuflags="-mcpu=$cpu"
2876             case $cpu in
2877                 cortex-a*)                               subarch=armv7a  ;;
2878                 cortex-r*)                               subarch=armv7r  ;;
2879                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2880                 arm11*)                                  subarch=armv6   ;;
2881                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2882                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2883                 *)                             subarch=$(probe_arm_arch) ;;
2884             esac
2885         ;;
2886     esac
2887
2888     case "$subarch" in
2889         armv5t*)    enable fast_clz                ;;
2890         armv[6-8]*) enable fast_clz fast_unaligned ;;
2891     esac
2892
2893 elif enabled avr32; then
2894
2895     case $cpu in
2896         ap7[02]0[0-2])
2897             subarch="avr32_ap"
2898             cpuflags="-mpart=$cpu"
2899         ;;
2900         ap)
2901             subarch="avr32_ap"
2902             cpuflags="-march=$cpu"
2903         ;;
2904         uc3[ab]*)
2905             subarch="avr32_uc"
2906             cpuflags="-mcpu=$cpu"
2907         ;;
2908         uc)
2909             subarch="avr32_uc"
2910             cpuflags="-march=$cpu"
2911         ;;
2912     esac
2913
2914 elif enabled bfin; then
2915
2916     cpuflags="-mcpu=$cpu"
2917
2918 elif enabled mips; then
2919
2920     cpuflags="-march=$cpu"
2921
2922 elif enabled ppc; then
2923
2924     case $(tolower $cpu) in
2925         601|ppc601|powerpc601)
2926             cpuflags="-mcpu=601"
2927             disable altivec
2928         ;;
2929         603*|ppc603*|powerpc603*)
2930             cpuflags="-mcpu=603"
2931             disable altivec
2932         ;;
2933         604*|ppc604*|powerpc604*)
2934             cpuflags="-mcpu=604"
2935             disable altivec
2936         ;;
2937         g3|75*|ppc75*|powerpc75*)
2938             cpuflags="-mcpu=750"
2939             disable altivec
2940         ;;
2941         g4|745*|ppc745*|powerpc745*)
2942             cpuflags="-mcpu=7450"
2943         ;;
2944         74*|ppc74*|powerpc74*)
2945             cpuflags="-mcpu=7400"
2946         ;;
2947         g5|970|ppc970|powerpc970)
2948             cpuflags="-mcpu=970"
2949         ;;
2950         power[3-7]*)
2951             cpuflags="-mcpu=$cpu"
2952         ;;
2953         cell)
2954             cpuflags="-mcpu=cell"
2955             enable ldbrx
2956         ;;
2957         e500mc)
2958             cpuflags="-mcpu=e500mc"
2959             disable altivec
2960         ;;
2961         e500v2)
2962             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2963             disable altivec
2964         ;;
2965         e500)
2966             cpuflags="-mcpu=8540 -mhard-float"
2967             disable altivec
2968         ;;
2969     esac
2970
2971 elif enabled sparc; then
2972
2973     case $cpu in
2974         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
2975             cpuflags="-mcpu=$cpu"
2976             disable vis
2977         ;;
2978         ultrasparc*|niagara[234])
2979             cpuflags="-mcpu=$cpu"
2980         ;;
2981     esac
2982
2983 elif enabled x86; then
2984
2985     case $cpu in
2986         i[345]86|pentium)
2987             cpuflags="-march=$cpu"
2988             disable mmx
2989         ;;
2990         # targets that do NOT support nopl and conditional mov (cmov)
2991         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2992             cpuflags="-march=$cpu"
2993             disable i686
2994         ;;
2995         # targets that do support nopl and conditional mov (cmov)
2996         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*)
2997             cpuflags="-march=$cpu"
2998             enable i686
2999             enable fast_cmov
3000         ;;
3001         # targets that do support conditional mov but on which it's slow
3002         pentium4|pentium4m|prescott|nocona)
3003             cpuflags="-march=$cpu"
3004             enable i686
3005             disable fast_cmov
3006         ;;
3007     esac
3008
3009 fi
3010
3011 if [ "$cpu" != generic ]; then
3012     add_cflags  $cpuflags
3013     add_asflags $cpuflags
3014 fi
3015
3016 # compiler sanity check
3017 check_exec <<EOF
3018 int main(void){ return 0; }
3019 EOF
3020 if test "$?" != 0; then
3021     echo "$cc is unable to create an executable file."
3022     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3023         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3024         echo "Only do this if you know what cross compiling means."
3025     fi
3026     die "C compiler test failed."
3027 fi
3028
3029 add_cppflags -D_ISOC99_SOURCE
3030 check_cflags -std=c99
3031 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3032 #include <stdlib.h>
3033 EOF
3034 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3035 #include <stdlib.h>
3036 EOF
3037
3038 check_host_cflags -std=c99
3039 check_host_cflags -Wall
3040
3041 check_64bit(){
3042     arch32=$1
3043     arch64=$2
3044     expr=$3
3045     check_code cc "" "int test[2*($expr) - 1]" &&
3046         subarch=$arch64 || subarch=$arch32
3047 }
3048
3049 case "$arch" in
3050     aarch64|alpha|ia64)
3051         spic=$shared
3052     ;;
3053     mips)
3054         check_64bit mips mips64 '_MIPS_SIM > 1'
3055         spic=$shared
3056     ;;
3057     parisc)
3058         check_64bit parisc parisc64 'sizeof(void *) > 4'
3059         spic=$shared
3060     ;;
3061     ppc)
3062         check_64bit ppc ppc64 'sizeof(void *) > 4'
3063         spic=$shared
3064     ;;
3065     sparc)
3066         check_64bit sparc sparc64 'sizeof(void *) > 4'
3067         spic=$shared
3068     ;;
3069     x86)
3070         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3071         if test "$subarch" = "x86_64"; then
3072             spic=$shared
3073         fi
3074     ;;
3075 esac
3076
3077 enable $subarch
3078 enabled spic && enable_weak pic
3079
3080 # OS specific
3081 case $target_os in
3082     aix)
3083         SHFLAGS=-shared
3084         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3085         enabled shared && add_ldflags -Wl,-brtl
3086         ;;
3087     haiku)
3088         prefix_default="/boot/common"
3089         network_extralibs="-lnetwork"
3090         host_libs=
3091         ;;
3092     sunos)
3093         SHFLAGS='-shared -Wl,-h,$$(@F)'
3094         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3095         network_extralibs="-lsocket -lnsl"
3096         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3097         # When using suncc to build, the Solaris linker will mark
3098         # an executable with each instruction set encountered by
3099         # the Solaris assembler.  As our libraries contain their own
3100         # guards for processor-specific code, instead suppress
3101         # generation of the HWCAPS ELF section on Solaris x86 only.
3102         enabled_all suncc x86 &&
3103             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3104             add_ldflags -Wl,-M,mapfile
3105         nm_default='nm -P -g'
3106         ;;
3107     netbsd)
3108         disable symver
3109         oss_indev_extralibs="-lossaudio"
3110         oss_outdev_extralibs="-lossaudio"
3111         ;;
3112     openbsd|bitrig)
3113         disable symver
3114         SHFLAGS='-shared'
3115         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3116         SLIB_INSTALL_LINKS=
3117         oss_indev_extralibs="-lossaudio"
3118         oss_outdev_extralibs="-lossaudio"
3119         ;;
3120     dragonfly)
3121         disable symver
3122         ;;
3123     freebsd)
3124         ;;
3125     bsd/os)
3126         add_extralibs -lpoll -lgnugetopt
3127         ;;
3128     darwin)
3129         gas="gas-preprocessor.pl $cc"
3130         enabled ppc && add_asflags -force_cpusubtype_ALL
3131         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3132         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3133         add_ldflags -Wl,-dynamic,-search_paths_first
3134         SLIBSUF=".dylib"
3135         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3136         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3137         objformat="macho"
3138         enabled x86_64 && objformat="macho64"
3139         enabled_any pic shared ||
3140             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3141         ;;
3142     mingw32*)
3143         if test $target_os = "mingw32ce"; then
3144             disable network
3145         else
3146             target_os=mingw32
3147         fi
3148         LIBTARGET=i386
3149         if enabled x86_64; then
3150             LIBTARGET="i386:x86-64"
3151         elif enabled arm; then
3152             LIBTARGET=arm-wince
3153         fi
3154         check_ldflags -Wl,--nxcompat
3155         check_ldflags -Wl,--dynamicbase
3156         shlibdir_default="$bindir_default"
3157         SLIBPREF=""
3158         SLIBSUF=".dll"
3159         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3160         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3161         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)'
3162         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3163         SLIB_INSTALL_LINKS=
3164         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3165         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3166         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'
3167         objformat="win32"
3168         dlltool="${cross_prefix}dlltool"
3169         ranlib=:
3170         enable dos_paths
3171         ;;
3172     win32|win64)
3173         if enabled shared; then
3174             # Link to the import library instead of the normal static library
3175             # for shared libs.
3176             LD_LIB='%.lib'
3177             # Cannot build shared and static libs at the same time with MSVC.
3178             disable static
3179         fi
3180         shlibdir_default="$bindir_default"
3181         SLIBPREF=""
3182         SLIBSUF=".dll"
3183         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3184         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3185         SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3186         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3187         SLIB_INSTALL_LINKS=
3188         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3189         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3190         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3191         objformat="win32"
3192         ranlib=:
3193         enable dos_paths
3194         ;;
3195     cygwin*)
3196         target_os=cygwin
3197         shlibdir_default="$bindir_default"
3198         SLIBPREF="cyg"
3199         SLIBSUF=".dll"
3200         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3201         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3202         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3203         SLIB_INSTALL_LINKS=
3204         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3205         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3206         objformat="win32"
3207         enable dos_paths
3208         ;;
3209     *-dos|freedos|opendos)
3210         network_extralibs="-lsocket"
3211         objformat="coff"
3212         enable dos_paths
3213         add_cppflags -U__STRICT_ANSI__
3214         ;;
3215     linux)
3216         enable dv1394
3217         ;;
3218     irix*)
3219         target_os=irix
3220         ranlib="echo ignoring ranlib"
3221         ;;
3222     os/2*)
3223         ln_s="cp -f"
3224         objformat="aout"
3225         add_cppflags -D_GNU_SOURCE
3226         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3227         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3228         LIBSUF="_s.a"
3229         SLIBPREF=""
3230         SLIBSUF=".dll"
3231         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3232         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3233         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3234             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3235             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3236             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3237             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3238             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3239         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3240             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3241         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3242         enable dos_paths
3243         ;;
3244     gnu/kfreebsd)
3245         add_cppflags -D_BSD_SOURCE
3246         ;;
3247     gnu)
3248         ;;
3249     qnx)
3250         add_cppflags -D_QNX_SOURCE
3251         network_extralibs="-lsocket"
3252         ;;
3253     symbian)
3254         SLIBSUF=".dll"
3255         enable dos_paths
3256         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3257         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3258         add_ldflags -Wl,--target1-abs,--no-undefined \
3259                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3260                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3261         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3262                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3263                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3264         ;;
3265     osf1)
3266         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3267         ;;
3268     minix)
3269         ;;
3270     plan9)
3271         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3272                      -D_REENTRANT_SOURCE        \
3273                      -D_RESEARCH_SOURCE         \
3274                      -DFD_SETSIZE=96            \
3275                      -DHAVE_SOCK_OPTS
3276         add_compat strtod.o strtod=avpriv_strtod
3277         network_extralibs='-lbsd'
3278         exeobjs=compat/plan9/main.o
3279         disable avserver
3280         cp_f='cp'
3281         ;;
3282     none)
3283         ;;
3284     *)
3285         die "Unknown OS '$target_os'."
3286         ;;
3287 esac
3288
3289 # determine libc flavour
3290
3291 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3292 if check_cpp_condition features.h "defined __UCLIBC__"; then
3293     libc_type=uclibc
3294     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3295 elif check_cpp_condition features.h "defined __GLIBC__"; then
3296     libc_type=glibc
3297     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3298 # MinGW headers can be installed on Cygwin, so check for newlib first.
3299 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3300     libc_type=newlib
3301     add_cppflags -U__STRICT_ANSI__
3302 elif check_header _mingw.h; then
3303     libc_type=mingw
3304     check_cpp_condition _mingw.h \
3305         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3306             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3307         die "ERROR: MinGW runtime version must be >= 3.15."
3308     add_cppflags -U__STRICT_ANSI__
3309 elif check_func_headers stdlib.h _get_doserrno; then
3310     libc_type=msvcrt
3311     add_compat strtod.o strtod=avpriv_strtod
3312     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3313                                  _snprintf=avpriv_snprintf  \
3314                                  vsnprintf=avpriv_vsnprintf
3315     # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3316     # 0x601 by default unless something else is set by the user.
3317     # This can easily lead to us detecting functions only present
3318     # in such new versions and producing binaries requiring windows 7.0.
3319     # Therefore explicitly set the default to XP unless the user has
3320     # set something else on the command line.
3321     check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
3322 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3323     libc_type=klibc
3324 elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3325     libc_type=bionic
3326     add_compat strtod.o strtod=avpriv_strtod
3327 fi
3328
3329 test -n "$libc_type" && enable $libc_type
3330
3331 # hacks for compiler/libc/os combinations
3332
3333 if enabled_all tms470 glibc; then
3334     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3335     add_cppflags -D__USER_LABEL_PREFIX__=
3336     add_cppflags -D__builtin_memset=memset
3337     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3338     add_cflags   -pds=48    # incompatible redefinition of macro
3339 fi
3340
3341 if enabled_all ccc glibc; then
3342     add_ldflags -Wl,-z,now  # calls to libots crash without this
3343 fi
3344
3345 esc(){
3346     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3347 }
3348
3349 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3350
3351 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3352
3353 set_default $PATHS_LIST
3354 set_default nm
3355
3356 # we need to build at least one lib type
3357 if ! enabled_any static shared; then
3358     cat <<EOF
3359 At least one library type must be built.
3360 Specify --enable-static to build the static libraries or --enable-shared to
3361 build the shared libraries as well. To only build the shared libraries specify
3362 --disable-static in addition to --enable-shared.
3363 EOF
3364     exit 1;
3365 fi
3366
3367 die_license_disabled() {
3368     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3369 }
3370
3371 die_license_disabled gpl libcdio
3372 die_license_disabled gpl libx264
3373 die_license_disabled gpl libxavs
3374 die_license_disabled gpl libxvid
3375 die_license_disabled gpl x11grab
3376
3377 die_license_disabled nonfree libfaac
3378 die_license_disabled nonfree libfdk_aac
3379 die_license_disabled nonfree openssl
3380
3381 die_license_disabled version3 libopencore_amrnb
3382 die_license_disabled version3 libopencore_amrwb
3383 die_license_disabled version3 libvo_aacenc
3384 die_license_disabled version3 libvo_amrwbenc
3385
3386 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3387
3388 disabled optimizations || check_cflags -fomit-frame-pointer
3389
3390 enable_weak_pic() {
3391     disabled pic && return
3392     enable pic
3393     add_cppflags -DPIC
3394     case "$target_os" in
3395     mingw*|cygwin*)
3396         ;;
3397     *)
3398         add_cflags -fPIC
3399         ;;
3400     esac
3401     add_asflags  -fPIC
3402 }
3403
3404 enabled pic && enable_weak_pic
3405
3406 check_cc <<EOF || die "Symbol mangling check failed."
3407 int ff_extern;
3408 EOF
3409 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3410 extern_prefix=${sym%%ff_extern*}
3411
3412 check_cc <<EOF && enable_weak inline_asm
3413 void foo(void) { __asm__ volatile ("" ::); }
3414 EOF
3415
3416 _restrict=
3417 for restrict_keyword in restrict __restrict__ __restrict; do
3418     check_cc <<EOF && _restrict=$restrict_keyword && break
3419 void foo(char * $restrict_keyword p);
3420 EOF
3421 done
3422
3423 check_cc <<EOF && enable pragma_deprecated
3424 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3425 EOF
3426
3427 check_cc <<EOF && enable attribute_packed
3428 struct { int x; } __attribute__((packed)) x;
3429 EOF
3430
3431 check_cc <<EOF && enable attribute_may_alias
3432 union { int x; } __attribute__((may_alias)) x;
3433 EOF
3434
3435 check_cc <<EOF || die "endian test failed"
3436 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3437 EOF
3438 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3439
3440 check_inline_asm inline_asm_labels '"1:\n"'
3441
3442 if enabled alpha; then
3443
3444     check_cflags -mieee
3445
3446 elif enabled arm; then
3447
3448     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3449     enabled thumb && check_cflags -mthumb || check_cflags -marm
3450     nogas=die
3451
3452     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3453         enable vfp_args
3454     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3455         case "${cross_prefix:-$cc}" in
3456             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3457             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3458 __asm__ (".eabi_attribute 28, 1");
3459 int main(void) { return 0; }
3460 EOF
3461         esac
3462         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3463     fi
3464
3465     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3466     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3467     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3468     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3469     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3470     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3471
3472     [ $target_os = linux ] ||
3473         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3474             $ARCH_EXT_LIST_ARM
3475
3476     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3477     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3478
3479     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3480
3481 elif enabled mips; then
3482
3483     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3484
3485 elif enabled parisc; then
3486
3487     if enabled gcc; then
3488         case $($cc -dumpversion) in
3489             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3490         esac
3491     fi
3492
3493 elif enabled ppc; then
3494
3495     enable local_aligned_8 local_aligned_16
3496
3497     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3498     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3499     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3500     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3501
3502     # AltiVec flags: The FSF version of GCC differs from the Apple version
3503     if enabled altivec; then
3504         nogas=warn
3505         check_cflags -maltivec -mabi=altivec &&
3506         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3507         check_cflags -faltivec
3508
3509         # check if our compiler supports Motorola AltiVec C API
3510         check_cc <<EOF || disable altivec
3511 $inc_altivec_h
3512 int main(void) {
3513     vector signed int v1 = (vector signed int) { 0 };
3514     vector signed int v2 = (vector signed int) { 1 };
3515     v1 = vec_add(v1, v2);
3516     return 0;
3517 }
3518 EOF
3519
3520         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3521     fi
3522
3523 elif enabled sparc; then
3524
3525     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3526
3527 elif enabled x86; then
3528
3529     check_builtin rdtsc    intrin.h   "__rdtsc()"
3530     check_builtin mm_empty mmintrin.h "_mm_empty()"
3531
3532     enable local_aligned_8 local_aligned_16
3533
3534     # check whether EBP is available on x86
3535     # As 'i' is stored on the stack, this program will crash
3536     # if the base pointer is used to access it because the
3537     # base pointer is cleared in the inline assembly code.
3538     check_exec_crash <<EOF && enable ebp_available
3539 volatile int i=0;
3540 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3541 return i;
3542 EOF
3543
3544     # check whether EBX is available on x86
3545     check_inline_asm ebx_available '""::"b"(0)' &&
3546         check_inline_asm ebx_available '"":::"%ebx"'
3547
3548     # check whether xmm clobbers are supported
3549     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3550
3551     # check whether binutils is new enough to compile SSSE3/MMXEXT
3552     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3553     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3554
3555     if ! disabled_any asm mmx yasm; then
3556         if check_cmd $yasmexe --version; then
3557             enabled x86_64 && yasm_extra="-m amd64"
3558             yasm_debug="-g dwarf2"
3559         elif check_cmd nasm -v; then
3560             yasmexe=nasm
3561             yasm_debug="-g -F dwarf"
3562             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3563         fi
3564
3565         YASMFLAGS="-f $objformat $yasm_extra"
3566         enabled pic               && append YASMFLAGS "-DPIC"
3567         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3568         case "$objformat" in
3569             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3570         esac
3571
3572         check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
3573             die "yasm not found, use --disable-yasm for a crippled build"
3574         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3575         check_yasm "CPU amdnop" && enable cpunop
3576     fi
3577
3578     case "$cpu" in
3579         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3580             disable fast_clz
3581         ;;
3582     esac
3583
3584 fi
3585
3586 if enabled asm; then
3587     as=${gas:=$as}
3588     check_as <<EOF && enable gnu_as || \
3589         $nogas "GNU assembler not found, install gas-preprocessor"
3590 .macro m n
3591 \n: .int 0
3592 .endm
3593 m x
3594 EOF
3595 fi
3596
3597 check_ldflags -Wl,--as-needed
3598
3599 if check_func dlopen; then
3600     ldl=
3601 elif check_func dlopen -ldl; then
3602     ldl=-ldl
3603 fi
3604
3605 if ! disabled network; then
3606     check_type "sys/types.h sys/socket.h" socklen_t
3607     check_type netdb.h "struct addrinfo"
3608     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3609     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3610     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3611     check_type netinet/in.h "struct sockaddr_in6"
3612     check_type poll.h "struct pollfd"
3613     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3614     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3615     check_type netinet/sctp.h "struct sctp_event_subscribe"
3616     check_func getaddrinfo $network_extralibs
3617     check_func getservbyport $network_extralibs
3618     # Prefer arpa/inet.h over winsock2
3619     if check_header arpa/inet.h ; then
3620         check_func closesocket
3621     elif check_header winsock2.h ; then
3622         check_func_headers winsock2.h closesocket -lws2 &&
3623             network_extralibs="-lws2" ||
3624         { check_func_headers winsock2.h closesocket -lws2_32 &&
3625             network_extralibs="-lws2_32"; }
3626         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3627         check_type ws2tcpip.h socklen_t
3628         check_type ws2tcpip.h "struct addrinfo"
3629         check_type ws2tcpip.h "struct group_source_req"
3630         check_type ws2tcpip.h "struct ip_mreq_source"
3631         check_type ws2tcpip.h "struct ipv6_mreq"
3632         check_type winsock2.h "struct pollfd"
3633         check_type ws2tcpip.h "struct sockaddr_in6"
3634         check_type ws2tcpip.h "struct sockaddr_storage"
3635         check_struct winsock2.h "struct sockaddr" sa_len
3636     else
3637         disable network
3638     fi
3639 fi
3640
3641 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3642 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3643
3644 check_func  fcntl
3645 check_func  fork
3646 check_func_headers stdlib.h getenv
3647 check_func  gethrtime
3648 check_func  getopt
3649 check_func  getrusage
3650 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3651 check_func  gettimeofday
3652 check_func  inet_aton $network_extralibs
3653 check_func  isatty
3654 check_func  localtime_r
3655 check_func  ${malloc_prefix}memalign            && enable memalign
3656 check_func  mkstemp
3657 check_func  mmap
3658 check_func  mprotect
3659 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3660 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3661 check_func  setrlimit
3662 check_func  strerror_r
3663 check_func  strptime
3664 check_func  strtok_r
3665 check_func  sched_getaffinity
3666 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
3667 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
3668 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
3669 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
3670 check_func  sysconf
3671 check_func  sysctl
3672 check_func  usleep
3673 check_func_headers io.h setmode
3674 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3675 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3676 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3677 check_func_headers windows.h GetProcessAffinityMask
3678 check_func_headers windows.h GetProcessTimes
3679 check_func_headers windows.h GetSystemTimeAsFileTime
3680 check_func_headers windows.h MapViewOfFile
3681 check_func_headers windows.h SetConsoleTextAttribute
3682 check_func_headers windows.h Sleep
3683 check_func_headers windows.h VirtualAlloc
3684
3685 check_header direct.h
3686 check_header dlfcn.h
3687 check_header dxva.h
3688 check_header dxva2api.h
3689 check_header io.h
3690 check_header malloc.h
3691 check_header poll.h
3692 check_header sys/mman.h
3693 check_header sys/param.h
3694 check_header sys/resource.h
3695 check_header sys/select.h
3696 check_header sys/time.h
3697 check_header sys/un.h
3698 check_header unistd.h
3699 check_header vdpau/vdpau.h
3700 check_header vdpau/vdpau_x11.h
3701 check_header VideoDecodeAcceleration/VDADecoder.h
3702 check_header windows.h
3703 check_header X11/extensions/XvMClib.h
3704
3705 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3706 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3707
3708 if ! disabled w32threads && ! enabled pthreads; then
3709     check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3710 fi
3711
3712 # check for some common methods of building with pthread support
3713 # do this before the optional library checks as some of them require pthreads
3714 if ! disabled pthreads && ! enabled w32threads; then
3715     enable pthreads
3716     if check_func pthread_create; then
3717         :
3718     elif check_func pthread_create -pthread; then
3719         add_cflags -pthread
3720         add_extralibs -pthread
3721     elif check_func pthread_create -pthreads; then
3722         add_cflags -pthreads
3723         add_extralibs -pthreads
3724     elif check_func pthread_create -lpthreadGC2; then
3725         add_extralibs -lpthreadGC2
3726     elif ! check_lib pthread.h pthread_create -lpthread; then
3727         disable pthreads
3728     fi
3729 fi
3730
3731 for thread in $THREADS_LIST; do
3732     if enabled $thread; then
3733         test -n "$thread_type" &&
3734             die "ERROR: Only one thread type must be selected." ||
3735             thread_type="$thread"
3736     fi
3737 done
3738
3739 enabled sync_val_compare_and_swap && enable atomics_gcc
3740 enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc
3741 enabled MemoryBarrier && enable atomics_win32
3742
3743 check_lib math.h sin -lm && LIBM="-lm"
3744 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3745
3746 atan2f_args=2
3747 ldexpf_args=2
3748 powf_args=2
3749
3750 for func in $MATH_FUNCS; do
3751     eval check_mathfunc $func \${${func}_args:-1}
3752 done
3753
3754 # these are off by default, so fail if requested and not available
3755 enabled avisynth          && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3756 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3757 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3758 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3759 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3760 enabled libfreetype       && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3761 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
3762                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
3763                                done || die "ERROR: libgsm not found"; }
3764 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3765 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3766 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3767 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3768 enabled libopencv         && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3769 enabled libopenjpeg       && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3770 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3771 enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3772 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3773 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3774 enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex
3775 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3776 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3777 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3778 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3779 enabled libvpx            && {
3780     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3781                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
3782     enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3783                                     die "ERROR: libvpx encoder version must be >=0.9.6"; }
3784     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
3785     enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
3786 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
3787 enabled libx264           && require libx264 x264.h x264_encoder_encode -lx264 &&
3788                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3789                                die "ERROR: libx264 version must be >= 0.118."; }
3790 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
3791 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
3792 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3793                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3794                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3795                                die "ERROR: openssl not found"; }
3796
3797 if enabled gnutls; then
3798     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3799     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3800 fi
3801
3802 # libdc1394 check
3803 if enabled libdc1394; then
3804     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3805         enable libdc1394_2; } ||
3806     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3807         enable libdc1394_1; } ||
3808     die "ERROR: No version of libdc1394 found "
3809 fi
3810
3811 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3812     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3813     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
3814     enable sdl
3815 fi
3816
3817 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3818
3819 check_header linux/fb.h
3820 check_header linux/videodev2.h
3821 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3822
3823 check_header sys/videoio.h
3824
3825 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3826 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3827 # w32api 3.12 had it defined wrong
3828 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3829
3830 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3831 { check_header dev/bktr/ioctl_meteor.h &&
3832   check_header dev/bktr/ioctl_bt848.h; } ||
3833 { check_header machine/ioctl_meteor.h &&
3834   check_header machine/ioctl_bt848.h; } ||
3835 { check_header dev/video/meteor/ioctl_meteor.h &&
3836   check_header dev/video/bktr/ioctl_bt848.h; } ||
3837 check_header dev/ic/bt8xx.h
3838
3839 check_header sndio.h
3840 check_header sys/soundcard.h
3841 check_header soundcard.h
3842
3843 enabled_any alsa_indev alsa_outdev &&
3844     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3845
3846 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
3847     check_func jack_port_get_latency_range -ljack
3848
3849 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3850
3851 if enabled libcdio; then
3852     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
3853     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio
3854 fi
3855
3856 enabled x11grab                                           &&
3857 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3858 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3859 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3860
3861 enabled vdpau &&
3862     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3863     disable vdpau
3864
3865 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3866
3867 # add some useful compiler flags if supported
3868 check_cflags -Wdeclaration-after-statement
3869 check_cflags -Wall
3870 check_cflags -Wno-parentheses
3871 check_cflags -Wno-switch
3872 check_cflags -Wno-format-zero-length
3873 check_cflags -Wdisabled-optimization
3874 check_cflags -Wpointer-arith
3875 check_cflags -Wredundant-decls
3876 check_cflags -Wno-pointer-sign
3877 check_cflags -Wcast-qual
3878 check_cflags -Wwrite-strings
3879 check_cflags -Wtype-limits
3880 check_cflags -Wundef
3881 check_cflags -Wmissing-prototypes
3882 check_cflags -Wstrict-prototypes
3883 enabled extra_warnings && check_cflags -Winline
3884
3885 # add some linker flags
3886 check_ldflags -Wl,--warn-common
3887 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3888 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3889
3890 enabled xmm_clobber_test &&
3891     check_ldflags -Wl,--wrap,avcodec_open2              \
3892                   -Wl,--wrap,avcodec_decode_audio4      \
3893                   -Wl,--wrap,avcodec_decode_video2      \
3894                   -Wl,--wrap,avcodec_decode_subtitle2   \
3895                   -Wl,--wrap,avcodec_encode_audio2      \
3896                   -Wl,--wrap,avcodec_encode_video       \
3897                   -Wl,--wrap,avcodec_encode_subtitle    \
3898                   -Wl,--wrap,sws_scale ||
3899     disable xmm_clobber_test
3900
3901 echo "X{};" > $TMPV
3902 if test_ldflags -Wl,--version-script,$TMPV; then
3903     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3904     check_cc <<EOF && enable symver_asm_label
3905 void ff_foo(void) __asm__ ("av_foo@VERSION");
3906 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3907 EOF
3908     check_cc <<EOF && enable symver_gnu_asm
3909 __asm__(".symver ff_foo,av_foo@VERSION");
3910 void ff_foo(void) {}
3911 EOF
3912 fi
3913
3914 if [ -z "$optflags" ]; then
3915     if enabled small; then
3916         optflags=$cflags_size
3917     elif enabled optimizations; then
3918         optflags=$cflags_speed
3919     else
3920         optflags=$cflags_noopt
3921     fi
3922 fi
3923
3924 check_optflags(){
3925     check_cflags "$@"
3926     enabled lto && check_ldflags "$@"
3927 }
3928
3929
3930 if enabled lto; then
3931     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3932     check_cflags  -flto
3933     check_ldflags -flto $cpuflags
3934 fi
3935
3936 check_optflags $optflags
3937 check_optflags -fno-math-errno
3938 check_optflags -fno-signed-zeros
3939
3940 if enabled icc; then
3941     # Just warnings, no remarks
3942     check_cflags -w1
3943     # -wd: Disable following warnings
3944     # 144, 167, 556: -Wno-pointer-sign
3945     # 1292: attribute "foo" ignored
3946     # 1419: external declaration in primary source file
3947     # 10006: ignoring unknown option -fno-signed-zeros
3948     # 10148: ignoring unknown option -Wno-parentheses
3949     # 10156: ignoring option '-W'; no argument required
3950     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3951     # 11030: Warning unknown option --as-needed
3952     # 10156: ignoring option '-export'; no argument required
3953     check_ldflags -wd10156,11030
3954     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3955     enable ebp_available
3956     if enabled x86_32; then
3957         icc_version=$($cc -dumpversion)
3958         test ${icc_version%%.*} -ge 11 &&
3959             check_cflags -falign-stack=maintain-16-byte ||
3960             disable aligned_stack
3961     fi
3962 elif enabled ccc; then
3963     # disable some annoying warnings
3964     add_cflags -msg_disable bitnotint
3965     add_cflags -msg_disable mixfuncvoid
3966     add_cflags -msg_disable nonstandcast
3967     add_cflags -msg_disable unsupieee
3968 elif enabled gcc; then
3969     check_optflags -fno-tree-vectorize
3970     check_cflags -Werror=implicit-function-declaration
3971     check_cflags -Werror=missing-prototypes
3972     check_cflags -Werror=return-type
3973     check_cflags -Werror=declaration-after-statement
3974     check_cflags -Werror=vla
3975 elif enabled llvm_gcc; then
3976     check_cflags -mllvm -stack-alignment=16
3977 elif enabled clang; then
3978     check_cflags -mllvm -stack-alignment=16
3979     check_cflags -Qunused-arguments
3980     check_cflags -Werror=implicit-function-declaration
3981     check_cflags -Werror=missing-prototypes
3982     check_cflags -Werror=return-type
3983 elif enabled armcc; then
3984     # 2523: use of inline assembler is deprecated
3985     add_cflags -W${armcc_opt},--diag_suppress=2523
3986     add_cflags -W${armcc_opt},--diag_suppress=1207
3987     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3988     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3989     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3990     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3991 elif enabled tms470; then
3992     add_cflags -pds=824 -pds=837
3993 elif enabled pathscale; then
3994     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3995 elif enabled_any msvc icl; then
3996     enabled x86_32 && disable aligned_stack
3997     enabled_all x86_32 debug && add_cflags -Oy-
3998     enabled debug && add_ldflags -debug
3999     if enabled icl; then
4000         # basically -fstrict-aliasing that does not work (correctly) on icl 13.x
4001         check_cpp_condition "windows.h" "__ICL < 1300" && add_cflags -Qansi-alias
4002         # icl will pass the inline asm tests but inline asm is currently
4003         # not supported (build will fail)
4004         disable inline_asm
4005     fi
4006 fi
4007
4008 case $target_os in
4009     osf1)
4010         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4011     ;;
4012     plan9)
4013         add_cppflags -Dmain=plan9_main
4014     ;;
4015 esac
4016
4017 enabled_any $THREADS_LIST      && enable threads
4018 enabled_any $ATOMICS_LIST      && enable atomics_native
4019
4020 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4021
4022 check_deps $CONFIG_LIST       \
4023            $CONFIG_EXTRA      \
4024            $HAVE_LIST         \
4025            $ALL_COMPONENTS    \
4026
4027 ! enabled_any memalign posix_memalign aligned_malloc &&
4028     enabled_any $need_memalign && enable memalign_hack
4029
4030 echo "install prefix            $prefix"
4031 echo "source path               $source_path"
4032 echo "C compiler                $cc"
4033 echo "ARCH                      $arch ($cpu)"
4034 if test "$build_suffix" != ""; then
4035     echo "build suffix              $build_suffix"
4036 fi
4037 if test "$extra_version" != ""; then
4038     echo "version string suffix     $extra_version"
4039 fi
4040 echo "big-endian                ${bigendian-no}"
4041 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4042 if enabled x86; then
4043     echo "${yasmexe}                      ${yasm-no}"
4044     echo "MMX enabled               ${mmx-no}"
4045     echo "MMXEXT enabled            ${mmxext-no}"
4046     echo "3DNow! enabled            ${amd3dnow-no}"
4047     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4048     echo "SSE enabled               ${sse-no}"
4049     echo "SSSE3 enabled             ${ssse3-no}"
4050     echo "AVX enabled               ${avx-no}"
4051     echo "FMA4 enabled              ${fma4-no}"
4052     echo "i686 features enabled     ${i686-no}"
4053     echo "CMOV is fast              ${fast_cmov-no}"
4054     echo "EBX available             ${ebx_available-no}"
4055     echo "EBP available             ${ebp_available-no}"
4056 fi
4057 if enabled arm; then
4058     echo "ARMv5TE enabled           ${armv5te-no}"
4059     echo "ARMv6 enabled             ${armv6-no}"
4060     echo "ARMv6T2 enabled           ${armv6t2-no}"
4061     echo "VFP enabled               ${vfp-no}"
4062     echo "NEON enabled              ${neon-no}"
4063 fi
4064 if enabled ppc; then
4065     echo "AltiVec enabled           ${altivec-no}"
4066     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4067     echo "dcbzl available           ${dcbzl-no}"
4068 fi
4069 if enabled sparc; then
4070     echo "VIS enabled               ${vis-no}"
4071 fi
4072 echo "debug symbols             ${debug-no}"
4073 echo "optimize for size         ${small-no}"
4074 echo "optimizations             ${optimizations-no}"
4075 echo "static                    ${static-no}"
4076 echo "shared                    ${shared-no}"
4077 echo "new filter support        ${avfilter-no}"
4078 echo "network support           ${network-no}"
4079 echo "threading support         ${thread_type-no}"
4080 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4081 echo "SDL support               ${sdl-no}"
4082 test -n "$random_seed" &&
4083     echo "random seed               ${random_seed}"
4084 echo
4085
4086 echo "External libraries:"
4087 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4088 echo
4089
4090 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4091     echo "Enabled ${type}s:"
4092     eval list=\$$(toupper $type)_LIST
4093     print_enabled '_*' $list | print_3_columns
4094     echo
4095 done
4096
4097 license="LGPL version 2.1 or later"
4098 if enabled nonfree; then
4099     license="nonfree and unredistributable"
4100 elif enabled gplv3; then
4101     license="GPL version 3 or later"
4102 elif enabled lgplv3; then
4103     license="LGPL version 3 or later"
4104 elif enabled gpl; then
4105     license="GPL version 2 or later"
4106 fi
4107
4108 echo "License: $license"
4109
4110 echo "Creating config.mak and config.h..."
4111
4112 test -e Makefile || $ln_s "$source_path/Makefile" .
4113
4114 config_files="$TMPH config.mak"
4115
4116 cat > config.mak <<EOF
4117 # Automatically generated by configure - do not modify!
4118 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
4119 prefix=$prefix
4120 LIBDIR=\$(DESTDIR)$libdir
4121 SHLIBDIR=\$(DESTDIR)$shlibdir
4122 INCDIR=\$(DESTDIR)$incdir
4123 BINDIR=\$(DESTDIR)$bindir
4124 DATADIR=\$(DESTDIR)$datadir
4125 DOCDIR=\$(DESTDIR)$docdir
4126 MANDIR=\$(DESTDIR)$mandir
4127 SRC_PATH=$source_path
4128 CC_IDENT=$cc_ident
4129 ARCH=$arch
4130 CC=$cc
4131 AS=$as
4132 LD=$ld
4133 DEPCC=$dep_cc
4134 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4135 DEPAS=$as
4136 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4137 YASM=$yasmexe
4138 DEPYASM=$yasmexe
4139 AR=$ar
4140 ARFLAGS=$arflags
4141 AR_O=$ar_o
4142 RANLIB=$ranlib
4143 LN_S=$ln_s
4144 CPPFLAGS=$CPPFLAGS
4145 CFLAGS=$CFLAGS
4146 ASFLAGS=$ASFLAGS
4147 AS_C=$AS_C
4148 AS_O=$AS_O
4149 CC_C=$CC_C
4150 CC_E=$CC_E
4151 CC_O=$CC_O
4152 LD_O=$LD_O
4153 LD_LIB=$LD_LIB
4154 LD_PATH=$LD_PATH
4155 DLLTOOL=$dlltool
4156 LDFLAGS=$LDFLAGS
4157 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4158 YASMFLAGS=$YASMFLAGS
4159 BUILDSUF=$build_suffix
4160 FULLNAME=$FULLNAME
4161 LIBPREF=$LIBPREF
4162 LIBSUF=$LIBSUF
4163 LIBNAME=$LIBNAME
4164 SLIBPREF=$SLIBPREF
4165 SLIBSUF=$SLIBSUF
4166 EXESUF=$EXESUF
4167 EXTRA_VERSION=$extra_version
4168 CCDEP=$CCDEP
4169 CCDEP_FLAGS=$CCDEP_FLAGS
4170 ASDEP=$ASDEP
4171 ASDEP_FLAGS=$ASDEP_FLAGS
4172 CC_DEPFLAGS=$CC_DEPFLAGS
4173 AS_DEPFLAGS=$AS_DEPFLAGS
4174 HOSTCC=$host_cc
4175 HOSTLD=$host_ld
4176 HOSTCFLAGS=$host_cflags
4177 HOSTCPPFLAGS=$host_cppflags
4178 HOSTEXESUF=$HOSTEXESUF
4179 HOSTLDFLAGS=$host_ldflags
4180 HOSTLIBS=$host_libs
4181 DEPHOSTCC=$host_cc
4182 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4183 HOSTCCDEP=$HOSTCCDEP
4184 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4185 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4186 HOSTCC_C=$HOSTCC_C
4187 HOSTCC_O=$HOSTCC_O
4188 HOSTLD_O=$HOSTLD_O
4189 TARGET_EXEC=$target_exec $target_exec_args
4190 TARGET_PATH=$target_path
4191 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
4192 LIBS-avplay=$sdl_libs
4193 CFLAGS-avplay=$sdl_cflags
4194 ZLIB=$($ldflags_filter -lz)
4195 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4196 EXTRALIBS=$extralibs
4197 COMPAT_OBJS=$compat_objs
4198 EXEOBJS=$exeobjs
4199 INSTALL=install
4200 LIBTARGET=${LIBTARGET}
4201 SLIBNAME=${SLIBNAME}
4202 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4203 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4204 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4205 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4206 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4207 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4208 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4209 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4210 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
4211 EOF
4212
4213 get_version(){
4214     lcname=lib${1}
4215     name=$(toupper $lcname)
4216     file=$source_path/$lcname/version.h
4217     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4218     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4219     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4220     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4221     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
4222 }
4223
4224 map 'get_version $v' $LIBRARY_LIST
4225
4226 cat > $TMPH <<EOF
4227 /* Automatically generated by configure - do not modify! */
4228 #ifndef LIBAV_CONFIG_H
4229 #define LIBAV_CONFIG_H
4230 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
4231 #define LIBAV_LICENSE "$(c_escape $license)"
4232 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4233 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4234 #define restrict $_restrict
4235 #define EXTERN_PREFIX "${extern_prefix}"
4236 #define EXTERN_ASM ${extern_prefix}
4237 #define SLIBSUF "$SLIBSUF"
4238 EOF
4239
4240 test -n "$malloc_prefix" &&
4241     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4242
4243 if enabled yasm; then
4244     append config_files $TMPASM
4245     printf '' >$TMPASM
4246 fi
4247
4248 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
4249
4250 print_config ARCH_   "$config_files" $ARCH_LIST
4251 print_config HAVE_   "$config_files" $HAVE_LIST
4252 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4253                                      $CONFIG_EXTRA      \
4254                                      $ALL_COMPONENTS    \
4255
4256 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
4257
4258 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4259 cp_if_changed $TMPH config.h
4260 touch .config
4261
4262 enabled yasm && cp_if_changed $TMPASM config.asm
4263
4264 cat > $TMPH <<EOF
4265 /* Generated by ffconf */
4266 #ifndef AVUTIL_AVCONFIG_H
4267 #define AVUTIL_AVCONFIG_H
4268 EOF
4269
4270 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4271
4272 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4273
4274 cp_if_changed $TMPH libavutil/avconfig.h
4275
4276 test -n "$WARNINGS" && printf "\n$WARNINGS"
4277
4278 # build pkg-config files
4279
4280 pkgconfig_generate(){
4281     name=$1
4282     shortname=${name#lib}${build_suffix}
4283     comment=$2
4284     version=$3
4285     libs=$4
4286     requires=$5
4287     enabled ${name#lib} || return 0
4288     mkdir -p $name
4289     cat <<EOF > $name/$name.pc
4290 prefix=$prefix
4291 exec_prefix=\${prefix}
4292 libdir=$libdir
4293 includedir=$incdir
4294
4295 Name: $name
4296 Description: $comment
4297 Version: $version
4298 Requires: $(enabled shared || echo $requires)
4299 Requires.private: $(enabled shared && echo $requires)
4300 Conflicts:
4301 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4302 Libs.private: $(enabled shared && echo $libs)
4303 Cflags: -I\${includedir}
4304 EOF
4305     cat <<EOF > $name/$name-uninstalled.pc
4306 prefix=
4307 exec_prefix=
4308 libdir=\${pcfiledir}
4309 includedir=${source_path}
4310
4311 Name: $name
4312 Description: $comment
4313 Version: $version
4314 Requires: $requires
4315 Conflicts:
4316 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
4317 Cflags: -I\${includedir}
4318 EOF
4319 }
4320
4321 lavfi_libs="libavutil = $LIBAVUTIL_VERSION"
4322 enabled movie_filter    && prepend lavfi_libs "libavformat >= $LIBAVFORMAT_VERSION, libavcodec >= $LIBAVCODEC_VERSION,"
4323 enabled resample_filter && prepend lavfi_libs "libavresample >= $LIBAVRESAMPLE_VERSION,"
4324 enabled scale_filter    && prepend lavfi_libs "libswscale >= $LIBSWSCALE_VERSION,"
4325
4326 pkgconfig_generate libavutil     "Libav utility library"          "$LIBAVUTIL_VERSION"     "$LIBM"
4327 pkgconfig_generate libavcodec    "Libav codec library"            "$LIBAVCODEC_VERSION"    "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4328 pkgconfig_generate libavformat   "Libav container format library" "$LIBAVFORMAT_VERSION"   "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4329 pkgconfig_generate libavdevice   "Libav device handling library"  "$LIBAVDEVICE_VERSION"   "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
4330 pkgconfig_generate libavfilter   "Libav video filtering library"  "$LIBAVFILTER_VERSION"   "$extralibs" "$lavfi_libs"
4331 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4332 pkgconfig_generate libswscale    "Libav image rescaling library"  "$LIBSWSCALE_VERSION"    "$LIBM"      "libavutil = $LIBAVUTIL_VERSION"