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