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