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