Fix build on Net/OpenBSD
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58   echo "Usage: configure [options]"
59   echo "Options: [defaults in brackets after descriptions]"
60   echo
61   echo "Standard options:"
62   echo "  --help                   print this message"
63   echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64   echo "  --disable-logging        do not log configure debug information"
65   echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66   echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67   echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
68   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
69   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
70   echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
71   echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
72   echo
73   echo "Configuration options:"
74   echo "  --disable-static         do not build static libraries [no]"
75   echo "  --enable-shared          build shared libraries [no]"
76   echo "  --enable-gpl             allow use of GPL code, the resulting libs"
77   echo "                           and binaries will be under GPL [no]"
78   echo "  --enable-version3        upgrade (L)GPL to version 3 [no]"
79   echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
80   echo "                           and binaries will be unredistributable [no]"
81   echo "  --disable-ffmpeg         disable ffmpeg build"
82   echo "  --disable-ffplay         disable ffplay build"
83   echo "  --disable-ffserver       disable ffserver build"
84   echo "  --enable-postproc        enable GPLed postprocessing support [no]"
85   echo "  --enable-avfilter        video filter support [no]"
86   echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
87   echo "  --enable-beosthreads     use BeOS threads [no]"
88   echo "  --enable-os2threads      use OS/2 threads [no]"
89   echo "  --enable-pthreads        use pthreads [no]"
90   echo "  --enable-w32threads      use Win32 threads [no]"
91   echo "  --enable-x11grab         enable X11 grabbing [no]"
92   echo "  --disable-network        disable network support [no]"
93   echo "  --disable-ipv6           disable IPv6 support [no]"
94   echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
95   echo "  --enable-gray            enable full grayscale support (slower color)"
96   echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
97   echo "  --disable-fastdiv        disable table-based division"
98   echo "  --enable-small           optimize for size instead of speed"
99   echo "  --disable-aandct         disable AAN DCT code"
100   echo "  --disable-fft            disable FFT code"
101   echo "  --disable-golomb         disable Golomb code"
102   echo "  --disable-mdct           disable MDCT code"
103   echo "  --disable-rdft           disable RDFT code"
104   echo "  --disable-vaapi          disable VAAPI code"
105   echo "  --disable-vdpau          disable VDPAU code"
106   echo "  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
107   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
108   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
109   echo "  --enable-beos-netserver  enable BeOS netserver"
110   echo "  --disable-encoder=NAME   disable encoder NAME"
111   echo "  --enable-encoder=NAME    enable encoder NAME"
112   echo "  --disable-encoders       disable all encoders"
113   echo "  --disable-decoder=NAME   disable decoder NAME"
114   echo "  --enable-decoder=NAME    enable decoder NAME"
115   echo "  --disable-decoders       disable all decoders"
116   echo "  --disable-hwaccel=NAME   disable hwaccel NAME"
117   echo "  --enable-hwaccel=NAME    enable hwaccel NAME"
118   echo "  --disable-hwaccels       disable all hwaccels"
119   echo "  --disable-muxer=NAME     disable muxer NAME"
120   echo "  --enable-muxer=NAME      enable muxer NAME"
121   echo "  --disable-muxers         disable all muxers"
122   echo "  --disable-demuxer=NAME   disable demuxer NAME"
123   echo "  --enable-demuxer=NAME    enable demuxer NAME"
124   echo "  --disable-demuxers       disable all demuxers"
125   echo "  --enable-parser=NAME     enable parser NAME"
126   echo "  --disable-parser=NAME    disable parser NAME"
127   echo "  --disable-parsers        disable all parsers"
128   echo "  --enable-bsf=NAME        enable bitstream filter NAME"
129   echo "  --disable-bsf=NAME       disable bitstream filter NAME"
130   echo "  --disable-bsfs           disable all bitstream filters"
131   echo "  --enable-protocol=NAME   enable protocol NAME"
132   echo "  --disable-protocol=NAME  disable protocol NAME"
133   echo "  --disable-protocols      disable all protocols"
134   echo "  --disable-indev=NAME     disable input device NAME"
135   echo "  --disable-outdev=NAME    disable output device NAME"
136   echo "  --disable-indevs         disable input devices"
137   echo "  --disable-outdevs        disable output devices"
138   echo "  --disable-devices        disable all devices"
139   echo "  --enable-filter=NAME     enable filter NAME"
140   echo "  --disable-filter=NAME    disable filter NAME"
141   echo "  --disable-filters        disable all filters"
142   echo "  --list-decoders          show all available decoders"
143   echo "  --list-encoders          show all available encoders"
144   echo "  --list-hwaccels          show all available hardware accelerators"
145   echo "  --list-muxers            show all available muxers"
146   echo "  --list-demuxers          show all available demuxers"
147   echo "  --list-parsers           show all available parsers"
148   echo "  --list-protocols         show all available protocols"
149   echo "  --list-bsfs              show all available bitstream filters"
150   echo "  --list-indevs            show all available input devices"
151   echo "  --list-outdevs           show all available output devices"
152   echo "  --list-filters           show all available filters"
153   echo
154   echo "External library support:"
155   echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
156   echo "  --enable-bzlib           enable bzlib [autodetect]"
157   echo "  --enable-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*)
1886             add_cflags -march=$cpu
1887         ;;
1888         arm*)
1889             add_cflags -mcpu=$cpu
1890         ;;
1891         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1892             enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1893         ;;
1894         bf*)
1895             add_cflags -mcpu=$cpu
1896         ;;
1897         mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1898             add_cflags -march=$cpu
1899         ;;
1900         *)
1901             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1902         ;;
1903     esac
1904 fi
1905
1906 check_cc <<EOF || die "Symbol mangling check failed."
1907 int ff_extern;
1908 EOF
1909 sym=$($nm -P -g $TMPO | grep ff_extern)
1910 extern_prefix=${sym%%ff_extern*}
1911
1912 check_cc <<EOF && enable inline_asm
1913 void foo(void) { __asm__ volatile ("" ::); }
1914 EOF
1915
1916 if enabled x86; then
1917     # check whether EBP is available on x86
1918     # As 'i' is stored on the stack, this program will crash
1919     # if the base pointer is used to access it because the
1920     # base pointer is cleared in the inline assembly code.
1921     check_exec_crash <<EOF && enable ebp_available
1922     volatile int i=0;
1923     __asm__ volatile (
1924         "xorl %%ebp, %%ebp"
1925     ::: "%ebp");
1926     return i;
1927 EOF
1928
1929     # check wether EBX is available on x86
1930     check_asm ebx_available '"":::"%ebx"'
1931
1932     # check whether more than 10 operands are supported
1933     check_cc <<EOF && enable ten_operands
1934 int main(void) {
1935     int x=0;
1936     __asm__ volatile(
1937         ""
1938         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1939     );
1940     return 0;
1941 }
1942 EOF
1943
1944     # check whether binutils is new enough to compile SSSE3/MMX2
1945     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1946     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1947
1948     check_asm bswap '"bswap %%eax" ::: "%eax"'
1949
1950     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1951     enabled     x86_64        && append YASMFLAGS "-m amd64"
1952     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1953     case "$objformat" in
1954         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1955         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1956         *)                    append YASMFLAGS "-DPREFIX"  ;;
1957     esac
1958     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1959 fi
1960
1961 # check for assembler specific support
1962
1963 enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1964
1965 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1966 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1967 enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1968
1969 # check for SIMD availability
1970
1971 # AltiVec flags: The FSF version of GCC differs from the Apple version
1972 if enabled altivec; then
1973     check_cflags -maltivec -mabi=altivec &&
1974         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1975         check_cflags -faltivec
1976
1977     # check if our compiler supports Motorola AltiVec C API
1978     check_cc <<EOF || disable altivec
1979 $inc_altivec_h
1980 int main(void) {
1981     vector signed int v1, v2, v3;
1982     v1 = vec_add(v2,v3);
1983     return 0;
1984 }
1985 EOF
1986
1987     # check if our compiler supports braces for vector declarations
1988     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1989 $inc_altivec_h
1990 int main (void) { (vector int) {1}; return 0; }
1991 EOF
1992 fi
1993
1994 # We have to check if pld is a nop and disable it.
1995 enabled arm     && check_asm pld     '"pld [r0]"'
1996 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1997 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1998 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1999 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2000 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2001 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2002 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2003 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
2004
2005 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2006
2007 # ---
2008 # big/little-endian test
2009 check_cc <<EOF || die "endian test failed"
2010 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2011 EOF
2012 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2013
2014 # ---
2015 # check availability of some header files
2016
2017 if check_func dlopen; then
2018     ldl=
2019 elif check_func dlopen -ldl; then
2020     ldl=-ldl
2021 fi
2022
2023 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2024 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2025
2026 check_func  fork
2027 check_func  gethrtime
2028 check_func  getrusage
2029 check_func  inet_aton $network_extralibs
2030 check_func  memalign
2031 check_func  mkstemp
2032 check_func  posix_memalign
2033 check_func_headers io.h setmode
2034 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2035 check_func_headers windows.h GetProcessTimes
2036 check_func_headers windows.h VirtualAlloc
2037
2038 check_header conio.h
2039 check_header dlfcn.h
2040 check_header malloc.h
2041 check_header poll.h
2042 check_header sys/mman.h
2043 check_header sys/resource.h
2044 check_header sys/select.h
2045 check_header termios.h
2046 check_header vdpau/vdpau.h
2047 check_header vdpau/vdpau_x11.h
2048 check_header X11/extensions/XvMClib.h
2049
2050 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2051     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2052 fi
2053
2054 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2055 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2056
2057 # check for some common methods of building with pthread support
2058 # do this before the optional library checks as some of them require pthreads
2059 if enabled pthreads; then
2060     if check_func pthread_create; then
2061         :
2062     elif check_func pthread_create -pthread; then
2063         add_cflags -pthread
2064         add_extralibs -pthread
2065     elif check_func pthread_create -pthreads; then
2066         add_cflags -pthreads
2067         add_extralibs -pthreads
2068     elif check_func pthread_create -lpthreadGC2; then
2069         add_extralibs -lpthreadGC2
2070     elif ! check_lib pthread.h pthread_create -lpthread; then
2071         die "ERROR: can't find pthreads library"
2072     fi
2073 fi
2074
2075 for thread in $THREADS_LIST; do
2076     if enabled $thread; then
2077         test -n "$thread_type" &&
2078             die "ERROR: Only one thread type must be selected." ||
2079             thread_type="$thread"
2080     fi
2081 done
2082
2083 check_lib math.h sin -lm
2084 check_lib va/va.h vaInitialize -lva
2085
2086 # test for C99 functions in math.h
2087 for func in llrint lrint lrintf round roundf truncf; do
2088     check_exec <<EOF && enable $func || disable $func
2089 #include <math.h>
2090 int main(void) { return ($func(3.999f) > 0)?0:1; }
2091 EOF
2092 done
2093
2094 # these are off by default, so fail if requested and not available
2095 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2096 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2097 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2098 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2099                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2100                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2101 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2102 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2103 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2104 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2105 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2106 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2107 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2108 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2109 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2110                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2111 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2112 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2113 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2114 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2115                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2116                         die "ERROR: libx264 version must be >= 0.65."; }
2117 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2118 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2119
2120 # libdc1394 check
2121 if enabled libdc1394; then
2122     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2123         enable libdc1394_2; } ||
2124     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2125         enable libdc1394_1; } ||
2126     die "ERROR: No version of libdc1394 found "
2127 fi
2128
2129
2130 _restrict=
2131 for restrict_keyword in restrict __restrict__ __restrict; do
2132     check_cc <<EOF && _restrict=$restrict_keyword && break
2133 void foo(char * $restrict_keyword p);
2134 EOF
2135 done
2136
2137 ##########################################
2138 # SDL check
2139
2140 disable sdl_too_old
2141 disable sdl
2142 SDL_CONFIG="${cross_prefix}sdl-config"
2143 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2144     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2145     temp_cflags $sdl_cflags
2146     temp_extralibs $("${SDL_CONFIG}" --libs)
2147     if check_lib2 SDL.h SDL_Init; then
2148         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2149         if test "$_sdlversion" -lt 121 ; then
2150             enable sdl_too_old
2151         else
2152             enable sdl
2153             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2154 #include <SDL.h>
2155 int main(int argc, char **argv){
2156     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2157     int w = vi->current_w;
2158     return 0;
2159 }
2160 EOF
2161         fi
2162     fi
2163     restore_flags
2164 fi
2165
2166 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2167
2168 ##########################################
2169 # Network check
2170
2171 if enabled network; then
2172     check_type "sys/types.h sys/socket.h" socklen_t
2173     # Prefer arpa/inet.h over winsock2
2174     if check_header arpa/inet.h ; then
2175         check_func closesocket
2176     elif check_header winsock2.h ; then
2177         network_extralibs="-lws2_32"
2178         check_type ws2tcpip.h socklen_t
2179         check_func_headers winsock2.h closesocket
2180     else
2181         disable network
2182     fi
2183 fi
2184
2185 ##########################################
2186 # IPv6 check
2187
2188 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2189 #include <sys/types.h>
2190 #include <sys/socket.h>
2191 #include <netinet/in.h>
2192 #include <netdb.h>
2193 int main(void) {
2194     struct sockaddr_storage saddr;
2195     struct ipv6_mreq mreq6;
2196     getaddrinfo(0,0,0,0);
2197     getnameinfo(0,0,0,0,0,0,0);
2198     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2199 }
2200 EOF
2201
2202 check_header linux/videodev.h
2203 check_header linux/videodev2.h
2204 check_header sys/videoio.h
2205
2206 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2207
2208 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2209 { check_header dev/bktr/ioctl_meteor.h &&
2210   check_header dev/bktr/ioctl_bt848.h; } ||
2211 { check_header machine/ioctl_meteor.h &&
2212   check_header machine/ioctl_bt848.h; } ||
2213 { check_header dev/video/meteor/ioctl_meteor.h &&
2214   check_header dev/video/bktr/ioctl_bt848.h; } ||
2215 check_header dev/ic/bt8xx.h
2216
2217 check_header sys/soundcard.h
2218 check_header soundcard.h
2219
2220 enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2221
2222 enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
2223
2224 # deal with the X11 frame grabber
2225 enabled x11grab                         &&
2226 check_header X11/Xlib.h                 &&
2227 check_header X11/extensions/XShm.h      &&
2228 check_func XOpenDisplay -lX11           &&
2229 check_func XShmCreateImage -lX11 -lXext
2230
2231 enabled debug && add_cflags -g"$debuglevel"
2232
2233 # add some useful compiler flags if supported
2234 check_cflags -Wdeclaration-after-statement
2235 check_cflags -Wall
2236 check_cflags -Wno-switch
2237 check_cflags -Wdisabled-optimization
2238 check_cflags -Wpointer-arith
2239 check_cflags -Wredundant-decls
2240 check_cflags -Wno-pointer-sign
2241 check_cflags -Wcast-qual
2242 check_cflags -Wwrite-strings
2243 check_cflags -Wtype-limits
2244 check_cflags -Wundef
2245 enabled extra_warnings && check_cflags -Winline
2246
2247 # add some linker flags
2248 check_ldflags -Wl,--warn-common
2249 check_ldflags -Wl,--as-needed
2250 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'
2251 check_ldflags -Wl,-Bsymbolic
2252
2253 if enabled small; then
2254     check_cflags -Os            # not all compilers support -Os
2255     optimizations="small"
2256 elif enabled optimizations; then
2257     if enabled xlc; then
2258         add_cflags  -O5
2259         add_ldflags -O5
2260     elif enabled ccc; then
2261         add_cflags -fast
2262     else
2263         add_cflags -O3
2264     fi
2265 fi
2266 check_cflags -fno-math-errno
2267 check_cflags -fno-signed-zeros
2268
2269 # add some flags for Intel C Compiler
2270 if enabled icc; then
2271     # Just warnings, no remarks
2272     check_cflags -w1
2273     # -wd: Disable following warnings
2274     # 144, 167, 556: -Wno-pointer-sign
2275     # 10006: ignoring unknown option -fno-signed-zeros
2276     # 10156: ignoring option '-W'; no argument required
2277     check_cflags -wd144,167,556,10006,10156
2278     # 11030: Warning unknown option --as-needed
2279     # 10156: ignoring option '-export'; no argument required
2280     check_ldflags -wd10156,11030
2281     # Allow to compile with optimizations
2282     check_ldflags -march=$cpu
2283     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2284     enable ebp_available
2285 elif enabled ccc; then
2286     # disable some annoying warnings
2287     add_cflags -msg_disable cvtu32to64
2288     add_cflags -msg_disable embedcomment
2289     add_cflags -msg_disable needconstext
2290     add_cflags -msg_disable nomainieee
2291     add_cflags -msg_disable ptrmismatch1
2292     add_cflags -msg_disable unreachcode
2293 fi
2294
2295 # PIC flags for shared library objects where they are needed
2296 if enabled shared; then
2297     # LIBOBJFLAGS may have already been set in the OS configuration
2298     if test -z "$LIBOBJFLAGS" ; then
2299         case "${subarch-$arch}" in
2300             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2301         esac
2302     fi
2303 fi
2304
2305 if enabled gprof; then
2306     add_cflags  -p
2307     add_ldflags -p
2308 fi
2309
2310 # Find out if the .align argument is a power of two or not.
2311 check_asm asmalign_pot '".align 3"'
2312
2313 enabled_any $DECODER_LIST      && enable decoders
2314 enabled_any $ENCODER_LIST      && enable encoders
2315 enabled_any $HWACCEL_LIST      && enable hwaccels
2316 enabled_any $BSF_LIST          && enable bsfs
2317 enabled_any $DEMUXER_LIST      && enable demuxers
2318 enabled_any $MUXER_LIST        && enable muxers
2319 enabled_any $FILTER_LIST       && enable filters
2320 enabled_any $INDEV_LIST        && enable demuxers
2321 enabled_any $OUTDEV_LIST       && enable muxers
2322 enabled_any $PROTOCOL_LIST     && enable protocols
2323
2324 enabled_any $THREADS_LIST      && enable threads
2325
2326 check_deps $CONFIG_LIST       \
2327            $CONFIG_EXTRA      \
2328            $HAVE_LIST         \
2329            $DECODER_LIST      \
2330            $ENCODER_LIST      \
2331            $HWACCEL_LIST      \
2332            $PARSER_LIST       \
2333            $BSF_LIST          \
2334            $DEMUXER_LIST      \
2335            $MUXER_LIST        \
2336            $FILTER_LIST       \
2337            $INDEV_LIST        \
2338            $OUTDEV_LIST       \
2339            $PROTOCOL_LIST     \
2340
2341 echo "install prefix            $prefix"
2342 echo "source path               $source_path"
2343 echo "C compiler                $cc"
2344 echo ".align is power-of-two    $asmalign_pot"
2345 echo "ARCH                      $arch ($cpu)"
2346 if test "$build_suffix" != ""; then
2347     echo "build suffix              $build_suffix"
2348 fi
2349 if test "$extra_version" != ""; then
2350     echo "version string suffix     $extra_version"
2351 fi
2352 echo "big-endian                ${bigendian-no}"
2353 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2354 if enabled x86; then
2355     echo "yasm                      ${yasm-no}"
2356     echo "MMX enabled               ${mmx-no}"
2357     echo "MMX2 enabled              ${mmx2-no}"
2358     echo "3DNow! enabled            ${amd3dnow-no}"
2359     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2360     echo "SSE enabled               ${sse-no}"
2361     echo "SSSE3 enabled             ${ssse3-no}"
2362     echo "CMOV enabled              ${cmov-no}"
2363     echo "CMOV is fast              ${fast_cmov-no}"
2364     echo "EBX available             ${ebx_available-no}"
2365     echo "EBP available             ${ebp_available-no}"
2366     echo "10 operands supported     ${ten_operands-no}"
2367 fi
2368 if enabled arm; then
2369     echo "ARMv5TE enabled           ${armv5te-no}"
2370     echo "ARMv6 enabled             ${armv6-no}"
2371     echo "ARMv6T2 enabled           ${armv6t2-no}"
2372     echo "ARM VFP enabled           ${armvfp-no}"
2373     echo "IWMMXT enabled            ${iwmmxt-no}"
2374     echo "NEON enabled              ${neon-no}"
2375 fi
2376 if enabled mips; then
2377     echo "MMI enabled               ${mmi-no}"
2378 fi
2379 if enabled ppc; then
2380     echo "AltiVec enabled           ${altivec-no}"
2381     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2382     echo "dcbzl available           ${dcbzl-no}"
2383     echo "performance report        ${powerpc_perf-no}"
2384 fi
2385 if enabled sparc; then
2386     echo "VIS enabled               ${vis-no}"
2387 fi
2388 echo "gprof enabled             ${gprof-no}"
2389 echo "debug symbols             ${debug-no}"
2390 echo "strip symbols             ${stripping-no}"
2391 echo "optimizations             ${optimizations-no}"
2392 echo "static                    ${static-no}"
2393 echo "shared                    ${shared-no}"
2394 echo "postprocessing support    ${postproc-no}"
2395 echo "new filter support        ${avfilter-no}"
2396 echo "filters using lavformat   ${avfilter_lavf-no}"
2397 echo "network support           ${network-no}"
2398 if enabled network; then
2399     echo "IPv6 support              ${ipv6-no}"
2400 fi
2401 echo "threading support         ${thread_type-no}"
2402 echo "SDL support               ${sdl-no}"
2403 if enabled sdl_too_old; then
2404     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2405 fi
2406 echo "Sun medialib support      ${mlib-no}"
2407 echo "AVISynth enabled          ${avisynth-no}"
2408 echo "libamr-nb support         ${libamr_nb-no}"
2409 echo "libamr-wb support         ${libamr_wb-no}"
2410 echo "libdc1394 support         ${libdc1394-no}"
2411 echo "libdirac enabled          ${libdirac-no}"
2412 echo "libfaac enabled           ${libfaac-no}"
2413 echo "libfaad enabled           ${libfaad-no}"
2414 echo "libfaad dlopened          ${libfaadbin-no}"
2415 echo "libgsm enabled            ${libgsm-no}"
2416 echo "libmp3lame enabled        ${libmp3lame-no}"
2417 echo "libnut enabled            ${libnut-no}"
2418 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2419 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2420 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2421 echo "libschroedinger enabled   ${libschroedinger-no}"
2422 echo "libspeex enabled          ${libspeex-no}"
2423 echo "libtheora enabled         ${libtheora-no}"
2424 echo "libvorbis enabled         ${libvorbis-no}"
2425 echo "libx264 enabled           ${libx264-no}"
2426 echo "libxvid enabled           ${libxvid-no}"
2427 echo "zlib enabled              ${zlib-no}"
2428 echo "bzlib enabled             ${bzlib-no}"
2429 echo
2430
2431 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2432     echo "Enabled ${type}s:"
2433     eval list=\$$(toupper $type)_LIST
2434     for part in $list; do
2435         enabled $part && echo ${part%_*}
2436     done | sort | pr -3 -t
2437     echo
2438 done
2439
2440 license="LGPL version 2.1 or later"
2441 if enabled nonfree; then
2442     license="nonfree and unredistributable"
2443 elif enabled gplv3; then
2444     license="GPL version 3 or later"
2445 elif enabled lgplv3; then
2446     license="LGPL version 3 or later"
2447 elif enabled gpl; then
2448     license="GPL version 2 or later"
2449 fi
2450
2451 echo "License: $license"
2452
2453 echo "Creating config.mak and config.h..."
2454
2455 echo "# Automatically generated by configure - do not modify!" > config.mak
2456 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2457 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2458 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2459 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2460 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2461
2462 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2463 echo "prefix=$prefix" >> config.mak
2464 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2465 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2466 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2467 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2468 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2469 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2470 echo "SRC_PATH=\"$source_path\"" >> config.mak
2471 echo "SRC_PATH_BARE=$source_path" >> config.mak
2472 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2473 echo "CC=$cc" >> config.mak
2474 echo "AS=$as" >> config.mak
2475 echo "YASM=$yasmexe" >> config.mak
2476 echo "AR=$ar" >> config.mak
2477 echo "RANLIB=$ranlib" >> config.mak
2478 echo "LN_S=$ln_s" >> config.mak
2479 enabled stripping &&
2480     echo "STRIP=$strip" >> config.mak ||
2481     echo "STRIP=echo ignoring strip" >> config.mak
2482
2483 echo "OPTFLAGS=$CFLAGS" >> config.mak
2484 echo "LDFLAGS=$LDFLAGS" >> config.mak
2485 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2486 echo "SHFLAGS=$SHFLAGS" >> config.mak
2487 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2488 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2489 echo "BUILD_STATIC=$static" >> config.mak
2490 echo "BUILDSUF=$build_suffix" >> config.mak
2491 echo "FULLNAME=$FULLNAME" >> config.mak
2492 echo "LIBPREF=$LIBPREF" >> config.mak
2493 echo "LIBSUF=$LIBSUF" >> config.mak
2494 echo "LIBNAME=$LIBNAME" >> config.mak
2495 echo "SLIBPREF=$SLIBPREF" >> config.mak
2496 echo "SLIBSUF=$SLIBSUF" >> config.mak
2497 echo "EXESUF=$EXESUF" >> config.mak
2498 echo "EXTRA_VERSION=$extra_version" >> config.mak
2499 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2500 echo "HOSTCC=$host_cc" >> config.mak
2501 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2502 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2503 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2504 echo "HOSTLIBS=$host_libs" >> config.mak
2505 echo "TARGET_EXEC=$target_exec" >> config.mak
2506 echo "TARGET_PATH=$target_path" >> config.mak
2507
2508 if enabled bigendian; then
2509     echo "WORDS_BIGENDIAN=yes" >> config.mak
2510     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2511 fi
2512
2513 if enabled sdl; then
2514     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2515     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2516 fi
2517 if enabled texi2html; then
2518     echo "BUILD_DOC=yes" >> config.mak
2519 fi
2520
2521 get_version(){
2522     name=$1
2523     file=$source_path/$2
2524     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2525     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2526     lcname=$(tolower $name)
2527     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2528     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2529 }
2530
2531 get_version LIBSWSCALE  libswscale/swscale.h
2532 get_version LIBPOSTPROC libpostproc/postprocess.h
2533 get_version LIBAVCODEC  libavcodec/avcodec.h
2534 get_version LIBAVDEVICE libavdevice/avdevice.h
2535 get_version LIBAVFORMAT libavformat/avformat.h
2536 get_version LIBAVUTIL   libavutil/avutil.h
2537 get_version LIBAVFILTER libavfilter/avfilter.h
2538
2539 if enabled shared; then
2540     echo "BUILD_SHARED=yes" >> config.mak
2541     echo "PIC=-fPIC -DPIC" >> config.mak
2542     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2543     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2544     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2545     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2546     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2547     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2548     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2549     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2550 fi
2551 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2552 echo "EXTRALIBS=$extralibs" >> config.mak
2553
2554 echo "ARCH=$arch" >> config.mak
2555
2556 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2557 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2558 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2559                                       $CONFIG_EXTRA      \
2560                                       $DECODER_LIST      \
2561                                       $ENCODER_LIST      \
2562                                       $HWACCEL_LIST      \
2563                                       $PARSER_LIST       \
2564                                       $BSF_LIST          \
2565                                       $DEMUXER_LIST      \
2566                                       $MUXER_LIST        \
2567                                       $FILTER_LIST       \
2568                                       $PROTOCOL_LIST     \
2569                                       $INDEV_LIST        \
2570                                       $OUTDEV_LIST       \
2571
2572 echo "#define restrict $_restrict" >> $TMPH
2573
2574 if enabled small; then
2575     echo "#define av_always_inline"  >> $TMPH
2576 fi
2577
2578
2579 # Apparently it's not possible to portably echo a backslash.
2580 enabled asmalign_pot &&
2581     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2582     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2583
2584 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2585
2586 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2587
2588 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2589 cmp -s $TMPH config.h &&
2590     echo "config.h is unchanged" ||
2591     mv -f $TMPH config.h
2592
2593 # build tree in object directory if source path is different from current one
2594 if enabled source_path_used; then
2595     DIRS="\
2596         doc               \
2597         libavcodec        \
2598         libavcodec/alpha  \
2599         libavcodec/arm    \
2600         libavcodec/bfin   \
2601         libavcodec/mlib   \
2602         libavcodec/ppc    \
2603         libavcodec/sh4    \
2604         libavcodec/sparc  \
2605         libavcodec/x86    \
2606         libavdevice       \
2607         libavfilter       \
2608         libavformat       \
2609         libavutil         \
2610         libpostproc       \
2611         libswscale        \
2612         libswscale/bfin   \
2613         libswscale/mlib   \
2614         libswscale/ppc    \
2615         libswscale/sparc  \
2616         libswscale/x86    \
2617         tests             \
2618         tools             \
2619         "
2620     FILES="\
2621         Makefile             \
2622         common.mak           \
2623         subdir.mak           \
2624         doc/texi2pod.pl      \
2625         libavcodec/Makefile  \
2626         libavdevice/Makefile \
2627         libavfilter/Makefile \
2628         libavformat/Makefile \
2629         libavutil/Makefile   \
2630         libpostproc/Makefile \
2631         libswscale/Makefile  \
2632         "
2633     for dir in $DIRS ; do
2634         mkdir -p $dir
2635     done
2636     for f in $FILES ; do
2637         $ln_s "$source_path/$f" $f
2638     done
2639 fi
2640
2641
2642 # build pkg-config files
2643
2644 pkgconfig_generate(){
2645 name=$1
2646 shortname=${name#lib}${build_suffix}
2647 comment=$2
2648 version=$3
2649 libs=$4
2650 requires=$5
2651 cat <<EOF > $name/$name.pc
2652 prefix=$prefix
2653 exec_prefix=\${prefix}
2654 libdir=$libdir
2655 includedir=$incdir
2656
2657 Name: $name
2658 Description: $comment
2659 Version: $version
2660 Requires: $(disabled shared && echo $requires)
2661 Requires.private: $(enabled shared && echo $requires)
2662 Conflicts:
2663 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2664 Libs.private: $(enabled shared && echo $libs)
2665 Cflags: -I\${includedir}
2666 EOF
2667 cat <<EOF > $name/$name-uninstalled.pc
2668 prefix=
2669 exec_prefix=
2670 libdir=\${pcfiledir}
2671 includedir=${source_path}
2672
2673 Name: $name
2674 Description: $comment
2675 Version: $version
2676 Requires: $requires
2677 Conflicts:
2678 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2679 Cflags: -I\${includedir}
2680 EOF
2681 }
2682
2683 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2684 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2685 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2686 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2687 enabled avfilter &&
2688     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2689 enabled postproc &&
2690     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2691 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"