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