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