OSDN Git Service

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