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