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