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