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