rtsp: Handle standard assigned codec names for private payload types, too
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 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 fi
1979
1980 test -n "$cc_type" && enable $cc_type ||
1981     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1982
1983 : ${as_default:=$cc}
1984 : ${dep_cc_default:=$cc}
1985 : ${ld_default:=$cc}
1986 set_default ar as dep_cc ld
1987
1988 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1989 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1990
1991 add_cflags $extra_cflags
1992 add_asflags $extra_cflags
1993
1994 if test -n "$sysroot"; then
1995     case "$cc_type" in
1996         gcc|llvm_gcc)
1997             add_cppflags --sysroot="$sysroot"
1998             add_ldflags --sysroot="$sysroot"
1999         ;;
2000         tms470)
2001             add_cppflags -I"$sysinclude"
2002             add_ldflags  --sysroot="$sysroot"
2003         ;;
2004         clang)
2005             add_cppflags -isysroot "$sysroot"
2006             add_ldflags -isysroot "$sysroot"
2007         ;;
2008     esac
2009 fi
2010
2011 if test "$cpu" = host; then
2012     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2013
2014     case "$cc_type" in
2015         gcc|llvm_gcc)
2016             check_native(){
2017                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2018                 sed -n "/$1=/{
2019                             s/.*$1=\\([^ ]*\\).*/\\1/
2020                             p
2021                             q
2022                         }" $TMPE
2023             }
2024             cpu=$(check_native -march || check_native -mcpu)
2025         ;;
2026     esac
2027
2028     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2029 fi
2030
2031 # Deal with common $arch aliases
2032 case "$arch" in
2033     arm*)
2034         arch="arm"
2035     ;;
2036     mips|mipsel|IP*)
2037         arch="mips"
2038     ;;
2039     mips64*)
2040         arch="mips"
2041         subarch="mips64"
2042     ;;
2043     parisc|hppa)
2044         arch="parisc"
2045     ;;
2046     parisc64|hppa64)
2047         arch="parisc"
2048         subarch="parisc64"
2049     ;;
2050     "Power Macintosh"|ppc|powerpc)
2051         arch="ppc"
2052     ;;
2053     ppc64|powerpc64)
2054         arch="ppc"
2055         subarch="ppc64"
2056     ;;
2057     s390|s390x)
2058         arch="s390"
2059     ;;
2060     sh4|sh)
2061         arch="sh4"
2062     ;;
2063     sun4u|sparc64)
2064         arch="sparc"
2065         subarch="sparc64"
2066     ;;
2067     i[3-6]86|i86pc|BePC|x86_64|amd64)
2068         arch="x86"
2069     ;;
2070 esac
2071
2072 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2073 enable $arch
2074
2075 # Add processor-specific flags
2076 if test "$cpu" = generic; then
2077     : do nothing
2078 elif enabled ppc; then
2079
2080     case $(tolower $cpu) in
2081         601|ppc601|powerpc601)
2082             cpuflags="-mcpu=601"
2083             disable altivec
2084         ;;
2085         603*|ppc603*|powerpc603*)
2086             cpuflags="-mcpu=603"
2087             disable altivec
2088         ;;
2089         604*|ppc604*|powerpc604*)
2090             cpuflags="-mcpu=604"
2091             disable altivec
2092         ;;
2093         g3|75*|ppc75*|powerpc75*)
2094             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2095             disable altivec
2096         ;;
2097         g4|745*|ppc745*|powerpc745*)
2098             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2099         ;;
2100         74*|ppc74*|powerpc74*)
2101             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2102         ;;
2103         g5|970|ppc970|powerpc970|power4*)
2104             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2105         ;;
2106         cell)
2107             cpuflags="-mcpu=cell"
2108             enable ldbrx
2109         ;;
2110         e500v2)
2111             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2112             disable altivec
2113         ;;
2114         e500)
2115             cpuflags="-mcpu=8540 -mhard-float"
2116             disable altivec
2117         ;;
2118     esac
2119
2120 elif enabled x86; then
2121
2122     case $cpu in
2123         i[345]86|pentium)
2124             cpuflags="-march=$cpu"
2125             disable mmx
2126         ;;
2127         # targets that do NOT support conditional mov (cmov)
2128         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2129             cpuflags="-march=$cpu"
2130             disable cmov
2131         ;;
2132         # targets that do support conditional mov (cmov)
2133         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2134             cpuflags="-march=$cpu"
2135             enable cmov
2136             enable fast_cmov
2137         ;;
2138         # targets that do support conditional mov but on which it's slow
2139         pentium4|pentium4m|prescott|nocona)
2140             cpuflags="-march=$cpu"
2141             enable cmov
2142             disable fast_cmov
2143         ;;
2144     esac
2145
2146 elif enabled sparc; then
2147
2148     case $cpu in
2149         niagara)
2150             cpuflags="-mcpu=$cpu"
2151             disable vis
2152         ;;
2153         sparc64)
2154             cpuflags="-mcpu=v9"
2155         ;;
2156     esac
2157
2158 elif enabled arm; then
2159
2160     case $cpu in
2161         armv*)
2162             cpuflags="-march=$cpu"
2163             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2164         ;;
2165         *)
2166             cpuflags="-mcpu=$cpu"
2167             case $cpu in
2168                 cortex-a*)                               subarch=armv7a  ;;
2169                 cortex-r*)                               subarch=armv7r  ;;
2170                 cortex-m*)                               subarch=armv7m  ;;
2171                 arm11*)                                  subarch=armv6   ;;
2172                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2173                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2174             esac
2175         ;;
2176     esac
2177
2178 elif enabled alpha; then
2179
2180     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2181
2182 elif enabled bfin; then
2183
2184     cpuflags="-mcpu=$cpu"
2185
2186 elif enabled mips; then
2187
2188     cpuflags="-march=$cpu"
2189
2190 elif enabled avr32; then
2191
2192     case $cpu in
2193         ap7[02]0[0-2])
2194             subarch="avr32_ap"
2195             cpuflags="-mpart=$cpu"
2196         ;;
2197         ap)
2198             subarch="avr32_ap"
2199             cpuflags="-march=$cpu"
2200         ;;
2201         uc3[ab]*)
2202             subarch="avr32_uc"
2203             cpuflags="-mcpu=$cpu"
2204         ;;
2205         uc)
2206             subarch="avr32_uc"
2207             cpuflags="-march=$cpu"
2208         ;;
2209     esac
2210
2211 fi
2212
2213 add_cflags $cpuflags
2214 add_asflags $cpuflags
2215
2216 # compiler sanity check
2217 check_exec <<EOF
2218 int main(void){ return 0; }
2219 EOF
2220 if test "$?" != 0; then
2221     echo "$cc is unable to create an executable file."
2222     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2223         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2224         echo "Only do this if you know what cross compiling means."
2225     fi
2226     die "C compiler test failed."
2227 fi
2228
2229 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2230 check_cflags -std=c99
2231 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2232 #include <stdlib.h>
2233 EOF
2234 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2235 #include <stdlib.h>
2236 EOF
2237
2238 check_host_cflags -std=c99
2239
2240 case "$arch" in
2241     alpha|ia64|mips|parisc|sparc)
2242         spic=$shared
2243     ;;
2244     x86)
2245         subarch="x86_32"
2246         check_cc <<EOF && subarch="x86_64"
2247         int test[(int)sizeof(char*) - 7];
2248 EOF
2249         if test "$subarch" = "x86_64"; then
2250             spic=$shared
2251         fi
2252     ;;
2253 esac
2254
2255 enable $subarch
2256 enabled spic && enable pic
2257
2258 # OS specific
2259 case $target_os in
2260     haiku)
2261         prefix_default="/boot/common"
2262         network_extralibs="-lnetwork"
2263         ;;
2264     sunos)
2265         FFSERVERLDFLAGS=""
2266         SHFLAGS='-shared -Wl,-h,$$(@F)'
2267         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2268         network_extralibs="-lsocket -lnsl"
2269         add_cppflags -D__EXTENSIONS__
2270         nm_opts='-P -g'
2271         ;;
2272     netbsd)
2273         oss_indev_extralibs="-lossaudio"
2274         oss_outdev_extralibs="-lossaudio"
2275         add_cppflags -D_XOPEN_SOURCE=600
2276         ;;
2277     openbsd)
2278         enable malloc_aligned
2279         # On OpenBSD 4.5. the compiler does not use PIC unless
2280         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2281         # however the generated executable will not do anything
2282         # (simply quits with exit-code 1, no crash, no output).
2283         # Thus explicitly enable PIC here.
2284         enable pic
2285         SHFLAGS='-shared'
2286         oss_indev_extralibs="-lossaudio"
2287         oss_outdev_extralibs="-lossaudio"
2288         ;;
2289     freebsd|dragonfly)
2290         enable malloc_aligned
2291         ;;
2292     bsd/os)
2293         add_extralibs -lpoll -lgnugetopt
2294         strip="strip -d"
2295         ;;
2296     darwin)
2297         enable malloc_aligned
2298         gas="gas-preprocessor.pl $cc"
2299         enabled ppc && add_asflags -force_cpusubtype_ALL
2300         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2301         strip="${strip} -x"
2302         add_ldflags -Wl,-dynamic,-search_paths_first
2303         SLIBSUF=".dylib"
2304         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2305         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2306         FFSERVERLDFLAGS=-Wl,-bind_at_load
2307         objformat="macho"
2308         enabled x86_64 && objformat="macho64"
2309         enabled_any pic shared ||
2310             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2311         ;;
2312     mingw32*)
2313         if test $target_os = "mingw32ce"; then
2314             disable network
2315         else
2316             target_os=mingw32
2317         fi
2318         LIBTARGET=i386
2319         if enabled x86_64; then
2320             enable malloc_aligned
2321             LIBTARGET=x64
2322         elif enabled arm; then
2323             LIBTARGET=arm
2324         fi
2325         shlibdir_default="$bindir_default"
2326         disable ffserver
2327         SLIBPREF=""
2328         SLIBSUF=".dll"
2329         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2330         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2331         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2332         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2333             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2334             install -d "$(LIBDIR)"; \
2335             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2336         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2337         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'
2338         objformat="win32"
2339         enable dos_paths
2340         check_cflags -fno-common
2341         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2342                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2343                 die "ERROR: MinGW runtime version must be >= 3.15."
2344         ;;
2345     cygwin*)
2346         target_os=cygwin
2347         shlibdir_default="$bindir_default"
2348         SLIBPREF="cyg"
2349         SLIBSUF=".dll"
2350         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2351         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2352         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2353         objformat="win32"
2354         enable dos_paths
2355         check_cflags -fno-common
2356         ;;
2357     *-dos|freedos|opendos)
2358         disable ffplay ffserver
2359         disable $INDEV_LIST $OUTDEV_LIST
2360         network_extralibs="-lsocket"
2361         objformat="coff"
2362         enable dos_paths
2363         ;;
2364     linux)
2365         enable dv1394
2366         ;;
2367     irix*)
2368         target_os=irix
2369         ranlib="echo ignoring ranlib"
2370         ;;
2371     os/2*)
2372         strip="lxlite"
2373         ln_s="cp -f"
2374         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2375         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2376         FFSERVERLDFLAGS=""
2377         LIBSUF="_s.a"
2378         SLIBPREF=""
2379         SLIBSUF=".dll"
2380         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2381         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2382         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2383           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2384           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2385           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2386           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2387           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2388         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2389           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2390         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2391         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2392         enable dos_paths
2393         ;;
2394     gnu/kfreebsd)
2395         ;;
2396     gnu)
2397         ;;
2398     none)
2399         ;;
2400     *)
2401         die "Unknown OS '$target_os'."
2402         ;;
2403 esac
2404
2405 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2406
2407 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2408
2409 set_default $PATHS_LIST
2410
2411 # we need to build at least one lib type
2412 if ! enabled_any static shared; then
2413     cat <<EOF
2414 At least one library type must be built.
2415 Specify --enable-static to build the static libraries or --enable-shared to
2416 build the shared libraries as well. To only build the shared libraries specify
2417 --disable-static in addition to --enable-shared.
2418 EOF
2419     exit 1;
2420 fi
2421
2422 disabled static && LIBNAME=""
2423
2424 die_license_disabled() {
2425     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2426 }
2427
2428 die_license_disabled gpl libx264
2429 die_license_disabled gpl libxavs
2430 die_license_disabled gpl libxvid
2431 die_license_disabled gpl postproc
2432 die_license_disabled gpl x11grab
2433
2434 die_license_disabled nonfree libfaac
2435
2436 die_license_disabled version3 libopencore_amrnb
2437 die_license_disabled version3 libopencore_amrwb
2438
2439 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2440
2441 check_deps $ARCH_EXT_LIST
2442
2443 disabled optimizations || check_cflags -fomit-frame-pointer
2444
2445 enable_pic() {
2446     enable pic
2447     add_cppflags -DPIC
2448     add_cflags   -fPIC
2449     add_asflags  -fPIC
2450 }
2451
2452 enabled pic && enable_pic
2453
2454 check_cc <<EOF || die "Symbol mangling check failed."
2455 int ff_extern;
2456 EOF
2457 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2458 extern_prefix=${sym%%ff_extern*}
2459
2460 check_cc <<EOF && enable inline_asm
2461 void foo(void) { __asm__ volatile ("" ::); }
2462 EOF
2463
2464 _restrict=
2465 for restrict_keyword in restrict __restrict__ __restrict; do
2466     check_cc <<EOF && _restrict=$restrict_keyword && break
2467 void foo(char * $restrict_keyword p);
2468 EOF
2469 done
2470
2471 check_cc <<EOF && enable attribute_packed
2472 struct { int x; } __attribute__((packed)) x;
2473 EOF
2474
2475 check_cc <<EOF && enable attribute_may_alias
2476 union { int x; } __attribute__((may_alias)) x;
2477 EOF
2478
2479 check_cc <<EOF || die "endian test failed"
2480 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2481 EOF
2482 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2483
2484 if enabled alpha; then
2485
2486     check_cflags -mieee
2487
2488 elif enabled arm; then
2489
2490     check_cflags -marm
2491     nogas=die
2492
2493     check_ld <<EOF && enable vfp_args
2494 __asm__ (".eabi_attribute 28, 1");
2495 int main(void) { return 0; }
2496 EOF
2497
2498     # We have to check if pld is a nop and disable it.
2499     check_asm pld '"pld [r0]"'
2500
2501     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2502     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2503     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2504     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2505     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2506     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2507
2508     enabled_all armv6t2 shared !pic && enable_pic
2509
2510 elif enabled mips; then
2511
2512     check_asm loongson '"dmult.g $1, $2, $3"'
2513     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2514
2515 elif enabled ppc; then
2516
2517     enable local_aligned_8 local_aligned_16
2518
2519     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2520     check_asm ibm_asm   '"add 0, 0, 0"'
2521     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2522     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2523
2524     # AltiVec flags: The FSF version of GCC differs from the Apple version
2525     if enabled altivec; then
2526         nogas=warn
2527         check_cflags -maltivec -mabi=altivec &&
2528         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2529         check_cflags -faltivec
2530
2531         # check if our compiler supports Motorola AltiVec C API
2532         check_cc <<EOF || disable altivec
2533 $inc_altivec_h
2534 int main(void) {
2535     vector signed int v1, v2, v3;
2536     v1 = vec_add(v2,v3);
2537     return 0;
2538 }
2539 EOF
2540
2541         # check if our compiler supports braces for vector declarations
2542         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2543 $inc_altivec_h
2544 int main (void) { (vector int) {1}; return 0; }
2545 EOF
2546     fi
2547
2548 elif enabled sparc; then
2549
2550     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2551         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2552
2553 elif enabled x86; then
2554
2555     enable local_aligned_8 local_aligned_16
2556
2557     # check whether EBP is available on x86
2558     # As 'i' is stored on the stack, this program will crash
2559     # if the base pointer is used to access it because the
2560     # base pointer is cleared in the inline assembly code.
2561     check_exec_crash <<EOF && enable ebp_available
2562     volatile int i=0;
2563     __asm__ volatile (
2564         "xorl %%ebp, %%ebp"
2565     ::: "%ebp");
2566     return i;
2567 EOF
2568
2569     # check whether EBX is available on x86
2570     check_asm ebx_available '""::"b"(0)' &&
2571         check_asm ebx_available '"":::"%ebx"'
2572
2573     # check whether more than 10 operands are supported
2574     check_cc <<EOF && enable ten_operands
2575 int main(void) {
2576     int x=0;
2577     __asm__ volatile(
2578         ""
2579         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2580     );
2581     return 0;
2582 }
2583 EOF
2584
2585     # check whether binutils is new enough to compile SSSE3/MMX2
2586     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2587     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2588
2589     check_asm bswap '"bswap %%eax" ::: "%eax"'
2590
2591     YASMFLAGS="-f $objformat"
2592     enabled     x86_64        && append YASMFLAGS "-m amd64"
2593     enabled     pic           && append YASMFLAGS "-DPIC"
2594     test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2595     case "$objformat" in
2596         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2597     esac
2598     if ! disabled_any asm mmx yasm; then
2599         check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2600             die "yasm not found, use --disable-yasm for a crippled build"
2601     fi
2602
2603     case "$cpu" in
2604         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2605             disable fast_clz
2606         ;;
2607     esac
2608
2609 fi
2610
2611 if enabled asm; then
2612     as=${gas:=$as}
2613     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2614         $nogas "GNU assembler not found, install gas-preprocessor"
2615 fi
2616
2617 if check_func dlopen; then
2618     ldl=
2619 elif check_func dlopen -ldl; then
2620     ldl=-ldl
2621 fi
2622
2623 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2624 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2625
2626 check_func  fcntl
2627 check_func  fork
2628 check_func  getaddrinfo $network_extralibs
2629 check_func  gethrtime
2630 check_func  getrusage
2631 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2632 check_func  inet_aton $network_extralibs
2633 check_func  isatty
2634 check_func  ${malloc_prefix}memalign            && enable memalign
2635 check_func  mkstemp
2636 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2637 check_func  setrlimit
2638 check_func  strerror_r
2639 check_func_headers io.h setmode
2640 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2641 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2642 check_func_headers windows.h GetProcessTimes
2643 check_func_headers windows.h VirtualAlloc
2644
2645 check_header conio.h
2646 check_header dlfcn.h
2647 check_header dxva2api.h
2648 check_header malloc.h
2649 check_header poll.h
2650 check_header sys/mman.h
2651 check_header sys/resource.h
2652 check_header sys/select.h
2653 check_header termios.h
2654 check_header vdpau/vdpau.h
2655 check_header vdpau/vdpau_x11.h
2656 check_header X11/extensions/XvMClib.h
2657
2658 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2659
2660 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2661      enabled_any $need_memalign ; then
2662     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2663 fi
2664
2665 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2666 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2667
2668 # check for some common methods of building with pthread support
2669 # do this before the optional library checks as some of them require pthreads
2670 if ! disabled pthreads && ! enabled w32threads; then
2671     enable pthreads
2672     if check_func pthread_create; then
2673         :
2674     elif check_func pthread_create -pthread; then
2675         add_cflags -pthread
2676         add_extralibs -pthread
2677     elif check_func pthread_create -pthreads; then
2678         add_cflags -pthreads
2679         add_extralibs -pthreads
2680     elif check_func pthread_create -lpthreadGC2; then
2681         add_extralibs -lpthreadGC2
2682     elif ! check_lib pthread.h pthread_create -lpthread; then
2683         disable pthreads
2684     fi
2685 fi
2686
2687 for thread in $THREADS_LIST; do
2688     if enabled $thread; then
2689         test -n "$thread_type" &&
2690             die "ERROR: Only one thread type must be selected." ||
2691             thread_type="$thread"
2692     fi
2693 done
2694
2695 check_lib math.h sin -lm
2696 disabled vaapi || check_lib va/va.h vaInitialize -lva
2697
2698 check_mathfunc exp2
2699 check_mathfunc exp2f
2700 check_mathfunc llrint
2701 check_mathfunc llrintf
2702 check_mathfunc log2
2703 check_mathfunc log2f
2704 check_mathfunc lrint
2705 check_mathfunc lrintf
2706 check_mathfunc round
2707 check_mathfunc roundf
2708 check_mathfunc truncf
2709
2710 # these are off by default, so fail if requested and not available
2711 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2712 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2713                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2714                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2715 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2716 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2717 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame
2718 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2719 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2720 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2721 enabled libopencv  && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
2722                         die "ERROR: libopencv not found"; }
2723 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2724 enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2725                         die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2726 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2727                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2728 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2729 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2730 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2731 enabled libvpx     && {
2732     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2733                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2734     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2735                                 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2736 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2737                       { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2738                         die "ERROR: libx264 version must be >= 0.98."; }
2739 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2740 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2741 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2742
2743 # libdc1394 check
2744 if enabled libdc1394; then
2745     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2746         enable libdc1394_2; } ||
2747     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2748         enable libdc1394_1; } ||
2749     die "ERROR: No version of libdc1394 found "
2750 fi
2751
2752 SDL_CONFIG="${cross_prefix}sdl-config"
2753 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2754     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2755     sdl_libs=$("${SDL_CONFIG}" --libs)
2756     check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2757     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2758     enable sdl &&
2759     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2760 fi
2761
2762 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2763
2764 if enabled network; then
2765     check_type "sys/types.h sys/socket.h" socklen_t
2766     check_type netdb.h "struct addrinfo"
2767     check_type netinet/in.h "struct ipv6_mreq"
2768     check_type netinet/in.h "struct sockaddr_in6"
2769     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2770     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2771     # Prefer arpa/inet.h over winsock2
2772     if check_header arpa/inet.h ; then
2773         check_func closesocket
2774     elif check_header winsock2.h ; then
2775         check_func_headers winsock2.h closesocket -lws2 && \
2776             network_extralibs="-lws2" || \
2777         { check_func_headers winsock2.h closesocket -lws2_32 && \
2778             network_extralibs="-lws2_32"; }
2779         check_type ws2tcpip.h socklen_t
2780         check_type ws2tcpip.h "struct addrinfo"
2781         check_type ws2tcpip.h "struct ipv6_mreq"
2782         check_type ws2tcpip.h "struct sockaddr_in6"
2783         check_type ws2tcpip.h "struct sockaddr_storage"
2784         check_struct winsock2.h "struct sockaddr" sa_len
2785     else
2786         disable network
2787     fi
2788 fi
2789
2790 check_header linux/videodev.h
2791 check_header linux/videodev2.h
2792 check_header sys/videoio.h
2793
2794 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2795 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2796 # w32api 3.12 had it defined wrong
2797 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2798
2799 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2800 { check_header dev/bktr/ioctl_meteor.h &&
2801   check_header dev/bktr/ioctl_bt848.h; } ||
2802 { check_header machine/ioctl_meteor.h &&
2803   check_header machine/ioctl_bt848.h; } ||
2804 { check_header dev/video/meteor/ioctl_meteor.h &&
2805   check_header dev/video/bktr/ioctl_bt848.h; } ||
2806 check_header dev/ic/bt8xx.h
2807
2808 check_header sys/soundcard.h
2809 check_header soundcard.h
2810
2811 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2812
2813 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2814
2815 enabled x11grab                         &&
2816 check_header X11/Xlib.h                 &&
2817 check_header X11/extensions/XShm.h      &&
2818 check_header X11/extensions/Xfixes.h    &&
2819 check_func XOpenDisplay -lX11           &&
2820 check_func XShmCreateImage -lX11 -lXext &&
2821 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2822
2823 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2824 check_cpp_condition \
2825     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2826     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2827       disable vdpau; }
2828 fi
2829
2830 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2831
2832 # add some useful compiler flags if supported
2833 check_cflags -Wdeclaration-after-statement
2834 check_cflags -Wall
2835 check_cflags -Wno-parentheses
2836 check_cflags -Wno-switch
2837 check_cflags -Wdisabled-optimization
2838 check_cflags -Wpointer-arith
2839 check_cflags -Wredundant-decls
2840 check_cflags -Wno-pointer-sign
2841 check_cflags -Wcast-qual
2842 check_cflags -Wwrite-strings
2843 check_cflags -Wtype-limits
2844 check_cflags -Wundef
2845 check_cflags -Wmissing-prototypes
2846 enabled extra_warnings && check_cflags -Winline
2847
2848 # add some linker flags
2849 check_ldflags -Wl,--warn-common
2850 check_ldflags -Wl,--as-needed
2851 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'
2852 check_ldflags -Wl,-Bsymbolic
2853
2854 echo "X{};" > $TMPV
2855 if test_ldflags -Wl,--version-script,$TMPV; then
2856     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2857     check_cc <<EOF && enable symver_asm_label
2858 void ff_foo(void) __asm__ ("av_foo@VERSION");
2859 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2860 EOF
2861     check_cc <<EOF && enable symver_gnu_asm
2862 __asm__(".symver ff_foo,av_foo@VERSION");
2863 void ff_foo(void) {}
2864 EOF
2865 fi
2866
2867 if enabled small; then
2868     add_cflags $size_cflags
2869     optimizations="small"
2870 elif enabled optimizations; then
2871     add_cflags $speed_cflags
2872 else
2873     add_cflags $noopt_cflags
2874 fi
2875 check_cflags -fno-math-errno
2876 check_cflags -fno-signed-zeros
2877
2878 if enabled icc; then
2879     # Just warnings, no remarks
2880     check_cflags -w1
2881     # -wd: Disable following warnings
2882     # 144, 167, 556: -Wno-pointer-sign
2883     # 10006: ignoring unknown option -fno-signed-zeros
2884     # 10156: ignoring option '-W'; no argument required
2885     check_cflags -wd144,167,556,10006,10156
2886     # 11030: Warning unknown option --as-needed
2887     # 10156: ignoring option '-export'; no argument required
2888     check_ldflags -wd10156,11030
2889     # Allow to compile with optimizations
2890     check_ldflags -march=$cpu
2891     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2892     enable ebp_available
2893 elif enabled ccc; then
2894     # disable some annoying warnings
2895     add_cflags -msg_disable cvtu32to64
2896     add_cflags -msg_disable embedcomment
2897     add_cflags -msg_disable needconstext
2898     add_cflags -msg_disable nomainieee
2899     add_cflags -msg_disable ptrmismatch1
2900     add_cflags -msg_disable unreachcode
2901 elif enabled gcc; then
2902     check_cflags -fno-tree-vectorize
2903     check_cflags -Werror=implicit-function-declaration
2904     check_cflags -Werror=missing-prototypes
2905 elif enabled llvm_gcc; then
2906     check_cflags -mllvm -stack-alignment=16
2907 elif enabled clang; then
2908     check_cflags -mllvm -stack-alignment=16
2909     check_cflags -Qunused-arguments
2910 elif enabled armcc; then
2911     # 2523: use of inline assembler is deprecated
2912     add_cflags -W${armcc_opt},--diag_suppress=2523
2913     add_cflags -W${armcc_opt},--diag_suppress=1207
2914 elif enabled tms470; then
2915     add_cflags -pds=824 -pds=837
2916 fi
2917
2918 enabled_any $THREADS_LIST      && enable threads
2919
2920 check_deps $CONFIG_LIST       \
2921            $CONFIG_EXTRA      \
2922            $HAVE_LIST         \
2923            $DECODER_LIST      \
2924            $ENCODER_LIST      \
2925            $HWACCEL_LIST      \
2926            $PARSER_LIST       \
2927            $BSF_LIST          \
2928            $DEMUXER_LIST      \
2929            $MUXER_LIST        \
2930            $FILTER_LIST       \
2931            $INDEV_LIST        \
2932            $OUTDEV_LIST       \
2933            $PROTOCOL_LIST     \
2934            $ACODEC_TESTS      \
2935            $VCODEC_TESTS      \
2936            $LAVF_TESTS        \
2937            $LAVFI_TESTS       \
2938            $SEEK_TESTS        \
2939
2940 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2941
2942 echo "install prefix            $prefix"
2943 echo "source path               $source_path"
2944 echo "C compiler                $cc"
2945 echo "ARCH                      $arch ($cpu)"
2946 if test "$build_suffix" != ""; then
2947     echo "build suffix              $build_suffix"
2948 fi
2949 if test "$extra_version" != ""; then
2950     echo "version string suffix     $extra_version"
2951 fi
2952 echo "big-endian                ${bigendian-no}"
2953 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2954 if enabled x86; then
2955     echo "yasm                      ${yasm-no}"
2956     echo "MMX enabled               ${mmx-no}"
2957     echo "MMX2 enabled              ${mmx2-no}"
2958     echo "3DNow! enabled            ${amd3dnow-no}"
2959     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2960     echo "SSE enabled               ${sse-no}"
2961     echo "SSSE3 enabled             ${ssse3-no}"
2962     echo "CMOV enabled              ${cmov-no}"
2963     echo "CMOV is fast              ${fast_cmov-no}"
2964     echo "EBX available             ${ebx_available-no}"
2965     echo "EBP available             ${ebp_available-no}"
2966     echo "10 operands supported     ${ten_operands-no}"
2967 fi
2968 if enabled arm; then
2969     echo "ARMv5TE enabled           ${armv5te-no}"
2970     echo "ARMv6 enabled             ${armv6-no}"
2971     echo "ARMv6T2 enabled           ${armv6t2-no}"
2972     echo "ARM VFP enabled           ${armvfp-no}"
2973     echo "IWMMXT enabled            ${iwmmxt-no}"
2974     echo "NEON enabled              ${neon-no}"
2975 fi
2976 if enabled mips; then
2977     echo "MMI enabled               ${mmi-no}"
2978 fi
2979 if enabled ppc; then
2980     echo "AltiVec enabled           ${altivec-no}"
2981     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2982     echo "dcbzl available           ${dcbzl-no}"
2983 fi
2984 if enabled sparc; then
2985     echo "VIS enabled               ${vis-no}"
2986 fi
2987 echo "debug symbols             ${debug-no}"
2988 echo "strip symbols             ${stripping-no}"
2989 echo "optimizations             ${optimizations-no}"
2990 echo "static                    ${static-no}"
2991 echo "shared                    ${shared-no}"
2992 echo "postprocessing support    ${postproc-no}"
2993 echo "new filter support        ${avfilter-no}"
2994 echo "network support           ${network-no}"
2995 echo "threading support         ${thread_type-no}"
2996 echo "SDL support               ${sdl-no}"
2997 echo "Sun medialib support      ${mlib-no}"
2998 echo "AVISynth enabled          ${avisynth-no}"
2999 echo "libdc1394 support         ${libdc1394-no}"
3000 echo "libdirac enabled          ${libdirac-no}"
3001 echo "libfaac enabled           ${libfaac-no}"
3002 echo "libgsm enabled            ${libgsm-no}"
3003 echo "libmp3lame enabled        ${libmp3lame-no}"
3004 echo "libnut enabled            ${libnut-no}"
3005 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3006 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3007 echo "libopencv support         ${libopencv-no}"
3008 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3009 echo "librtmp enabled           ${librtmp-no}"
3010 echo "libschroedinger enabled   ${libschroedinger-no}"
3011 echo "libspeex enabled          ${libspeex-no}"
3012 echo "libtheora enabled         ${libtheora-no}"
3013 echo "libvorbis enabled         ${libvorbis-no}"
3014 echo "libvpx enabled            ${libvpx-no}"
3015 echo "libx264 enabled           ${libx264-no}"
3016 echo "libxavs enabled           ${libxavs-no}"
3017 echo "libxvid enabled           ${libxvid-no}"
3018 echo "zlib enabled              ${zlib-no}"
3019 echo "bzlib enabled             ${bzlib-no}"
3020 echo
3021
3022 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3023     echo "Enabled ${type}s:"
3024     eval list=\$$(toupper $type)_LIST
3025     print_enabled '_*' $list | sort | pr -3 -t
3026     echo
3027 done
3028
3029 license="LGPL version 2.1 or later"
3030 if enabled nonfree; then
3031     license="nonfree and unredistributable"
3032 elif enabled gplv3; then
3033     license="GPL version 3 or later"
3034 elif enabled lgplv3; then
3035     license="LGPL version 3 or later"
3036 elif enabled gpl; then
3037     license="GPL version 2 or later"
3038 fi
3039
3040 echo "License: $license"
3041
3042 echo "Creating config.mak and config.h..."
3043
3044 # build tree in object directory if source path is different from current one
3045 if enabled source_path_used; then
3046     DIRS="
3047         doc
3048         libavcodec
3049         libavcodec/$arch
3050         libavcore
3051         libavdevice
3052         libavfilter
3053         libavformat
3054         libavutil
3055         libavutil/$arch
3056         libpostproc
3057         libswscale
3058         libswscale/$arch
3059         tests
3060         tools
3061     "
3062     FILES="
3063         Makefile
3064         common.mak
3065         subdir.mak
3066         doc/texi2pod.pl
3067         libavcodec/Makefile
3068         libavcodec/${arch}/Makefile
3069         libavcore/Makefile
3070         libavdevice/Makefile
3071         libavfilter/Makefile
3072         libavformat/Makefile
3073         libavutil/Makefile
3074         libpostproc/Makefile
3075         libswscale/Makefile
3076     "
3077     map 'mkdir -p $v' $DIRS;
3078     map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3079 fi
3080
3081 enabled stripping || strip="echo skipping strip"
3082
3083 config_files="$TMPH config.mak"
3084
3085 cat > config.mak <<EOF
3086 # Automatically generated by configure - do not modify!
3087 ifndef FFMPEG_CONFIG_MAK
3088 FFMPEG_CONFIG_MAK=1
3089 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3090 prefix=$prefix
3091 LIBDIR=\$(DESTDIR)$libdir
3092 SHLIBDIR=\$(DESTDIR)$shlibdir
3093 INCDIR=\$(DESTDIR)$incdir
3094 BINDIR=\$(DESTDIR)$bindir
3095 DATADIR=\$(DESTDIR)$datadir
3096 MANDIR=\$(DESTDIR)$mandir
3097 SRC_PATH="$source_path"
3098 SRC_PATH_BARE=$source_path
3099 BUILD_ROOT="$PWD"
3100 CC_IDENT=$cc_ident
3101 ARCH=$arch
3102 CC=$cc
3103 AS=$as
3104 LD=$ld
3105 DEPCC=$dep_cc
3106 YASM=$yasmexe
3107 YASMDEP=$yasmexe
3108 AR=$ar
3109 RANLIB=$ranlib
3110 CP=cp -p
3111 LN_S=$ln_s
3112 STRIP=$strip
3113 CPPFLAGS=$CPPFLAGS
3114 CFLAGS=$CFLAGS
3115 ASFLAGS=$ASFLAGS
3116 CC_O=$CC_O
3117 LDFLAGS=$LDFLAGS
3118 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3119 SHFLAGS=$SHFLAGS
3120 YASMFLAGS=$YASMFLAGS
3121 BUILDSUF=$build_suffix
3122 FULLNAME=$FULLNAME
3123 LIBPREF=$LIBPREF
3124 LIBSUF=$LIBSUF
3125 LIBNAME=$LIBNAME
3126 SLIBPREF=$SLIBPREF
3127 SLIBSUF=$SLIBSUF
3128 EXESUF=$EXESUF
3129 EXTRA_VERSION=$extra_version
3130 DEPFLAGS=$DEPFLAGS
3131 CCDEP=$CCDEP
3132 ASDEP=$ASDEP
3133 CC_DEPFLAGS=$CC_DEPFLAGS
3134 AS_DEPFLAGS=$AS_DEPFLAGS
3135 HOSTCC=$host_cc
3136 HOSTCFLAGS=$host_cflags
3137 HOSTEXESUF=$HOSTEXESUF
3138 HOSTLDFLAGS=$host_ldflags
3139 HOSTLIBS=$host_libs
3140 TARGET_EXEC=$target_exec
3141 TARGET_PATH=$target_path
3142 SDL_LIBS=$sdl_libs
3143 SDL_CFLAGS=$sdl_cflags
3144 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3145 EXTRALIBS=$extralibs
3146 INSTALL=install
3147 LIBTARGET=${LIBTARGET}
3148 SLIBNAME=${SLIBNAME}
3149 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3150 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3151 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3152 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3153 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3154 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3155 SAMPLES=$samples
3156 EOF
3157
3158 get_version(){
3159     name=$1
3160     file=$source_path/$2
3161     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3162     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3163     lcname=$(tolower $name)
3164     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3165     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3166 }
3167
3168 get_version LIBSWSCALE  libswscale/swscale.h
3169 get_version LIBPOSTPROC libpostproc/postprocess.h
3170 get_version LIBAVCODEC  libavcodec/avcodec.h
3171 get_version LIBAVCORE   libavcore/avcore.h
3172 get_version LIBAVDEVICE libavdevice/avdevice.h
3173 get_version LIBAVFORMAT libavformat/avformat.h
3174 get_version LIBAVUTIL   libavutil/avutil.h
3175 get_version LIBAVFILTER libavfilter/avfilter.h
3176
3177 cat > $TMPH <<EOF
3178 /* Automatically generated by configure - do not modify! */
3179 #ifndef FFMPEG_CONFIG_H
3180 #define FFMPEG_CONFIG_H
3181 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3182 #define FFMPEG_LICENSE "$(c_escape $license)"
3183 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3184 #define CC_TYPE "$cc_type"
3185 #define CC_VERSION $cc_version
3186 #define restrict $_restrict
3187 #define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3188 #define EXTERN_PREFIX "${extern_prefix}"
3189 #define EXTERN_ASM ${extern_prefix}
3190 EOF
3191
3192 test -n "$malloc_prefix" &&
3193     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3194
3195 if enabled small || disabled optimizations; then
3196     echo "#undef  av_always_inline"  >> $TMPH
3197     echo "#define av_always_inline"  >> $TMPH
3198 fi
3199
3200 if enabled yasm; then
3201     append config_files $TMPASM
3202     printf '' >$TMPASM
3203 fi
3204
3205 print_config ARCH_   "$config_files" $ARCH_LIST
3206 print_config HAVE_   "$config_files" $HAVE_LIST
3207 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3208                                      $CONFIG_EXTRA      \
3209                                      $DECODER_LIST      \
3210                                      $ENCODER_LIST      \
3211                                      $HWACCEL_LIST      \
3212                                      $PARSER_LIST       \
3213                                      $BSF_LIST          \
3214                                      $DEMUXER_LIST      \
3215                                      $MUXER_LIST        \
3216                                      $FILTER_LIST       \
3217                                      $PROTOCOL_LIST     \
3218                                      $INDEV_LIST        \
3219                                      $OUTDEV_LIST       \
3220
3221 cat >>config.mak <<EOF
3222 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3223 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3224 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3225 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3226 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3227 EOF
3228
3229 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3230 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3231
3232 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3233 cp_if_changed $TMPH config.h
3234 touch .config
3235
3236 enabled yasm && cp_if_changed $TMPASM config.asm
3237
3238 cat > $TMPH <<EOF
3239 /* Generated by ffconf */
3240 #ifndef AVUTIL_AVCONFIG_H
3241 #define AVUTIL_AVCONFIG_H
3242 EOF
3243
3244 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3245
3246 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3247
3248 cp_if_changed $TMPH libavutil/avconfig.h
3249
3250 test -n "$WARNINGS" && printf "\n$WARNINGS"
3251
3252 # build pkg-config files
3253
3254 pkgconfig_generate(){
3255 name=$1
3256 shortname=${name#lib}${build_suffix}
3257 comment=$2
3258 version=$3
3259 libs=$4
3260 requires=$5
3261 enabled ${name#lib} || return 0
3262 cat <<EOF > $name/$name.pc
3263 prefix=$prefix
3264 exec_prefix=\${prefix}
3265 libdir=$libdir
3266 includedir=$incdir
3267
3268 Name: $name
3269 Description: $comment
3270 Version: $version
3271 Requires: $(enabled shared || echo $requires)
3272 Requires.private: $(enabled shared && echo $requires)
3273 Conflicts:
3274 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3275 Libs.private: $(enabled shared && echo $libs)
3276 Cflags: -I\${includedir}
3277 EOF
3278 cat <<EOF > $name/$name-uninstalled.pc
3279 prefix=
3280 exec_prefix=
3281 libdir=\${pcfiledir}
3282 includedir=${source_path}
3283
3284 Name: $name
3285 Description: $comment
3286 Version: $version
3287 Requires: $requires
3288 Conflicts:
3289 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3290 Cflags: -I\${includedir}
3291 EOF
3292 }
3293
3294 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3295 pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3296 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3297 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3298 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3299 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3300 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3301 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"