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