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