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