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