]> git.sesse.net Git - ffmpeg/blob - configure
Request 16-byte aligned stack with icc on x86_32
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Standard options:
63   --help                   print this message
64   --logfile=FILE           log tests and output to FILE [config.log]
65   --disable-logging        do not log configure debug information
66   --prefix=PREFIX          install in PREFIX [$prefix]
67   --bindir=DIR             install binaries in DIR [PREFIX/bin]
68   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
69   --libdir=DIR             install libs in DIR [PREFIX/lib]
70   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
71   --incdir=DIR             install includes in DIR [PREFIX/include]
72   --mandir=DIR             install man page in DIR [PREFIX/share/man]
73
74 Configuration options:
75   --disable-static         do not build static libraries [no]
76   --enable-shared          build shared libraries [no]
77   --enable-gpl             allow use of GPL code, the resulting libs
78                            and binaries will be under GPL [no]
79   --enable-version3        upgrade (L)GPL to version 3 [no]
80   --enable-nonfree         allow use of nonfree code, the resulting libs
81                            and binaries will be unredistributable [no]
82   --disable-doc            do not build documentation
83   --disable-ffmpeg         disable ffmpeg build
84   --disable-ffplay         disable ffplay build
85   --disable-ffprobe        disable ffprobe build
86   --disable-ffserver       disable ffserver build
87   --disable-avdevice       disable libavdevice build
88   --disable-avcodec        disable libavcodec build
89   --disable-avcore         disable libavcore build
90   --disable-avformat       disable libavformat build
91   --disable-swscale        disable libswscale build
92   --enable-postproc        enable GPLed postprocessing support [no]
93   --disable-avfilter       disable video filter support [no]
94   --disable-pthreads       disable pthreads [auto]
95   --enable-w32threads      use Win32 threads [no]
96   --enable-x11grab         enable X11 grabbing [no]
97   --disable-network        disable network support [no]
98   --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101   --disable-fastdiv        disable table-based division
102   --enable-small           optimize for size instead of speed
103   --disable-aandct         disable AAN DCT code
104   --disable-dct            disable DCT code
105   --disable-fft            disable FFT code
106   --disable-golomb         disable Golomb code
107   --disable-huffman        disable Huffman code
108   --disable-lpc            disable LPC code
109   --disable-mdct           disable MDCT code
110   --disable-rdft           disable RDFT code
111   --disable-vaapi          disable VAAPI code
112   --disable-vdpau          disable VDPAU code
113   --disable-dxva2          disable DXVA2 code
114   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
115   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
116   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
117   --disable-everything     disable all components listed below
118   --disable-encoder=NAME   disable encoder NAME
119   --enable-encoder=NAME    enable encoder NAME
120   --disable-encoders       disable all encoders
121   --disable-decoder=NAME   disable decoder NAME
122   --enable-decoder=NAME    enable decoder NAME
123   --disable-decoders       disable all decoders
124   --disable-hwaccel=NAME   disable hwaccel NAME
125   --enable-hwaccel=NAME    enable hwaccel NAME
126   --disable-hwaccels       disable all hwaccels
127   --disable-muxer=NAME     disable muxer NAME
128   --enable-muxer=NAME      enable muxer NAME
129   --disable-muxers         disable all muxers
130   --disable-demuxer=NAME   disable demuxer NAME
131   --enable-demuxer=NAME    enable demuxer NAME
132   --disable-demuxers       disable all demuxers
133   --enable-parser=NAME     enable parser NAME
134   --disable-parser=NAME    disable parser NAME
135   --disable-parsers        disable all parsers
136   --enable-bsf=NAME        enable bitstream filter NAME
137   --disable-bsf=NAME       disable bitstream filter NAME
138   --disable-bsfs           disable all bitstream filters
139   --enable-protocol=NAME   enable protocol NAME
140   --disable-protocol=NAME  disable protocol NAME
141   --disable-protocols      disable all protocols
142   --disable-indev=NAME     disable input device NAME
143   --disable-outdev=NAME    disable output device NAME
144   --disable-indevs         disable input devices
145   --disable-outdevs        disable output devices
146   --disable-devices        disable all devices
147   --enable-filter=NAME     enable filter NAME
148   --disable-filter=NAME    disable filter NAME
149   --disable-filters        disable all filters
150   --list-decoders          show all available decoders
151   --list-encoders          show all available encoders
152   --list-hwaccels          show all available hardware accelerators
153   --list-muxers            show all available muxers
154   --list-demuxers          show all available demuxers
155   --list-parsers           show all available parsers
156   --list-protocols         show all available protocols
157   --list-bsfs              show all available bitstream filters
158   --list-indevs            show all available input devices
159   --list-outdevs           show all available output devices
160   --list-filters           show all available filters
161
162 External library support:
163   --enable-avisynth        enable reading of AVISynth script files [no]
164   --enable-bzlib           enable bzlib [autodetect]
165   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
166   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
167   --enable-libopencv       enable video filtering via libopencv [no]
168   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
169                            and libraw1394 [no]
170   --enable-libdirac        enable Dirac support via libdirac [no]
171   --enable-libfaac         enable FAAC support via libfaac [no]
172   --enable-libgsm          enable GSM support via libgsm [no]
173   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
174   --enable-libnut          enable NUT (de)muxing via libnut,
175                            native (de)muxer exists [no]
176   --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
177   --enable-librtmp         enable RTMP[E] support via librtmp [no]
178   --enable-libschroedinger enable Dirac support via libschroedinger [no]
179   --enable-libspeex        enable Speex decoding via libspeex [no]
180   --enable-libtheora       enable Theora encoding via libtheora [no]
181   --enable-libvorbis       enable Vorbis encoding via libvorbis,
182                            native implementation exists [no]
183   --enable-libvpx          enable VP8 support via libvpx [no]
184   --enable-libx264         enable H.264 encoding via x264 [no]
185   --enable-libxavs         enable AVS encoding via xavs [no]
186   --enable-libxvid         enable Xvid encoding via xvidcore,
187                            native MPEG-4/Xvid encoder exists [no]
188   --enable-mlib            enable Sun medialib [no]
189   --enable-zlib            enable zlib [autodetect]
190
191 Advanced options (experts only):
192   --source-path=PATH       path to source code [$source_path]
193   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
194   --enable-cross-compile   assume a cross-compiler is used
195   --sysroot=PATH           root of cross-build tree
196   --sysinclude=PATH        location of cross-build system headers
197   --target-os=OS           compiler targets OS [$target_os]
198   --target-exec=CMD        command to run executables on target
199   --target-path=DIR        path to view of build directory on target
200   --nm=NM                  use nm tool
201   --ar=AR                  use archive tool AR [$ar_default]
202   --as=AS                  use assembler AS [$as_default]
203   --cc=CC                  use C compiler CC [$cc_default]
204   --ld=LD                  use linker LD
205   --host-cc=HOSTCC         use host C compiler HOSTCC
206   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
207   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
208   --host-libs=HLIBS        use libs HLIBS when linking for host
209   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
210   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
211   --extra-libs=ELIBS       add ELIBS [$ELIBS]
212   --extra-version=STRING   version string suffix []
213   --build-suffix=SUFFIX    library name suffix []
214   --arch=ARCH              select architecture [$arch]
215   --cpu=CPU                select the minimum required CPU (affects
216                            instruction selection, may crash on older CPUs)
217   --disable-asm            disable all assembler optimizations
218   --disable-altivec        disable AltiVec optimizations
219   --disable-amd3dnow       disable 3DNow! optimizations
220   --disable-amd3dnowext    disable 3DNow! extended optimizations
221   --disable-mmx            disable MMX optimizations
222   --disable-mmx2           disable MMX2 optimizations
223   --disable-sse            disable SSE optimizations
224   --disable-ssse3          disable SSSE3 optimizations
225   --disable-armv5te        disable armv5te optimizations
226   --disable-armv6          disable armv6 optimizations
227   --disable-armv6t2        disable armv6t2 optimizations
228   --disable-armvfp         disable ARM VFP optimizations
229   --disable-iwmmxt         disable iwmmxt optimizations
230   --disable-mmi            disable MMI optimizations
231   --disable-neon           disable neon optimizations
232   --disable-vis            disable VIS optimizations
233   --disable-yasm           disable use of yasm assembler
234   --enable-pic             build position-independent code
235   --malloc-prefix=PFX      prefix malloc and related names with PFX
236   --enable-sram            allow use of on-chip SRAM
237
238 Developer options (useful when working on FFmpeg itself):
239   --disable-debug          disable debugging symbols
240   --enable-debug=LEVEL     set the debug level [$debuglevel]
241   --disable-optimizations  disable compiler optimizations
242   --enable-extra-warnings  enable more compiler warnings
243   --disable-stripping      disable stripping of executables and shared libraries
244   --samples=PATH           location of test samples for FATE
245
246 NOTE: Object files are built at the place where configure is launched.
247 EOF
248   exit 0
249 }
250
251 quotes='""'
252
253 log(){
254     echo "$@" >> $logfile
255 }
256
257 log_file(){
258     log BEGIN $1
259     pr -n -t $1 >> $logfile
260     log END $1
261 }
262
263 echolog(){
264     log "$@"
265     echo "$@"
266 }
267
268 warn(){
269     log "WARNING: $*"
270     WARNINGS="${WARNINGS}WARNING: $*\n"
271 }
272
273 die(){
274     echolog "$@"
275     cat <<EOF
276
277 If you think configure made a mistake, make sure you are using the latest
278 version from SVN.  If the latest version fails, report the problem to the
279 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
280 EOF
281     if disabled logging; then
282         cat <<EOF
283 Rerun configure with logging enabled (do not use --disable-logging), and
284 include the log this produces with your report.
285 EOF
286     else
287 cat <<EOF
288 Include the log file "$logfile" produced by configure as this will help
289 solving the problem.
290 EOF
291     fi
292     exit 1
293 }
294
295 # Avoid locale weirdness, besides we really just want to translate ASCII.
296 toupper(){
297     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
298 }
299
300 tolower(){
301     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
302 }
303
304 c_escape(){
305     echo "$*" | sed 's/["\\]/\\\0/g'
306 }
307
308 sh_quote(){
309     v=$(echo "$1" | sed "s/'/'\\\\''/g")
310     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
311     echo "$v"
312 }
313
314 filter(){
315     pat=$1
316     shift
317     for v; do
318         eval "case $v in $pat) echo $v ;; esac"
319     done
320 }
321
322 map(){
323     m=$1
324     shift
325     for v; do eval $m; done
326 }
327
328 set_all(){
329     value=$1
330     shift
331     for var in $*; do
332         eval $var=$value
333     done
334 }
335
336 set_weak(){
337     value=$1
338     shift
339     for var; do
340         eval : \${$var:=$value}
341     done
342 }
343
344 pushvar(){
345     for var in $*; do
346         eval level=\${${var}_level:=0}
347         eval ${var}_${level}="\$$var"
348         eval ${var}_level=$(($level+1))
349     done
350 }
351
352 popvar(){
353     for var in $*; do
354         eval level=\${${var}_level:-0}
355         test $level = 0 && continue
356         eval level=$(($level-1))
357         eval $var="\${${var}_${level}}"
358         eval ${var}_level=$level
359         eval unset ${var}_${level}
360     done
361 }
362
363 enable(){
364     set_all yes $*
365 }
366
367 disable(){
368     set_all no $*
369 }
370
371 enable_weak(){
372     set_weak yes $*
373 }
374
375 disable_weak(){
376     set_weak no $*
377 }
378
379 enable_safe(){
380     for var; do
381         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
382     done
383 }
384
385 disable_safe(){
386     for var; do
387         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
388     done
389 }
390
391 do_enable_deep(){
392     for var; do
393         enabled $var && continue
394         eval sel="\$${var}_select"
395         eval sgs="\$${var}_suggest"
396         pushvar var sgs
397         enable_deep $sel
398         popvar sgs
399         enable_deep_weak $sgs
400         popvar var
401     done
402 }
403
404 enable_deep(){
405     do_enable_deep $*
406     enable $*
407 }
408
409 enable_deep_weak(){
410     do_enable_deep $*
411     enable_weak $*
412 }
413
414 enabled(){
415     test "${1#!}" = "$1" && op== || op=!=
416     eval test "x\$${1#!}" $op "xyes"
417 }
418
419 disabled(){
420     test "${1#!}" = "$1" && op== || op=!=
421     eval test "x\$${1#!}" $op "xno"
422 }
423
424 enabled_all(){
425     for opt; do
426         enabled $opt || return 1
427     done
428 }
429
430 disabled_all(){
431     for opt; do
432         disabled $opt || return 1
433     done
434 }
435
436 enabled_any(){
437     for opt; do
438         enabled $opt && return 0
439     done
440 }
441
442 disabled_any(){
443     for opt; do
444         disabled $opt && return 0
445     done
446     return 1
447 }
448
449 set_default(){
450     for opt; do
451         eval : \${$opt:=\$${opt}_default}
452     done
453 }
454
455 is_in(){
456     value=$1
457     shift
458     for var in $*; do
459         [ $var = $value ] && return 0
460     done
461     return 1
462 }
463
464 check_deps(){
465     for cfg; do
466         cfg="${cfg#!}"
467         enabled ${cfg}_checking && die "Circular dependency for $cfg."
468         disabled ${cfg}_checking && continue
469         enable ${cfg}_checking
470
471         eval dep_all="\$${cfg}_deps"
472         eval dep_any="\$${cfg}_deps_any"
473         eval dep_sel="\$${cfg}_select"
474         eval dep_sgs="\$${cfg}_suggest"
475         eval dep_ifa="\$${cfg}_if"
476         eval dep_ifn="\$${cfg}_if_any"
477
478         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
479         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
480         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
481
482         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
483         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
484         enabled_all  $dep_all || disable $cfg
485         enabled_any  $dep_any || disable $cfg
486         disabled_any $dep_sel && disable $cfg
487
488         if enabled $cfg; then
489             eval dep_extralibs="\$${cfg}_extralibs"
490             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
491             enable_deep $dep_sel
492             enable_deep_weak $dep_sgs
493         fi
494
495         disable ${cfg}_checking
496     done
497 }
498
499 print_config_h(){
500     enabled $1 && v=1 || v=0
501     echo "#define $2 $v"
502 }
503
504 print_config_mak(){
505     enabled $1 && v= || v=!
506     echo "$v$2=yes"
507 }
508
509 print_config_asm(){
510     enabled $1 && echo "%define $2"
511 }
512
513 print_config(){
514     pfx=$1
515     files=$2
516     shift 2
517     for cfg; do
518         ucname="$(toupper $cfg)"
519         for f in $files; do
520             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
521         done
522     done
523 }
524
525 print_enabled(){
526     test "$1" = -n && end=" " && shift || end="\n"
527     suf=$1
528     shift
529     for v; do
530         enabled $v && printf "%s$end" ${v%$suf};
531     done
532 }
533
534 append(){
535     var=$1
536     shift
537     eval "$var=\"\$$var $*\""
538 }
539
540 prepend(){
541     var=$1
542     shift
543     eval "$var=\"$* \$$var\""
544 }
545
546 add_cppflags(){
547     append CPPFLAGS $($filter_cppflags "$@")
548 }
549
550 add_cflags(){
551     append CFLAGS $($filter_cflags "$@")
552 }
553
554 add_asflags(){
555     append ASFLAGS $($filter_asflags "$@")
556 }
557
558 add_ldflags(){
559     append LDFLAGS "$@"
560 }
561
562 add_extralibs(){
563     prepend extralibs "$@"
564 }
565
566 check_cmd(){
567     log "$@"
568     "$@" >> $logfile 2>&1
569 }
570
571 check_cc(){
572     log check_cc "$@"
573     cat > $TMPC
574     log_file $TMPC
575     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
576 }
577
578 check_cpp(){
579     log check_cpp "$@"
580     cat > $TMPC
581     log_file $TMPC
582     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
583 }
584
585 check_as(){
586     log check_as "$@"
587     cat > $TMPC
588     log_file $TMPC
589     check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
590 }
591
592 check_asm(){
593     log check_asm "$@"
594     name="$1"
595     code="$2"
596     shift 2
597     disable $name
598     check_as "$@" <<EOF && enable $name
599 void foo(void){ __asm__ volatile($code); }
600 EOF
601 }
602
603 check_yasm(){
604     log check_yasm "$@"
605     echo "$1" > $TMPS
606     log_file $TMPS
607     shift 1
608     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
609 }
610
611 check_ld(){
612     log check_ld "$@"
613     flags=''
614     libs=''
615     for f; do
616         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
617     done
618     check_cc $($filter_cflags $flags) || return
619     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
620 }
621
622 check_cppflags(){
623     log check_cppflags "$@"
624     set -- $($filter_cppflags "$@")
625     check_cc "$@" <<EOF && append CPPFLAGS "$@"
626 int x;
627 EOF
628 }
629
630 check_cflags(){
631     log check_cflags "$@"
632     set -- $($filter_cflags "$@")
633     check_cc "$@" <<EOF && append CFLAGS "$@"
634 int x;
635 EOF
636 }
637
638 test_ldflags(){
639     log test_ldflags "$@"
640     check_ld "$@" <<EOF
641 int main(void){ return 0; }
642 EOF
643 }
644
645 check_ldflags(){
646     log check_ldflags "$@"
647     test_ldflags "$@" && add_ldflags "$@"
648 }
649
650 check_header(){
651     log check_header "$@"
652     header=$1
653     shift
654     disable_safe $header
655     check_cpp "$@" <<EOF && enable_safe $header
656 #include <$header>
657 int x;
658 EOF
659 }
660
661 check_func(){
662     log check_func "$@"
663     func=$1
664     shift
665     disable $func
666     check_ld "$@" <<EOF && enable $func
667 extern int $func();
668 int main(void){ $func(); }
669 EOF
670 }
671
672 check_mathfunc(){
673     log check_mathfunc "$@"
674     func=$1
675     shift
676     disable $func
677     check_ld "$@" <<EOF && enable $func
678 #include <math.h>
679 float foo(float f) { return $func(f); }
680 int main(void){ return 0; }
681 EOF
682 }
683
684 check_func_headers(){
685     log check_func_headers "$@"
686     headers=$1
687     func=$2
688     shift 2
689     disable $func
690     incs=""
691     for hdr in $headers; do
692         incs="$incs
693 #include <$hdr>"
694     done
695     check_ld "$@" <<EOF && enable $func && enable_safe $headers
696 $incs
697 int main(int argc, char **argv){
698     return (long) $func;
699 }
700 EOF
701 }
702
703 check_cpp_condition(){
704     log check_cpp_condition "$@"
705     header=$1
706     condition=$2
707     shift 2
708     check_cpp $($filter_cppflags "$@") <<EOF
709 #include <$header>
710 #if !($condition)
711 #error "unsatisfied condition: $condition"
712 #endif
713 EOF
714 }
715
716 check_lib(){
717     log check_lib "$@"
718     header="$1"
719     func="$2"
720     shift 2
721     check_header $header && check_func $func "$@" && add_extralibs "$@"
722 }
723
724 check_lib2(){
725     log check_lib2 "$@"
726     headers="$1"
727     func="$2"
728     shift 2
729     check_func_headers "$headers" $func "$@" && add_extralibs "$@"
730 }
731
732 check_exec(){
733     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
734 }
735
736 check_exec_crash(){
737     code=$(cat)
738
739     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
740     # are safe but may not be available everywhere.  Thus we use
741     # raise(SIGTERM) instead.  The check is run in a subshell so we
742     # can redirect the "Terminated" message from the shell.  SIGBUS
743     # is not defined by standard C so it is used conditionally.
744
745     (check_exec "$@") >> $logfile 2>&1 <<EOF
746 #include <signal.h>
747 static void sighandler(int sig){
748     raise(SIGTERM);
749 }
750 int main(void){
751     signal(SIGILL, sighandler);
752     signal(SIGFPE, sighandler);
753     signal(SIGSEGV, sighandler);
754 #ifdef SIGBUS
755     signal(SIGBUS, sighandler);
756 #endif
757     { $code }
758 }
759 EOF
760 }
761
762 check_type(){
763     log check_type "$@"
764     headers=$1
765     type=$2
766     shift 2
767     disable_safe "$type"
768     incs=""
769     for hdr in $headers; do
770         incs="$incs
771 #include <$hdr>"
772     done
773     check_cc "$@" <<EOF && enable_safe "$type"
774 $incs
775 $type v;
776 EOF
777 }
778
779 check_struct(){
780     log check_type "$@"
781     headers=$1
782     struct=$2
783     member=$3
784     shift 3
785     disable_safe "${struct}_${member}"
786     incs=""
787     for hdr in $headers; do
788         incs="$incs
789 #include <$hdr>"
790     done
791     check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
792 $incs
793 const void *p = &(($struct *)0)->$member;
794 EOF
795 }
796
797 require(){
798     name="$1"
799     header="$2"
800     func="$3"
801     shift 3
802     check_lib $header $func "$@" || die "ERROR: $name not found"
803 }
804
805 require2(){
806     name="$1"
807     headers="$2"
808     func="$3"
809     shift 3
810     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
811 }
812
813 check_host_cc(){
814     log check_host_cc "$@"
815     cat > $TMPC
816     log_file $TMPC
817     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
818 }
819
820 check_host_cflags(){
821     log check_host_cflags "$@"
822     check_host_cc "$@" <<EOF && append host_cflags "$@"
823 int x;
824 EOF
825 }
826
827 apply(){
828     file=$1
829     shift
830     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
831 }
832
833 cp_if_changed(){
834     cmp -s "$1" "$2" &&
835         echo "$2 is unchanged" ||
836         cp -f "$1" "$2"
837 }
838
839 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
840 # system-dependent things.
841
842 COMPONENT_LIST="
843     bsfs
844     decoders
845     demuxers
846     encoders
847     filters
848     hwaccels
849     indevs
850     muxers
851     outdevs
852     parsers
853     protocols
854 "
855
856 CONFIG_LIST="
857     $COMPONENT_LIST
858     aandct
859     avcodec
860     avcore
861     avdevice
862     avfilter
863     avformat
864     avisynth
865     bzlib
866     dct
867     doc
868     dwt
869     dxva2
870     fastdiv
871     ffmpeg
872     ffplay
873     ffprobe
874     ffserver
875     fft
876     golomb
877     gpl
878     gray
879     h264dsp
880     h264pred
881     hardcoded_tables
882     huffman
883     libdc1394
884     libdirac
885     libfaac
886     libgsm
887     libmp3lame
888     libnut
889     libopencore_amrnb
890     libopencore_amrwb
891     libopencv
892     libopenjpeg
893     librtmp
894     libschroedinger
895     libspeex
896     libtheora
897     libvorbis
898     libvpx
899     libx264
900     libxavs
901     libxvid
902     lpc
903     lsp
904     mdct
905     memalign_hack
906     mlib
907     mpegaudio_hp
908     network
909     nonfree
910     pic
911     postproc
912     rdft
913     runtime_cpudetect
914     shared
915     small
916     sram
917     static
918     swscale
919     swscale_alpha
920     vaapi
921     vdpau
922     version3
923     x11grab
924     zlib
925 "
926
927 THREADS_LIST='
928     pthreads
929     w32threads
930 '
931
932 ARCH_LIST='
933     alpha
934     arm
935     avr32
936     avr32_ap
937     avr32_uc
938     bfin
939     ia64
940     m68k
941     mips
942     mips64
943     parisc
944     ppc
945     ppc64
946     s390
947     sh4
948     sparc
949     sparc64
950     tomi
951     x86
952     x86_32
953     x86_64
954 '
955
956 ARCH_EXT_LIST='
957     altivec
958     amd3dnow
959     amd3dnowext
960     armv5te
961     armv6
962     armv6t2
963     armvfp
964     iwmmxt
965     mmi
966     mmx
967     mmx2
968     neon
969     ppc4xx
970     sse
971     ssse3
972     vis
973 '
974
975 HAVE_LIST_PUB='
976     bigendian
977     fast_unaligned
978 '
979
980 HAVE_LIST="
981     $ARCH_EXT_LIST
982     $HAVE_LIST_PUB
983     $THREADS_LIST
984     alsa_asoundlib_h
985     altivec_h
986     arpa_inet_h
987     attribute_may_alias
988     attribute_packed
989     bswap
990     closesocket
991     cmov
992     conio_h
993     dcbzl
994     dev_bktr_ioctl_bt848_h
995     dev_bktr_ioctl_meteor_h
996     dev_ic_bt8xx_h
997     dev_video_meteor_ioctl_meteor_h
998     dev_video_bktr_ioctl_bt848_h
999     dlfcn_h
1000     dlopen
1001     dos_paths
1002     ebp_available
1003     ebx_available
1004     exp2
1005     exp2f
1006     fast_64bit
1007     fast_clz
1008     fast_cmov
1009     fcntl
1010     fork
1011     getaddrinfo
1012     gethrtime
1013     GetProcessMemoryInfo
1014     GetProcessTimes
1015     getrusage
1016     gnu_as
1017     struct_rusage_ru_maxrss
1018     ibm_asm
1019     inet_aton
1020     inline_asm
1021     isatty
1022     ldbrx
1023     libdc1394_1
1024     libdc1394_2
1025     llrint
1026     llrintf
1027     local_aligned_16
1028     local_aligned_8
1029     log2
1030     log2f
1031     loongson
1032     lrint
1033     lrintf
1034     lzo1x_999_compress
1035     machine_ioctl_bt848_h
1036     machine_ioctl_meteor_h
1037     malloc_h
1038     memalign
1039     mkstemp
1040     pld
1041     posix_memalign
1042     round
1043     roundf
1044     sdl
1045     sdl_video_size
1046     setmode
1047     socklen_t
1048     soundcard_h
1049     poll_h
1050     setrlimit
1051     strerror_r
1052     struct_addrinfo
1053     struct_ipv6_mreq
1054     struct_sockaddr_in6
1055     struct_sockaddr_sa_len
1056     struct_sockaddr_storage
1057     symver
1058     symver_gnu_asm
1059     symver_asm_label
1060     sys_mman_h
1061     sys_resource_h
1062     sys_select_h
1063     sys_soundcard_h
1064     sys_videoio_h
1065     ten_operands
1066     termios_h
1067     threads
1068     truncf
1069     vfp_args
1070     VirtualAlloc
1071     winsock2_h
1072     xform_asm
1073     yasm
1074 "
1075
1076 # options emitted with CONFIG_ prefix but not available on command line
1077 CONFIG_EXTRA="
1078     avutil
1079     gplv3
1080     lgplv3
1081 "
1082
1083 CMDLINE_SELECT="
1084     $ARCH_EXT_LIST
1085     $CONFIG_LIST
1086     $THREADS_LIST
1087     asm
1088     cross_compile
1089     debug
1090     extra_warnings
1091     logging
1092     optimizations
1093     stripping
1094     yasm
1095 "
1096
1097 PATHS_LIST='
1098     bindir
1099     datadir
1100     incdir
1101     libdir
1102     mandir
1103     prefix
1104     shlibdir
1105 '
1106
1107 CMDLINE_SET="
1108     $PATHS_LIST
1109     ar
1110     arch
1111     as
1112     build_suffix
1113     cc
1114     cpu
1115     cross_prefix
1116     dep_cc
1117     extra_version
1118     host_cc
1119     host_cflags
1120     host_ldflags
1121     host_libs
1122     host_os
1123     ld
1124     logfile
1125     malloc_prefix
1126     nm
1127     samples
1128     source_path
1129     strip
1130     sysinclude
1131     sysroot
1132     target_exec
1133     target_os
1134     target_path
1135 "
1136
1137 CMDLINE_APPEND="
1138     extra_cflags
1139 "
1140
1141 # code dependency declarations
1142
1143 # architecture extensions
1144
1145 armv5te_deps="arm"
1146 armv6_deps="arm"
1147 armv6t2_deps="arm"
1148 armvfp_deps="arm"
1149 iwmmxt_deps="arm"
1150 neon_deps="arm"
1151
1152 mmi_deps="mips"
1153
1154 altivec_deps="ppc"
1155 ppc4xx_deps="ppc"
1156
1157 vis_deps="sparc"
1158
1159 x86_64_suggest="cmov fast_cmov"
1160 amd3dnow_deps="mmx"
1161 amd3dnowext_deps="amd3dnow"
1162 mmx_deps="x86"
1163 mmx2_deps="mmx"
1164 sse_deps="mmx"
1165 ssse3_deps="sse"
1166
1167 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1168 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1169 fast_unaligned_if_any="armv6 ppc x86"
1170
1171 need_memalign="altivec neon sse"
1172 inline_asm_deps="!tms470"
1173
1174 symver_if_any="symver_asm_label symver_gnu_asm"
1175
1176 # subsystems
1177 dct_select="rdft"
1178 mdct_select="fft"
1179 rdft_select="fft"
1180
1181 # decoders / encoders / hardware accelerators
1182 aac_decoder_select="mdct rdft"
1183 aac_encoder_select="mdct"
1184 ac3_decoder_select="mdct ac3_parser"
1185 alac_encoder_select="lpc"
1186 amrnb_decoder_select="lsp"
1187 atrac1_decoder_select="mdct"
1188 atrac3_decoder_select="mdct"
1189 binkaudio_dct_decoder_select="mdct rdft dct"
1190 binkaudio_rdft_decoder_select="mdct rdft"
1191 cavs_decoder_select="golomb"
1192 cook_decoder_select="mdct"
1193 cscd_decoder_suggest="zlib"
1194 dca_decoder_select="mdct"
1195 dnxhd_encoder_select="aandct"
1196 dxa_decoder_select="zlib"
1197 eac3_decoder_select="ac3_decoder"
1198 eamad_decoder_select="aandct"
1199 eatgq_decoder_select="aandct"
1200 eatqi_decoder_select="aandct"
1201 ffv1_decoder_select="golomb"
1202 flac_decoder_select="golomb"
1203 flac_encoder_select="golomb lpc"
1204 flashsv_decoder_select="zlib"
1205 flashsv_encoder_select="zlib"
1206 flv_decoder_select="h263_decoder"
1207 flv_encoder_select="h263_encoder"
1208 fraps_decoder_select="huffman"
1209 h261_encoder_select="aandct"
1210 h263_decoder_select="h263_parser"
1211 h263_encoder_select="aandct"
1212 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1213 h263i_decoder_select="h263_decoder"
1214 h263p_encoder_select="h263_encoder"
1215 h264_decoder_select="golomb h264dsp h264pred"
1216 h264_dxva2_hwaccel_deps="dxva2api_h"
1217 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1218 h264_vaapi_hwaccel_select="vaapi"
1219 h264_vdpau_decoder_select="vdpau h264_decoder"
1220 imc_decoder_select="fft mdct"
1221 jpegls_decoder_select="golomb"
1222 jpegls_encoder_select="golomb"
1223 ljpeg_encoder_select="aandct"
1224 loco_decoder_select="golomb"
1225 mjpeg_encoder_select="aandct"
1226 mlp_decoder_select="mlp_parser"
1227 mp1float_decoder_select="dct"
1228 mp2float_decoder_select="dct"
1229 mp3adufloat_decoder_select="dct"
1230 mp3float_decoder_select="dct"
1231 mp3on4float_decoder_select="dct"
1232 mpeg1video_encoder_select="aandct"
1233 mpeg2video_encoder_select="aandct"
1234 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1235 mpeg4_encoder_select="h263_encoder"
1236 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1237 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1238 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1239 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1240 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1241 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1242 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1243 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1244 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1245 msmpeg4v1_decoder_select="h263_decoder"
1246 msmpeg4v1_encoder_select="h263_encoder"
1247 msmpeg4v2_decoder_select="h263_decoder"
1248 msmpeg4v2_encoder_select="h263_encoder"
1249 msmpeg4v3_decoder_select="h263_decoder"
1250 msmpeg4v3_encoder_select="h263_encoder"
1251 nellymoser_decoder_select="mdct"
1252 nellymoser_encoder_select="mdct"
1253 png_decoder_select="zlib"
1254 png_encoder_select="zlib"
1255 qcelp_decoder_select="lsp"
1256 qdm2_decoder_select="mdct rdft"
1257 ra_144_encoder_select="lpc"
1258 rv10_decoder_select="h263_decoder"
1259 rv10_encoder_select="h263_encoder"
1260 rv20_decoder_select="h263_decoder"
1261 rv20_encoder_select="h263_encoder"
1262 rv30_decoder_select="golomb h264pred"
1263 rv40_decoder_select="golomb h264pred"
1264 shorten_decoder_select="golomb"
1265 sipr_decoder_select="lsp"
1266 snow_decoder_select="dwt"
1267 snow_encoder_select="aandct dwt"
1268 sonic_decoder_select="golomb"
1269 sonic_encoder_select="golomb"
1270 sonic_ls_encoder_select="golomb"
1271 svq1_encoder_select="aandct"
1272 svq3_decoder_select="golomb h264dsp h264pred"
1273 svq3_decoder_suggest="zlib"
1274 theora_decoder_select="vp3_decoder"
1275 tiff_decoder_suggest="zlib"
1276 tiff_encoder_suggest="zlib"
1277 truehd_decoder_select="mlp_decoder"
1278 tscc_decoder_select="zlib"
1279 twinvq_decoder_select="mdct lsp"
1280 vc1_decoder_select="h263_decoder"
1281 vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1282 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1283 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1284 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1285 vorbis_decoder_select="mdct"
1286 vorbis_encoder_select="mdct"
1287 vp6_decoder_select="huffman"
1288 vp6a_decoder_select="vp6_decoder"
1289 vp6f_decoder_select="vp6_decoder"
1290 vp8_decoder_select="h264pred"
1291 wmapro_decoder_select="mdct"
1292 wmav1_decoder_select="mdct"
1293 wmav1_encoder_select="mdct"
1294 wmav2_decoder_select="mdct"
1295 wmav2_encoder_select="mdct"
1296 wmavoice_decoder_select="lsp rdft dct mdct"
1297 wmv1_decoder_select="h263_decoder"
1298 wmv1_encoder_select="h263_encoder"
1299 wmv2_decoder_select="h263_decoder"
1300 wmv2_encoder_select="h263_encoder"
1301 wmv3_decoder_select="vc1_decoder"
1302 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1303 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1304 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1305 zlib_decoder_select="zlib"
1306 zlib_encoder_select="zlib"
1307 zmbv_decoder_select="zlib"
1308 zmbv_encoder_select="zlib"
1309
1310 vaapi_deps="va_va_h"
1311 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1312
1313 # parsers
1314 h264_parser_select="golomb h264dsp h264pred"
1315
1316 # external libraries
1317 libdirac_decoder_deps="libdirac !libschroedinger"
1318 libdirac_encoder_deps="libdirac"
1319 libfaac_encoder_deps="libfaac"
1320 libgsm_decoder_deps="libgsm"
1321 libgsm_encoder_deps="libgsm"
1322 libgsm_ms_decoder_deps="libgsm"
1323 libgsm_ms_encoder_deps="libgsm"
1324 libmp3lame_encoder_deps="libmp3lame"
1325 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1326 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1327 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1328 libopenjpeg_decoder_deps="libopenjpeg"
1329 libschroedinger_decoder_deps="libschroedinger"
1330 libschroedinger_encoder_deps="libschroedinger"
1331 libspeex_decoder_deps="libspeex"
1332 libtheora_encoder_deps="libtheora"
1333 libvorbis_encoder_deps="libvorbis"
1334 libvpx_decoder_deps="libvpx"
1335 libvpx_encoder_deps="libvpx"
1336 libx264_encoder_deps="libx264"
1337 libxavs_encoder_deps="libxavs"
1338 libxvid_encoder_deps="libxvid"
1339
1340 # demuxers / muxers
1341 ac3_demuxer_deps="ac3_parser"
1342 asf_stream_muxer_select="asf_muxer"
1343 avisynth_demuxer_deps="avisynth"
1344 dirac_demuxer_deps="dirac_parser"
1345 eac3_demuxer_select="ac3_parser"
1346 ipod_muxer_select="mov_muxer"
1347 libnut_demuxer_deps="libnut"
1348 libnut_muxer_deps="libnut"
1349 matroska_audio_muxer_select="matroska_muxer"
1350 matroska_demuxer_suggest="zlib bzlib"
1351 mov_demuxer_suggest="zlib"
1352 mp3_demuxer_deps="mpegaudio_parser"
1353 mp4_muxer_select="mov_muxer"
1354 mpegtsraw_demuxer_select="mpegts_demuxer"
1355 mxf_d10_muxer_select="mxf_muxer"
1356 ogg_demuxer_select="golomb"
1357 psp_muxer_select="mov_muxer"
1358 rtsp_demuxer_deps="sdp_demuxer"
1359 rtsp_muxer_deps="sdp_demuxer"
1360 rtsp_muxer_select="rtp_muxer"
1361 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1362 sdp_demuxer_select="asf_demuxer rm_demuxer"
1363 spdif_muxer_select="aac_parser"
1364 tg2_muxer_select="mov_muxer"
1365 tgp_muxer_select="mov_muxer"
1366 w64_demuxer_deps="wav_demuxer"
1367
1368 # indevs / outdevs
1369 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1370 alsa_outdev_deps="alsa_asoundlib_h"
1371 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1372 dv1394_indev_deps="dv1394 dv_demuxer"
1373 jack_indev_deps="jack_jack_h"
1374 libdc1394_indev_deps="libdc1394"
1375 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1376 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1377 v4l_indev_deps="linux_videodev_h"
1378 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1379 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1380 vfwcap_indev_extralibs="-lavicap32"
1381 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1382 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1383
1384 # protocols
1385 gopher_protocol_deps="network"
1386 http_protocol_deps="network"
1387 http_protocol_select="tcp_protocol"
1388 mmsh_protocol_select="http_protocol"
1389 mmst_protocol_deps="network"
1390 rtmp_protocol_select="tcp_protocol"
1391 rtp_protocol_select="udp_protocol"
1392 tcp_protocol_deps="network"
1393 udp_protocol_deps="network"
1394
1395 # filters
1396 ocv_smooth_filter_deps="libopencv"
1397
1398 # libraries
1399 avdevice_deps="avcodec avformat"
1400 avformat_deps="avcodec"
1401
1402 # programs
1403 ffmpeg_deps="avcodec avformat swscale"
1404 ffmpeg_select="buffer_filter"
1405 ffplay_deps="avcodec avformat swscale sdl"
1406 ffplay_select="rdft"
1407 ffprobe_deps="avcodec avformat"
1408 ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1409 ffserver_extralibs='$ldl'
1410
1411 doc_deps="texi2html"
1412
1413 # tests
1414
1415 test_deps(){
1416     suf1=$1
1417     suf2=$2
1418     shift 2
1419     for v; do
1420         dep=${v%=*}
1421         tests=${v#*=}
1422         for name in ${tests}; do
1423             eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1424         done
1425     done
1426 }
1427
1428 set_ne_test_deps(){
1429     eval ${1}_be_test_deps="bigendian"
1430     eval ${1}_le_test_deps="!bigendian"
1431 }
1432
1433 test_deps _encoder _decoder                                             \
1434     ac3                                                                 \
1435     adpcm_g726=g726                                                     \
1436     adpcm_ima_qt                                                        \
1437     adpcm_ima_wav                                                       \
1438     adpcm_ms                                                            \
1439     adpcm_swf                                                           \
1440     adpcm_yamaha=adpcm_yam                                              \
1441     alac                                                                \
1442     asv1                                                                \
1443     asv2                                                                \
1444     bmp                                                                 \
1445     dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1446     dvvideo="dv dv50"                                                   \
1447     ffv1                                                                \
1448     flac                                                                \
1449     flashsv                                                             \
1450     flv                                                                 \
1451     gif                                                                 \
1452     h261                                                                \
1453     h263="h263 h263p"                                                   \
1454     huffyuv                                                             \
1455     jpegls                                                              \
1456     mjpeg="jpg mjpeg ljpeg"                                             \
1457     mp2                                                                 \
1458     mpeg1video="mpeg mpeg1b"                                            \
1459     mpeg2video="mpeg2 mpeg2thread"                                      \
1460     mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1461     msmpeg4v3=msmpeg4                                                   \
1462     msmpeg4v2                                                           \
1463     pbm=pbmpipe                                                         \
1464     pcx                                                                 \
1465     pgm="pgm pgmpipe"                                                   \
1466     ppm="ppm ppmpipe"                                                   \
1467     rawvideo="rgb yuv"                                                  \
1468     roq                                                                 \
1469     rv10                                                                \
1470     rv20                                                                \
1471     sgi                                                                 \
1472     snow="snow snowll"                                                  \
1473     svq1                                                                \
1474     targa=tga                                                           \
1475     tiff                                                                \
1476     wmav1                                                               \
1477     wmav2                                                               \
1478     wmv1                                                                \
1479     wmv2                                                                \
1480
1481 test_deps _muxer _demuxer                                               \
1482     aiff                                                                \
1483     pcm_alaw=alaw                                                       \
1484     asf                                                                 \
1485     au                                                                  \
1486     avi                                                                 \
1487     dv=dv_fmt                                                           \
1488     ffm                                                                 \
1489     flv=flv_fmt                                                         \
1490     gxf                                                                 \
1491     matroska=mkv                                                        \
1492     mmf                                                                 \
1493     mov                                                                 \
1494     pcm_mulaw=mulaw                                                     \
1495     mxf                                                                 \
1496     nut                                                                 \
1497     ogg                                                                 \
1498     rawvideo=pixfmt                                                     \
1499     rm                                                                  \
1500     swf                                                                 \
1501     mpegts=ts                                                           \
1502     voc                                                                 \
1503     wav                                                                 \
1504     yuv4mpegpipe=yuv4mpeg                                               \
1505
1506 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1507
1508 set_ne_test_deps pixdesc
1509 set_ne_test_deps pixfmts_crop
1510 set_ne_test_deps pixfmts_hflip
1511 set_ne_test_deps pixfmts_null
1512 set_ne_test_deps pixfmts_pad
1513 set_ne_test_deps pixfmts_scale
1514 set_ne_test_deps pixfmts_vflip
1515
1516 # default parameters
1517
1518 logfile="config.log"
1519
1520 # installation paths
1521 prefix_default="/usr/local"
1522 bindir_default='${prefix}/bin'
1523 datadir_default='${prefix}/share/ffmpeg'
1524 incdir_default='${prefix}/include'
1525 libdir_default='${prefix}/lib'
1526 mandir_default='${prefix}/share/man'
1527 shlibdir_default="$libdir_default"
1528
1529 # toolchain
1530 ar_default="ar"
1531 cc_default="gcc"
1532 cc_version=\"unknown\"
1533 host_cc_default="gcc"
1534 ln_s="ln -sf"
1535 nm_default="nm"
1536 objformat="elf"
1537 ranlib="ranlib"
1538 strip_default="strip"
1539 yasmexe="yasm"
1540 nogas=":"
1541
1542 nm_opts='-g'
1543
1544 # machine
1545 arch_default=$(uname -m)
1546 cpu="generic"
1547
1548 # OS
1549 target_os_default=$(tolower $(uname -s))
1550 host_os=$target_os_default
1551
1552 # configurable options
1553 enable avcodec
1554 enable avcore
1555 enable avdevice
1556 enable avfilter
1557 enable avformat
1558 enable avutil
1559 enable asm
1560 enable debug
1561 enable doc
1562 enable fastdiv
1563 enable ffmpeg
1564 enable ffplay
1565 enable ffprobe
1566 enable ffserver
1567 enable mpegaudio_hp
1568 enable network
1569 enable optimizations
1570 enable protocols
1571 enable static
1572 enable stripping
1573 enable swscale
1574 enable swscale_alpha
1575
1576 # build settings
1577 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1578 FFSERVERLDFLAGS=-Wl,-E
1579 LIBPREF="lib"
1580 LIBSUF=".a"
1581 FULLNAME='$(NAME)$(BUILDSUF)'
1582 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1583 SLIBPREF="lib"
1584 SLIBSUF=".so"
1585 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1586 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1587 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1588 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1589
1590 CC_O='-o $@'
1591
1592 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1593 host_libs='-lm'
1594
1595 target_path='$(CURDIR)'
1596
1597 # since the object filename is not given with the -MM flag, the compiler
1598 # is only able to print the basename, and we must add the path ourselves
1599 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1600 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1601
1602 # find source path
1603 source_path="$(dirname "$0")"
1604 enable source_path_used
1605 if test -f configure; then
1606     source_path="$(pwd)"
1607     disable source_path_used
1608 else
1609     source_path="$(cd "$source_path"; pwd)"
1610     echo "$source_path" | grep -q '[[:blank:]]' &&
1611         die "Out of tree builds are impossible with whitespace in source path."
1612     test -e "$source_path/config.h" &&
1613         die "Out of tree builds are impossible with config.h in source dir."
1614 fi
1615
1616 for v in "$@"; do
1617     r=${v#*=}
1618     l=${v%"$r"}
1619     r=$(sh_quote "$r")
1620     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1621 done
1622
1623 find_things(){
1624     thing=$1
1625     pattern=$2
1626     file=$source_path/$3
1627     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1628 }
1629
1630 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1631 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1632 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1633 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1634 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1635 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1636 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1637 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1638 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1639 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1640 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1641
1642 find_tests(){
1643     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1644 }
1645
1646 ACODEC_TESTS=$(find_tests acodec)
1647 VCODEC_TESTS=$(find_tests vsynth1)
1648 LAVF_TESTS=$(find_tests lavf)
1649 LAVFI_TESTS=$(find_tests lavfi)
1650 SEEK_TESTS=$(find_tests seek seek_)
1651
1652 pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1653
1654 for n in $COMPONENT_LIST; do
1655     v=$(toupper ${n%s})_LIST
1656     eval enable \$$v
1657     eval ${n}_if_any="\$$v"
1658 done
1659
1660 enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1661
1662 die_unknown(){
1663     echo "Unknown option \"$1\"."
1664     echo "See $0 --help for available options."
1665     exit 1
1666 }
1667
1668 show_list() {
1669     suffix=_$1
1670     shift
1671     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1672     exit 0
1673 }
1674
1675 for opt do
1676     optval="${opt#*=}"
1677     case "$opt" in
1678     --extra-ldflags=*) add_ldflags $optval
1679     ;;
1680     --extra-libs=*) add_extralibs $optval
1681     ;;
1682     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1683     ;;
1684     --enable-debug=*) debuglevel="$optval"
1685     ;;
1686     --disable-everything)
1687     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1688     ;;
1689     --enable-*=*|--disable-*=*)
1690     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1691     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1692     eval list=\$$(toupper $thing)_LIST
1693     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1694     $action $(filter "$name" $list)
1695     ;;
1696     --enable-?*|--disable-?*)
1697     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1698     if is_in $option $COMPONENT_LIST; then
1699         test $action = disable && action=unset
1700         eval $action \$$(toupper ${option%s})_LIST
1701     elif is_in $option $CMDLINE_SELECT; then
1702         $action $option
1703     else
1704         die_unknown $opt
1705     fi
1706     ;;
1707     --list-*)
1708         NAME="${opt#--list-}"
1709         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1710         NAME=${NAME%s}
1711         eval show_list $NAME \$$(toupper $NAME)_LIST
1712     ;;
1713     --help|-h) show_help
1714     ;;
1715     *)
1716     optname="${opt%%=*}"
1717     optname="${optname#--}"
1718     optname=$(echo "$optname" | sed 's/-/_/g')
1719     if is_in $optname $CMDLINE_SET; then
1720         eval $optname='$optval'
1721     elif is_in $optname $CMDLINE_APPEND; then
1722         append $optname "$optval"
1723     else
1724          die_unknown $opt
1725     fi
1726     ;;
1727     esac
1728 done
1729
1730 disabled logging && logfile=/dev/null
1731
1732 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1733 set >> $logfile
1734
1735 test -n "$cross_prefix" && enable cross_compile
1736
1737 if enabled cross_compile; then
1738     test -n "$arch" && test -n "$target_os" ||
1739         die "Must specify target arch and OS when cross-compiling"
1740 fi
1741
1742 set_default arch target_os
1743
1744 ar_default="${cross_prefix}${ar_default}"
1745 cc_default="${cross_prefix}${cc_default}"
1746 nm_default="${cross_prefix}${nm_default}"
1747 ranlib="${cross_prefix}${ranlib}"
1748 strip_default="${cross_prefix}${strip_default}"
1749
1750 sysinclude_default="${sysroot}/usr/include"
1751
1752 set_default cc nm strip sysinclude
1753 enabled cross_compile || host_cc_default=$cc
1754 set_default host_cc
1755
1756 exesuf() {
1757     case $1 in
1758         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1759     esac
1760 }
1761
1762 EXESUF=$(exesuf $target_os)
1763 HOSTEXESUF=$(exesuf $host_os)
1764
1765 # set temporary file name
1766 : ${TMPDIR:=$TEMPDIR}
1767 : ${TMPDIR:=$TMP}
1768 : ${TMPDIR:=/tmp}
1769
1770 if ! check_cmd type mktemp; then
1771     # simple replacement for missing mktemp
1772     # NOT SAFE FOR GENERAL USE
1773     mktemp(){
1774         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1775     }
1776 fi
1777
1778 tmpfile(){
1779     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1780         (set -C; exec > $tmp) 2>/dev/null ||
1781         die "Unable to create temporary file in $TMPDIR."
1782     append TMPFILES $tmp
1783     eval $1=$tmp
1784 }
1785
1786 trap 'rm -f -- $TMPFILES' EXIT
1787 trap exit HUP INT TERM
1788
1789 tmpfile TMPC  .c
1790 tmpfile TMPE  $EXESUF
1791 tmpfile TMPH  .h
1792 tmpfile TMPO  .o
1793 tmpfile TMPS  .S
1794 tmpfile TMPV  .ver
1795 tmpfile TMPSH .sh
1796 tmpfile TMPASM .asm
1797
1798 unset -f mktemp
1799
1800 # make sure we can execute files in $TMPDIR
1801 cat > $TMPSH 2>> $logfile <<EOF
1802 #! /bin/sh
1803 EOF
1804 chmod +x $TMPSH >> $logfile 2>&1
1805 if ! $TMPSH >> $logfile 2>&1; then
1806     cat <<EOF
1807 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1808 variable to another directory and make sure that it is not mounted noexec.
1809 EOF
1810     die "Sanity test failed."
1811 fi
1812
1813 filter_cflags=echo
1814 filter_cppflags=echo
1815 filter_asflags=echo
1816
1817 if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1818     cc_type=llvm_gcc
1819     cc_version=__VERSION__
1820     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1821     cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1822     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1823     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1824     speed_cflags='-O3'
1825     size_cflags='-Os'
1826 elif $cc -v 2>&1 | grep -qi ^gcc; then
1827     cc_type=gcc
1828     cc_version=__VERSION__
1829     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1830     cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
1831     if ! $cc -dumpversion | grep -q '^2\.'; then
1832         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1833         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1834     fi
1835     speed_cflags='-O3'
1836     size_cflags='-Os'
1837 elif $cc --version 2>/dev/null | grep -q Intel; then
1838     cc_type=icc
1839     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1840     cc_ident=$($cc --version | head -n1)
1841     CC_DEPFLAGS='-MMD'
1842     AS_DEPFLAGS='-MMD'
1843     speed_cflags='-O3'
1844     size_cflags='-Os'
1845     noopt_cflags='-O1'
1846 elif $cc -v 2>&1 | grep -q xlc; then
1847     cc_type=xlc
1848     cc_version="AV_STRINGIFY(__IBMC__)"
1849     cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1850     speed_cflags='-O5'
1851     size_cflags='-O5 -qcompact'
1852 elif $cc -V 2>/dev/null | grep -q Compaq; then
1853     cc_type=ccc
1854     cc_version="AV_STRINGIFY(__DECC_VER)"
1855     cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1856     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1857     debuglevel=3
1858     add_ldflags -Wl,-z,now # calls to libots crash without this
1859     speed_cflags='-fast'
1860     size_cflags='-O1'
1861 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1862     test -d "$sysroot" || die "No valid sysroot specified."
1863     cc_type=armcc
1864     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1865     cc_ident=$($cc --vsn | head -n1)
1866     armcc_conf="$PWD/armcc.conf"
1867     $cc --arm_linux_configure                 \
1868         --arm_linux_config_file="$armcc_conf" \
1869         --configure_sysroot="$sysroot"        \
1870         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1871         die "Error creating armcc configuration file."
1872     $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1873     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1874     as_default="${cross_prefix}gcc"
1875     CC_DEPFLAGS='-MMD'
1876     AS_DEPFLAGS='-MMD'
1877     speed_cflags='-O3'
1878     size_cflags='-Os'
1879 elif $cc -version 2>/dev/null | grep -q TMS470; then
1880     cc_type=tms470
1881     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1882     cc_ident=$($cc -version | head -n1 | tr -s ' ')
1883     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1884     CC_O='-fr=$(@D)'
1885     as_default="${cross_prefix}gcc"
1886     ld_default="${cross_prefix}gcc"
1887     TMPO=$(basename $TMPC .c).o
1888     append TMPFILES $TMPO
1889     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1890     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1891     AS_DEPFLAGS='-MMD'
1892     speed_cflags='-O3 -mf=5'
1893     size_cflags='-O3 -mf=2'
1894     filter_cflags=tms470_flags
1895     tms470_flags(){
1896         for flag; do
1897             case $flag in
1898                 -march=*|-mcpu=*)
1899                     case "${flag#*=}" in
1900                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1901                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1902                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1903                         armv6*|arm11*)          echo -mv=6   ;;
1904                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1905                                                 echo -mv=5e  ;;
1906                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1907                     esac
1908                     ;;
1909                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1910                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1911                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1912                 -msoft-float)   echo --float_support=vfplib       ;;
1913                 -O[0-3]|-mf=*)  echo $flag                        ;;
1914                 -g)             echo -g -mn                       ;;
1915                 -pds=*)         echo $flag                        ;;
1916             esac
1917         done
1918     }
1919 elif $cc -v 2>&1 | grep -q clang; then
1920     cc_type=clang
1921     $cc -dM -E $TMPC | grep -q __clang_version__ &&
1922         cc_version=__clang_version__ || cc_version=__VERSION__
1923     cc_ident=$($cc --version | head -n1)
1924     CC_DEPFLAGS='-MMD'
1925     AS_DEPFLAGS='-MMD'
1926     speed_cflags='-O3'
1927     size_cflags='-Os'
1928 elif $cc -V 2>&1 | grep -q Sun; then
1929     cc_type=suncc
1930     cc_version="AV_STRINGIFY(__SUNPRO_C)"
1931     cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1932     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1933     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1934     speed_cflags='-O5'
1935     size_cflags='-O5 -xspace'
1936     filter_cflags=suncc_flags
1937     suncc_flags(){
1938         for flag; do
1939             case $flag in
1940                 -march=*|-mcpu=*)
1941                     case "${flag#*=}" in
1942                         native)                   echo -xtarget=native       ;;
1943                         v9|niagara)               echo -xarch=sparc          ;;
1944                         ultrasparc)               echo -xarch=sparcvis       ;;
1945                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1946                         i586|pentium)             echo -xchip=pentium        ;;
1947                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1948                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1949                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1950                         pentium4*)          echo -xtarget=pentium4           ;;
1951                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1952                         *-sse3)             echo -xarch=sse3                 ;;
1953                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
1954                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1955                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1956                         k8|opteron|athlon64|athlon-fx)
1957                                                   echo -xarch=sse2a          ;;
1958                         athlon*)                  echo -xarch=pentium_proa   ;;
1959                     esac
1960                     ;;
1961                 -std=c99)             echo -xc99              ;;
1962                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
1963                 -fPIC)                echo -KPIC -xcode=pic32 ;;
1964                 -W*,*)                echo $flag              ;;
1965                 -f*-*|-W*)                                    ;;
1966                 *)                    echo $flag              ;;
1967             esac
1968         done
1969     }
1970 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
1971     cc_type=pathscale
1972     cc_version=__PATHSCALE__
1973     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1974     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1975     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1976     speed_cflags='-O2'
1977     size_cflags='-Os'
1978 elif $cc -v 2>&1 | grep -q Open64; then
1979     cc_type=open64
1980     cc_version=__OPEN64__
1981     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1982     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1983     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1984     speed_cflags='-O2'
1985     size_cflags='-Os'
1986 fi
1987
1988 test -n "$cc_type" && enable $cc_type ||
1989     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1990
1991 : ${as_default:=$cc}
1992 : ${dep_cc_default:=$cc}
1993 : ${ld_default:=$cc}
1994 set_default ar as dep_cc ld
1995
1996 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1997 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1998
1999 add_cflags $extra_cflags
2000 add_asflags $extra_cflags
2001
2002 if test -n "$sysroot"; then
2003     case "$cc_type" in
2004         gcc|llvm_gcc)
2005             add_cppflags --sysroot="$sysroot"
2006             add_ldflags --sysroot="$sysroot"
2007         ;;
2008         tms470)
2009             add_cppflags -I"$sysinclude"
2010             add_ldflags  --sysroot="$sysroot"
2011         ;;
2012         clang)
2013             add_cppflags -isysroot "$sysroot"
2014             add_ldflags -isysroot "$sysroot"
2015         ;;
2016     esac
2017 fi
2018
2019 if test "$cpu" = host; then
2020     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2021
2022     case "$cc_type" in
2023         gcc|llvm_gcc)
2024             check_native(){
2025                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2026                 sed -n "/$1=/{
2027                             s/.*$1=\\([^ ]*\\).*/\\1/
2028                             p
2029                             q
2030                         }" $TMPE
2031             }
2032             cpu=$(check_native -march || check_native -mcpu)
2033         ;;
2034     esac
2035
2036     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2037 fi
2038
2039 # Deal with common $arch aliases
2040 case "$arch" in
2041     arm*)
2042         arch="arm"
2043     ;;
2044     mips|mipsel|IP*)
2045         arch="mips"
2046     ;;
2047     mips64*)
2048         arch="mips"
2049         subarch="mips64"
2050     ;;
2051     parisc|hppa)
2052         arch="parisc"
2053     ;;
2054     parisc64|hppa64)
2055         arch="parisc"
2056         subarch="parisc64"
2057     ;;
2058     "Power Macintosh"|ppc|powerpc)
2059         arch="ppc"
2060     ;;
2061     ppc64|powerpc64)
2062         arch="ppc"
2063         subarch="ppc64"
2064     ;;
2065     s390|s390x)
2066         arch="s390"
2067     ;;
2068     sh4|sh)
2069         arch="sh4"
2070     ;;
2071     sun4u|sparc64)
2072         arch="sparc"
2073         subarch="sparc64"
2074     ;;
2075     i[3-6]86|i86pc|BePC|x86_64|amd64)
2076         arch="x86"
2077     ;;
2078 esac
2079
2080 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2081 enable $arch
2082
2083 # Add processor-specific flags
2084 if test "$cpu" = generic; then
2085     : do nothing
2086 elif enabled ppc; then
2087
2088     case $(tolower $cpu) in
2089         601|ppc601|powerpc601)
2090             cpuflags="-mcpu=601"
2091             disable altivec
2092         ;;
2093         603*|ppc603*|powerpc603*)
2094             cpuflags="-mcpu=603"
2095             disable altivec
2096         ;;
2097         604*|ppc604*|powerpc604*)
2098             cpuflags="-mcpu=604"
2099             disable altivec
2100         ;;
2101         g3|75*|ppc75*|powerpc75*)
2102             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2103             disable altivec
2104         ;;
2105         g4|745*|ppc745*|powerpc745*)
2106             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2107         ;;
2108         74*|ppc74*|powerpc74*)
2109             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2110         ;;
2111         g5|970|ppc970|powerpc970|power4*)
2112             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2113         ;;
2114         cell)
2115             cpuflags="-mcpu=cell"
2116             enable ldbrx
2117         ;;
2118         e500v2)
2119             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2120             disable altivec
2121         ;;
2122         e500)
2123             cpuflags="-mcpu=8540 -mhard-float"
2124             disable altivec
2125         ;;
2126     esac
2127
2128 elif enabled x86; then
2129
2130     case $cpu in
2131         i[345]86|pentium)
2132             cpuflags="-march=$cpu"
2133             disable mmx
2134         ;;
2135         # targets that do NOT support conditional mov (cmov)
2136         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2137             cpuflags="-march=$cpu"
2138             disable cmov
2139         ;;
2140         # targets that do support conditional mov (cmov)
2141         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2142             cpuflags="-march=$cpu"
2143             enable cmov
2144             enable fast_cmov
2145         ;;
2146         # targets that do support conditional mov but on which it's slow
2147         pentium4|pentium4m|prescott|nocona)
2148             cpuflags="-march=$cpu"
2149             enable cmov
2150             disable fast_cmov
2151         ;;
2152     esac
2153
2154 elif enabled sparc; then
2155
2156     case $cpu in
2157         niagara)
2158             cpuflags="-mcpu=$cpu"
2159             disable vis
2160         ;;
2161         sparc64)
2162             cpuflags="-mcpu=v9"
2163         ;;
2164     esac
2165
2166 elif enabled arm; then
2167
2168     case $cpu in
2169         armv*)
2170             cpuflags="-march=$cpu"
2171             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2172         ;;
2173         *)
2174             cpuflags="-mcpu=$cpu"
2175             case $cpu in
2176                 cortex-a*)                               subarch=armv7a  ;;
2177                 cortex-r*)                               subarch=armv7r  ;;
2178                 cortex-m*)                               subarch=armv7m  ;;
2179                 arm11*)                                  subarch=armv6   ;;
2180                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2181                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2182             esac
2183         ;;
2184     esac
2185
2186 elif enabled alpha; then
2187
2188     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2189
2190 elif enabled bfin; then
2191
2192     cpuflags="-mcpu=$cpu"
2193
2194 elif enabled mips; then
2195
2196     cpuflags="-march=$cpu"
2197
2198 elif enabled avr32; then
2199
2200     case $cpu in
2201         ap7[02]0[0-2])
2202             subarch="avr32_ap"
2203             cpuflags="-mpart=$cpu"
2204         ;;
2205         ap)
2206             subarch="avr32_ap"
2207             cpuflags="-march=$cpu"
2208         ;;
2209         uc3[ab]*)
2210             subarch="avr32_uc"
2211             cpuflags="-mcpu=$cpu"
2212         ;;
2213         uc)
2214             subarch="avr32_uc"
2215             cpuflags="-march=$cpu"
2216         ;;
2217     esac
2218
2219 fi
2220
2221 add_cflags $cpuflags
2222 add_asflags $cpuflags
2223
2224 # compiler sanity check
2225 check_exec <<EOF
2226 int main(void){ return 0; }
2227 EOF
2228 if test "$?" != 0; then
2229     echo "$cc is unable to create an executable file."
2230     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2231         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2232         echo "Only do this if you know what cross compiling means."
2233     fi
2234     die "C compiler test failed."
2235 fi
2236
2237 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2238 check_cflags -std=c99
2239 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2240 #include <stdlib.h>
2241 EOF
2242 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2243 #include <stdlib.h>
2244 EOF
2245
2246 check_host_cflags -std=c99
2247
2248 case "$arch" in
2249     alpha|ia64|mips|parisc|sparc)
2250         spic=$shared
2251     ;;
2252     x86)
2253         subarch="x86_32"
2254         check_cc <<EOF && subarch="x86_64"
2255         int test[(int)sizeof(char*) - 7];
2256 EOF
2257         if test "$subarch" = "x86_64"; then
2258             spic=$shared
2259         fi
2260     ;;
2261 esac
2262
2263 enable $subarch
2264 enabled spic && enable pic
2265
2266 # OS specific
2267 case $target_os in
2268     haiku)
2269         prefix_default="/boot/common"
2270         network_extralibs="-lnetwork"
2271         ;;
2272     sunos)
2273         FFSERVERLDFLAGS=""
2274         SHFLAGS='-shared -Wl,-h,$$(@F)'
2275         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2276         network_extralibs="-lsocket -lnsl"
2277         add_cppflags -D__EXTENSIONS__
2278         nm_opts='-P -g'
2279         ;;
2280     netbsd)
2281         oss_indev_extralibs="-lossaudio"
2282         oss_outdev_extralibs="-lossaudio"
2283         add_cppflags -D_XOPEN_SOURCE=600
2284         ;;
2285     openbsd)
2286         enable malloc_aligned
2287         # On OpenBSD 4.5. the compiler does not use PIC unless
2288         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2289         # however the generated executable will not do anything
2290         # (simply quits with exit-code 1, no crash, no output).
2291         # Thus explicitly enable PIC here.
2292         enable pic
2293         SHFLAGS='-shared'
2294         oss_indev_extralibs="-lossaudio"
2295         oss_outdev_extralibs="-lossaudio"
2296         ;;
2297     freebsd|dragonfly)
2298         enable malloc_aligned
2299         ;;
2300     bsd/os)
2301         add_extralibs -lpoll -lgnugetopt
2302         strip="strip -d"
2303         ;;
2304     darwin)
2305         enable malloc_aligned
2306         gas="gas-preprocessor.pl $cc"
2307         enabled ppc && add_asflags -force_cpusubtype_ALL
2308         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2309         strip="${strip} -x"
2310         add_ldflags -Wl,-dynamic,-search_paths_first
2311         SLIBSUF=".dylib"
2312         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2313         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2314         FFSERVERLDFLAGS=-Wl,-bind_at_load
2315         objformat="macho"
2316         enabled x86_64 && objformat="macho64"
2317         enabled_any pic shared ||
2318             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2319         ;;
2320     mingw32*)
2321         if test $target_os = "mingw32ce"; then
2322             disable network
2323         else
2324             target_os=mingw32
2325         fi
2326         LIBTARGET=i386
2327         if enabled x86_64; then
2328             enable malloc_aligned
2329             LIBTARGET=x64
2330         elif enabled arm; then
2331             LIBTARGET=arm
2332         fi
2333         shlibdir_default="$bindir_default"
2334         disable ffserver
2335         SLIBPREF=""
2336         SLIBSUF=".dll"
2337         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2338         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2339         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2340         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2341             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2342             install -d "$(LIBDIR)"; \
2343             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2344         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2345         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'
2346         objformat="win32"
2347         enable dos_paths
2348         check_cflags -fno-common
2349         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2350                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2351                 die "ERROR: MinGW runtime version must be >= 3.15."
2352         ;;
2353     cygwin*)
2354         target_os=cygwin
2355         shlibdir_default="$bindir_default"
2356         SLIBPREF="cyg"
2357         SLIBSUF=".dll"
2358         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2359         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2360         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2361         objformat="win32"
2362         enable dos_paths
2363         check_cflags -fno-common
2364         ;;
2365     *-dos|freedos|opendos)
2366         disable ffplay ffserver
2367         disable $INDEV_LIST $OUTDEV_LIST
2368         network_extralibs="-lsocket"
2369         objformat="coff"
2370         enable dos_paths
2371         ;;
2372     linux)
2373         enable dv1394
2374         ;;
2375     irix*)
2376         target_os=irix
2377         ranlib="echo ignoring ranlib"
2378         ;;
2379     os/2*)
2380         strip="lxlite"
2381         ln_s="cp -f"
2382         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2383         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2384         FFSERVERLDFLAGS=""
2385         LIBSUF="_s.a"
2386         SLIBPREF=""
2387         SLIBSUF=".dll"
2388         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2389         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2390         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2391           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2392           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2393           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2394           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2395           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2396         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2397           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2398         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2399         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2400         enable dos_paths
2401         ;;
2402     gnu/kfreebsd)
2403         ;;
2404     gnu)
2405         ;;
2406     none)
2407         ;;
2408     *)
2409         die "Unknown OS '$target_os'."
2410         ;;
2411 esac
2412
2413 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2414
2415 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2416
2417 set_default $PATHS_LIST
2418
2419 # we need to build at least one lib type
2420 if ! enabled_any static shared; then
2421     cat <<EOF
2422 At least one library type must be built.
2423 Specify --enable-static to build the static libraries or --enable-shared to
2424 build the shared libraries as well. To only build the shared libraries specify
2425 --disable-static in addition to --enable-shared.
2426 EOF
2427     exit 1;
2428 fi
2429
2430 disabled static && LIBNAME=""
2431
2432 die_license_disabled() {
2433     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2434 }
2435
2436 die_license_disabled gpl libx264
2437 die_license_disabled gpl libxavs
2438 die_license_disabled gpl libxvid
2439 die_license_disabled gpl postproc
2440 die_license_disabled gpl x11grab
2441
2442 die_license_disabled nonfree libfaac
2443
2444 die_license_disabled version3 libopencore_amrnb
2445 die_license_disabled version3 libopencore_amrwb
2446
2447 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2448
2449 check_deps $ARCH_EXT_LIST
2450
2451 disabled optimizations || check_cflags -fomit-frame-pointer
2452
2453 enable_pic() {
2454     enable pic
2455     add_cppflags -DPIC
2456     add_cflags   -fPIC
2457     add_asflags  -fPIC
2458 }
2459
2460 enabled pic && enable_pic
2461
2462 check_cc <<EOF || die "Symbol mangling check failed."
2463 int ff_extern;
2464 EOF
2465 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2466 extern_prefix=${sym%%ff_extern*}
2467
2468 check_cc <<EOF && enable inline_asm
2469 void foo(void) { __asm__ volatile ("" ::); }
2470 EOF
2471
2472 _restrict=
2473 for restrict_keyword in restrict __restrict__ __restrict; do
2474     check_cc <<EOF && _restrict=$restrict_keyword && break
2475 void foo(char * $restrict_keyword p);
2476 EOF
2477 done
2478
2479 check_cc <<EOF && enable attribute_packed
2480 struct { int x; } __attribute__((packed)) x;
2481 EOF
2482
2483 check_cc <<EOF && enable attribute_may_alias
2484 union { int x; } __attribute__((may_alias)) x;
2485 EOF
2486
2487 check_cc <<EOF || die "endian test failed"
2488 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2489 EOF
2490 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2491
2492 if enabled alpha; then
2493
2494     check_cflags -mieee
2495
2496 elif enabled arm; then
2497
2498     check_cflags -marm
2499     nogas=die
2500
2501     check_ld <<EOF && enable vfp_args
2502 __asm__ (".eabi_attribute 28, 1");
2503 int main(void) { return 0; }
2504 EOF
2505
2506     # We have to check if pld is a nop and disable it.
2507     check_asm pld '"pld [r0]"'
2508
2509     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2510     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2511     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2512     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2513     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2514     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2515
2516     enabled_all armv6t2 shared !pic && enable_pic
2517
2518 elif enabled mips; then
2519
2520     check_asm loongson '"dmult.g $1, $2, $3"'
2521     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2522
2523 elif enabled ppc; then
2524
2525     enable local_aligned_8 local_aligned_16
2526
2527     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2528     check_asm ibm_asm   '"add 0, 0, 0"'
2529     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2530     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2531
2532     # AltiVec flags: The FSF version of GCC differs from the Apple version
2533     if enabled altivec; then
2534         nogas=warn
2535         check_cflags -maltivec -mabi=altivec &&
2536         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2537         check_cflags -faltivec
2538
2539         # check if our compiler supports Motorola AltiVec C API
2540         check_cc <<EOF || disable altivec
2541 $inc_altivec_h
2542 int main(void) {
2543     vector signed int v1, v2, v3;
2544     v1 = vec_add(v2,v3);
2545     return 0;
2546 }
2547 EOF
2548
2549         # check if our compiler supports braces for vector declarations
2550         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2551 $inc_altivec_h
2552 int main (void) { (vector int) {1}; return 0; }
2553 EOF
2554     fi
2555
2556 elif enabled sparc; then
2557
2558     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2559         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2560
2561 elif enabled x86; then
2562
2563     enable local_aligned_8 local_aligned_16
2564
2565     # check whether EBP is available on x86
2566     # As 'i' is stored on the stack, this program will crash
2567     # if the base pointer is used to access it because the
2568     # base pointer is cleared in the inline assembly code.
2569     check_exec_crash <<EOF && enable ebp_available
2570     volatile int i=0;
2571     __asm__ volatile (
2572         "xorl %%ebp, %%ebp"
2573     ::: "%ebp");
2574     return i;
2575 EOF
2576
2577     # check whether EBX is available on x86
2578     check_asm ebx_available '""::"b"(0)' &&
2579         check_asm ebx_available '"":::"%ebx"'
2580
2581     # check whether more than 10 operands are supported
2582     check_cc <<EOF && enable ten_operands
2583 int main(void) {
2584     int x=0;
2585     __asm__ volatile(
2586         ""
2587         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2588     );
2589     return 0;
2590 }
2591 EOF
2592
2593     # check whether binutils is new enough to compile SSSE3/MMX2
2594     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2595     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2596
2597     check_asm bswap '"bswap %%eax" ::: "%eax"'
2598
2599     YASMFLAGS="-f $objformat"
2600     enabled     x86_64        && append YASMFLAGS "-m amd64"
2601     enabled     pic           && append YASMFLAGS "-DPIC"
2602     test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2603     case "$objformat" in
2604         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2605     esac
2606     if ! disabled_any asm mmx yasm; then
2607         check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2608             die "yasm not found, use --disable-yasm for a crippled build"
2609     fi
2610
2611     case "$cpu" in
2612         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2613             disable fast_clz
2614         ;;
2615     esac
2616
2617 fi
2618
2619 if enabled asm; then
2620     as=${gas:=$as}
2621     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2622         $nogas "GNU assembler not found, install gas-preprocessor"
2623 fi
2624
2625 if check_func dlopen; then
2626     ldl=
2627 elif check_func dlopen -ldl; then
2628     ldl=-ldl
2629 fi
2630
2631 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2632 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2633
2634 check_func  fcntl
2635 check_func  fork
2636 check_func  getaddrinfo $network_extralibs
2637 check_func  gethrtime
2638 check_func  getrusage
2639 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2640 check_func  inet_aton $network_extralibs
2641 check_func  isatty
2642 check_func  ${malloc_prefix}memalign            && enable memalign
2643 check_func  mkstemp
2644 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2645 check_func  setrlimit
2646 check_func  strerror_r
2647 check_func_headers io.h setmode
2648 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2649 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2650 check_func_headers windows.h GetProcessTimes
2651 check_func_headers windows.h VirtualAlloc
2652
2653 check_header conio.h
2654 check_header dlfcn.h
2655 check_header dxva2api.h
2656 check_header malloc.h
2657 check_header poll.h
2658 check_header sys/mman.h
2659 check_header sys/resource.h
2660 check_header sys/select.h
2661 check_header termios.h
2662 check_header vdpau/vdpau.h
2663 check_header vdpau/vdpau_x11.h
2664 check_header X11/extensions/XvMClib.h
2665
2666 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2667
2668 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2669      enabled_any $need_memalign ; then
2670     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2671 fi
2672
2673 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2674 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2675
2676 # check for some common methods of building with pthread support
2677 # do this before the optional library checks as some of them require pthreads
2678 if ! disabled pthreads && ! enabled w32threads; then
2679     enable pthreads
2680     if check_func pthread_create; then
2681         :
2682     elif check_func pthread_create -pthread; then
2683         add_cflags -pthread
2684         add_extralibs -pthread
2685     elif check_func pthread_create -pthreads; then
2686         add_cflags -pthreads
2687         add_extralibs -pthreads
2688     elif check_func pthread_create -lpthreadGC2; then
2689         add_extralibs -lpthreadGC2
2690     elif ! check_lib pthread.h pthread_create -lpthread; then
2691         disable pthreads
2692     fi
2693 fi
2694
2695 for thread in $THREADS_LIST; do
2696     if enabled $thread; then
2697         test -n "$thread_type" &&
2698             die "ERROR: Only one thread type must be selected." ||
2699             thread_type="$thread"
2700     fi
2701 done
2702
2703 check_lib math.h sin -lm
2704 disabled vaapi || check_lib va/va.h vaInitialize -lva
2705
2706 check_mathfunc exp2
2707 check_mathfunc exp2f
2708 check_mathfunc llrint
2709 check_mathfunc llrintf
2710 check_mathfunc log2
2711 check_mathfunc log2f
2712 check_mathfunc lrint
2713 check_mathfunc lrintf
2714 check_mathfunc round
2715 check_mathfunc roundf
2716 check_mathfunc truncf
2717
2718 # these are off by default, so fail if requested and not available
2719 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2720 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2721                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2722                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2723 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2724 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2725 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h hip_decode_init -lmp3lame
2726 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2727 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2728 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2729 enabled libopencv  && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
2730                         die "ERROR: libopencv not found"; }
2731 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2732 enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2733                         die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2734 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2735                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2736 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2737 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2738 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2739 enabled libvpx     && {
2740     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2741                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2742     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2743                                 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2744 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2745                       { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2746                         die "ERROR: libx264 version must be >= 0.98."; }
2747 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2748 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2749 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2750
2751 # libdc1394 check
2752 if enabled libdc1394; then
2753     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2754         enable libdc1394_2; } ||
2755     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2756         enable libdc1394_1; } ||
2757     die "ERROR: No version of libdc1394 found "
2758 fi
2759
2760 SDL_CONFIG="${cross_prefix}sdl-config"
2761 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2762     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2763     sdl_libs=$("${SDL_CONFIG}" --libs)
2764     check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2765     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2766     enable sdl &&
2767     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2768 fi
2769
2770 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2771
2772 if enabled network; then
2773     check_type "sys/types.h sys/socket.h" socklen_t
2774     check_type netdb.h "struct addrinfo"
2775     check_type netinet/in.h "struct ipv6_mreq"
2776     check_type netinet/in.h "struct sockaddr_in6"
2777     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2778     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2779     # Prefer arpa/inet.h over winsock2
2780     if check_header arpa/inet.h ; then
2781         check_func closesocket
2782     elif check_header winsock2.h ; then
2783         check_func_headers winsock2.h closesocket -lws2 && \
2784             network_extralibs="-lws2" || \
2785         { check_func_headers winsock2.h closesocket -lws2_32 && \
2786             network_extralibs="-lws2_32"; }
2787         check_type ws2tcpip.h socklen_t
2788         check_type ws2tcpip.h "struct addrinfo"
2789         check_type ws2tcpip.h "struct ipv6_mreq"
2790         check_type ws2tcpip.h "struct sockaddr_in6"
2791         check_type ws2tcpip.h "struct sockaddr_storage"
2792         check_struct winsock2.h "struct sockaddr" sa_len
2793     else
2794         disable network
2795     fi
2796 fi
2797
2798 check_header linux/videodev.h
2799 check_header linux/videodev2.h
2800 check_header sys/videoio.h
2801
2802 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2803 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2804 # w32api 3.12 had it defined wrong
2805 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2806
2807 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2808 { check_header dev/bktr/ioctl_meteor.h &&
2809   check_header dev/bktr/ioctl_bt848.h; } ||
2810 { check_header machine/ioctl_meteor.h &&
2811   check_header machine/ioctl_bt848.h; } ||
2812 { check_header dev/video/meteor/ioctl_meteor.h &&
2813   check_header dev/video/bktr/ioctl_bt848.h; } ||
2814 check_header dev/ic/bt8xx.h
2815
2816 check_header sys/soundcard.h
2817 check_header soundcard.h
2818
2819 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2820
2821 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2822
2823 enabled x11grab                         &&
2824 check_header X11/Xlib.h                 &&
2825 check_header X11/extensions/XShm.h      &&
2826 check_header X11/extensions/Xfixes.h    &&
2827 check_func XOpenDisplay -lX11           &&
2828 check_func XShmCreateImage -lX11 -lXext &&
2829 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2830
2831 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2832 check_cpp_condition \
2833     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2834     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2835       disable vdpau; }
2836 fi
2837
2838 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2839
2840 # add some useful compiler flags if supported
2841 check_cflags -Wdeclaration-after-statement
2842 check_cflags -Wall
2843 check_cflags -Wno-parentheses
2844 check_cflags -Wno-switch
2845 check_cflags -Wdisabled-optimization
2846 check_cflags -Wpointer-arith
2847 check_cflags -Wredundant-decls
2848 check_cflags -Wno-pointer-sign
2849 check_cflags -Wcast-qual
2850 check_cflags -Wwrite-strings
2851 check_cflags -Wtype-limits
2852 check_cflags -Wundef
2853 check_cflags -Wmissing-prototypes
2854 enabled extra_warnings && check_cflags -Winline
2855
2856 # add some linker flags
2857 check_ldflags -Wl,--warn-common
2858 check_ldflags -Wl,--as-needed
2859 check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2860 check_ldflags -Wl,-Bsymbolic
2861
2862 echo "X{};" > $TMPV
2863 if test_ldflags -Wl,--version-script,$TMPV; then
2864     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2865     check_cc <<EOF && enable symver_asm_label
2866 void ff_foo(void) __asm__ ("av_foo@VERSION");
2867 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2868 EOF
2869     check_cc <<EOF && enable symver_gnu_asm
2870 __asm__(".symver ff_foo,av_foo@VERSION");
2871 void ff_foo(void) {}
2872 EOF
2873 fi
2874
2875 if enabled small; then
2876     add_cflags $size_cflags
2877     optimizations="small"
2878 elif enabled optimizations; then
2879     add_cflags $speed_cflags
2880 else
2881     add_cflags $noopt_cflags
2882 fi
2883 check_cflags -fno-math-errno
2884 check_cflags -fno-signed-zeros
2885
2886 if enabled icc; then
2887     # Just warnings, no remarks
2888     check_cflags -w1
2889     # -wd: Disable following warnings
2890     # 144, 167, 556: -Wno-pointer-sign
2891     # 10006: ignoring unknown option -fno-signed-zeros
2892     # 10156: ignoring option '-W'; no argument required
2893     check_cflags -wd144,167,556,10006,10156
2894     # 11030: Warning unknown option --as-needed
2895     # 10156: ignoring option '-export'; no argument required
2896     check_ldflags -wd10156,11030
2897     # Allow to compile with optimizations
2898     check_ldflags -march=$cpu
2899     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2900     enable ebp_available
2901     enabled x86_32 && check_cflags -falign-stack=maintain-16-byte
2902 elif enabled ccc; then
2903     # disable some annoying warnings
2904     add_cflags -msg_disable cvtu32to64
2905     add_cflags -msg_disable embedcomment
2906     add_cflags -msg_disable needconstext
2907     add_cflags -msg_disable nomainieee
2908     add_cflags -msg_disable ptrmismatch1
2909     add_cflags -msg_disable unreachcode
2910 elif enabled gcc; then
2911     check_cflags -fno-tree-vectorize
2912     check_cflags -Werror=implicit-function-declaration
2913     check_cflags -Werror=missing-prototypes
2914 elif enabled llvm_gcc; then
2915     check_cflags -mllvm -stack-alignment=16
2916 elif enabled clang; then
2917     check_cflags -mllvm -stack-alignment=16
2918     check_cflags -Qunused-arguments
2919 elif enabled armcc; then
2920     # 2523: use of inline assembler is deprecated
2921     add_cflags -W${armcc_opt},--diag_suppress=2523
2922     add_cflags -W${armcc_opt},--diag_suppress=1207
2923 elif enabled tms470; then
2924     add_cflags -pds=824 -pds=837
2925 fi
2926
2927 enabled_any $THREADS_LIST      && enable threads
2928
2929 check_deps $CONFIG_LIST       \
2930            $CONFIG_EXTRA      \
2931            $HAVE_LIST         \
2932            $DECODER_LIST      \
2933            $ENCODER_LIST      \
2934            $HWACCEL_LIST      \
2935            $PARSER_LIST       \
2936            $BSF_LIST          \
2937            $DEMUXER_LIST      \
2938            $MUXER_LIST        \
2939            $FILTER_LIST       \
2940            $INDEV_LIST        \
2941            $OUTDEV_LIST       \
2942            $PROTOCOL_LIST     \
2943            $ACODEC_TESTS      \
2944            $VCODEC_TESTS      \
2945            $LAVF_TESTS        \
2946            $LAVFI_TESTS       \
2947            $SEEK_TESTS        \
2948
2949 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2950
2951 echo "install prefix            $prefix"
2952 echo "source path               $source_path"
2953 echo "C compiler                $cc"
2954 echo "ARCH                      $arch ($cpu)"
2955 if test "$build_suffix" != ""; then
2956     echo "build suffix              $build_suffix"
2957 fi
2958 if test "$extra_version" != ""; then
2959     echo "version string suffix     $extra_version"
2960 fi
2961 echo "big-endian                ${bigendian-no}"
2962 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2963 if enabled x86; then
2964     echo "yasm                      ${yasm-no}"
2965     echo "MMX enabled               ${mmx-no}"
2966     echo "MMX2 enabled              ${mmx2-no}"
2967     echo "3DNow! enabled            ${amd3dnow-no}"
2968     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2969     echo "SSE enabled               ${sse-no}"
2970     echo "SSSE3 enabled             ${ssse3-no}"
2971     echo "CMOV enabled              ${cmov-no}"
2972     echo "CMOV is fast              ${fast_cmov-no}"
2973     echo "EBX available             ${ebx_available-no}"
2974     echo "EBP available             ${ebp_available-no}"
2975     echo "10 operands supported     ${ten_operands-no}"
2976 fi
2977 if enabled arm; then
2978     echo "ARMv5TE enabled           ${armv5te-no}"
2979     echo "ARMv6 enabled             ${armv6-no}"
2980     echo "ARMv6T2 enabled           ${armv6t2-no}"
2981     echo "ARM VFP enabled           ${armvfp-no}"
2982     echo "IWMMXT enabled            ${iwmmxt-no}"
2983     echo "NEON enabled              ${neon-no}"
2984 fi
2985 if enabled mips; then
2986     echo "MMI enabled               ${mmi-no}"
2987 fi
2988 if enabled ppc; then
2989     echo "AltiVec enabled           ${altivec-no}"
2990     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2991     echo "dcbzl available           ${dcbzl-no}"
2992 fi
2993 if enabled sparc; then
2994     echo "VIS enabled               ${vis-no}"
2995 fi
2996 echo "debug symbols             ${debug-no}"
2997 echo "strip symbols             ${stripping-no}"
2998 echo "optimizations             ${optimizations-no}"
2999 echo "static                    ${static-no}"
3000 echo "shared                    ${shared-no}"
3001 echo "postprocessing support    ${postproc-no}"
3002 echo "new filter support        ${avfilter-no}"
3003 echo "network support           ${network-no}"
3004 echo "threading support         ${thread_type-no}"
3005 echo "SDL support               ${sdl-no}"
3006 echo "Sun medialib support      ${mlib-no}"
3007 echo "AVISynth enabled          ${avisynth-no}"
3008 echo "libdc1394 support         ${libdc1394-no}"
3009 echo "libdirac enabled          ${libdirac-no}"
3010 echo "libfaac enabled           ${libfaac-no}"
3011 echo "libgsm enabled            ${libgsm-no}"
3012 echo "libmp3lame enabled        ${libmp3lame-no}"
3013 echo "libnut enabled            ${libnut-no}"
3014 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3015 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3016 echo "libopencv support         ${libopencv-no}"
3017 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3018 echo "librtmp enabled           ${librtmp-no}"
3019 echo "libschroedinger enabled   ${libschroedinger-no}"
3020 echo "libspeex enabled          ${libspeex-no}"
3021 echo "libtheora enabled         ${libtheora-no}"
3022 echo "libvorbis enabled         ${libvorbis-no}"
3023 echo "libvpx enabled            ${libvpx-no}"
3024 echo "libx264 enabled           ${libx264-no}"
3025 echo "libxavs enabled           ${libxavs-no}"
3026 echo "libxvid enabled           ${libxvid-no}"
3027 echo "zlib enabled              ${zlib-no}"
3028 echo "bzlib enabled             ${bzlib-no}"
3029 echo
3030
3031 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3032     echo "Enabled ${type}s:"
3033     eval list=\$$(toupper $type)_LIST
3034     print_enabled '_*' $list | sort | pr -3 -t
3035     echo
3036 done
3037
3038 license="LGPL version 2.1 or later"
3039 if enabled nonfree; then
3040     license="nonfree and unredistributable"
3041 elif enabled gplv3; then
3042     license="GPL version 3 or later"
3043 elif enabled lgplv3; then
3044     license="LGPL version 3 or later"
3045 elif enabled gpl; then
3046     license="GPL version 2 or later"
3047 fi
3048
3049 echo "License: $license"
3050
3051 echo "Creating config.mak and config.h..."
3052
3053 # build tree in object directory if source path is different from current one
3054 if enabled source_path_used; then
3055     DIRS="
3056         doc
3057         libavcodec
3058         libavcodec/$arch
3059         libavcore
3060         libavdevice
3061         libavfilter
3062         libavformat
3063         libavutil
3064         libavutil/$arch
3065         libpostproc
3066         libswscale
3067         libswscale/$arch
3068         tests
3069         tools
3070     "
3071     FILES="
3072         Makefile
3073         common.mak
3074         subdir.mak
3075         doc/texi2pod.pl
3076         libavcodec/Makefile
3077         libavcodec/${arch}/Makefile
3078         libavcore/Makefile
3079         libavdevice/Makefile
3080         libavfilter/Makefile
3081         libavformat/Makefile
3082         libavutil/Makefile
3083         libpostproc/Makefile
3084         libswscale/Makefile
3085     "
3086     map 'mkdir -p $v' $DIRS;
3087     map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3088 fi
3089
3090 enabled stripping || strip="echo skipping strip"
3091
3092 config_files="$TMPH config.mak"
3093
3094 cat > config.mak <<EOF
3095 # Automatically generated by configure - do not modify!
3096 ifndef FFMPEG_CONFIG_MAK
3097 FFMPEG_CONFIG_MAK=1
3098 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3099 prefix=$prefix
3100 LIBDIR=\$(DESTDIR)$libdir
3101 SHLIBDIR=\$(DESTDIR)$shlibdir
3102 INCDIR=\$(DESTDIR)$incdir
3103 BINDIR=\$(DESTDIR)$bindir
3104 DATADIR=\$(DESTDIR)$datadir
3105 MANDIR=\$(DESTDIR)$mandir
3106 SRC_PATH="$source_path"
3107 SRC_PATH_BARE=$source_path
3108 BUILD_ROOT="$PWD"
3109 CC_IDENT=$cc_ident
3110 ARCH=$arch
3111 CC=$cc
3112 AS=$as
3113 LD=$ld
3114 DEPCC=$dep_cc
3115 YASM=$yasmexe
3116 YASMDEP=$yasmexe
3117 AR=$ar
3118 RANLIB=$ranlib
3119 CP=cp -p
3120 LN_S=$ln_s
3121 STRIP=$strip
3122 CPPFLAGS=$CPPFLAGS
3123 CFLAGS=$CFLAGS
3124 ASFLAGS=$ASFLAGS
3125 CC_O=$CC_O
3126 LDFLAGS=$LDFLAGS
3127 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3128 SHFLAGS=$SHFLAGS
3129 YASMFLAGS=$YASMFLAGS
3130 BUILDSUF=$build_suffix
3131 FULLNAME=$FULLNAME
3132 LIBPREF=$LIBPREF
3133 LIBSUF=$LIBSUF
3134 LIBNAME=$LIBNAME
3135 SLIBPREF=$SLIBPREF
3136 SLIBSUF=$SLIBSUF
3137 EXESUF=$EXESUF
3138 EXTRA_VERSION=$extra_version
3139 DEPFLAGS=$DEPFLAGS
3140 CCDEP=$CCDEP
3141 ASDEP=$ASDEP
3142 CC_DEPFLAGS=$CC_DEPFLAGS
3143 AS_DEPFLAGS=$AS_DEPFLAGS
3144 HOSTCC=$host_cc
3145 HOSTCFLAGS=$host_cflags
3146 HOSTEXESUF=$HOSTEXESUF
3147 HOSTLDFLAGS=$host_ldflags
3148 HOSTLIBS=$host_libs
3149 TARGET_EXEC=$target_exec
3150 TARGET_PATH=$target_path
3151 SDL_LIBS=$sdl_libs
3152 SDL_CFLAGS=$sdl_cflags
3153 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3154 EXTRALIBS=$extralibs
3155 INSTALL=install
3156 LIBTARGET=${LIBTARGET}
3157 SLIBNAME=${SLIBNAME}
3158 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3159 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3160 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3161 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3162 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3163 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3164 SAMPLES=$samples
3165 EOF
3166
3167 get_version(){
3168     name=$1
3169     file=$source_path/$2
3170     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3171     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3172     lcname=$(tolower $name)
3173     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3174     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3175 }
3176
3177 get_version LIBSWSCALE  libswscale/swscale.h
3178 get_version LIBPOSTPROC libpostproc/postprocess.h
3179 get_version LIBAVCODEC  libavcodec/avcodec.h
3180 get_version LIBAVCORE   libavcore/avcore.h
3181 get_version LIBAVDEVICE libavdevice/avdevice.h
3182 get_version LIBAVFORMAT libavformat/avformat.h
3183 get_version LIBAVUTIL   libavutil/avutil.h
3184 get_version LIBAVFILTER libavfilter/avfilter.h
3185
3186 cat > $TMPH <<EOF
3187 /* Automatically generated by configure - do not modify! */
3188 #ifndef FFMPEG_CONFIG_H
3189 #define FFMPEG_CONFIG_H
3190 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3191 #define FFMPEG_LICENSE "$(c_escape $license)"
3192 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3193 #define CC_TYPE "$cc_type"
3194 #define CC_VERSION $cc_version
3195 #define restrict $_restrict
3196 #define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3197 #define EXTERN_PREFIX "${extern_prefix}"
3198 #define EXTERN_ASM ${extern_prefix}
3199 EOF
3200
3201 test -n "$malloc_prefix" &&
3202     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3203
3204 if enabled small || disabled optimizations; then
3205     echo "#undef  av_always_inline"  >> $TMPH
3206     echo "#define av_always_inline"  >> $TMPH
3207 fi
3208
3209 if enabled yasm; then
3210     append config_files $TMPASM
3211     printf '' >$TMPASM
3212 fi
3213
3214 print_config ARCH_   "$config_files" $ARCH_LIST
3215 print_config HAVE_   "$config_files" $HAVE_LIST
3216 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3217                                      $CONFIG_EXTRA      \
3218                                      $DECODER_LIST      \
3219                                      $ENCODER_LIST      \
3220                                      $HWACCEL_LIST      \
3221                                      $PARSER_LIST       \
3222                                      $BSF_LIST          \
3223                                      $DEMUXER_LIST      \
3224                                      $MUXER_LIST        \
3225                                      $FILTER_LIST       \
3226                                      $PROTOCOL_LIST     \
3227                                      $INDEV_LIST        \
3228                                      $OUTDEV_LIST       \
3229
3230 cat >>config.mak <<EOF
3231 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3232 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3233 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3234 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3235 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3236 EOF
3237
3238 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3239 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3240
3241 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3242 cp_if_changed $TMPH config.h
3243 touch .config
3244
3245 enabled yasm && cp_if_changed $TMPASM config.asm
3246
3247 cat > $TMPH <<EOF
3248 /* Generated by ffconf */
3249 #ifndef AVUTIL_AVCONFIG_H
3250 #define AVUTIL_AVCONFIG_H
3251 EOF
3252
3253 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3254
3255 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3256
3257 cp_if_changed $TMPH libavutil/avconfig.h
3258
3259 test -n "$WARNINGS" && printf "\n$WARNINGS"
3260
3261 # build pkg-config files
3262
3263 pkgconfig_generate(){
3264 name=$1
3265 shortname=${name#lib}${build_suffix}
3266 comment=$2
3267 version=$3
3268 libs=$4
3269 requires=$5
3270 enabled ${name#lib} || return 0
3271 cat <<EOF > $name/$name.pc
3272 prefix=$prefix
3273 exec_prefix=\${prefix}
3274 libdir=$libdir
3275 includedir=$incdir
3276
3277 Name: $name
3278 Description: $comment
3279 Version: $version
3280 Requires: $(enabled shared || echo $requires)
3281 Requires.private: $(enabled shared && echo $requires)
3282 Conflicts:
3283 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3284 Libs.private: $(enabled shared && echo $libs)
3285 Cflags: -I\${includedir}
3286 EOF
3287 cat <<EOF > $name/$name-uninstalled.pc
3288 prefix=
3289 exec_prefix=
3290 libdir=\${pcfiledir}
3291 includedir=${source_path}
3292
3293 Name: $name
3294 Description: $comment
3295 Version: $version
3296 Requires: $requires
3297 Conflicts:
3298 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3299 Cflags: -I\${includedir}
3300 EOF
3301 }
3302
3303 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3304 pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3305 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3306 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3307 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3308 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3309 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3310 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"