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