]> git.sesse.net Git - ffmpeg/blob - configure
1aae93b3d243ca192cc12eb46d8607ede8407ebe
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # Libav configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken Libav."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --list-decoders          show all available decoders
67   --list-encoders          show all available encoders
68   --list-hwaccels          show all available hardware accelerators
69   --list-demuxers          show all available demuxers
70   --list-muxers            show all available muxers
71   --list-parsers           show all available parsers
72   --list-protocols         show all available protocols
73   --list-bsfs              show all available bitstream filters
74   --list-indevs            show all available input devices
75   --list-outdevs           show all available output devices
76   --list-filters           show all available filters
77
78 Standard options:
79   --logfile=FILE           log tests and output to FILE [config.log]
80   --disable-logging        do not log configure debug information
81   --prefix=PREFIX          install in PREFIX [$prefix]
82   --bindir=DIR             install binaries in DIR [PREFIX/bin]
83   --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
84   --libdir=DIR             install libs in DIR [PREFIX/lib]
85   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
86   --incdir=DIR             install includes in DIR [PREFIX/include]
87   --mandir=DIR             install man page in DIR [PREFIX/share/man]
88
89 Licensing options:
90   --enable-gpl             allow use of GPL code, the resulting libs
91                            and binaries will be under GPL [no]
92   --enable-version3        upgrade (L)GPL to version 3 [no]
93   --enable-nonfree         allow use of nonfree code, the resulting libs
94                            and binaries will be unredistributable [no]
95
96 Configuration options:
97   --disable-static         do not build static libraries [no]
98   --enable-shared          build shared libraries [no]
99   --enable-small           optimize for size instead of speed
100   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
101   --enable-gray            enable full grayscale support (slower color)
102   --disable-swscale-alpha  disable alpha channel support in swscale
103   --disable-all            disable building components, libraries and programs
104
105 Program options:
106   --disable-programs       do not build command line programs
107   --disable-avconv         disable avconv build
108   --disable-avplay         disable avplay build
109   --disable-avprobe        disable avprobe build
110   --disable-avserver       disable avserver build
111
112 Component options:
113   --disable-doc            do not build documentation
114   --disable-avdevice       disable libavdevice build
115   --disable-avcodec        disable libavcodec build
116   --disable-avformat       disable libavformat build
117   --disable-avutil         disable libavutil build
118   --disable-swscale        disable libswscale build
119   --disable-avfilter       disable video filter support [no]
120   --disable-avresample     disable libavresample build [no]
121   --disable-pthreads       disable pthreads [auto]
122   --disable-w32threads     disable Win32 threads [auto]
123   --disable-network        disable network support [no]
124   --disable-dct            disable DCT code
125   --disable-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 -s -f"
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 ^icc; 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         cp_f='cp'
3081         ;;
3082     none)
3083         ;;
3084     *)
3085         die "Unknown OS '$target_os'."
3086         ;;
3087 esac
3088
3089 # determine libc flavour
3090
3091 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3092 if check_cpp_condition features.h "defined __UCLIBC__"; then
3093     libc_type=uclibc
3094     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3095 elif check_cpp_condition features.h "defined __GLIBC__"; then
3096     libc_type=glibc
3097     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3098 # MinGW headers can be installed on Cygwin, so check for newlib first.
3099 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3100     libc_type=newlib
3101     add_cppflags -U__STRICT_ANSI__
3102 elif check_header _mingw.h; then
3103     libc_type=mingw
3104     check_cpp_condition _mingw.h \
3105         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3106             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3107         die "ERROR: MinGW runtime version must be >= 3.15."
3108     add_cppflags -U__STRICT_ANSI__
3109 elif check_func_headers stdlib.h _get_doserrno; then
3110     libc_type=msvcrt
3111     add_compat strtod.o strtod=avpriv_strtod
3112     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3113                                  _snprintf=avpriv_snprintf  \
3114                                  vsnprintf=avpriv_vsnprintf
3115 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3116     libc_type=klibc
3117 fi
3118
3119 test -n "$libc_type" && enable $libc_type
3120
3121 # hacks for compiler/libc/os combinations
3122
3123 if enabled_all tms470 glibc; then
3124     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3125     add_cppflags -D__USER_LABEL_PREFIX__=
3126     add_cppflags -D__builtin_memset=memset
3127     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3128     add_cflags   -pds=48    # incompatible redefinition of macro
3129 fi
3130
3131 if enabled_all ccc glibc; then
3132     add_ldflags -Wl,-z,now  # calls to libots crash without this
3133 fi
3134
3135 esc(){
3136     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3137 }
3138
3139 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3140
3141 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3142
3143 set_default $PATHS_LIST
3144 set_default nm
3145
3146 # we need to build at least one lib type
3147 if ! enabled_any static shared; then
3148     cat <<EOF
3149 At least one library type must be built.
3150 Specify --enable-static to build the static libraries or --enable-shared to
3151 build the shared libraries as well. To only build the shared libraries specify
3152 --disable-static in addition to --enable-shared.
3153 EOF
3154     exit 1;
3155 fi
3156
3157 die_license_disabled() {
3158     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3159 }
3160
3161 die_license_disabled gpl libcdio
3162 die_license_disabled gpl libx264
3163 die_license_disabled gpl libxavs
3164 die_license_disabled gpl libxvid
3165 die_license_disabled gpl x11grab
3166
3167 die_license_disabled nonfree libfaac
3168 die_license_disabled nonfree libfdk_aac
3169 die_license_disabled nonfree openssl
3170
3171 die_license_disabled version3 libopencore_amrnb
3172 die_license_disabled version3 libopencore_amrwb
3173 die_license_disabled version3 libvo_aacenc
3174 die_license_disabled version3 libvo_amrwbenc
3175
3176 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3177
3178 disabled optimizations || check_cflags -fomit-frame-pointer
3179
3180 enable_pic() {
3181     enable pic
3182     add_cppflags -DPIC
3183     add_cflags   -fPIC
3184     add_asflags  -fPIC
3185 }
3186
3187 enabled pic && enable_pic
3188
3189 check_cc <<EOF || die "Symbol mangling check failed."
3190 int ff_extern;
3191 EOF
3192 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3193 extern_prefix=${sym%%ff_extern*}
3194
3195 check_cc <<EOF && enable_weak inline_asm
3196 void foo(void) { __asm__ volatile ("" ::); }
3197 EOF
3198
3199 _restrict=
3200 for restrict_keyword in restrict __restrict__ __restrict; do
3201     check_cc <<EOF && _restrict=$restrict_keyword && break
3202 void foo(char * $restrict_keyword p);
3203 EOF
3204 done
3205
3206 check_cc <<EOF && enable attribute_packed
3207 struct { int x; } __attribute__((packed)) x;
3208 EOF
3209
3210 check_cc <<EOF && enable attribute_may_alias
3211 union { int x; } __attribute__((may_alias)) x;
3212 EOF
3213
3214 check_cc <<EOF || die "endian test failed"
3215 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3216 EOF
3217 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3218
3219 if enabled alpha; then
3220
3221     check_cflags -mieee
3222
3223 elif enabled arm; then
3224
3225     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3226     enabled thumb && check_cflags -mthumb || check_cflags -marm
3227     nogas=die
3228
3229     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3230         enable vfp_args
3231     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3232         case "${cross_prefix:-$cc}" in
3233             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3234             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3235 __asm__ (".eabi_attribute 28, 1");
3236 int main(void) { return 0; }
3237 EOF
3238         esac
3239         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3240     fi
3241
3242     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3243     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3244     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3245     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3246     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3247     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3248
3249     [ $target_os = linux ] ||
3250         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3251             $ARCH_EXT_LIST_ARM
3252
3253     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3254     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3255
3256     enabled_all armv6t2 shared !pic && enable_pic
3257
3258 elif enabled mips; then
3259
3260     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3261
3262 elif enabled parisc; then
3263
3264     if enabled gcc; then
3265         case $($cc -dumpversion) in
3266             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3267         esac
3268     fi
3269
3270 elif enabled ppc; then
3271
3272     enable local_aligned_8 local_aligned_16
3273
3274     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3275     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3276     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3277     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3278
3279     # AltiVec flags: The FSF version of GCC differs from the Apple version
3280     if enabled altivec; then
3281         nogas=warn
3282         check_cflags -maltivec -mabi=altivec &&
3283         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3284         check_cflags -faltivec
3285
3286         # check if our compiler supports Motorola AltiVec C API
3287         check_cc <<EOF || disable altivec
3288 $inc_altivec_h
3289 int main(void) {
3290     vector signed int v1 = (vector signed int) { 0 };
3291     vector signed int v2 = (vector signed int) { 1 };
3292     v1 = vec_add(v1, v2);
3293     return 0;
3294 }
3295 EOF
3296
3297         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3298     fi
3299
3300 elif enabled sparc; then
3301
3302     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3303
3304 elif enabled x86; then
3305
3306     check_code ld intrin.h "__rdtsc()" && enable rdtsc
3307
3308     check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
3309
3310     enable local_aligned_8 local_aligned_16
3311
3312     # check whether EBP is available on x86
3313     # As 'i' is stored on the stack, this program will crash
3314     # if the base pointer is used to access it because the
3315     # base pointer is cleared in the inline assembly code.
3316     check_exec_crash <<EOF && enable ebp_available
3317 volatile int i=0;
3318 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3319 return i;
3320 EOF
3321
3322     # check whether EBX is available on x86
3323     check_inline_asm ebx_available '""::"b"(0)' &&
3324         check_inline_asm ebx_available '"":::"%ebx"'
3325
3326     # check whether xmm clobbers are supported
3327     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3328
3329     # check whether binutils is new enough to compile SSSE3/MMXEXT
3330     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3331     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3332
3333     if ! disabled_any asm mmx yasm; then
3334         if check_cmd $yasmexe --version; then
3335             enabled x86_64 && yasm_extra="-m amd64"
3336             yasm_debug="-g dwarf2"
3337         elif check_cmd nasm -v; then
3338             yasmexe=nasm
3339             yasm_debug="-g -F dwarf"
3340             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3341         fi
3342
3343         YASMFLAGS="-f $objformat $yasm_extra"
3344         enabled pic               && append YASMFLAGS "-DPIC"
3345         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3346         case "$objformat" in
3347             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3348         esac
3349
3350         check_yasm "vextractf128 xmm0, ymm0, 0" && enable yasm ||
3351             die "yasm not found, use --disable-yasm for a crippled build"
3352         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3353         check_yasm "CPU amdnop" && enable cpunop
3354     fi
3355
3356     case "$cpu" in
3357         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3358             disable fast_clz
3359         ;;
3360     esac
3361
3362 fi
3363
3364 if enabled asm; then
3365     as=${gas:=$as}
3366     check_as <<EOF && enable gnu_as || \
3367         $nogas "GNU assembler not found, install gas-preprocessor"
3368 .macro m n
3369 \n: .int 0
3370 .endm
3371 m x
3372 EOF
3373 fi
3374
3375 check_ldflags -Wl,--as-needed
3376
3377 if check_func dlopen; then
3378     ldl=
3379 elif check_func dlopen -ldl; then
3380     ldl=-ldl
3381 fi
3382
3383 if ! disabled network; then
3384     check_type "sys/types.h sys/socket.h" socklen_t
3385     check_type netdb.h "struct addrinfo"
3386     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3387     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3388     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3389     check_type netinet/in.h "struct sockaddr_in6"
3390     check_type poll.h "struct pollfd"
3391     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3392     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3393     check_type netinet/sctp.h "struct sctp_event_subscribe"
3394     check_func getaddrinfo $network_extralibs
3395     check_func getservbyport $network_extralibs
3396     # Prefer arpa/inet.h over winsock2
3397     if check_header arpa/inet.h ; then
3398         check_func closesocket
3399     elif check_header winsock2.h ; then
3400         check_func_headers winsock2.h closesocket -lws2 &&
3401             network_extralibs="-lws2" ||
3402         { check_func_headers winsock2.h closesocket -lws2_32 &&
3403             network_extralibs="-lws2_32"; }
3404         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3405         check_type ws2tcpip.h socklen_t
3406         check_type ws2tcpip.h "struct addrinfo"
3407         check_type ws2tcpip.h "struct group_source_req"
3408         check_type ws2tcpip.h "struct ip_mreq_source"
3409         check_type ws2tcpip.h "struct ipv6_mreq"
3410         check_type winsock2.h "struct pollfd"
3411         check_type ws2tcpip.h "struct sockaddr_in6"
3412         check_type ws2tcpip.h "struct sockaddr_storage"
3413         check_struct winsock2.h "struct sockaddr" sa_len
3414     else
3415         disable network
3416     fi
3417 fi
3418
3419 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3420 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3421
3422 check_func  fcntl
3423 check_func  fork
3424 check_func  gethrtime
3425 check_func  getopt
3426 check_func  getrusage
3427 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3428 check_func  gettimeofday
3429 check_func  inet_aton $network_extralibs
3430 check_func  isatty
3431 check_func  localtime_r
3432 check_func  ${malloc_prefix}memalign            && enable memalign
3433 check_func  mkstemp
3434 check_func  mmap
3435 check_func  mprotect
3436 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3437 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3438 check_func  setrlimit
3439 check_func  strerror_r
3440 check_func  strptime
3441 check_func  strtok_r
3442 check_func  sched_getaffinity
3443 check_func  sysconf
3444 check_func  sysctl
3445 check_func  usleep
3446 check_func_headers io.h setmode
3447 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3448 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3449 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3450 check_func_headers windows.h GetProcessAffinityMask
3451 check_func_headers windows.h GetProcessTimes
3452 check_func_headers windows.h GetSystemTimeAsFileTime
3453 check_func_headers windows.h MapViewOfFile
3454 check_func_headers windows.h SetConsoleTextAttribute
3455 check_func_headers windows.h Sleep
3456 check_func_headers windows.h VirtualAlloc
3457
3458 check_header direct.h
3459 check_header dlfcn.h
3460 check_header dxva.h
3461 check_header dxva2api.h
3462 check_header io.h
3463 check_header malloc.h
3464 check_header poll.h
3465 check_header sys/mman.h
3466 check_header sys/param.h
3467 check_header sys/resource.h
3468 check_header sys/select.h
3469 check_header sys/time.h
3470 check_header unistd.h
3471 check_header vdpau/vdpau.h
3472 check_header vdpau/vdpau_x11.h
3473 check_header VideoDecodeAcceleration/VDADecoder.h
3474 check_header windows.h
3475 check_header X11/extensions/XvMClib.h
3476
3477 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3478 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3479
3480 if ! disabled w32threads && ! enabled pthreads; then
3481     check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
3482 fi
3483
3484 # check for some common methods of building with pthread support
3485 # do this before the optional library checks as some of them require pthreads
3486 if ! disabled pthreads && ! enabled w32threads; then
3487     enable pthreads
3488     if check_func pthread_create; then
3489         :
3490     elif check_func pthread_create -pthread; then
3491         add_cflags -pthread
3492         add_extralibs -pthread
3493     elif check_func pthread_create -pthreads; then
3494         add_cflags -pthreads
3495         add_extralibs -pthreads
3496     elif check_func pthread_create -lpthreadGC2; then
3497         add_extralibs -lpthreadGC2
3498     elif ! check_lib pthread.h pthread_create -lpthread; then
3499         disable pthreads
3500     fi
3501 fi
3502
3503 for thread in $THREADS_LIST; do
3504     if enabled $thread; then
3505         test -n "$thread_type" &&
3506             die "ERROR: Only one thread type must be selected." ||
3507             thread_type="$thread"
3508     fi
3509 done
3510
3511 check_lib math.h sin -lm && LIBM="-lm"
3512 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3513
3514 atan2f_args=2
3515 ldexpf_args=2
3516 powf_args=2
3517
3518 for func in $MATH_FUNCS; do
3519     eval check_mathfunc $func \${${func}_args:-1}
3520 done
3521
3522 # these are off by default, so fail if requested and not available
3523 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3524 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3525 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3526 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3527 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3528 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3529 enabled libgsm     && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
3530                             check_lib "${gsm_hdr}" gsm_create -lgsm && break;
3531                         done || die "ERROR: libgsm not found"; }
3532 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3533 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3534 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3535 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3536 enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3537 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3538 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3539 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3540 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3541 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3542 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3543 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3544 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3545 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3546 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3547 enabled libvpx     && {
3548     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3549                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3550     enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3551                                 die "ERROR: libvpx encoder version must be >=0.9.6"; }
3552     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder;  }
3553     enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
3554 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3555                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3556                         die "ERROR: libx264 version must be >= 0.118."; }
3557 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3558 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3559 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3560                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3561                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3562                         die "ERROR: openssl not found"; }
3563
3564 if enabled gnutls; then
3565     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3566     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3567 fi
3568
3569 # libdc1394 check
3570 if enabled libdc1394; then
3571     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3572         enable libdc1394_2; } ||
3573     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3574         enable libdc1394_1; } ||
3575     die "ERROR: No version of libdc1394 found "
3576 fi
3577
3578 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3579     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3580     enable sdl &&
3581     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3582 fi
3583
3584 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3585
3586 check_header linux/fb.h
3587 check_header linux/videodev2.h
3588 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3589
3590 check_header sys/videoio.h
3591
3592 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3593 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3594 # w32api 3.12 had it defined wrong
3595 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3596
3597 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3598 { check_header dev/bktr/ioctl_meteor.h &&
3599   check_header dev/bktr/ioctl_bt848.h; } ||
3600 { check_header machine/ioctl_meteor.h &&
3601   check_header machine/ioctl_bt848.h; } ||
3602 { check_header dev/video/meteor/ioctl_meteor.h &&
3603   check_header dev/video/bktr/ioctl_bt848.h; } ||
3604 check_header dev/ic/bt8xx.h
3605
3606 check_header sndio.h
3607 check_header sys/soundcard.h
3608 check_header soundcard.h
3609
3610 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3611
3612 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
3613     check_func jack_port_get_latency_range -ljack
3614
3615 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3616
3617 if enabled libcdio; then
3618     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
3619 fi
3620
3621 enabled x11grab                                           &&
3622 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3623 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3624 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3625
3626 enabled vdpau &&
3627     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3628     disable vdpau
3629
3630 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3631
3632 # add some useful compiler flags if supported
3633 check_cflags -Wdeclaration-after-statement
3634 check_cflags -Wall
3635 check_cflags -Wno-parentheses
3636 check_cflags -Wno-switch
3637 check_cflags -Wno-format-zero-length
3638 check_cflags -Wdisabled-optimization
3639 check_cflags -Wpointer-arith
3640 check_cflags -Wredundant-decls
3641 check_cflags -Wno-pointer-sign
3642 check_cflags -Wcast-qual
3643 check_cflags -Wwrite-strings
3644 check_cflags -Wtype-limits
3645 check_cflags -Wundef
3646 check_cflags -Wmissing-prototypes
3647 check_cflags -Wstrict-prototypes
3648 enabled extra_warnings && check_cflags -Winline
3649
3650 # add some linker flags
3651 check_ldflags -Wl,--warn-common
3652 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3653 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3654
3655 enabled xmm_clobber_test &&
3656     check_ldflags -Wl,--wrap,avcodec_open2              \
3657                   -Wl,--wrap,avcodec_decode_audio4      \
3658                   -Wl,--wrap,avcodec_decode_video2      \
3659                   -Wl,--wrap,avcodec_decode_subtitle2   \
3660                   -Wl,--wrap,avcodec_encode_audio2      \
3661                   -Wl,--wrap,avcodec_encode_video       \
3662                   -Wl,--wrap,avcodec_encode_subtitle    \
3663                   -Wl,--wrap,sws_scale ||
3664     disable xmm_clobber_test
3665
3666 echo "X{};" > $TMPV
3667 if test_ldflags -Wl,--version-script,$TMPV; then
3668     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3669     check_cc <<EOF && enable symver_asm_label
3670 void ff_foo(void) __asm__ ("av_foo@VERSION");
3671 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3672 EOF
3673     check_cc <<EOF && enable symver_gnu_asm
3674 __asm__(".symver ff_foo,av_foo@VERSION");
3675 void ff_foo(void) {}
3676 EOF
3677 fi
3678
3679 if [ -z "$optflags" ]; then
3680     if enabled small; then
3681         optflags=$cflags_size
3682     elif enabled optimizations; then
3683         optflags=$cflags_speed
3684     else
3685         optflags=$cflags_noopt
3686     fi
3687 fi
3688
3689 check_optflags(){
3690     check_cflags "$@"
3691     enabled lto && check_ldflags "$@"
3692 }
3693
3694
3695 if enabled lto; then
3696     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
3697     check_cflags  -flto
3698     check_ldflags -flto $cpuflags
3699 fi
3700
3701 check_optflags $optflags
3702 check_optflags -fno-math-errno
3703 check_optflags -fno-signed-zeros
3704
3705 if enabled icc; then
3706     # Just warnings, no remarks
3707     check_cflags -w1
3708     # -wd: Disable following warnings
3709     # 144, 167, 556: -Wno-pointer-sign
3710     # 1292: attribute "foo" ignored
3711     # 1419: external declaration in primary source file
3712     # 10006: ignoring unknown option -fno-signed-zeros
3713     # 10148: ignoring unknown option -Wno-parentheses
3714     # 10156: ignoring option '-W'; no argument required
3715     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3716     # 11030: Warning unknown option --as-needed
3717     # 10156: ignoring option '-export'; no argument required
3718     check_ldflags -wd10156,11030
3719     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3720     enable ebp_available
3721     if enabled x86_32; then
3722         icc_version=$($cc -dumpversion)
3723         test ${icc_version%%.*} -ge 11 &&
3724             check_cflags -falign-stack=maintain-16-byte ||
3725             disable aligned_stack
3726     fi
3727 elif enabled ccc; then
3728     # disable some annoying warnings
3729     add_cflags -msg_disable bitnotint
3730     add_cflags -msg_disable mixfuncvoid
3731     add_cflags -msg_disable nonstandcast
3732     add_cflags -msg_disable unsupieee
3733 elif enabled gcc; then
3734     check_optflags -fno-tree-vectorize
3735     check_cflags -Werror=implicit-function-declaration
3736     check_cflags -Werror=missing-prototypes
3737     check_cflags -Werror=return-type
3738     check_cflags -Werror=declaration-after-statement
3739     check_cflags -Werror=vla
3740 elif enabled llvm_gcc; then
3741     check_cflags -mllvm -stack-alignment=16
3742 elif enabled clang; then
3743     check_cflags -mllvm -stack-alignment=16
3744     check_cflags -Qunused-arguments
3745     check_cflags -Werror=implicit-function-declaration
3746     check_cflags -Werror=missing-prototypes
3747     check_cflags -Werror=return-type
3748 elif enabled armcc; then
3749     # 2523: use of inline assembler is deprecated
3750     add_cflags -W${armcc_opt},--diag_suppress=2523
3751     add_cflags -W${armcc_opt},--diag_suppress=1207
3752     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3753     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3754     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3755     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3756 elif enabled tms470; then
3757     add_cflags -pds=824 -pds=837
3758 elif enabled pathscale; then
3759     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3760 elif enabled msvc; then
3761     enabled x86_32 && disable aligned_stack
3762 fi
3763
3764 case $target_os in
3765     osf1)
3766         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
3767     ;;
3768     plan9)
3769         add_cppflags -Dmain=plan9_main
3770     ;;
3771 esac
3772
3773 enabled_any $THREADS_LIST      && enable threads
3774
3775 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3776
3777 check_deps $CONFIG_LIST       \
3778            $CONFIG_EXTRA      \
3779            $HAVE_LIST         \
3780            $ALL_COMPONENTS    \
3781
3782 ! enabled_any memalign posix_memalign aligned_malloc &&
3783     enabled_any $need_memalign && enable memalign_hack
3784
3785 echo "install prefix            $prefix"
3786 echo "source path               $source_path"
3787 echo "C compiler                $cc"
3788 echo "ARCH                      $arch ($cpu)"
3789 if test "$build_suffix" != ""; then
3790     echo "build suffix              $build_suffix"
3791 fi
3792 if test "$extra_version" != ""; then
3793     echo "version string suffix     $extra_version"
3794 fi
3795 echo "big-endian                ${bigendian-no}"
3796 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3797 if enabled x86; then
3798     echo "${yasmexe}                      ${yasm-no}"
3799     echo "MMX enabled               ${mmx-no}"
3800     echo "MMXEXT enabled            ${mmxext-no}"
3801     echo "3DNow! enabled            ${amd3dnow-no}"
3802     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3803     echo "SSE enabled               ${sse-no}"
3804     echo "SSSE3 enabled             ${ssse3-no}"
3805     echo "AVX enabled               ${avx-no}"
3806     echo "FMA4 enabled              ${fma4-no}"
3807     echo "CMOV enabled              ${cmov-no}"
3808     echo "CMOV is fast              ${fast_cmov-no}"
3809     echo "EBX available             ${ebx_available-no}"
3810     echo "EBP available             ${ebp_available-no}"
3811 fi
3812 if enabled arm; then
3813     echo "ARMv5TE enabled           ${armv5te-no}"
3814     echo "ARMv6 enabled             ${armv6-no}"
3815     echo "ARMv6T2 enabled           ${armv6t2-no}"
3816     echo "VFP enabled               ${vfp-no}"
3817     echo "NEON enabled              ${neon-no}"
3818 fi
3819 if enabled ppc; then
3820     echo "AltiVec enabled           ${altivec-no}"
3821     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3822     echo "dcbzl available           ${dcbzl-no}"
3823 fi
3824 if enabled sparc; then
3825     echo "VIS enabled               ${vis-no}"
3826 fi
3827 echo "debug symbols             ${debug-no}"
3828 echo "optimize for size         ${small-no}"
3829 echo "optimizations             ${optimizations-no}"
3830 echo "static                    ${static-no}"
3831 echo "shared                    ${shared-no}"
3832 echo "new filter support        ${avfilter-no}"
3833 echo "network support           ${network-no}"
3834 echo "threading support         ${thread_type-no}"
3835 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3836 echo "SDL support               ${sdl-no}"
3837 test -n "$random_seed" &&
3838     echo "random seed               ${random_seed}"
3839 echo
3840
3841 echo "External libraries:"
3842 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
3843 echo
3844
3845 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3846     echo "Enabled ${type}s:"
3847     eval list=\$$(toupper $type)_LIST
3848     print_enabled '_*' $list | print_3_columns
3849     echo
3850 done
3851
3852 license="LGPL version 2.1 or later"
3853 if enabled nonfree; then
3854     license="nonfree and unredistributable"
3855 elif enabled gplv3; then
3856     license="GPL version 3 or later"
3857 elif enabled lgplv3; then
3858     license="LGPL version 3 or later"
3859 elif enabled gpl; then
3860     license="GPL version 2 or later"
3861 fi
3862
3863 echo "License: $license"
3864
3865 echo "Creating config.mak and config.h..."
3866
3867 test -e Makefile || $ln_s "$source_path/Makefile" .
3868
3869 config_files="$TMPH config.mak"
3870
3871 cat > config.mak <<EOF
3872 # Automatically generated by configure - do not modify!
3873 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3874 prefix=$prefix
3875 LIBDIR=\$(DESTDIR)$libdir
3876 SHLIBDIR=\$(DESTDIR)$shlibdir
3877 INCDIR=\$(DESTDIR)$incdir
3878 BINDIR=\$(DESTDIR)$bindir
3879 DATADIR=\$(DESTDIR)$datadir
3880 MANDIR=\$(DESTDIR)$mandir
3881 SRC_PATH=$source_path
3882 CC_IDENT=$cc_ident
3883 ARCH=$arch
3884 CC=$cc
3885 AS=$as
3886 LD=$ld
3887 DEPCC=$dep_cc
3888 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3889 DEPAS=$as
3890 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3891 YASM=$yasmexe
3892 DEPYASM=$yasmexe
3893 AR=$ar
3894 ARFLAGS=$arflags
3895 AR_O=$ar_o
3896 RANLIB=$ranlib
3897 LN_S=$ln_s
3898 CPPFLAGS=$CPPFLAGS
3899 CFLAGS=$CFLAGS
3900 ASFLAGS=$ASFLAGS
3901 AS_C=$AS_C
3902 AS_O=$AS_O
3903 CC_C=$CC_C
3904 CC_E=$CC_E
3905 CC_O=$CC_O
3906 LD_O=$LD_O
3907 LD_LIB=$LD_LIB
3908 LD_PATH=$LD_PATH
3909 DLLTOOL=$dlltool
3910 LDFLAGS=$LDFLAGS
3911 LDFLAGS-avserver=$AVSERVERLDFLAGS
3912 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
3913 YASMFLAGS=$YASMFLAGS
3914 BUILDSUF=$build_suffix
3915 FULLNAME=$FULLNAME
3916 LIBPREF=$LIBPREF
3917 LIBSUF=$LIBSUF
3918 LIBNAME=$LIBNAME
3919 SLIBPREF=$SLIBPREF
3920 SLIBSUF=$SLIBSUF
3921 EXESUF=$EXESUF
3922 EXTRA_VERSION=$extra_version
3923 CCDEP=$CCDEP
3924 CCDEP_FLAGS=$CCDEP_FLAGS
3925 ASDEP=$ASDEP
3926 ASDEP_FLAGS=$ASDEP_FLAGS
3927 CC_DEPFLAGS=$CC_DEPFLAGS
3928 AS_DEPFLAGS=$AS_DEPFLAGS
3929 HOSTCC=$host_cc
3930 HOSTLD=$host_ld
3931 HOSTCFLAGS=$host_cflags
3932 HOSTCPPFLAGS=$host_cppflags
3933 HOSTEXESUF=$HOSTEXESUF
3934 HOSTLDFLAGS=$host_ldflags
3935 HOSTLIBS=$host_libs
3936 DEPHOSTCC=$host_cc
3937 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3938 HOSTCCDEP=$HOSTCCDEP
3939 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3940 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3941 HOSTCC_C=$HOSTCC_C
3942 HOSTCC_O=$HOSTCC_O
3943 HOSTLD_O=$HOSTLD_O
3944 TARGET_EXEC=$target_exec
3945 TARGET_PATH=$target_path
3946 LIBS-avplay=$sdl_libs
3947 CFLAGS-avplay=$sdl_cflags
3948 ZLIB=$($ldflags_filter -lz)
3949 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3950 EXTRALIBS=$extralibs
3951 COMPAT_OBJS=$compat_objs
3952 EXEOBJS=$exeobjs
3953 INSTALL=install
3954 LIBTARGET=${LIBTARGET}
3955 SLIBNAME=${SLIBNAME}
3956 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3957 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3958 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3959 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3960 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3961 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3962 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3963 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3964 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
3965 EOF
3966
3967 get_version(){
3968     lcname=lib${1}
3969     name=$(toupper $lcname)
3970     file=$source_path/$lcname/version.h
3971     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
3972     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3973     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3974     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3975     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
3976 }
3977
3978 map 'get_version $v' $LIBRARY_LIST
3979
3980 cat > $TMPH <<EOF
3981 /* Automatically generated by configure - do not modify! */
3982 #ifndef LIBAV_CONFIG_H
3983 #define LIBAV_CONFIG_H
3984 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3985 #define LIBAV_LICENSE "$(c_escape $license)"
3986 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3987 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
3988 #define restrict $_restrict
3989 #define EXTERN_PREFIX "${extern_prefix}"
3990 #define EXTERN_ASM ${extern_prefix}
3991 #define SLIBSUF "$SLIBSUF"
3992 EOF
3993
3994 test -n "$malloc_prefix" &&
3995     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3996
3997 if enabled yasm; then
3998     append config_files $TMPASM
3999     printf '' >$TMPASM
4000 fi
4001
4002 print_config ARCH_   "$config_files" $ARCH_LIST
4003 print_config HAVE_   "$config_files" $HAVE_LIST
4004 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4005                                      $CONFIG_EXTRA      \
4006                                      $ALL_COMPONENTS    \
4007
4008 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
4009
4010 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4011 cp_if_changed $TMPH config.h
4012 touch .config
4013
4014 enabled yasm && cp_if_changed $TMPASM config.asm
4015
4016 cat > $TMPH <<EOF
4017 /* Generated by ffconf */
4018 #ifndef AVUTIL_AVCONFIG_H
4019 #define AVUTIL_AVCONFIG_H
4020 EOF
4021
4022 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4023
4024 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4025
4026 cp_if_changed $TMPH libavutil/avconfig.h
4027
4028 test -n "$WARNINGS" && printf "\n$WARNINGS"
4029
4030 # build pkg-config files
4031
4032 pkgconfig_generate(){
4033     name=$1
4034     shortname=${name#lib}${build_suffix}
4035     comment=$2
4036     version=$3
4037     libs=$4
4038     requires=$5
4039     enabled ${name#lib} || return 0
4040     mkdir -p $name
4041     cat <<EOF > $name/$name.pc
4042 prefix=$prefix
4043 exec_prefix=\${prefix}
4044 libdir=$libdir
4045 includedir=$incdir
4046
4047 Name: $name
4048 Description: $comment
4049 Version: $version
4050 Requires: $(enabled shared || echo $requires)
4051 Requires.private: $(enabled shared && echo $requires)
4052 Conflicts:
4053 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4054 Libs.private: $(enabled shared && echo $libs)
4055 Cflags: -I\${includedir}
4056 EOF
4057     cat <<EOF > $name/$name-uninstalled.pc
4058 prefix=
4059 exec_prefix=
4060 libdir=\${pcfiledir}
4061 includedir=${source_path}
4062
4063 Name: $name
4064 Description: $comment
4065 Version: $version
4066 Requires: $requires
4067 Conflicts:
4068 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
4069 Cflags: -I\${includedir}
4070 EOF
4071 }
4072
4073 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4074 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4075 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4076 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
4077 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4078 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4079 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"