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