mpegaudio float decoders depend on dct
[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     fcntl
985     fork
986     getaddrinfo
987     gethrtime
988     GetProcessMemoryInfo
989     GetProcessTimes
990     getrusage
991     struct_rusage_ru_maxrss
992     inet_aton
993     inline_asm
994     isatty
995     ldbrx
996     libdc1394_1
997     libdc1394_2
998     llrint
999     llrintf
1000     local_aligned_16
1001     local_aligned_8
1002     log2
1003     log2f
1004     loongson
1005     lrint
1006     lrintf
1007     lzo1x_999_compress
1008     machine_ioctl_bt848_h
1009     machine_ioctl_meteor_h
1010     malloc_h
1011     memalign
1012     mkstemp
1013     pld
1014     posix_memalign
1015     round
1016     roundf
1017     sdl
1018     sdl_video_size
1019     setmode
1020     socklen_t
1021     soundcard_h
1022     poll_h
1023     setrlimit
1024     strerror_r
1025     struct_addrinfo
1026     struct_ipv6_mreq
1027     struct_sockaddr_in6
1028     struct_sockaddr_sa_len
1029     struct_sockaddr_storage
1030     symver
1031     symver_gnu_asm
1032     symver_asm_label
1033     sys_mman_h
1034     sys_resource_h
1035     sys_select_h
1036     sys_soundcard_h
1037     sys_videoio_h
1038     ten_operands
1039     termios_h
1040     threads
1041     truncf
1042     vfp_args
1043     VirtualAlloc
1044     winsock2_h
1045     xform_asm
1046     yasm
1047 "
1048
1049 # options emitted with CONFIG_ prefix but not available on command line
1050 CONFIG_EXTRA="
1051     avutil
1052     gplv3
1053     lgplv3
1054 "
1055
1056 CMDLINE_SELECT="
1057     $ARCH_EXT_LIST
1058     $CONFIG_LIST
1059     $THREADS_LIST
1060     asm
1061     cross_compile
1062     debug
1063     extra_warnings
1064     logging
1065     optimizations
1066     stripping
1067     yasm
1068 "
1069
1070 PATHS_LIST='
1071     bindir
1072     datadir
1073     incdir
1074     libdir
1075     mandir
1076     prefix
1077     shlibdir
1078 '
1079
1080 CMDLINE_SET="
1081     $PATHS_LIST
1082     ar
1083     arch
1084     as
1085     build_suffix
1086     cc
1087     cpu
1088     cross_prefix
1089     dep_cc
1090     extra_version
1091     host_cc
1092     host_cflags
1093     host_ldflags
1094     host_libs
1095     host_os
1096     ld
1097     logfile
1098     malloc_prefix
1099     nm
1100     samples
1101     source_path
1102     strip
1103     sysinclude
1104     sysroot
1105     target_exec
1106     target_os
1107     target_path
1108 "
1109
1110 CMDLINE_APPEND="
1111     extra_cflags
1112 "
1113
1114 # code dependency declarations
1115
1116 # architecture extensions
1117
1118 armv5te_deps="arm"
1119 armv6_deps="arm"
1120 armv6t2_deps="arm"
1121 armvfp_deps="arm"
1122 iwmmxt_deps="arm"
1123 neon_deps="arm"
1124
1125 mmi_deps="mips"
1126
1127 altivec_deps="ppc"
1128 ppc4xx_deps="ppc"
1129
1130 vis_deps="sparc"
1131
1132 x86_64_suggest="cmov fast_cmov"
1133 amd3dnow_deps="mmx"
1134 amd3dnowext_deps="amd3dnow"
1135 mmx_deps="x86"
1136 mmx2_deps="mmx"
1137 sse_deps="mmx"
1138 ssse3_deps="sse"
1139
1140 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1141 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1142 fast_unaligned_if_any="armv6 ppc x86"
1143
1144 need_memalign="altivec neon sse"
1145 inline_asm_deps="!tms470"
1146
1147 symver_if_any="symver_asm_label symver_gnu_asm"
1148
1149 # subsystems
1150 mdct_select="fft"
1151 rdft_select="fft"
1152
1153 # decoders / encoders / hardware accelerators
1154 aac_decoder_select="mdct rdft aac_parser"
1155 aac_encoder_select="mdct"
1156 ac3_decoder_select="mdct ac3_parser"
1157 alac_encoder_select="lpc"
1158 amrnb_decoder_select="lsp"
1159 atrac1_decoder_select="mdct"
1160 atrac3_decoder_select="mdct"
1161 binkaudio_dct_decoder_select="mdct rdft dct"
1162 binkaudio_rdft_decoder_select="mdct rdft"
1163 cavs_decoder_select="golomb"
1164 cook_decoder_select="mdct"
1165 cscd_decoder_suggest="zlib"
1166 dca_decoder_select="mdct"
1167 dnxhd_encoder_select="aandct"
1168 dxa_decoder_select="zlib"
1169 eac3_decoder_select="ac3_decoder"
1170 eamad_decoder_select="aandct"
1171 eatgq_decoder_select="aandct"
1172 eatqi_decoder_select="aandct"
1173 ffv1_decoder_select="golomb"
1174 flac_decoder_select="golomb"
1175 flac_encoder_select="golomb lpc"
1176 flashsv_decoder_select="zlib"
1177 flashsv_encoder_select="zlib"
1178 flv_decoder_select="h263_decoder"
1179 flv_encoder_select="h263_encoder"
1180 h261_encoder_select="aandct"
1181 h263_decoder_select="h263_parser"
1182 h263_encoder_select="aandct"
1183 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1184 h263i_decoder_select="h263_decoder"
1185 h263p_encoder_select="h263_encoder"
1186 h264_decoder_select="golomb h264dsp"
1187 h264_dxva2_hwaccel_deps="dxva2api_h"
1188 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1189 h264_vaapi_hwaccel_select="vaapi"
1190 h264_vdpau_decoder_select="vdpau h264_decoder"
1191 imc_decoder_select="fft mdct"
1192 jpegls_decoder_select="golomb"
1193 jpegls_encoder_select="golomb"
1194 ljpeg_encoder_select="aandct"
1195 loco_decoder_select="golomb"
1196 mjpeg_encoder_select="aandct"
1197 mlp_decoder_select="mlp_parser"
1198 mp1float_decoder_select="dct"
1199 mp2float_decoder_select="dct"
1200 mp3adufloat_decoder_select="dct"
1201 mp3float_decoder_select="dct"
1202 mp3on4float_decoder_select="dct"
1203 mpeg1video_encoder_select="aandct"
1204 mpeg2video_encoder_select="aandct"
1205 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1206 mpeg4_encoder_select="h263_encoder"
1207 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1208 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1209 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1210 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1211 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1212 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1213 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1214 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1215 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1216 msmpeg4v1_decoder_select="h263_decoder"
1217 msmpeg4v1_encoder_select="h263_encoder"
1218 msmpeg4v2_decoder_select="h263_decoder"
1219 msmpeg4v2_encoder_select="h263_encoder"
1220 msmpeg4v3_decoder_select="h263_decoder"
1221 msmpeg4v3_encoder_select="h263_encoder"
1222 nellymoser_decoder_select="mdct"
1223 nellymoser_encoder_select="mdct"
1224 png_decoder_select="zlib"
1225 png_encoder_select="zlib"
1226 qcelp_decoder_select="lsp"
1227 qdm2_decoder_select="mdct rdft"
1228 ra_144_encoder_select="lpc"
1229 rv10_decoder_select="h263_decoder"
1230 rv10_encoder_select="h263_encoder"
1231 rv20_decoder_select="h263_decoder"
1232 rv20_encoder_select="h263_encoder"
1233 rv30_decoder_select="golomb h264dsp"
1234 rv40_decoder_select="golomb h264dsp"
1235 shorten_decoder_select="golomb"
1236 sipr_decoder_select="lsp"
1237 snow_decoder_select="dwt"
1238 snow_encoder_select="aandct dwt"
1239 sonic_decoder_select="golomb"
1240 sonic_encoder_select="golomb"
1241 sonic_ls_encoder_select="golomb"
1242 svq1_encoder_select="aandct"
1243 svq3_decoder_select="golomb h264dsp"
1244 svq3_decoder_suggest="zlib"
1245 theora_decoder_select="vp3_decoder"
1246 tiff_decoder_suggest="zlib"
1247 tiff_encoder_suggest="zlib"
1248 truehd_decoder_select="mlp_decoder"
1249 tscc_decoder_select="zlib"
1250 twinvq_decoder_select="mdct lsp"
1251 vc1_decoder_select="h263_decoder"
1252 vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1253 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1254 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1255 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1256 vorbis_decoder_select="mdct"
1257 vorbis_encoder_select="mdct"
1258 vp6a_decoder_select="vp6_decoder"
1259 vp6f_decoder_select="vp6_decoder"
1260 vp8_decoder_select="h264dsp"
1261 wmapro_decoder_select="mdct"
1262 wmav1_decoder_select="mdct"
1263 wmav1_encoder_select="mdct"
1264 wmav2_decoder_select="mdct"
1265 wmav2_encoder_select="mdct"
1266 wmavoice_decoder_select="lsp rdft dct"
1267 wmv1_decoder_select="h263_decoder"
1268 wmv1_encoder_select="h263_encoder"
1269 wmv2_decoder_select="h263_decoder"
1270 wmv2_encoder_select="h263_encoder"
1271 wmv3_decoder_select="vc1_decoder"
1272 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1273 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1274 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1275 zlib_decoder_select="zlib"
1276 zlib_encoder_select="zlib"
1277 zmbv_decoder_select="zlib"
1278 zmbv_encoder_select="zlib"
1279
1280 vaapi_deps="va_va_h"
1281 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1282
1283 # parsers
1284 h264_parser_select="golomb h264dsp"
1285
1286 # bitstream_filters
1287 aac_adtstoasc_bsf_select="aac_parser"
1288
1289 # external libraries
1290 libdirac_decoder_deps="libdirac !libschroedinger"
1291 libdirac_encoder_deps="libdirac"
1292 libfaac_encoder_deps="libfaac"
1293 libgsm_decoder_deps="libgsm"
1294 libgsm_encoder_deps="libgsm"
1295 libgsm_ms_decoder_deps="libgsm"
1296 libgsm_ms_encoder_deps="libgsm"
1297 libmp3lame_encoder_deps="libmp3lame"
1298 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1299 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1300 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1301 libopenjpeg_decoder_deps="libopenjpeg"
1302 libschroedinger_decoder_deps="libschroedinger"
1303 libschroedinger_encoder_deps="libschroedinger"
1304 libspeex_decoder_deps="libspeex"
1305 libtheora_encoder_deps="libtheora"
1306 libvorbis_encoder_deps="libvorbis"
1307 libvpx_decoder_deps="libvpx"
1308 libvpx_encoder_deps="libvpx"
1309 libx264_encoder_deps="libx264"
1310 libxvid_encoder_deps="libxvid"
1311
1312 # demuxers / muxers
1313 ac3_demuxer_deps="ac3_parser"
1314 asf_stream_muxer_select="asf_muxer"
1315 avisynth_demuxer_deps="avisynth"
1316 dirac_demuxer_deps="dirac_parser"
1317 eac3_demuxer_select="ac3_parser"
1318 ipod_muxer_select="mov_muxer"
1319 libnut_demuxer_deps="libnut"
1320 libnut_muxer_deps="libnut"
1321 matroska_audio_muxer_select="matroska_muxer"
1322 matroska_demuxer_suggest="zlib bzlib"
1323 mov_demuxer_suggest="zlib"
1324 mp3_demuxer_deps="mpegaudio_parser"
1325 mp4_muxer_select="mov_muxer"
1326 mpegtsraw_demuxer_select="mpegts_demuxer"
1327 mxf_d10_muxer_select="mxf_muxer"
1328 ogg_demuxer_select="golomb"
1329 psp_muxer_select="mov_muxer"
1330 rtsp_demuxer_deps="sdp_demuxer"
1331 rtsp_muxer_deps="sdp_demuxer"
1332 rtsp_muxer_select="rtp_muxer"
1333 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1334 sdp_demuxer_select="asf_demuxer rm_demuxer"
1335 spdif_muxer_select="aac_parser"
1336 tg2_muxer_select="mov_muxer"
1337 tgp_muxer_select="mov_muxer"
1338 w64_demuxer_deps="wav_demuxer"
1339
1340 # indevs / outdevs
1341 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1342 alsa_indev_extralibs="-lasound"
1343 alsa_outdev_deps="alsa_asoundlib_h"
1344 alsa_outdev_extralibs="-lasound"
1345 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1346 dv1394_indev_deps="dv1394 dv_demuxer"
1347 jack_indev_deps="jack_jack_h"
1348 jack_indev_extralibs="-ljack"
1349 libdc1394_indev_deps="libdc1394"
1350 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1351 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1352 v4l_indev_deps="linux_videodev_h"
1353 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1354 vfwcap_indev_deps="capCreateCaptureWindow"
1355 vfwcap_indev_extralibs="-lavicap32"
1356 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1357 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1358
1359 # protocols
1360 gopher_protocol_deps="network"
1361 http_protocol_deps="network"
1362 http_protocol_select="tcp_protocol"
1363 mmst_protocol_deps="network"
1364 rtmp_protocol_select="tcp_protocol"
1365 rtp_protocol_select="udp_protocol"
1366 tcp_protocol_deps="network"
1367 udp_protocol_deps="network"
1368
1369 # filters
1370 movie_filter_deps="avfilter_lavf"
1371 avfilter_lavf_deps="avformat"
1372
1373 # libraries
1374 avdevice_deps="avcodec avformat"
1375 avformat_deps="avcodec"
1376
1377 # programs
1378 ffmpeg_deps="avcodec avformat swscale"
1379 ffmpeg_select="buffer_filter"
1380 ffplay_deps="avcodec avformat swscale sdl"
1381 ffplay_select="rdft"
1382 ffprobe_deps="avcodec avformat"
1383 ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1384 ffserver_extralibs='$ldl'
1385
1386 doc_deps="texi2html"
1387
1388 # default parameters
1389
1390 logfile="config.log"
1391
1392 # installation paths
1393 prefix_default="/usr/local"
1394 bindir_default='${prefix}/bin'
1395 datadir_default='${prefix}/share/ffmpeg'
1396 incdir_default='${prefix}/include'
1397 libdir_default='${prefix}/lib'
1398 mandir_default='${prefix}/share/man'
1399 shlibdir_default="$libdir_default"
1400
1401 # toolchain
1402 ar_default="ar"
1403 cc_default="gcc"
1404 cc_version=\"unknown\"
1405 host_cc_default="gcc"
1406 ln_s="ln -sf"
1407 nm_default="nm"
1408 objformat="elf"
1409 ranlib="ranlib"
1410 strip_default="strip"
1411 yasmexe="yasm"
1412
1413 nm_opts='-g'
1414
1415 # machine
1416 arch_default=$(uname -m)
1417 cpu="generic"
1418
1419 # OS
1420 target_os_default=$(tolower $(uname -s))
1421 host_os=$target_os_default
1422
1423 # configurable options
1424 enable avcodec
1425 enable avdevice
1426 enable avfilter
1427 enable avformat
1428 enable avutil
1429 enable asm
1430 enable debug
1431 enable doc
1432 enable fastdiv
1433 enable ffmpeg
1434 enable ffplay
1435 enable ffprobe
1436 enable ffserver
1437 enable mpegaudio_hp
1438 enable network
1439 enable optimizations
1440 enable protocols
1441 enable static
1442 enable stripping
1443 enable swscale
1444 enable swscale_alpha
1445
1446 # build settings
1447 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1448 FFSERVERLDFLAGS=-Wl,-E
1449 LIBPREF="lib"
1450 LIBSUF=".a"
1451 FULLNAME='$(NAME)$(BUILDSUF)'
1452 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1453 SLIBPREF="lib"
1454 SLIBSUF=".so"
1455 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1456 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1457 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1458 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1459
1460 CC_O='-o $@'
1461
1462 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1463 host_libs='-lm'
1464
1465 target_path='$(CURDIR)'
1466
1467 # since the object filename is not given with the -MM flag, the compiler
1468 # is only able to print the basename, and we must add the path ourselves
1469 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1470 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1471
1472 # find source path
1473 source_path="$(dirname "$0")"
1474 enable source_path_used
1475 if test -f configure; then
1476     source_path="$(pwd)"
1477     disable source_path_used
1478 else
1479     source_path="$(cd "$source_path"; pwd)"
1480     echo "$source_path" | grep -q '[[:blank:]]' &&
1481         die "Out of tree builds are impossible with whitespace in source path."
1482     test -e "$source_path/config.h" &&
1483         die "Out of tree builds are impossible with config.h in source dir."
1484 fi
1485
1486 for v in "$@"; do
1487     r=${v#*=}
1488     l=${v%"$r"}
1489     r=$(sh_quote "$r")
1490     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1491 done
1492
1493 find_things(){
1494     thing=$1
1495     pattern=$2
1496     file=$source_path/$3
1497     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1498 }
1499
1500 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1501 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1502 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1503 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1504 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1505 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1506 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1507 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1508 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1509 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1510 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1511
1512 for n in $COMPONENT_LIST; do
1513     v=$(toupper ${n%s})_LIST
1514     eval enable \$$v
1515     eval ${n}_if_any="\$$v"
1516 done
1517
1518 enable $ARCH_EXT_LIST
1519
1520 die_unknown(){
1521     echo "Unknown option \"$1\"."
1522     echo "See $0 --help for available options."
1523     exit 1
1524 }
1525
1526 show_list() {
1527     suffix=_$1
1528     shift
1529     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1530     exit 0
1531 }
1532
1533 for opt do
1534     optval="${opt#*=}"
1535     case "$opt" in
1536     --extra-ldflags=*) add_ldflags $optval
1537     ;;
1538     --extra-libs=*) add_extralibs $optval
1539     ;;
1540     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1541     ;;
1542     --enable-debug=*) debuglevel="$optval"
1543     ;;
1544     --disable-everything)
1545     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1546     ;;
1547     --enable-*=*|--disable-*=*)
1548     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1549     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1550     eval list=\$$(toupper $thing)_LIST
1551     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1552     $action $(filter "$name" $list)
1553     ;;
1554     --enable-?*|--disable-?*)
1555     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1556     if is_in $option $COMPONENT_LIST; then
1557         test $action = disable && action=unset
1558         eval $action \$$(toupper ${option%s})_LIST
1559     elif is_in $option $CMDLINE_SELECT; then
1560         $action $option
1561     else
1562         die_unknown $opt
1563     fi
1564     ;;
1565     --list-*)
1566         NAME="${opt#--list-}"
1567         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1568         NAME=${NAME%s}
1569         eval show_list $NAME \$$(toupper $NAME)_LIST
1570     ;;
1571     --help|-h) show_help
1572     ;;
1573     *)
1574     optname="${opt%%=*}"
1575     optname="${optname#--}"
1576     optname=$(echo "$optname" | sed 's/-/_/g')
1577     if is_in $optname $CMDLINE_SET; then
1578         eval $optname='$optval'
1579     elif is_in $optname $CMDLINE_APPEND; then
1580         append $optname "$optval"
1581     else
1582          die_unknown $opt
1583     fi
1584     ;;
1585     esac
1586 done
1587
1588 disabled logging && logfile=/dev/null
1589
1590 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1591 set >> $logfile
1592
1593 test -n "$cross_prefix" && enable cross_compile
1594
1595 if enabled cross_compile; then
1596     test -n "$arch" && test -n "$target_os" ||
1597         die "Must specify target arch and OS when cross-compiling"
1598 fi
1599
1600 set_default arch target_os
1601
1602 ar_default="${cross_prefix}${ar_default}"
1603 cc_default="${cross_prefix}${cc_default}"
1604 nm_default="${cross_prefix}${nm_default}"
1605 ranlib="${cross_prefix}${ranlib}"
1606 strip_default="${cross_prefix}${strip_default}"
1607
1608 sysinclude_default="${sysroot}/usr/include"
1609
1610 set_default cc nm strip sysinclude
1611 enabled cross_compile || host_cc_default=$cc
1612 set_default host_cc
1613
1614 exesuf() {
1615     case $1 in
1616         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1617     esac
1618 }
1619
1620 EXESUF=$(exesuf $target_os)
1621 HOSTEXESUF=$(exesuf $host_os)
1622
1623 # set temporary file name
1624 : ${TMPDIR:=$TEMPDIR}
1625 : ${TMPDIR:=$TMP}
1626 : ${TMPDIR:=/tmp}
1627
1628 if ! check_cmd type mktemp; then
1629     # simple replacement for missing mktemp
1630     # NOT SAFE FOR GENERAL USE
1631     mktemp(){
1632         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1633     }
1634 fi
1635
1636 tmpfile(){
1637     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1638         (set -C; exec > $tmp) 2>/dev/null ||
1639         die "Unable to create temporary file in $TMPDIR."
1640     append TMPFILES $tmp
1641     eval $1=$tmp
1642 }
1643
1644 trap 'rm -f -- $TMPFILES' EXIT
1645 trap exit HUP INT TERM
1646
1647 tmpfile TMPC  .c
1648 tmpfile TMPE  $EXESUF
1649 tmpfile TMPH  .h
1650 tmpfile TMPO  .o
1651 tmpfile TMPS  .S
1652 tmpfile TMPV  .ver
1653 tmpfile TMPSH .sh
1654
1655 unset -f mktemp
1656
1657 # make sure we can execute files in $TMPDIR
1658 cat > $TMPSH 2>> $logfile <<EOF
1659 #! /bin/sh
1660 EOF
1661 chmod +x $TMPSH >> $logfile 2>&1
1662 if ! $TMPSH >> $logfile 2>&1; then
1663     cat <<EOF
1664 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1665 variable to another directory and make sure that it is not mounted noexec.
1666 EOF
1667     die "Sanity test failed."
1668 fi
1669
1670 filter_cflags=echo
1671 filter_cppflags=echo
1672 filter_asflags=echo
1673
1674 if   $cc -v 2>&1 | grep -qi ^gcc; then
1675     cc_type=gcc
1676     cc_version=__VERSION__
1677     if ! $cc -dumpversion | grep -q '^2\.'; then
1678         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1679         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1680     fi
1681     speed_cflags='-O3'
1682     size_cflags='-Os'
1683 elif $cc --version 2>/dev/null | grep -q Intel; then
1684     cc_type=icc
1685     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1686     CC_DEPFLAGS='-MMD'
1687     AS_DEPFLAGS='-MMD'
1688     speed_cflags='-O3'
1689     size_cflags='-Os'
1690     noopt_cflags='-O1'
1691 elif $cc -v 2>&1 | grep -q xlc; then
1692     cc_type=xlc
1693     cc_version="AV_STRINGIFY(__IBMC__)"
1694     speed_cflags='-O5'
1695     size_cflags='-O5 -qcompact'
1696 elif $cc -V 2>/dev/null | grep -q Compaq; then
1697     cc_type=ccc
1698     cc_version="AV_STRINGIFY(__DECC_VER)"
1699     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1700     debuglevel=3
1701     add_ldflags -Wl,-z,now # calls to libots crash without this
1702     speed_cflags='-fast'
1703     size_cflags='-O1'
1704 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1705     test -d "$sysroot" || die "No valid sysroot specified."
1706     cc_type=armcc
1707     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1708     armcc_conf="$PWD/armcc.conf"
1709     $cc --arm_linux_configure                 \
1710         --arm_linux_config_file="$armcc_conf" \
1711         --configure_sysroot="$sysroot"        \
1712         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1713         die "Error creating armcc configuration file."
1714     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1715     as_default="${cross_prefix}gcc"
1716     CC_DEPFLAGS='-MMD'
1717     AS_DEPFLAGS='-MMD'
1718     speed_cflags='-O3'
1719     size_cflags='-Os'
1720 elif $cc -version 2>/dev/null | grep -q TMS470; then
1721     cc_type=tms470
1722     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1723     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1724     CC_O='-fr=$(@D)'
1725     as_default="${cross_prefix}gcc"
1726     ld_default="${cross_prefix}gcc"
1727     TMPO=$(basename $TMPC .c).o
1728     append TMPFILES $TMPO
1729     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1730     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1731     AS_DEPFLAGS='-MMD'
1732     speed_cflags='-O3 -mf=5'
1733     size_cflags='-O3 -mf=2'
1734     filter_cflags=tms470_flags
1735     tms470_flags(){
1736         for flag; do
1737             case $flag in
1738                 -march=*|-mcpu=*)
1739                     case "${flag#*=}" in
1740                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1741                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1742                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1743                         armv6*|arm11*)          echo -mv=6   ;;
1744                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1745                                                 echo -mv=5e  ;;
1746                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1747                     esac
1748                     ;;
1749                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1750                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1751                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1752                 -msoft-float)   echo --float_support=vfplib       ;;
1753                 -O[0-3]|-mf=*)  echo $flag                        ;;
1754                 -g)             echo -g -mn                       ;;
1755                 -pds=*)         echo $flag                        ;;
1756             esac
1757         done
1758     }
1759 elif $cc -v 2>&1 | grep -q clang; then
1760     cc_type=clang
1761     cc_version=__VERSION__
1762     CC_DEPFLAGS='-MMD'
1763     AS_DEPFLAGS='-MMD'
1764     speed_cflags='-O3'
1765     size_cflags='-Os'
1766 elif $cc -V 2>&1 | grep -q Sun; then
1767     cc_type=suncc
1768     cc_version="AV_STRINGIFY(__SUNPRO_C)"
1769     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1770     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1771     speed_cflags='-O5'
1772     size_cflags='-O5 -xspace'
1773     filter_cflags=suncc_flags
1774     suncc_flags(){
1775         for flag; do
1776             case $flag in
1777                 -march=*|-mcpu=*)
1778                     case "${flag#*=}" in
1779                         native)                   echo -xtarget=native       ;;
1780                         v9|niagara)               echo -xarch=sparc          ;;
1781                         ultrasparc)               echo -xarch=sparcvis       ;;
1782                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1783                         i586|pentium)             echo -xchip=pentium        ;;
1784                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1785                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1786                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1787                         pentium4*)          echo -xtarget=pentium4           ;;
1788                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1789                         *-sse3)             echo -xarch=sse3                 ;;
1790                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
1791                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1792                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1793                         k8|opteron|athlon64|athlon-fx)
1794                                                   echo -xarch=sse2a          ;;
1795                         athlon*)                  echo -xarch=pentium_proa   ;;
1796                     esac
1797                     ;;
1798                 -std=c99)             echo -xc99              ;;
1799                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
1800                 -fPIC)                echo -KPIC -xcode=pic32 ;;
1801                 -W*,*)                echo $flag              ;;
1802                 -f*-*|-W*)                                    ;;
1803                 *)                    echo $flag              ;;
1804             esac
1805         done
1806     }
1807 fi
1808
1809 test -n "$cc_type" && enable $cc_type ||
1810     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1811
1812 : ${as_default:=$cc}
1813 : ${dep_cc_default:=$cc}
1814 : ${ld_default:=$cc}
1815 set_default ar as dep_cc ld
1816
1817 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1818 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1819
1820 add_cflags $extra_cflags
1821 add_asflags $extra_cflags
1822
1823 if test -n "$sysroot"; then
1824     case "$cc_type" in
1825         gcc)
1826             add_cppflags --sysroot="$sysroot"
1827             add_ldflags --sysroot="$sysroot"
1828         ;;
1829         tms470)
1830             add_cppflags -I"$sysinclude"
1831             add_ldflags  --sysroot="$sysroot"
1832         ;;
1833         clang)
1834             add_cppflags -isysroot "$sysroot"
1835             add_ldflags -isysroot "$sysroot"
1836         ;;
1837     esac
1838 fi
1839
1840 if test "$cpu" = host; then
1841     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1842
1843     case "$cc_type" in
1844         gcc)
1845             check_native(){
1846                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1847                 sed -n "/$1=/{
1848                             s/.*$1=\\([^ ]*\\).*/\\1/
1849                             p
1850                             q
1851                         }" $TMPE
1852             }
1853             cpu=$(check_native -march || check_native -mcpu)
1854         ;;
1855     esac
1856
1857     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1858 fi
1859
1860 # Deal with common $arch aliases
1861 case "$arch" in
1862     arm*)
1863         arch="arm"
1864     ;;
1865     mips|mipsel|IP*)
1866         arch="mips"
1867     ;;
1868     mips64*)
1869         arch="mips"
1870         subarch="mips64"
1871     ;;
1872     parisc|hppa)
1873         arch="parisc"
1874     ;;
1875     parisc64|hppa64)
1876         arch="parisc"
1877         subarch="parisc64"
1878     ;;
1879     "Power Macintosh"|ppc|powerpc)
1880         arch="ppc"
1881     ;;
1882     ppc64|powerpc64)
1883         arch="ppc"
1884         subarch="ppc64"
1885     ;;
1886     s390|s390x)
1887         arch="s390"
1888     ;;
1889     sh4|sh)
1890         arch="sh4"
1891     ;;
1892     sun4u|sparc64)
1893         arch="sparc"
1894         subarch="sparc64"
1895     ;;
1896     i[3-6]86|i86pc|BePC|x86_64|amd64)
1897         arch="x86"
1898     ;;
1899 esac
1900
1901 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
1902 enable $arch
1903
1904 # Add processor-specific flags
1905 if test "$cpu" = generic; then
1906     : do nothing
1907 elif enabled ppc; then
1908
1909     case $(tolower $cpu) in
1910         601|ppc601|powerpc601)
1911             cpuflags="-mcpu=601"
1912             disable altivec
1913         ;;
1914         603*|ppc603*|powerpc603*)
1915             cpuflags="-mcpu=603"
1916             disable altivec
1917         ;;
1918         604*|ppc604*|powerpc604*)
1919             cpuflags="-mcpu=604"
1920             disable altivec
1921         ;;
1922         g3|75*|ppc75*|powerpc75*)
1923             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1924             disable altivec
1925         ;;
1926         g4|745*|ppc745*|powerpc745*)
1927             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1928         ;;
1929         74*|ppc74*|powerpc74*)
1930             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1931         ;;
1932         g5|970|ppc970|powerpc970|power4*)
1933             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1934         ;;
1935         cell)
1936             cpuflags="-mcpu=cell"
1937             enable ldbrx
1938         ;;
1939         e500v2)
1940             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
1941             disable altivec
1942         ;;
1943         e500)
1944             cpuflags="-mcpu=8540 -mhard-float"
1945             disable altivec
1946         ;;
1947     esac
1948
1949 elif enabled x86; then
1950
1951     case $cpu in
1952         i[345]86|pentium)
1953             cpuflags="-march=$cpu"
1954             disable mmx
1955         ;;
1956         # targets that do NOT support conditional mov (cmov)
1957         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1958             cpuflags="-march=$cpu"
1959             disable cmov
1960         ;;
1961         # targets that do support conditional mov (cmov)
1962         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona)
1963             cpuflags="-march=$cpu"
1964             enable cmov
1965             enable fast_cmov
1966         ;;
1967         # targets that do support conditional mov but on which it's slow
1968         pentium4|pentium4m|prescott|nocona)
1969             cpuflags="-march=$cpu"
1970             enable cmov
1971             disable fast_cmov
1972         ;;
1973     esac
1974
1975 elif enabled sparc; then
1976
1977     case $cpu in
1978         niagara)
1979             cpuflags="-mcpu=$cpu"
1980             disable vis
1981         ;;
1982         sparc64)
1983             cpuflags="-mcpu=v9"
1984         ;;
1985     esac
1986
1987 elif enabled arm; then
1988
1989     case $cpu in
1990         armv*)
1991             cpuflags="-march=$cpu"
1992         ;;
1993         *)
1994             cpuflags="-mcpu=$cpu"
1995         ;;
1996     esac
1997
1998 elif enabled alpha; then
1999
2000     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2001
2002 elif enabled bfin; then
2003
2004     cpuflags="-mcpu=$cpu"
2005
2006 elif enabled mips; then
2007
2008     cpuflags="-march=$cpu"
2009
2010 elif enabled avr32; then
2011
2012     case $cpu in
2013         ap7[02]0[0-2])
2014             subarch="avr32_ap"
2015             cpuflags="-mpart=$cpu"
2016         ;;
2017         ap)
2018             subarch="avr32_ap"
2019             cpuflags="-march=$cpu"
2020         ;;
2021         uc3[ab]*)
2022             subarch="avr32_uc"
2023             cpuflags="-mcpu=$cpu"
2024         ;;
2025         uc)
2026             subarch="avr32_uc"
2027             cpuflags="-march=$cpu"
2028         ;;
2029     esac
2030
2031 fi
2032
2033 add_cflags $cpuflags
2034 add_asflags $cpuflags
2035
2036 # compiler sanity check
2037 check_exec <<EOF
2038 int main(void){ return 0; }
2039 EOF
2040 if test "$?" != 0; then
2041     echo "$cc is unable to create an executable file."
2042     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2043         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2044         echo "Only do this if you know what cross compiling means."
2045     fi
2046     die "C compiler test failed."
2047 fi
2048
2049 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2050 check_cflags -std=c99
2051 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2052 #include <stdlib.h>
2053 EOF
2054 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2055 #include <stdlib.h>
2056 EOF
2057
2058 check_host_cflags -std=c99
2059
2060 case "$arch" in
2061     alpha|ia64|mips|parisc|sparc)
2062         spic=$shared
2063     ;;
2064     x86)
2065         subarch="x86_32"
2066         check_cc <<EOF && subarch="x86_64"
2067         int test[(int)sizeof(char*) - 7];
2068 EOF
2069         if test "$subarch" = "x86_64"; then
2070             spic=$shared
2071         fi
2072     ;;
2073 esac
2074
2075 enable $subarch
2076 enabled spic && enable pic
2077
2078 # OS specific
2079 case $target_os in
2080     haiku)
2081         prefix_default="/boot/common"
2082         network_extralibs="-lnetwork"
2083         ;;
2084     sunos)
2085         FFSERVERLDFLAGS=""
2086         SHFLAGS='-shared -Wl,-h,$$(@F)'
2087         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2088         network_extralibs="-lsocket -lnsl"
2089         add_cppflags -D__EXTENSIONS__
2090         nm_opts='-P -g'
2091         ;;
2092     netbsd)
2093         oss_indev_extralibs="-lossaudio"
2094         oss_outdev_extralibs="-lossaudio"
2095         add_cppflags -D_XOPEN_SOURCE=600
2096         ;;
2097     openbsd)
2098         enable malloc_aligned
2099         # On OpenBSD 4.5. the compiler does not use PIC unless
2100         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2101         # however the generated executable will not do anything
2102         # (simply quits with exit-code 1, no crash, no output).
2103         # Thus explicitly enable PIC here.
2104         enable pic
2105         SHFLAGS='-shared'
2106         oss_indev_extralibs="-lossaudio"
2107         oss_outdev_extralibs="-lossaudio"
2108         ;;
2109     freebsd|dragonfly)
2110         enable malloc_aligned
2111         ;;
2112     bsd/os)
2113         osextralibs="-lpoll -lgnugetopt"
2114         strip="strip -d"
2115         ;;
2116     darwin)
2117         enable malloc_aligned
2118         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2119         strip="${strip} -x"
2120         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2121         SLIBSUF=".dylib"
2122         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2123         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2124         FFSERVERLDFLAGS=-Wl,-bind_at_load
2125         objformat="macho"
2126         enabled x86_64 && objformat="macho64"
2127         enabled_any pic shared ||
2128             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2129         ;;
2130     mingw32*)
2131         if test $target_os = "mingw32ce"; then
2132             disable network
2133         else
2134             target_os=mingw32
2135         fi
2136         LIBTARGET=i386
2137         if enabled x86_64; then
2138             enable malloc_aligned
2139             LIBTARGET=x64
2140         elif enabled arm; then
2141             LIBTARGET=arm
2142         fi
2143         shlibdir_default="$bindir_default"
2144         disable ffserver
2145         SLIBPREF=""
2146         SLIBSUF=".dll"
2147         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2148         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2149         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2150         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2151             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2152             install -d "$(LIBDIR)"; \
2153             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2154         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2155         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'
2156         objformat="win32"
2157         enable dos_paths
2158         check_cflags -fno-common
2159         if ! enabled x86_64; then
2160             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2161                 die "ERROR: MinGW runtime version must be >= 3.15."
2162             enabled_any avisynth vfwcap_indev &&
2163                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2164                   die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2165         fi
2166         ;;
2167     cygwin*)
2168         target_os=cygwin
2169         shlibdir_default="$bindir_default"
2170         SLIBPREF="cyg"
2171         SLIBSUF=".dll"
2172         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2173         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2174         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2175         objformat="win32"
2176         enable dos_paths
2177         check_cflags -fno-common
2178         ;;
2179     *-dos|freedos|opendos)
2180         disable ffplay ffserver
2181         disable $INDEV_LIST $OUTDEV_LIST
2182         network_extralibs="-lsocket"
2183         objformat="coff"
2184         enable dos_paths
2185         ;;
2186     linux)
2187         enable dv1394
2188         ;;
2189     irix*)
2190         target_os=irix
2191         ranlib="echo ignoring ranlib"
2192         ;;
2193     os/2*)
2194         strip="lxlite"
2195         ln_s="cp -f"
2196         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2197         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2198         FFSERVERLDFLAGS=""
2199         LIBSUF="_s.a"
2200         SLIBPREF=""
2201         SLIBSUF=".dll"
2202         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2203         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2204         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2205           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2206           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2207           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2208           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2209           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2210         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2211           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2212         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2213         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2214         enable dos_paths
2215         ;;
2216     gnu/kfreebsd)
2217         ;;
2218     gnu)
2219         ;;
2220     none)
2221         ;;
2222     *)
2223         die "Unknown OS '$target_os'."
2224         ;;
2225 esac
2226
2227 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2228
2229 set_default $PATHS_LIST
2230
2231 add_extralibs $osextralibs
2232
2233 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2234 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2235
2236 # we need to build at least one lib type
2237 if ! enabled_any static shared; then
2238     cat <<EOF
2239 At least one library type must be built.
2240 Specify --enable-static to build the static libraries or --enable-shared to
2241 build the shared libraries as well. To only build the shared libraries specify
2242 --disable-static in addition to --enable-shared.
2243 EOF
2244     exit 1;
2245 fi
2246
2247 disabled static && LIBNAME=""
2248
2249 die_license_disabled() {
2250     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2251 }
2252
2253 die_license_disabled gpl libx264
2254 die_license_disabled gpl libxvid
2255 die_license_disabled gpl postproc
2256 die_license_disabled gpl x11grab
2257
2258 die_license_disabled nonfree libfaac
2259
2260 die_license_disabled version3 libopencore_amrnb
2261 die_license_disabled version3 libopencore_amrwb
2262
2263 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2264
2265 check_deps $ARCH_EXT_LIST
2266
2267 disabled optimizations || check_cflags -fomit-frame-pointer
2268
2269 enable_pic() {
2270     enable pic
2271     add_cppflags -DPIC
2272     add_cflags   -fPIC
2273     add_asflags  -fPIC
2274 }
2275
2276 enabled pic && enable_pic
2277
2278 check_cc <<EOF || die "Symbol mangling check failed."
2279 int ff_extern;
2280 EOF
2281 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2282 extern_prefix=${sym%%ff_extern*}
2283
2284 check_cc <<EOF && enable inline_asm
2285 void foo(void) { __asm__ volatile ("" ::); }
2286 EOF
2287
2288 _restrict=
2289 for restrict_keyword in restrict __restrict__ __restrict; do
2290     check_cc <<EOF && _restrict=$restrict_keyword && break
2291 void foo(char * $restrict_keyword p);
2292 EOF
2293 done
2294
2295 check_cc <<EOF && enable attribute_packed
2296 struct { int x; } __attribute__((packed)) x;
2297 EOF
2298
2299 check_cc <<EOF && enable attribute_may_alias
2300 union { int x; } __attribute__((may_alias)) x;
2301 EOF
2302
2303 check_cc <<EOF || die "endian test failed"
2304 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2305 EOF
2306 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2307
2308 if enabled alpha; then
2309
2310     check_cflags -mieee
2311
2312 elif enabled arm; then
2313
2314     check_cflags -marm
2315
2316     check_ld <<EOF && enable vfp_args
2317 __asm__ (".eabi_attribute 28, 1");
2318 int main(void) { return 0; }
2319 EOF
2320
2321     # We have to check if pld is a nop and disable it.
2322     check_asm pld '"pld [r0]"'
2323
2324     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2325     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2326     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2327     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2328     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2329     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2330
2331     enabled_all armv6t2 shared !pic && enable_pic
2332
2333 elif enabled mips; then
2334
2335     check_asm loongson '"dmult.g $1, $2, $3"'
2336     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2337
2338 elif enabled ppc; then
2339
2340     enable local_aligned_8 local_aligned_16
2341
2342     check_asm dcbzl     '"dcbzl 0, 1"'
2343     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2344     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2345
2346     # AltiVec flags: The FSF version of GCC differs from the Apple version
2347     if enabled altivec; then
2348         check_cflags -maltivec -mabi=altivec &&
2349         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2350         check_cflags -faltivec
2351
2352         # check if our compiler supports Motorola AltiVec C API
2353         check_cc <<EOF || disable altivec
2354 $inc_altivec_h
2355 int main(void) {
2356     vector signed int v1, v2, v3;
2357     v1 = vec_add(v2,v3);
2358     return 0;
2359 }
2360 EOF
2361
2362         # check if our compiler supports braces for vector declarations
2363         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2364 $inc_altivec_h
2365 int main (void) { (vector int) {1}; return 0; }
2366 EOF
2367     fi
2368
2369 elif enabled sparc; then
2370
2371     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2372         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2373
2374 elif enabled x86; then
2375
2376     enable local_aligned_8 local_aligned_16
2377
2378     # check whether EBP is available on x86
2379     # As 'i' is stored on the stack, this program will crash
2380     # if the base pointer is used to access it because the
2381     # base pointer is cleared in the inline assembly code.
2382     check_exec_crash <<EOF && enable ebp_available
2383     volatile int i=0;
2384     __asm__ volatile (
2385         "xorl %%ebp, %%ebp"
2386     ::: "%ebp");
2387     return i;
2388 EOF
2389
2390     # check whether EBX is available on x86
2391     check_asm ebx_available '""::"b"(0)' &&
2392         check_asm ebx_available '"":::"%ebx"'
2393
2394     # check whether more than 10 operands are supported
2395     check_cc <<EOF && enable ten_operands
2396 int main(void) {
2397     int x=0;
2398     __asm__ volatile(
2399         ""
2400         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2401     );
2402     return 0;
2403 }
2404 EOF
2405
2406     # check whether binutils is new enough to compile SSSE3/MMX2
2407     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2408     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2409
2410     check_asm bswap '"bswap %%eax" ::: "%eax"'
2411
2412     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2413     enabled     x86_64        && append YASMFLAGS "-m amd64"
2414     enabled     pic           && append YASMFLAGS "-DPIC"
2415     test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2416     case "$objformat" in
2417         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2418     esac
2419     if ! disabled yasm; then
2420         check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2421             warn "yasm not found, performance will suffer"
2422     fi
2423
2424     case "$cpu" in
2425         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2426             disable fast_clz
2427         ;;
2428     esac
2429
2430 fi
2431
2432 if check_func dlopen; then
2433     ldl=
2434 elif check_func dlopen -ldl; then
2435     ldl=-ldl
2436 fi
2437
2438 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2439 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2440
2441 check_func  fcntl
2442 check_func  fork
2443 check_func  getaddrinfo $network_extralibs
2444 check_func  gethrtime
2445 check_func  getrusage
2446 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2447 check_func  inet_aton $network_extralibs
2448 check_func  isatty
2449 check_func  ${malloc_prefix}memalign            && enable memalign
2450 check_func  mkstemp
2451 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2452 check_func  setrlimit
2453 check_func  strerror_r
2454 check_func_headers io.h setmode
2455 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2456 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2457 check_func_headers windows.h GetProcessTimes
2458 check_func_headers windows.h VirtualAlloc
2459
2460 check_header conio.h
2461 check_header dlfcn.h
2462 check_header dxva2api.h
2463 check_header malloc.h
2464 check_header poll.h
2465 check_header sys/mman.h
2466 check_header sys/resource.h
2467 check_header sys/select.h
2468 check_header termios.h
2469 check_header vdpau/vdpau.h
2470 check_header vdpau/vdpau_x11.h
2471 check_header X11/extensions/XvMClib.h
2472
2473 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2474
2475 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2476      enabled_any $need_memalign ; then
2477     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2478 fi
2479
2480 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2481 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2482
2483 # check for some common methods of building with pthread support
2484 # do this before the optional library checks as some of them require pthreads
2485 if ! disabled pthreads && ! enabled w32threads; then
2486     enable pthreads
2487     if check_func pthread_create; then
2488         :
2489     elif check_func pthread_create -pthread; then
2490         add_cflags -pthread
2491         add_extralibs -pthread
2492     elif check_func pthread_create -pthreads; then
2493         add_cflags -pthreads
2494         add_extralibs -pthreads
2495     elif check_func pthread_create -lpthreadGC2; then
2496         add_extralibs -lpthreadGC2
2497     elif ! check_lib pthread.h pthread_create -lpthread; then
2498         disable pthreads
2499     fi
2500 fi
2501
2502 for thread in $THREADS_LIST; do
2503     if enabled $thread; then
2504         test -n "$thread_type" &&
2505             die "ERROR: Only one thread type must be selected." ||
2506             thread_type="$thread"
2507     fi
2508 done
2509
2510 check_lib math.h sin -lm
2511 disabled vaapi || check_lib va/va.h vaInitialize -lva
2512
2513 check_mathfunc exp2
2514 check_mathfunc exp2f
2515 check_mathfunc llrint
2516 check_mathfunc llrintf
2517 check_mathfunc log2
2518 check_mathfunc log2f
2519 check_mathfunc lrint
2520 check_mathfunc lrintf
2521 check_mathfunc round
2522 check_mathfunc roundf
2523 check_mathfunc truncf
2524
2525 # these are off by default, so fail if requested and not available
2526 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2527 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2528                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2529                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2530 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2531 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2532 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame
2533 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2534 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2535 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2536 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2537 enabled librtmp    && require  librtmp librtmp/rtmp.h RTMP_Init $(pkg-config --libs librtmp)
2538 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2539                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2540 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2541 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2542 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2543 enabled libvpx     && require2 libvpx "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver" -lvpx &&
2544                       require2 libvpx "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver" -lvpx
2545 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2546                       { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2547                         die "ERROR: libx264 version must be >= 0.98."; }
2548 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2549 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2550
2551 # libdc1394 check
2552 if enabled libdc1394; then
2553     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2554         enable libdc1394_2; } ||
2555     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2556         enable libdc1394_1; } ||
2557     die "ERROR: No version of libdc1394 found "
2558 fi
2559
2560 SDL_CONFIG="${cross_prefix}sdl-config"
2561 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2562     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2563     sdl_libs=$("${SDL_CONFIG}" --libs)
2564     check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2565     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2566     enable sdl &&
2567     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2568 fi
2569
2570 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2571
2572 if enabled network; then
2573     check_type "sys/types.h sys/socket.h" socklen_t
2574     check_type netdb.h "struct addrinfo"
2575     check_type netinet/in.h "struct ipv6_mreq"
2576     check_type netinet/in.h "struct sockaddr_in6"
2577     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2578     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2579     # Prefer arpa/inet.h over winsock2
2580     if check_header arpa/inet.h ; then
2581         check_func closesocket
2582     elif check_header winsock2.h ; then
2583         check_func_headers winsock2.h closesocket -lws2 && \
2584             network_extralibs="-lws2" || \
2585         { check_func_headers winsock2.h closesocket -lws2_32 && \
2586             network_extralibs="-lws2_32"; }
2587         check_type ws2tcpip.h socklen_t
2588         check_type ws2tcpip.h "struct addrinfo"
2589         check_type ws2tcpip.h "struct ipv6_mreq"
2590         check_type ws2tcpip.h "struct sockaddr_in6"
2591         check_type ws2tcpip.h "struct sockaddr_storage"
2592         check_struct winsock2.h "struct sockaddr" sa_len
2593     else
2594         disable network
2595     fi
2596 fi
2597
2598 check_header linux/videodev.h
2599 check_header linux/videodev2.h
2600 check_header sys/videoio.h
2601
2602 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2603
2604 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2605 { check_header dev/bktr/ioctl_meteor.h &&
2606   check_header dev/bktr/ioctl_bt848.h; } ||
2607 { check_header machine/ioctl_meteor.h &&
2608   check_header machine/ioctl_bt848.h; } ||
2609 { check_header dev/video/meteor/ioctl_meteor.h &&
2610   check_header dev/video/bktr/ioctl_bt848.h; } ||
2611 check_header dev/ic/bt8xx.h
2612
2613 check_header sys/soundcard.h
2614 check_header soundcard.h
2615
2616 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2617
2618 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2619
2620 enabled x11grab                         &&
2621 check_header X11/Xlib.h                 &&
2622 check_header X11/extensions/XShm.h      &&
2623 check_header X11/extensions/Xfixes.h    &&
2624 check_func XOpenDisplay -lX11           &&
2625 check_func XShmCreateImage -lX11 -lXext &&
2626 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2627
2628 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2629 check_cpp_condition \
2630     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2631     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2632       disable vdpau; }
2633 fi
2634
2635 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2636
2637 # add some useful compiler flags if supported
2638 check_cflags -Wdeclaration-after-statement
2639 check_cflags -Wall
2640 check_cflags -Wno-switch
2641 check_cflags -Wdisabled-optimization
2642 check_cflags -Wpointer-arith
2643 check_cflags -Wredundant-decls
2644 check_cflags -Wno-pointer-sign
2645 check_cflags -Wcast-qual
2646 check_cflags -Wwrite-strings
2647 check_cflags -Wtype-limits
2648 check_cflags -Wundef
2649 check_cflags -Wmissing-prototypes
2650 enabled extra_warnings && check_cflags -Winline
2651
2652 # add some linker flags
2653 check_ldflags -Wl,--warn-common
2654 check_ldflags -Wl,--as-needed
2655 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'
2656 check_ldflags -Wl,-Bsymbolic
2657
2658 echo "X{};" > $TMPV
2659 if test_ldflags -Wl,--version-script,$TMPV; then
2660     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2661     check_cc <<EOF && enable symver_asm_label
2662 void ff_foo(void) __asm__ ("av_foo@VERSION");
2663 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2664 EOF
2665     check_cc <<EOF && enable symver_gnu_asm
2666 __asm__(".symver ff_foo,av_foo@VERSION");
2667 void ff_foo(void) {}
2668 EOF
2669 fi
2670
2671 if enabled small; then
2672     add_cflags $size_cflags
2673     optimizations="small"
2674 elif enabled optimizations; then
2675     add_cflags $speed_cflags
2676 else
2677     add_cflags $noopt_cflags
2678 fi
2679 check_cflags -fno-math-errno
2680 check_cflags -fno-signed-zeros
2681
2682 if enabled icc; then
2683     # Just warnings, no remarks
2684     check_cflags -w1
2685     # -wd: Disable following warnings
2686     # 144, 167, 556: -Wno-pointer-sign
2687     # 10006: ignoring unknown option -fno-signed-zeros
2688     # 10156: ignoring option '-W'; no argument required
2689     check_cflags -wd144,167,556,10006,10156
2690     # 11030: Warning unknown option --as-needed
2691     # 10156: ignoring option '-export'; no argument required
2692     check_ldflags -wd10156,11030
2693     # Allow to compile with optimizations
2694     check_ldflags -march=$cpu
2695     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2696     enable ebp_available
2697 elif enabled ccc; then
2698     # disable some annoying warnings
2699     add_cflags -msg_disable cvtu32to64
2700     add_cflags -msg_disable embedcomment
2701     add_cflags -msg_disable needconstext
2702     add_cflags -msg_disable nomainieee
2703     add_cflags -msg_disable ptrmismatch1
2704     add_cflags -msg_disable unreachcode
2705 elif enabled gcc; then
2706     check_cflags -fno-tree-vectorize
2707     check_cflags -Werror=implicit-function-declaration
2708     check_cflags -Werror=missing-prototypes
2709 elif enabled clang; then
2710     check_cflags -Qunused-arguments
2711 elif enabled armcc; then
2712     # 2523: use of inline assembler is deprecated
2713     add_cflags -Wrvct,--diag_suppress=2523
2714     add_cflags -Wrvct,--diag_suppress=1207
2715 elif enabled tms470; then
2716     add_cflags -pds=824 -pds=837
2717 fi
2718
2719 enabled_any $THREADS_LIST      && enable threads
2720
2721 check_deps $CONFIG_LIST       \
2722            $CONFIG_EXTRA      \
2723            $HAVE_LIST         \
2724            $DECODER_LIST      \
2725            $ENCODER_LIST      \
2726            $HWACCEL_LIST      \
2727            $PARSER_LIST       \
2728            $BSF_LIST          \
2729            $DEMUXER_LIST      \
2730            $MUXER_LIST        \
2731            $FILTER_LIST       \
2732            $INDEV_LIST        \
2733            $OUTDEV_LIST       \
2734            $PROTOCOL_LIST     \
2735
2736 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2737
2738 echo "install prefix            $prefix"
2739 echo "source path               $source_path"
2740 echo "C compiler                $cc"
2741 echo "ARCH                      $arch ($cpu)"
2742 if test "$build_suffix" != ""; then
2743     echo "build suffix              $build_suffix"
2744 fi
2745 if test "$extra_version" != ""; then
2746     echo "version string suffix     $extra_version"
2747 fi
2748 echo "big-endian                ${bigendian-no}"
2749 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2750 if enabled x86; then
2751     echo "yasm                      ${yasm-no}"
2752     echo "MMX enabled               ${mmx-no}"
2753     echo "MMX2 enabled              ${mmx2-no}"
2754     echo "3DNow! enabled            ${amd3dnow-no}"
2755     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2756     echo "SSE enabled               ${sse-no}"
2757     echo "SSSE3 enabled             ${ssse3-no}"
2758     echo "CMOV enabled              ${cmov-no}"
2759     echo "CMOV is fast              ${fast_cmov-no}"
2760     echo "EBX available             ${ebx_available-no}"
2761     echo "EBP available             ${ebp_available-no}"
2762     echo "10 operands supported     ${ten_operands-no}"
2763 fi
2764 if enabled arm; then
2765     echo "ARMv5TE enabled           ${armv5te-no}"
2766     echo "ARMv6 enabled             ${armv6-no}"
2767     echo "ARMv6T2 enabled           ${armv6t2-no}"
2768     echo "ARM VFP enabled           ${armvfp-no}"
2769     echo "IWMMXT enabled            ${iwmmxt-no}"
2770     echo "NEON enabled              ${neon-no}"
2771 fi
2772 if enabled mips; then
2773     echo "MMI enabled               ${mmi-no}"
2774 fi
2775 if enabled ppc; then
2776     echo "AltiVec enabled           ${altivec-no}"
2777     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2778     echo "dcbzl available           ${dcbzl-no}"
2779 fi
2780 if enabled sparc; then
2781     echo "VIS enabled               ${vis-no}"
2782 fi
2783 echo "debug symbols             ${debug-no}"
2784 echo "strip symbols             ${stripping-no}"
2785 echo "optimizations             ${optimizations-no}"
2786 echo "static                    ${static-no}"
2787 echo "shared                    ${shared-no}"
2788 echo "postprocessing support    ${postproc-no}"
2789 echo "new filter support        ${avfilter-no}"
2790 echo "filters using lavformat   ${avfilter_lavf-no}"
2791 echo "network support           ${network-no}"
2792 echo "threading support         ${thread_type-no}"
2793 echo "SDL support               ${sdl-no}"
2794 echo "Sun medialib support      ${mlib-no}"
2795 echo "AVISynth enabled          ${avisynth-no}"
2796 echo "libdc1394 support         ${libdc1394-no}"
2797 echo "libdirac enabled          ${libdirac-no}"
2798 echo "libfaac enabled           ${libfaac-no}"
2799 echo "libgsm enabled            ${libgsm-no}"
2800 echo "libmp3lame enabled        ${libmp3lame-no}"
2801 echo "libnut enabled            ${libnut-no}"
2802 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2803 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2804 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2805 echo "librtmp enabled           ${librtmp-no}"
2806 echo "libschroedinger enabled   ${libschroedinger-no}"
2807 echo "libspeex enabled          ${libspeex-no}"
2808 echo "libtheora enabled         ${libtheora-no}"
2809 echo "libvorbis enabled         ${libvorbis-no}"
2810 echo "libvpx enabled            ${libvpx-no}"
2811 echo "libx264 enabled           ${libx264-no}"
2812 echo "libxvid enabled           ${libxvid-no}"
2813 echo "zlib enabled              ${zlib-no}"
2814 echo "bzlib enabled             ${bzlib-no}"
2815 echo
2816
2817 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2818     echo "Enabled ${type}s:"
2819     eval list=\$$(toupper $type)_LIST
2820     for part in $list; do
2821         enabled $part && echo ${part%_*}
2822     done | sort | pr -3 -t
2823     echo
2824 done
2825
2826 license="LGPL version 2.1 or later"
2827 if enabled nonfree; then
2828     license="nonfree and unredistributable"
2829 elif enabled gplv3; then
2830     license="GPL version 3 or later"
2831 elif enabled lgplv3; then
2832     license="LGPL version 3 or later"
2833 elif enabled gpl; then
2834     license="GPL version 2 or later"
2835 fi
2836
2837 echo "License: $license"
2838
2839 echo "Creating config.mak and config.h..."
2840
2841 # build tree in object directory if source path is different from current one
2842 if enabled source_path_used; then
2843     DIRS="
2844         doc
2845         libavcodec
2846         libavcodec/$arch
2847         libavdevice
2848         libavfilter
2849         libavformat
2850         libavutil
2851         libavutil/$arch
2852         libpostproc
2853         libswscale
2854         libswscale/$arch
2855         tests
2856         tools
2857     "
2858     FILES="
2859         Makefile
2860         common.mak
2861         subdir.mak
2862         doc/texi2pod.pl
2863         libavcodec/Makefile
2864         libavcodec/${arch}/Makefile
2865         libavdevice/Makefile
2866         libavfilter/Makefile
2867         libavformat/Makefile
2868         libavutil/Makefile
2869         libpostproc/Makefile
2870         libswscale/Makefile
2871     "
2872     map 'mkdir -p $v' $DIRS;
2873     map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
2874 fi
2875
2876 enabled stripping || strip="echo skipping strip"
2877
2878 cat > config.mak <<EOF
2879 # Automatically generated by configure - do not modify!
2880 ifndef FFMPEG_CONFIG_MAK
2881 FFMPEG_CONFIG_MAK=1
2882 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2883 prefix=$prefix
2884 LIBDIR=\$(DESTDIR)$libdir
2885 SHLIBDIR=\$(DESTDIR)$shlibdir
2886 INCDIR=\$(DESTDIR)$incdir
2887 BINDIR=\$(DESTDIR)$bindir
2888 DATADIR=\$(DESTDIR)$datadir
2889 MANDIR=\$(DESTDIR)$mandir
2890 SRC_PATH="$source_path"
2891 SRC_PATH_BARE=$source_path
2892 BUILD_ROOT="$PWD"
2893 ARCH=$arch
2894 CC=$cc
2895 AS=$as
2896 LD=$ld
2897 DEPCC=$dep_cc
2898 YASM=$yasmexe
2899 YASMDEP=$yasmexe
2900 AR=$ar
2901 RANLIB=$ranlib
2902 CP=cp -p
2903 LN_S=$ln_s
2904 STRIP=$strip
2905 CPPFLAGS=$CPPFLAGS
2906 CFLAGS=$CFLAGS
2907 ASFLAGS=$ASFLAGS
2908 CC_O=$CC_O
2909 LDFLAGS=$LDFLAGS
2910 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2911 SHFLAGS=$SHFLAGS
2912 YASMFLAGS=$YASMFLAGS
2913 BUILDSUF=$build_suffix
2914 FULLNAME=$FULLNAME
2915 LIBPREF=$LIBPREF
2916 LIBSUF=$LIBSUF
2917 LIBNAME=$LIBNAME
2918 SLIBPREF=$SLIBPREF
2919 SLIBSUF=$SLIBSUF
2920 EXESUF=$EXESUF
2921 EXTRA_VERSION=$extra_version
2922 DEPFLAGS=$DEPFLAGS
2923 CCDEP=$CCDEP
2924 ASDEP=$ASDEP
2925 CC_DEPFLAGS=$CC_DEPFLAGS
2926 AS_DEPFLAGS=$AS_DEPFLAGS
2927 HOSTCC=$host_cc
2928 HOSTCFLAGS=$host_cflags
2929 HOSTEXESUF=$HOSTEXESUF
2930 HOSTLDFLAGS=$host_ldflags
2931 HOSTLIBS=$host_libs
2932 TARGET_EXEC=$target_exec
2933 TARGET_PATH=$target_path
2934 SDL_LIBS=$sdl_libs
2935 SDL_CFLAGS=$sdl_cflags
2936 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2937 EXTRALIBS=$extralibs
2938 INSTALL=install
2939 LIBTARGET=${LIBTARGET}
2940 SLIBNAME=${SLIBNAME}
2941 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2942 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2943 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2944 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2945 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2946 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2947 SAMPLES=$samples
2948 EOF
2949
2950 get_version(){
2951     name=$1
2952     file=$source_path/$2
2953     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2954     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2955     lcname=$(tolower $name)
2956     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2957     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2958 }
2959
2960 get_version LIBSWSCALE  libswscale/swscale.h
2961 get_version LIBPOSTPROC libpostproc/postprocess.h
2962 get_version LIBAVCODEC  libavcodec/avcodec.h
2963 get_version LIBAVDEVICE libavdevice/avdevice.h
2964 get_version LIBAVFORMAT libavformat/avformat.h
2965 get_version LIBAVUTIL   libavutil/avutil.h
2966 get_version LIBAVFILTER libavfilter/avfilter.h
2967
2968 cat > $TMPH <<EOF
2969 /* Automatically generated by configure - do not modify! */
2970 #ifndef FFMPEG_CONFIG_H
2971 #define FFMPEG_CONFIG_H
2972 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2973 #define FFMPEG_LICENSE "$(c_escape $license)"
2974 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2975 #define CC_TYPE "$cc_type"
2976 #define CC_VERSION $cc_version
2977 #define restrict $_restrict
2978 #define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
2979 #define EXTERN_PREFIX "${extern_prefix}"
2980 #define EXTERN_ASM ${extern_prefix}
2981 EOF
2982
2983 test -n "$malloc_prefix" &&
2984     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
2985
2986 if enabled small || disabled optimizations; then
2987     echo "#undef  av_always_inline"  >> $TMPH
2988     echo "#define av_always_inline"  >> $TMPH
2989 fi
2990
2991 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2992 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2993 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2994                                       $CONFIG_EXTRA      \
2995                                       $DECODER_LIST      \
2996                                       $ENCODER_LIST      \
2997                                       $HWACCEL_LIST      \
2998                                       $PARSER_LIST       \
2999                                       $BSF_LIST          \
3000                                       $DEMUXER_LIST      \
3001                                       $MUXER_LIST        \
3002                                       $FILTER_LIST       \
3003                                       $PROTOCOL_LIST     \
3004                                       $INDEV_LIST        \
3005                                       $OUTDEV_LIST       \
3006
3007 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3008 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3009
3010 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3011 cp_if_changed $TMPH config.h
3012
3013 cat > $TMPH <<EOF
3014 /* Generated by ffconf */
3015 #ifndef AVUTIL_AVCONFIG_H
3016 #define AVUTIL_AVCONFIG_H
3017 EOF
3018
3019 print_config AV_HAVE_ $TMPH /dev/null $HAVE_LIST_PUB
3020
3021 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3022
3023 cp_if_changed $TMPH libavutil/avconfig.h
3024
3025 test -n "$WARNINGS" && printf "\n$WARNINGS"
3026
3027 # build pkg-config files
3028
3029 pkgconfig_generate(){
3030 name=$1
3031 shortname=${name#lib}${build_suffix}
3032 comment=$2
3033 version=$3
3034 libs=$4
3035 requires=$5
3036 cat <<EOF > $name/$name.pc
3037 prefix=$prefix
3038 exec_prefix=\${prefix}
3039 libdir=$libdir
3040 includedir=$incdir
3041
3042 Name: $name
3043 Description: $comment
3044 Version: $version
3045 Requires: $(enabled shared || echo $requires)
3046 Requires.private: $(enabled shared && echo $requires)
3047 Conflicts:
3048 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3049 Libs.private: $(enabled shared && echo $libs)
3050 Cflags: -I\${includedir}
3051 EOF
3052 cat <<EOF > $name/$name-uninstalled.pc
3053 prefix=
3054 exec_prefix=
3055 libdir=\${pcfiledir}
3056 includedir=${source_path}
3057
3058 Name: $name
3059 Description: $comment
3060 Version: $version
3061 Requires: $requires
3062 Conflicts:
3063 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3064 Cflags: -I\${includedir}
3065 EOF
3066 }
3067
3068 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3069 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3070 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3071 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3072 enabled avfilter &&
3073     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3074 enabled postproc &&
3075     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3076 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"