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