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