]> git.sesse.net Git - ffmpeg/blob - configure
H.264: Fix memory leaks with multithreading.
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58   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-indevs         disable input devices"
135   echo "  --disable-outdevs        disable output devices"
136   echo "  --disable-devices        disable all devices"
137   echo "  --enable-filter=NAME     enable filter NAME"
138   echo "  --disable-filter=NAME    disable filter NAME"
139   echo "  --disable-filters        disable all filters"
140   echo "  --list-decoders          show all available decoders"
141   echo "  --list-encoders          show all available encoders"
142   echo "  --list-hwaccels          show all available hardware accelerators"
143   echo "  --list-muxers            show all available muxers"
144   echo "  --list-demuxers          show all available demuxers"
145   echo "  --list-parsers           show all available parsers"
146   echo "  --list-protocols         show all available protocols"
147   echo "  --list-bsfs              show all available bitstream filters"
148   echo "  --list-indevs            show all available input devices"
149   echo "  --list-outdevs           show all available output devices"
150   echo "  --list-filters           show all available filters"
151   echo
152   echo "External library support:"
153   echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
154   echo "  --enable-bzlib           enable bzlib [autodetect]"
155   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
156   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
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     libamr_nb
796     libamr_wb
797     libdc1394
798     libdirac
799     libfaac
800     libfaad
801     libfaadbin
802     libgsm
803     libmp3lame
804     libnut
805     libopencore_amrnb
806     libopencore_amrwb
807     libopenjpeg
808     libschroedinger
809     libspeex
810     libtheora
811     libvorbis
812     libx264
813     libxvid
814     mdct
815     memalign_hack
816     mlib
817     mpegaudio_hp
818     network
819     nonfree
820     postproc
821     powerpc_perf
822     rdft
823     runtime_cpudetect
824     shared
825     small
826     static
827     swscale_alpha
828     vaapi
829     vdpau
830     version3
831     x11grab
832     zlib
833 "
834
835 THREADS_LIST='
836     beosthreads
837     os2threads
838     pthreads
839     w32threads
840 '
841
842 ARCH_LIST='
843     alpha
844     arm
845     bfin
846     ia64
847     m68k
848     mips
849     mips64
850     parisc
851     ppc
852     ppc64
853     s390
854     sh4
855     sparc
856     sparc64
857     x86
858     x86_32
859     x86_64
860 '
861
862 ARCH_EXT_LIST='
863     altivec
864     amd3dnow
865     amd3dnowext
866     armv5te
867     armv6
868     armv6t2
869     armvfp
870     iwmmxt
871     mmi
872     mmx
873     mmx2
874     neon
875     ppc4xx
876     sse
877     ssse3
878     vis
879 '
880
881 HAVE_LIST="
882     $ARCH_EXT_LIST
883     $THREADS_LIST
884     alsa_asoundlib_h
885     altivec_h
886     arpa_inet_h
887     bigendian
888     bswap
889     closesocket
890     cmov
891     conio_h
892     dcbzl
893     dev_bktr_ioctl_bt848_h
894     dev_bktr_ioctl_meteor_h
895     dev_ic_bt8xx_h
896     dev_video_meteor_ioctl_meteor_h
897     dev_video_bktr_ioctl_bt848_h
898     dlfcn_h
899     dlopen
900     dos_paths
901     ebp_available
902     ebx_available
903     fast_64bit
904     fast_cmov
905     fast_unaligned
906     fork
907     gethrtime
908     GetProcessTimes
909     getrusage
910     inet_aton
911     inline_asm
912     ldbrx
913     libdc1394_1
914     libdc1394_2
915     llrint
916     loongson
917     lrint
918     lrintf
919     lzo1x_999_compress
920     machine_ioctl_bt848_h
921     machine_ioctl_meteor_h
922     malloc_h
923     memalign
924     mkstemp
925     pld
926     posix_memalign
927     round
928     roundf
929     sdl
930     sdl_video_size
931     setmode
932     socklen_t
933     soundcard_h
934     poll_h
935     sys_mman_h
936     sys_resource_h
937     sys_select_h
938     sys_soundcard_h
939     sys_videoio_h
940     ten_operands
941     termios_h
942     threads
943     truncf
944     VirtualAlloc
945     winsock2_h
946     xform_asm
947     yasm
948 "
949
950 # options emitted with CONFIG_ prefix but not available on command line
951 CONFIG_EXTRA="
952     gplv3
953     lgplv3
954 "
955
956 CMDLINE_SELECT="
957     $ARCH_EXT_LIST
958     $CONFIG_LIST
959     $THREADS_LIST
960     cross_compile
961     debug
962     extra_warnings
963     logging
964     optimizations
965     stripping
966     yasm
967 "
968
969 PATHS_LIST='
970     bindir
971     datadir
972     incdir
973     libdir
974     mandir
975     prefix
976     shlibdir
977 '
978
979 CMDLINE_SET="
980     $PATHS_LIST
981     arch
982     as
983     build_suffix
984     cc
985     cpu
986     cross_prefix
987     extra_version
988     host_cc
989     host_cflags
990     host_ldflags
991     host_libs
992     host_os
993     logfile
994     nm
995     source_path
996     sysinclude
997     sysroot
998     target_exec
999     target_os
1000     target_path
1001 "
1002
1003 # code dependency declarations
1004
1005 # architecture extensions
1006 altivec_deps="ppc"
1007 amd3dnow_deps="mmx"
1008 amd3dnowext_deps="amd3dnow"
1009 armv5te_deps="arm"
1010 armv6_deps="arm"
1011 armv6t2_deps="arm"
1012 armvfp_deps="arm"
1013 iwmmxt_deps="arm"
1014 mmi_deps="mips"
1015 mmx_deps="x86"
1016 mmx2_deps="mmx"
1017 neon_deps="arm"
1018 ppc4xx_deps="ppc"
1019 sse_deps="mmx"
1020 ssse3_deps="sse"
1021 vis_deps="sparc"
1022
1023 # decoders / encoders / hardware accelerators
1024 aac_decoder_select="fft mdct"
1025 ac3_decoder_select="fft mdct"
1026 atrac3_decoder_select="fft mdct"
1027 cavs_decoder_select="golomb"
1028 cook_decoder_select="fft mdct"
1029 cscd_decoder_suggest="zlib"
1030 dca_decoder_select="fft mdct"
1031 dnxhd_encoder_select="aandct"
1032 dxa_decoder_select="zlib"
1033 eac3_decoder_select="fft mdct"
1034 eatgq_decoder_select="aandct"
1035 eatqi_decoder_select="aandct"
1036 ffv1_decoder_select="golomb"
1037 flac_decoder_select="golomb"
1038 flac_encoder_select="golomb"
1039 flashsv_decoder_select="zlib"
1040 flashsv_encoder_select="zlib"
1041 flv_encoder_select="aandct"
1042 h261_encoder_select="aandct"
1043 h263_encoder_select="aandct"
1044 h263_vaapi_hwaccel_deps="va_va_h"
1045 h263_vaapi_hwaccel_select="vaapi"
1046 h263p_encoder_select="aandct"
1047 h264_decoder_select="golomb"
1048 h264_vaapi_hwaccel_deps="va_va_h"
1049 h264_vaapi_hwaccel_select="vaapi"
1050 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1051 h264_vdpau_decoder_select="vdpau"
1052 imc_decoder_select="fft mdct"
1053 jpegls_decoder_select="golomb"
1054 jpegls_encoder_select="golomb"
1055 ljpeg_encoder_select="aandct"
1056 loco_decoder_select="golomb"
1057 mjpeg_encoder_select="aandct"
1058 mpeg1video_encoder_select="aandct"
1059 mpeg2video_encoder_select="aandct"
1060 mpeg4_encoder_select="aandct"
1061 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1062 mpeg_vdpau_decoder_select="vdpau"
1063 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1064 mpeg1_vdpau_decoder_select="vdpau"
1065 mpeg2_vaapi_hwaccel_deps="va_va_h"
1066 mpeg2_vaapi_hwaccel_select="vaapi"
1067 mpeg4_vaapi_hwaccel_deps="va_va_h"
1068 mpeg4_vaapi_hwaccel_select="vaapi"
1069 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1070 msmpeg4v1_encoder_select="aandct"
1071 msmpeg4v2_encoder_select="aandct"
1072 msmpeg4v3_encoder_select="aandct"
1073 nellymoser_decoder_select="fft mdct"
1074 nellymoser_encoder_select="fft mdct"
1075 png_decoder_select="zlib"
1076 png_encoder_select="zlib"
1077 qdm2_decoder_select="fft mdct rdft"
1078 rv10_encoder_select="aandct"
1079 rv20_encoder_select="aandct"
1080 rv30_decoder_select="golomb"
1081 rv40_decoder_select="golomb"
1082 shorten_decoder_select="golomb"
1083 sonic_decoder_select="golomb"
1084 sonic_encoder_select="golomb"
1085 sonic_ls_encoder_select="golomb"
1086 svq3_decoder_select="golomb"
1087 svq3_decoder_suggest="zlib"
1088 tiff_decoder_suggest="zlib"
1089 tiff_encoder_suggest="zlib"
1090 tscc_decoder_select="zlib"
1091 vc1_vaapi_hwaccel_deps="va_va_h"
1092 vc1_vaapi_hwaccel_select="vaapi"
1093 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1094 vc1_vdpau_decoder_select="vdpau"
1095 vorbis_decoder_select="fft mdct"
1096 vorbis_encoder_select="fft mdct"
1097 wmav1_decoder_select="fft mdct"
1098 wmav1_encoder_select="fft mdct"
1099 wmav2_decoder_select="fft mdct"
1100 wmav2_encoder_select="fft mdct"
1101 wmv1_encoder_select="aandct"
1102 wmv2_encoder_select="aandct"
1103 wmv3_vaapi_hwaccel_deps="va_va_h"
1104 wmv3_vaapi_hwaccel_select="vaapi"
1105 wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1106 wmv3_vdpau_decoder_select="vdpau"
1107 zlib_decoder_select="zlib"
1108 zlib_encoder_select="zlib"
1109 zmbv_decoder_select="zlib"
1110 zmbv_encoder_select="zlib"
1111
1112 # parsers
1113 h264_parser_select="golomb"
1114
1115 # external libraries
1116 libamr_nb_decoder_deps="libamr_nb"
1117 libamr_nb_encoder_deps="libamr_nb"
1118 libamr_wb_decoder_deps="libamr_wb"
1119 libamr_wb_encoder_deps="libamr_wb"
1120 libdirac_decoder_deps="libdirac !libschroedinger"
1121 libdirac_encoder_deps="libdirac"
1122 libfaac_encoder_deps="libfaac"
1123 libfaad_decoder_deps="libfaad"
1124 libfaadbin_decoder_extralibs='$ldl'
1125 libgsm_decoder_deps="libgsm"
1126 libgsm_encoder_deps="libgsm"
1127 libgsm_ms_decoder_deps="libgsm"
1128 libgsm_ms_encoder_deps="libgsm"
1129 libmp3lame_encoder_deps="libmp3lame"
1130 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1131 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1132 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1133 libopenjpeg_decoder_deps="libopenjpeg"
1134 libschroedinger_decoder_deps="libschroedinger"
1135 libschroedinger_encoder_deps="libschroedinger"
1136 libspeex_decoder_deps="libspeex"
1137 libtheora_encoder_deps="libtheora"
1138 libvorbis_encoder_deps="libvorbis"
1139 libx264_encoder_deps="libx264"
1140 libxvid_encoder_deps="libxvid"
1141
1142 # demuxers / muxers
1143 ac3_demuxer_deps="ac3_parser"
1144 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1145 alsa_demuxer_extralibs="-lasound"
1146 alsa_muxer_deps="alsa_asoundlib_h"
1147 alsa_muxer_extralibs="-lasound"
1148 audio_beos_demuxer_deps="audio_beos"
1149 audio_beos_demuxer_extralibs="-lmedia -lbe"
1150 audio_beos_muxer_deps="audio_beos"
1151 audio_beos_muxer_extralibs="-lmedia -lbe"
1152 avisynth_demuxer_deps="avisynth"
1153 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1154 dirac_demuxer_deps="dirac_parser"
1155 dv1394_demuxer_deps="dv1394 dv_demuxer"
1156 jack_demuxer_deps="jack_jack_h"
1157 jack_demuxer_extralibs="-ljack"
1158 libdc1394_demuxer_deps="libdc1394"
1159 libnut_demuxer_deps="libnut"
1160 libnut_muxer_deps="libnut"
1161 matroska_demuxer_suggest="zlib bzlib"
1162 mov_demuxer_suggest="zlib"
1163 mp3_demuxer_deps="mpegaudio_parser"
1164 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1165 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1166 redir_demuxer_deps="network"
1167 rtp_muxer_deps="network rtp_protocol"
1168 rtsp_demuxer_deps="sdp_demuxer"
1169 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1170 v4l_demuxer_deps="linux_videodev_h"
1171 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1172 vfwcap_demuxer_deps="capCreateCaptureWindow"
1173 vfwcap_demuxer_extralibs="-lvfw32"
1174 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1175 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1176
1177 # protocols
1178 gopher_protocol_deps="network"
1179 http_protocol_deps="network"
1180 rtp_protocol_deps="udp_protocol"
1181 tcp_protocol_deps="network"
1182 udp_protocol_deps="network"
1183
1184 # filters
1185 movie_filter_deps="avfilter_lavf"
1186
1187 # programs
1188 ffplay_deps="sdl"
1189 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1190 ffserver_extralibs='$ldl'
1191
1192
1193 # default parameters
1194
1195 logfile="config.err"
1196
1197 # installation paths
1198 prefix_default="/usr/local"
1199 bindir_default='${prefix}/bin'
1200 datadir_default='${prefix}/share/ffmpeg'
1201 incdir_default='${prefix}/include'
1202 libdir_default='${prefix}/lib'
1203 mandir_default='${prefix}/share/man'
1204 shlibdir_default="$libdir_default"
1205
1206 # toolchain
1207 ar="ar"
1208 cc_default="gcc"
1209 host_cc_default="gcc"
1210 ln_s="ln -sf"
1211 nm_default="nm"
1212 objformat="elf"
1213 ranlib="ranlib"
1214 strip="strip"
1215 yasmexe="yasm"
1216
1217 # machine
1218 arch=$(uname -m)
1219 cpu="generic"
1220
1221 # OS
1222 target_os=$(tolower $(uname -s))
1223 host_os=$target_os
1224
1225 # configurable options
1226 enable debug
1227 enable fastdiv
1228 enable ffmpeg
1229 enable ffplay
1230 enable ffserver
1231 enable ipv6
1232 enable mpegaudio_hp
1233 enable network
1234 enable optimizations
1235 enable protocols
1236 enable static
1237 enable stripping
1238 enable swscale_alpha
1239
1240 # build settings
1241 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1242 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1243 FFSERVERLDFLAGS=-Wl,-E
1244 LIBPREF="lib"
1245 LIBSUF=".a"
1246 FULLNAME='$(NAME)$(BUILDSUF)'
1247 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1248 SLIBPREF="lib"
1249 SLIBSUF=".so"
1250 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1251 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1252 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1253 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1254
1255 host_cflags='-O3 -g -Wall'
1256 host_libs='-lm'
1257
1258 target_path='.'
1259
1260 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1261 # full relative path for objects in subdirectories for non-recursive Make.
1262 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1263
1264 # find source path
1265 source_path="$(dirname "$0")"
1266 enable source_path_used
1267 if test -z "$source_path" -o "$source_path" = "." ; then
1268     source_path="$(pwd)"
1269     disable source_path_used
1270 else
1271     source_path="$(cd "$source_path"; pwd)"
1272     echo "$source_path" | grep -q '[[:blank:]]' &&
1273         die "Out of tree builds are impossible with whitespace in source path."
1274     test -e "$source_path/config.h" &&
1275         die "Out of tree builds are impossible with config.h in source dir."
1276 fi
1277
1278 for v in "$@"; do
1279     r=${v#*=}
1280     l=${v%"$r"}
1281     r=$(sh_quote "$r")
1282     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1283 done
1284
1285 find_things(){
1286     thing=$1
1287     pattern=$2
1288     file=$source_path/$3
1289     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1290 }
1291
1292 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1293 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1294 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1295 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1296 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1297 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1298 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1299 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1300 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1301 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1302 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1303
1304 enable $ARCH_EXT_LIST \
1305        $DECODER_LIST \
1306        $ENCODER_LIST \
1307        $HWACCEL_LIST \
1308        $PARSER_LIST \
1309        $BSF_LIST \
1310        $DEMUXER_LIST \
1311        $MUXER_LIST \
1312        $FILTER_LIST \
1313        $PROTOCOL_LIST \
1314        $INDEV_LIST \
1315        $OUTDEV_LIST \
1316
1317 die_unknown(){
1318     echo "Unknown option \"$1\"."
1319     echo "See $0 --help for available options."
1320     exit 1
1321 }
1322
1323 show_list() {
1324     suffix=_$1
1325     shift
1326     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1327     exit 0
1328 }
1329
1330 for opt do
1331     optval="${opt#*=}"
1332     case "$opt" in
1333     --extra-cflags=*) add_cflags $optval
1334     ;;
1335     --extra-ldflags=*) add_ldflags $optval
1336     ;;
1337     --extra-libs=*) add_extralibs $optval
1338     ;;
1339     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1340     ;;
1341     --enable-debug=*) debuglevel="$optval"
1342     ;;
1343     --enable-*=*|--disable-*=*)
1344     eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1345     case "$thing" in
1346         encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1347         *) die_unknown "$opt" ;;
1348     esac
1349     ;;
1350     --enable-?*|--disable-?*)
1351     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1352     if is_in $option $COMPONENT_LIST; then
1353         eval $action \$$(toupper ${option%s})_LIST
1354     elif is_in $option $CMDLINE_SELECT; then
1355         $action $option
1356     else
1357         die_unknown $opt
1358     fi
1359     ;;
1360     --list-*)
1361         NAME="${opt#--list-}"
1362         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1363         NAME=${NAME%s}
1364         eval show_list $NAME \$$(toupper $NAME)_LIST
1365     ;;
1366     --help|-h) show_help
1367     ;;
1368     *)
1369     optname="${opt%%=*}"
1370     optname="${optname#--}"
1371     optname=$(echo "$optname" | sed 's/-/_/g')
1372     is_in $optname $CMDLINE_SET || die_unknown $opt
1373     eval $optname='$optval'
1374     ;;
1375     esac
1376 done
1377
1378 disabled logging && logfile=/dev/null
1379
1380 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1381 set >> $logfile
1382
1383 test -n "$cross_prefix" && enable cross_compile
1384
1385 ar="${cross_prefix}${ar}"
1386 cc_default="${cross_prefix}${cc_default}"
1387 nm_default="${cross_prefix}${nm_default}"
1388 ranlib="${cross_prefix}${ranlib}"
1389 strip="${cross_prefix}${strip}"
1390
1391 sysinclude_default="${sysroot}/usr/include"
1392
1393 set_default cc nm sysinclude
1394 as_default=$cc
1395 enabled cross_compile || host_cc_default=$cc
1396 set_default host_cc
1397
1398 exesuf() {
1399     case $1 in
1400         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1401     esac
1402 }
1403
1404 EXESUF=$(exesuf $target_os)
1405 HOSTEXESUF=$(exesuf $host_os)
1406
1407 # set temporary file name
1408 : ${TMPDIR:=$TEMPDIR}
1409 : ${TMPDIR:=$TMP}
1410 : ${TMPDIR:=/tmp}
1411
1412 if ! check_cmd type mktemp; then
1413     # simple replacement for missing mktemp
1414     # NOT SAFE FOR GENERAL USE
1415     mktemp(){
1416         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1417     }
1418 fi
1419
1420 tmpfile(){
1421     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1422         (set -C; exec > $tmp) 2>/dev/null ||
1423         die "Unable to create temoporary file in $TMPDIR."
1424     append TMPFILES $tmp
1425     eval $1=$tmp
1426 }
1427
1428 trap 'rm -f -- $TMPFILES' EXIT
1429 trap exit HUP INT TERM
1430
1431 tmpfile TMPC  .c
1432 tmpfile TMPE  $EXESUF
1433 tmpfile TMPH  .h
1434 tmpfile TMPO  .o
1435 tmpfile TMPS  .S
1436 tmpfile TMPSH .sh
1437
1438 unset -f mktemp
1439
1440 # make sure we can execute files in $TMPDIR
1441 cat > $TMPSH 2>> $logfile <<EOF
1442 #! /bin/sh
1443 EOF
1444 chmod +x $TMPSH >> $logfile 2>&1
1445 if ! $TMPSH >> $logfile 2>&1; then
1446     cat <<EOF
1447 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1448 variable to another directory and make sure that it is not mounted noexec.
1449 EOF
1450     die "Sanity test failed."
1451 fi
1452
1453 if   $cc --version 2>/dev/null | grep -qi gcc; then
1454     cc_type=gcc
1455 elif $cc --version 2>/dev/null | grep -q Intel; then
1456     cc_type=icc
1457 elif $cc -v 2>&1 | grep -q xlc; then
1458     cc_type=xlc
1459 elif $cc -V 2>/dev/null | grep -q Compaq; then
1460     cc_type=ccc
1461     DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1462     debuglevel=3
1463     add_ldflags -Wl,-z,now # calls to libots crash without this
1464 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1465     test -d "$sysroot" || die "No valid sysroot specified."
1466     cc_type=armcc
1467     armcc_conf="$PWD/armcc.conf"
1468     $cc --arm_linux_configure                 \
1469         --arm_linux_config_file="$armcc_conf" \
1470         --configure_sysroot="$sysroot"        \
1471         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1472         die "Error creating armcc configuration file."
1473     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1474     as_default="${cross_prefix}gcc"
1475 fi
1476
1477 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1478
1479 set_default as
1480
1481 if test -n "$sysroot"; then
1482     case "$cc_type" in
1483         gcc)
1484             add_cflags  --sysroot="$sysroot"
1485             add_ldflags --sysroot="$sysroot"
1486         ;;
1487     esac
1488 fi
1489
1490 # compiler sanity check
1491 check_exec <<EOF
1492 int main(void){ return 0; }
1493 EOF
1494 if test "$?" != 0; then
1495     echo "$cc is unable to create an executable file."
1496     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1497         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1498         echo "Only do this if you know what cross compiling means."
1499     fi
1500     die "C compiler test failed."
1501 fi
1502
1503 check_cflags -std=c99
1504 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1505 #include <stdlib.h>
1506 EOF
1507 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1508 #include <stdlib.h>
1509 EOF
1510
1511 case "$arch" in
1512     alpha)
1513         arch="alpha"
1514         enable fast_64bit
1515         check_cflags -mieee
1516     ;;
1517     arm|armv[4567]*l)
1518         arch="arm"
1519     ;;
1520     avr32)
1521     ;;
1522     bfin)
1523         arch="bfin"
1524     ;;
1525     ia64)
1526         arch="ia64"
1527         enable fast_64bit
1528     ;;
1529     m68k)
1530         arch="m68k"
1531     ;;
1532     mips|mipsel|IP*)
1533         arch="mips"
1534     ;;
1535     mips64)
1536         arch="mips"
1537         subarch="mips64"
1538         enable fast_64bit
1539     ;;
1540     parisc|hppa)
1541         arch="parisc"
1542     ;;
1543     parisc64|hppa64)
1544         arch="parisc"
1545         enable fast_64bit
1546     ;;
1547     "Power Macintosh"|ppc|powerpc)
1548         arch="ppc"
1549         enable fast_unaligned
1550     ;;
1551     ppc64)
1552         arch="ppc"
1553         subarch="ppc64"
1554         enable fast_64bit
1555         enable fast_unaligned
1556     ;;
1557     s390|s390x)
1558         arch="s390"
1559     ;;
1560     sh4|sh)
1561         arch="sh4"
1562     ;;
1563     sparc)
1564         arch="sparc"
1565     ;;
1566     sun4u|sparc64)
1567         arch="sparc"
1568         subarch="sparc64"
1569         enable fast_64bit
1570     ;;
1571     i386|i486|i586|i686|i86pc|BePC)
1572         arch="x86"
1573         subarch="x86_32"
1574         enable fast_unaligned
1575     ;;
1576     x86_64|amd64)
1577         arch="x86"
1578         subarch="x86_32"
1579         enable cmov
1580         enable fast_cmov
1581         enable fast_unaligned
1582         check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1583         int test[sizeof(char*) - 7];
1584 EOF
1585     ;;
1586     *)
1587         arch="unknown"
1588     ;;
1589 esac
1590
1591 enable $arch $subarch
1592
1593 # OS specific
1594 case $target_os in
1595     beos|haiku|zeta)
1596         prefix_default="$HOME/config"
1597         # helps building libavcodec
1598         add_cflags -DPIC -fomit-frame-pointer
1599         # 3 gcc releases known for BeOS, each with ugly bugs
1600         gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1601         case "$gcc_version" in
1602           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1603             disable mmx
1604             ;;
1605           *20010315*) echo "BeBits gcc"
1606             add_cflags -fno-expensive-optimizations
1607             ;;
1608         esac
1609         SHFLAGS=-nostart
1610         # enable BeOS things
1611         enable audio_beos
1612         # no need for libm, but the inet stuff
1613         # Check for BONE
1614         # XXX: actually should check for NOT net_server
1615         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1616             network_extralibs="-lbind -lsocket"
1617         else
1618             enable beos_netserver
1619             network_extralibs="-lnet"
1620         fi ;;
1621     sunos)
1622         FFSERVERLDFLAGS=""
1623         SHFLAGS='-shared -Wl,-h,$$(@F)'
1624         network_extralibs="-lsocket -lnsl"
1625         add_cflags -D__EXTENSIONS__
1626         ;;
1627     netbsd)
1628         oss_demuxer_extralibs="-lossaudio"
1629         oss_muxer_extralibs="-lossaudio"
1630         ;;
1631     openbsd)
1632         disable need_memalign
1633         LIBOBJFLAGS='$(PIC)'
1634         SHFLAGS='-shared'
1635         oss_demuxer_extralibs="-lossaudio"
1636         oss_muxer_extralibs="-lossaudio"
1637         ;;
1638     freebsd|dragonfly)
1639         disable need_memalign
1640         ;;
1641     bsd/os)
1642         osextralibs="-lpoll -lgnugetopt"
1643         strip="strip -d"
1644         ;;
1645     darwin)
1646         disable need_memalign
1647         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1648         strip="strip -x"
1649         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1650         SLIBSUF=".dylib"
1651         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1652         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1653         FFSERVERLDFLAGS=-Wl,-bind_at_load
1654         objformat="macho"
1655         enabled x86_64 && objformat="macho64"
1656         ;;
1657     mingw32*)
1658         target_os=mingw32
1659         LIBTARGET=i386
1660         if enabled x86_64; then
1661             disable need_memalign
1662             LIBTARGET=x64
1663         fi
1664         shlibdir_default="$bindir_default"
1665         disable ffserver
1666         SLIBPREF=""
1667         SLIBSUF=".dll"
1668         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1669         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1670         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1671         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1672             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1673         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1674         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'
1675         objformat="win32"
1676         enable dos_paths
1677         check_cflags -fno-common
1678         if ! enabled x86_64; then
1679             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1680                 die "ERROR: MinGW runtime version must be >= 3.15."
1681             enabled_any avisynth vfwcap_demuxer &&
1682                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1683                   die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1684             fi
1685         ;;
1686     cygwin*)
1687         target_os=cygwin
1688         shlibdir_default="$bindir_default"
1689         SLIBPREF="cyg"
1690         SLIBSUF=".dll"
1691         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1692         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1693         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1694         objformat="win32"
1695         enable dos_paths
1696         check_cflags -fno-common
1697         ;;
1698     *-dos|freedos|opendos)
1699         disable ffplay ffserver
1700         disable $INDEV_LIST $OUTDEV_LIST
1701         network_extralibs="-lsocket"
1702         objformat="coff"
1703         enable dos_paths
1704         ;;
1705     linux)
1706         enable dv1394
1707         ;;
1708     irix*)
1709         target_os=irix
1710         ranlib="echo ignoring ranlib"
1711         ;;
1712     os/2*)
1713         strip="lxlite"
1714         ln_s="cp -f"
1715         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1716         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1717         FFSERVERLDFLAGS=""
1718         LIBSUF="_s.a"
1719         SLIBPREF=""
1720         SLIBSUF=".dll"
1721         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1722         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1723         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1724           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1725           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1726           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1727           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1728           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1729         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1730           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1731         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1732         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1733         enable dos_paths
1734         ;;
1735     gnu/kfreebsd)
1736         ;;
1737     gnu)
1738         ;;
1739
1740     *)
1741         die "Unknown OS '$target_os'."
1742         ;;
1743 esac
1744
1745 set_default $PATHS_LIST
1746
1747 add_extralibs $osextralibs
1748
1749 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1750 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1751
1752 # we need to build at least one lib type
1753 if ! enabled_any static shared; then
1754     cat <<EOF
1755 At least one library type must be built.
1756 Specify --enable-static to build the static libraries or --enable-shared to
1757 build the shared libraries as well. To only build the shared libraries specify
1758 --disable-static in addition to --enable-shared.
1759 EOF
1760     exit 1;
1761 fi
1762
1763 disabled static && LIBNAME=""
1764
1765 if enabled_any libfaad libfaadbin ; then
1766     if check_header faad.h; then
1767         check_cc <<EOF
1768 #include <faad.h>
1769 #ifndef FAAD2_VERSION
1770 ok faad1
1771 #endif
1772 int main(void) { return 0; }
1773 EOF
1774         test $? = 0 && enable libfaad2
1775     else
1776         die "FAAD test failed."
1777     fi
1778 fi
1779
1780
1781 die_license_disabled() {
1782     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1783 }
1784
1785 die_license_disabled gpl libfaad2
1786 die_license_disabled gpl libx264
1787 die_license_disabled gpl libxvid
1788 die_license_disabled gpl postproc
1789 die_license_disabled gpl x11grab
1790
1791 die_license_disabled nonfree libamr_nb
1792 die_license_disabled nonfree libamr_wb
1793 die_license_disabled nonfree libfaac
1794
1795 die_license_disabled version3 libopencore_amrnb
1796 die_license_disabled version3 libopencore_amrwb
1797
1798 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1799
1800 check_deps $ARCH_EXT_LIST
1801
1802 test -z "$need_memalign" && need_memalign="$mmx"
1803
1804 #Darwin CC versions
1805 if test $target_os = darwin; then
1806     if enabled xlc; then
1807         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1808     else
1809         add_cflags -pipe
1810         check_cflags -force_cpusubtype_ALL
1811         check_cflags -Wno-sign-compare
1812         enabled shared || check_cflags -mdynamic-no-pic
1813     fi
1814 fi
1815
1816 disabled optimizations || check_cflags -fomit-frame-pointer
1817
1818 # Add processor-specific flags
1819 if test $cpu != "generic"; then
1820     warn_altivec(){
1821         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1822     }
1823     case $cpu in
1824         601|ppc601|PowerPC601)
1825             add_cflags -mcpu=601
1826             warn_altivec enabled PPC601
1827         ;;
1828         603*|ppc603*|PowerPC603*)
1829             add_cflags -mcpu=603
1830             warn_altivec enabled PPC603
1831         ;;
1832         604*|ppc604*|PowerPC604*)
1833             add_cflags -mcpu=604
1834             warn_altivec enabled PPC604
1835         ;;
1836         G3|g3|75*|ppc75*|PowerPC75*)
1837             add_cflags -mcpu=750 -mpowerpc-gfxopt
1838             warn_altivec enabled PPC75x
1839         ;;
1840         G4|g4|745*|ppc745*|PowerPC745*)
1841             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1842             warn_altivec disabled PPC745x
1843         ;;
1844         74*|ppc74*|PowerPC74*)
1845             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1846             warn_altivec disabled PPC74xx
1847         ;;
1848         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1849             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1850             warn_altivec disabled PPC970
1851         ;;
1852         Cell|CELL|cell)
1853             add_cflags -mcpu=cell
1854             warn_altivec disabled Cell
1855             enable ldbrx
1856         ;;
1857         # targets that do NOT support conditional mov (cmov)
1858         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1859             add_cflags -march=$cpu
1860             disable cmov
1861         ;;
1862         # targets that do support conditional mov (cmov)
1863         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1864             add_cflags -march=$cpu
1865             enable cmov
1866             enable fast_cmov
1867         ;;
1868         # targets that do support conditional mov but on which it's slow
1869         pentium4|pentium4m|prescott|nocona)
1870             add_cflags -march=$cpu
1871             enable cmov
1872             disable fast_cmov
1873         ;;
1874         sparc64)
1875             add_cflags -mcpu=v9
1876         ;;
1877         arm11*|cortex*)
1878             add_cflags -mcpu=$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 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 libamr_nb  && require  libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2093 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2094 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2095                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2096                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2097 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2098 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2099 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2100 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2101 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2102 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2103 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2104 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2105 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2106                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2107 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2108 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2109 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2110 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2111                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2112                         die "ERROR: libx264 version must be >= 0.65."; }
2113 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2114 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2115
2116 # libdc1394 check
2117 if enabled libdc1394; then
2118     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2119         enable libdc1394_2; } ||
2120     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2121         enable libdc1394_1; } ||
2122     die "ERROR: No version of libdc1394 found "
2123 fi
2124
2125
2126 _restrict=
2127 for restrict_keyword in restrict __restrict__ __restrict; do
2128     check_cc <<EOF && _restrict=$restrict_keyword && break
2129 void foo(char * $restrict_keyword p);
2130 EOF
2131 done
2132
2133 ##########################################
2134 # SDL check
2135
2136 disable sdl_too_old
2137 disable sdl
2138 SDL_CONFIG="${cross_prefix}sdl-config"
2139 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2140     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2141     temp_cflags $sdl_cflags
2142     temp_extralibs $("${SDL_CONFIG}" --libs)
2143     if check_lib2 SDL.h SDL_Init; then
2144         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2145         if test "$_sdlversion" -lt 121 ; then
2146             enable sdl_too_old
2147         else
2148             enable sdl
2149             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2150 #include <SDL.h>
2151 int main(int argc, char **argv){
2152     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2153     int w = vi->current_w;
2154     return 0;
2155 }
2156 EOF
2157         fi
2158     fi
2159     restore_flags
2160 fi
2161
2162 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2163
2164 ##########################################
2165 # Network check
2166
2167 if enabled network; then
2168     check_type "sys/types.h sys/socket.h" socklen_t
2169     # Prefer arpa/inet.h over winsock2
2170     if check_header arpa/inet.h ; then
2171         check_func closesocket
2172     elif check_header winsock2.h ; then
2173         network_extralibs="-lws2_32"
2174         check_type ws2tcpip.h socklen_t
2175         check_func_headers winsock2.h closesocket
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 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2215
2216 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 "libamr-nb support         ${libamr_nb-no}"
2403 echo "libamr-wb support         ${libamr_wb-no}"
2404 echo "libdc1394 support         ${libdc1394-no}"
2405 echo "libdirac enabled          ${libdirac-no}"
2406 echo "libfaac enabled           ${libfaac-no}"
2407 echo "libfaad enabled           ${libfaad-no}"
2408 echo "libfaad dlopened          ${libfaadbin-no}"
2409 echo "libgsm enabled            ${libgsm-no}"
2410 echo "libmp3lame enabled        ${libmp3lame-no}"
2411 echo "libnut enabled            ${libnut-no}"
2412 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2413 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2414 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2415 echo "libschroedinger enabled   ${libschroedinger-no}"
2416 echo "libspeex enabled          ${libspeex-no}"
2417 echo "libtheora enabled         ${libtheora-no}"
2418 echo "libvorbis enabled         ${libvorbis-no}"
2419 echo "libx264 enabled           ${libx264-no}"
2420 echo "libxvid enabled           ${libxvid-no}"
2421 echo "zlib enabled              ${zlib-no}"
2422 echo "bzlib enabled             ${bzlib-no}"
2423 echo
2424
2425 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2426     echo "Enabled ${type}s:"
2427     eval list=\$$(toupper $type)_LIST
2428     for part in $list; do
2429         enabled $part && echo ${part%_*}
2430     done | sort | pr -3 -t
2431     echo
2432 done
2433
2434 license="LGPL version 2.1 or later"
2435 if enabled nonfree; then
2436     license="nonfree and unredistributable"
2437 elif enabled gplv3; then
2438     license="GPL version 3 or later"
2439 elif enabled lgplv3; then
2440     license="LGPL version 3 or later"
2441 elif enabled gpl; then
2442     license="GPL version 2 or later"
2443 fi
2444
2445 echo "License: $license"
2446
2447 echo "Creating config.mak and config.h..."
2448
2449 echo "# Automatically generated by configure - do not modify!" > config.mak
2450 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2451 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2452 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2453 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2454 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2455
2456 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2457 echo "prefix=$prefix" >> config.mak
2458 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2459 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2460 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2461 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2462 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2463 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2464 echo "SRC_PATH=\"$source_path\"" >> config.mak
2465 echo "SRC_PATH_BARE=$source_path" >> config.mak
2466 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2467 echo "CC=$cc" >> config.mak
2468 echo "AS=$as" >> config.mak
2469 echo "YASM=$yasmexe" >> config.mak
2470 echo "AR=$ar" >> config.mak
2471 echo "RANLIB=$ranlib" >> config.mak
2472 echo "LN_S=$ln_s" >> config.mak
2473 enabled stripping &&
2474     echo "STRIP=$strip" >> config.mak ||
2475     echo "STRIP=echo ignoring strip" >> config.mak
2476
2477 echo "OPTFLAGS=$CFLAGS" >> config.mak
2478 echo "LDFLAGS=$LDFLAGS" >> config.mak
2479 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2480 echo "SHFLAGS=$SHFLAGS" >> config.mak
2481 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2482 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2483 echo "BUILD_STATIC=$static" >> config.mak
2484 echo "BUILDSUF=$build_suffix" >> config.mak
2485 echo "FULLNAME=$FULLNAME" >> config.mak
2486 echo "LIBPREF=$LIBPREF" >> config.mak
2487 echo "LIBSUF=$LIBSUF" >> config.mak
2488 echo "LIBNAME=$LIBNAME" >> config.mak
2489 echo "SLIBPREF=$SLIBPREF" >> config.mak
2490 echo "SLIBSUF=$SLIBSUF" >> config.mak
2491 echo "EXESUF=$EXESUF" >> config.mak
2492 echo "EXTRA_VERSION=$extra_version" >> config.mak
2493 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2494 echo "HOSTCC=$host_cc" >> config.mak
2495 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2496 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2497 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2498 echo "HOSTLIBS=$host_libs" >> config.mak
2499 echo "TARGET_EXEC=$target_exec" >> config.mak
2500 echo "TARGET_PATH=$target_path" >> config.mak
2501
2502 if enabled bigendian; then
2503     echo "WORDS_BIGENDIAN=yes" >> config.mak
2504     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2505 fi
2506
2507 if enabled sdl; then
2508     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2509     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2510 fi
2511 if enabled texi2html; then
2512     echo "BUILD_DOC=yes" >> config.mak
2513 fi
2514
2515 get_version(){
2516     name=$1
2517     file=$source_path/$2
2518     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2519     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2520     lcname=$(tolower $name)
2521     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2522     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2523 }
2524
2525 get_version LIBSWSCALE  libswscale/swscale.h
2526 get_version LIBPOSTPROC libpostproc/postprocess.h
2527 get_version LIBAVCODEC  libavcodec/avcodec.h
2528 get_version LIBAVDEVICE libavdevice/avdevice.h
2529 get_version LIBAVFORMAT libavformat/avformat.h
2530 get_version LIBAVUTIL   libavutil/avutil.h
2531 get_version LIBAVFILTER libavfilter/avfilter.h
2532
2533 if enabled shared; then
2534     echo "BUILD_SHARED=yes" >> config.mak
2535     echo "PIC=-fPIC -DPIC" >> config.mak
2536     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2537     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2538     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2539     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2540     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2541     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2542     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2543     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2544 fi
2545 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2546 echo "EXTRALIBS=$extralibs" >> config.mak
2547
2548 echo "ARCH=$arch" >> config.mak
2549
2550 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2551 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2552 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2553                                       $CONFIG_EXTRA      \
2554                                       $DECODER_LIST      \
2555                                       $ENCODER_LIST      \
2556                                       $HWACCEL_LIST      \
2557                                       $PARSER_LIST       \
2558                                       $BSF_LIST          \
2559                                       $DEMUXER_LIST      \
2560                                       $MUXER_LIST        \
2561                                       $FILTER_LIST       \
2562                                       $PROTOCOL_LIST     \
2563                                       $INDEV_LIST        \
2564                                       $OUTDEV_LIST       \
2565
2566 echo "#define restrict $_restrict" >> $TMPH
2567
2568 if enabled small; then
2569     echo "#define av_always_inline"  >> $TMPH
2570 fi
2571
2572
2573 # Apparently it's not possible to portably echo a backslash.
2574 enabled asmalign_pot &&
2575     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2576     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2577
2578 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2579
2580 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2581
2582 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2583 cmp -s $TMPH config.h &&
2584     echo "config.h is unchanged" ||
2585     mv -f $TMPH config.h
2586
2587 # build tree in object directory if source path is different from current one
2588 if enabled source_path_used; then
2589     DIRS="\
2590         doc               \
2591         libavcodec        \
2592         libavcodec/alpha  \
2593         libavcodec/arm    \
2594         libavcodec/bfin   \
2595         libavcodec/mlib   \
2596         libavcodec/ppc    \
2597         libavcodec/sh4    \
2598         libavcodec/sparc  \
2599         libavcodec/x86    \
2600         libavdevice       \
2601         libavfilter       \
2602         libavformat       \
2603         libavutil         \
2604         libpostproc       \
2605         libswscale        \
2606         libswscale/bfin   \
2607         libswscale/mlib   \
2608         libswscale/ppc    \
2609         libswscale/sparc  \
2610         libswscale/x86    \
2611         tests             \
2612         tools             \
2613         "
2614     FILES="\
2615         Makefile             \
2616         common.mak           \
2617         subdir.mak           \
2618         doc/texi2pod.pl      \
2619         libavcodec/Makefile  \
2620         libavdevice/Makefile \
2621         libavfilter/Makefile \
2622         libavformat/Makefile \
2623         libavutil/Makefile   \
2624         libpostproc/Makefile \
2625         libswscale/Makefile  \
2626         "
2627     for dir in $DIRS ; do
2628         mkdir -p $dir
2629     done
2630     for f in $FILES ; do
2631         $ln_s "$source_path/$f" $f
2632     done
2633 fi
2634
2635
2636 # build pkg-config files
2637
2638 pkgconfig_generate(){
2639 name=$1
2640 shortname=${name#lib}${build_suffix}
2641 comment=$2
2642 version=$3
2643 libs=$4
2644 requires=$5
2645 cat <<EOF > $name/$name.pc
2646 prefix=$prefix
2647 exec_prefix=\${prefix}
2648 libdir=$libdir
2649 includedir=$incdir
2650
2651 Name: $name
2652 Description: $comment
2653 Version: $version
2654 Requires: $(disabled shared && echo $requires)
2655 Requires.private: $(enabled shared && echo $requires)
2656 Conflicts:
2657 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2658 Libs.private: $(enabled shared && echo $libs)
2659 Cflags: -I\${includedir}
2660 EOF
2661 cat <<EOF > $name/$name-uninstalled.pc
2662 prefix=
2663 exec_prefix=
2664 libdir=\${pcfiledir}
2665 includedir=${source_path}
2666
2667 Name: $name
2668 Description: $comment
2669 Version: $version
2670 Requires: $requires
2671 Conflicts:
2672 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2673 Cflags: -I\${includedir}
2674 EOF
2675 }
2676
2677 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2678 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2679 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2680 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2681 enabled avfilter &&
2682     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2683 enabled postproc &&
2684     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2685 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"