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