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