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