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