]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - configure
configure: sort cases in arch section
[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 "  --disable-network        disable network support [no]"
95   echo "  --disable-ipv6           disable IPv6 support [no]"
96   echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
97   echo "  --enable-gray            enable full grayscale support (slower color)"
98   echo "  --enable-fastdiv         enable table-based division"
99   echo "  --enable-small           optimize for size instead of speed"
100   echo "  --disable-aandct         disable AAN DCT code"
101   echo "  --disable-fft            disable FFT code"
102   echo "  --disable-golomb         disable Golomb code"
103   echo "  --disable-mdct           disable MDCT code"
104   echo "  --disable-rdft           disable RDFT code"
105   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
106   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
107   echo "  --enable-beos-netserver  enable BeOS netserver"
108   echo "  --disable-encoder=NAME   disable encoder NAME"
109   echo "  --enable-encoder=NAME    enable encoder NAME"
110   echo "  --disable-encoders       disable all encoders"
111   echo "  --disable-decoder=NAME   disable decoder NAME"
112   echo "  --enable-decoder=NAME    enable decoder NAME"
113   echo "  --disable-decoders       disable all decoders"
114   echo "  --disable-muxer=NAME     disable muxer NAME"
115   echo "  --enable-muxer=NAME      enable muxer NAME"
116   echo "  --disable-muxers         disable all muxers"
117   echo "  --disable-demuxer=NAME   disable demuxer NAME"
118   echo "  --enable-demuxer=NAME    enable demuxer NAME"
119   echo "  --disable-demuxers       disable all demuxers"
120   echo "  --enable-parser=NAME     enable parser NAME"
121   echo "  --disable-parser=NAME    disable parser NAME"
122   echo "  --disable-parsers        disable all parsers"
123   echo "  --enable-bsf=NAME        enable bitstream filter NAME"
124   echo "  --disable-bsf=NAME       disable bitstream filter NAME"
125   echo "  --disable-bsfs           disable all bitstream filters"
126   echo "  --enable-protocol=NAME   enable protocol NAME"
127   echo "  --disable-protocol=NAME  disable protocol NAME"
128   echo "  --disable-protocols      disable all protocols"
129   echo "  --disable-indevs         disable input devices"
130   echo "  --disable-outdevs        disable output devices"
131   echo "  --disable-devices        disable all devices"
132   echo "  --enable-filter=NAME     enable filter NAME"
133   echo "  --disable-filter=NAME    disable filter NAME"
134   echo "  --disable-filters        disable all filters"
135   echo "  --list-decoders          show all available decoders"
136   echo "  --list-encoders          show all available encoders"
137   echo "  --list-muxers            show all available muxers"
138   echo "  --list-demuxers          show all available demuxers"
139   echo "  --list-parsers           show all available parsers"
140   echo "  --list-protocols         show all available protocols"
141   echo "  --list-bsfs              show all available bitstream filters"
142   echo "  --list-indevs            show all available input devices"
143   echo "  --list-outdevs           show all available output devices"
144   echo "  --list-filters           show all available filters"
145   echo
146   echo "External library support:"
147   echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
148   echo "  --enable-bzlib           enable bzlib [autodetect]"
149   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
150   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
151   echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
152   echo "                           and libraw1394 [no]"
153   echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
154   echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
155   echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
156   echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
157   echo "  --enable-libgsm          enable GSM support via libgsm [no]"
158   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
159   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
160   echo "                           native (de)muxer exists [no]"
161   echo "  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]"
162   echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
163   echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
164   echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
165   echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
166   echo "                           native implementation exists [no]"
167   echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
168   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
169   echo "                           native MPEG-4/Xvid encoder exists [no]"
170   echo "  --enable-mlib            enable Sun medialib [no]"
171   echo "  --enable-zlib            enable zlib [autodetect]"
172   echo ""
173   echo "Advanced options (experts only):"
174   echo "  --source-path=PATH       path to source code [$source_path]"
175   echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
176   echo "  --enable-cross-compile   assume a cross-compiler is used"
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 "  --cc=CC                  use C compiler CC [$cc_default]"
182   echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
183   echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
184   echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
185   echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
186   echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
187   echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
188   echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
189   echo "  --extra-version=STRING   version string suffix []"
190   echo "  --build-suffix=SUFFIX    library name suffix []"
191   echo "  --arch=ARCH              select architecture [$arch]"
192   echo "  --cpu=CPU                select the minimum required CPU (affects"
193   echo "                           instruction selection, may crash on older CPUs)"
194   echo "  --enable-powerpc-perf    enable performance report on PPC"
195   echo "                           (requires enabling PMC)"
196   echo "  --disable-altivec        disable AltiVec optimizations"
197   echo "  --disable-amd3dnow       disable 3DNow! optimizations"
198   echo "  --disable-amd3dnowext    disable 3DNow! extended 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     zlib
797 "
798
799 THREADS_LIST='
800     beosthreads
801     os2threads
802     pthreads
803     w32threads
804 '
805
806 ARCH_LIST='
807     alpha
808     arm
809     bfin
810     ia64
811     m68k
812     mips
813     parisc
814     ppc
815     s390
816     sh4
817     sparc
818     sparc64
819     x86
820     x86_32
821     x86_64
822 '
823
824 ARCH_EXT_LIST='
825     altivec
826     amd3dnow
827     amd3dnowext
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     oldscaler
912 "
913
914 CMDLINE_SELECT="
915     $ARCH_EXT_LIST
916     $CONFIG_LIST
917     $THREADS_LIST
918     cross_compile
919     debug
920     extra_warnings
921     logging
922     optimizations
923     stripping
924     yasm
925 "
926
927 PATHS_LIST='
928     bindir
929     datadir
930     incdir
931     libdir
932     mandir
933     prefix
934     shlibdir
935 '
936
937 CMDLINE_SET="
938     $PATHS_LIST
939     arch
940     build_suffix
941     cc
942     cpu
943     cross_prefix
944     extra_version
945     host_cc
946     host_cflags
947     host_ldflags
948     host_libs
949     logfile
950     nm
951     source_path
952     target_exec
953     target_os
954     target_path
955 "
956
957 # code dependency declarations
958
959 # architecture extensions
960 altivec_deps="ppc"
961 amd3dnow_deps="mmx"
962 amd3dnowext_deps="amd3dnow"
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 oldscaler_deps="!swscale"
979
980 # decoders / encoders
981 aac_decoder_select="fft mdct"
982 ac3_decoder_deps="gpl"
983 ac3_decoder_select="fft mdct"
984 atrac3_decoder_select="fft mdct"
985 cavs_decoder_select="golomb"
986 cook_decoder_select="fft mdct"
987 cscd_decoder_suggest="zlib"
988 dca_decoder_select="fft mdct"
989 dnxhd_encoder_select="aandct"
990 dxa_decoder_select="zlib"
991 eac3_decoder_deps="gpl"
992 eac3_decoder_select="fft mdct"
993 eatgq_decoder_select="aandct"
994 eatqi_decoder_select="aandct"
995 ffv1_decoder_select="golomb"
996 flac_decoder_select="golomb"
997 flac_encoder_select="golomb"
998 flashsv_decoder_select="zlib"
999 flashsv_encoder_select="zlib"
1000 flv_encoder_select="aandct"
1001 h261_encoder_select="aandct"
1002 h263_encoder_select="aandct"
1003 h263p_encoder_select="aandct"
1004 h264_decoder_select="golomb"
1005 h264_vdpau_decoder_deps="vdpau"
1006 imc_decoder_select="fft mdct"
1007 jpegls_decoder_select="golomb"
1008 jpegls_encoder_select="golomb"
1009 ljpeg_encoder_select="aandct"
1010 loco_decoder_select="golomb"
1011 mjpeg_encoder_select="aandct"
1012 mpeg1video_encoder_select="aandct"
1013 mpeg2video_encoder_select="aandct"
1014 mpeg4_encoder_select="aandct"
1015 mpeg_vdpau_decoder_deps="vdpau"
1016 mpeg1_vdpau_decoder_deps="vdpau"
1017 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1018 msmpeg4v1_encoder_select="aandct"
1019 msmpeg4v2_encoder_select="aandct"
1020 msmpeg4v3_encoder_select="aandct"
1021 nellymoser_decoder_select="fft mdct"
1022 nellymoser_encoder_select="fft mdct"
1023 png_decoder_select="zlib"
1024 png_encoder_select="zlib"
1025 qdm2_decoder_select="fft mdct rdft"
1026 rv10_encoder_select="aandct"
1027 rv20_encoder_select="aandct"
1028 rv30_decoder_select="golomb"
1029 rv40_decoder_select="golomb"
1030 shorten_decoder_select="golomb"
1031 sonic_decoder_select="golomb"
1032 sonic_encoder_select="golomb"
1033 sonic_ls_encoder_select="golomb"
1034 svq3_decoder_select="golomb"
1035 svq3_decoder_suggest="zlib"
1036 tiff_decoder_suggest="zlib"
1037 tiff_encoder_suggest="zlib"
1038 tscc_decoder_select="zlib"
1039 vc1_vdpau_decoder_deps="vdpau"
1040 vorbis_decoder_select="fft mdct"
1041 vorbis_encoder_select="fft mdct"
1042 wmav1_decoder_select="fft mdct"
1043 wmav1_encoder_select="fft mdct"
1044 wmav2_decoder_select="fft mdct"
1045 wmav2_encoder_select="fft mdct"
1046 wmv1_encoder_select="aandct"
1047 wmv2_encoder_select="aandct"
1048 wmv3_vdpau_decoder_deps="vdpau"
1049 zlib_decoder_select="zlib"
1050 zlib_encoder_select="zlib"
1051 zmbv_decoder_select="zlib"
1052 zmbv_encoder_select="zlib"
1053
1054 # external libraries
1055 libamr_nb_decoder_deps="libamr_nb"
1056 libamr_nb_encoder_deps="libamr_nb"
1057 libamr_wb_decoder_deps="libamr_wb"
1058 libamr_wb_encoder_deps="libamr_wb"
1059 libdirac_decoder_deps="libdirac !libschroedinger"
1060 libdirac_encoder_deps="libdirac"
1061 libfaac_encoder_deps="libfaac"
1062 libfaad_decoder_deps="libfaad"
1063 libfaadbin_decoder_extralibs='$ldl'
1064 libgsm_decoder_deps="libgsm"
1065 libgsm_encoder_deps="libgsm"
1066 libgsm_ms_decoder_deps="libgsm"
1067 libgsm_ms_encoder_deps="libgsm"
1068 libmp3lame_encoder_deps="libmp3lame"
1069 libopenjpeg_decoder_deps="libopenjpeg"
1070 libschroedinger_decoder_deps="libschroedinger"
1071 libschroedinger_encoder_deps="libschroedinger"
1072 libspeex_decoder_deps="libspeex"
1073 libtheora_encoder_deps="libtheora"
1074 libvorbis_encoder_deps="libvorbis"
1075 libx264_encoder_deps="libx264"
1076 libxvid_encoder_deps="libxvid"
1077 mpeg4aac_decoder_deps="libfaad"
1078 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1079
1080 # demuxers / muxers
1081 ac3_demuxer_deps="ac3_parser"
1082 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1083 alsa_demuxer_extralibs="-lasound"
1084 alsa_muxer_deps="alsa_asoundlib_h"
1085 alsa_muxer_extralibs="-lasound"
1086 audio_beos_demuxer_deps="audio_beos"
1087 audio_beos_demuxer_extralibs="-lmedia -lbe"
1088 audio_beos_muxer_deps="audio_beos"
1089 audio_beos_muxer_extralibs="-lmedia -lbe"
1090 avisynth_demuxer_deps="avisynth"
1091 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1092 dirac_demuxer_deps="dirac_parser"
1093 dv1394_demuxer_deps="dv1394 dv_demuxer"
1094 libdc1394_demuxer_deps="libdc1394"
1095 libnut_demuxer_deps="libnut"
1096 libnut_muxer_deps="libnut"
1097 matroska_demuxer_suggest="zlib bzlib"
1098 mov_demuxer_suggest="zlib"
1099 mp3_demuxer_deps="mpegaudio_parser"
1100 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1101 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1102 redir_demuxer_deps="network"
1103 rtp_muxer_deps="network rtp_protocol"
1104 rtsp_demuxer_deps="sdp_demuxer"
1105 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1106 v4l_demuxer_deps="linux_videodev_h"
1107 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1108 vfwcap_demuxer_deps="capCreateCaptureWindow"
1109 vfwcap_demuxer_extralibs="-lvfw32"
1110 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1111 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1112
1113 # protocols
1114 gopher_protocol_deps="network"
1115 http_protocol_deps="network"
1116 rtp_protocol_deps="udp_protocol"
1117 tcp_protocol_deps="network"
1118 udp_protocol_deps="network"
1119
1120 # filters
1121 movie_filter_deps="avfilter_lavf"
1122
1123 # programs
1124 ffplay_deps="sdl"
1125 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1126 ffserver_extralibs='$ldl'
1127 vhook_extralibs='$ldl'
1128
1129
1130 # default parameters
1131
1132 logfile="config.err"
1133
1134 # installation paths
1135 prefix_default="/usr/local"
1136 bindir_default='${prefix}/bin'
1137 datadir_default='${prefix}/share/ffmpeg'
1138 incdir_default='${prefix}/include'
1139 libdir_default='${prefix}/lib'
1140 mandir_default='${prefix}/share/man'
1141 shlibdir_default="$libdir_default"
1142
1143 # toolchain
1144 ar="ar"
1145 cc_default="gcc"
1146 host_cc_default="gcc"
1147 ln_s="ln -sf"
1148 nm_default="nm"
1149 objformat="elf"
1150 ranlib="ranlib"
1151 strip="strip"
1152 yasmexe="yasm"
1153
1154 # machine
1155 arch=`uname -m`
1156 cpu="generic"
1157
1158 # OS
1159 target_os=$(tolower $(uname -s))
1160
1161 # configurable options
1162 enable debug
1163 enable ffmpeg
1164 enable ffplay
1165 enable ffserver
1166 enable ipv6
1167 enable mpegaudio_hp
1168 enable network
1169 enable oldscaler
1170 enable optimizations
1171 enable protocols
1172 enable static
1173 enable stripping
1174 vhook="default"
1175
1176 # build settings
1177 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1178 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1179 VHOOKSHFLAGS='$(SHFLAGS)'
1180 FFSERVERLDFLAGS=-Wl,-E
1181 LIBPREF="lib"
1182 LIBSUF=".a"
1183 FULLNAME='$(NAME)$(BUILDSUF)'
1184 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1185 SLIBPREF="lib"
1186 SLIBSUF=".so"
1187 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1188 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1189 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1190 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1191
1192 host_cflags='-O3 -g -Wall'
1193 host_libs='-lm'
1194
1195 target_path='.'
1196
1197 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1198 # full relative path for objects in subdirectories for non-recursive Make.
1199 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,"'
1200
1201 # find source path
1202 source_path="`dirname \"$0\"`"
1203 enable source_path_used
1204 if test -z "$source_path" -o "$source_path" = "." ; then
1205     source_path="`pwd`"
1206     disable source_path_used
1207 else
1208     source_path="`cd \"$source_path\"; pwd`"
1209     echo "$source_path" | grep -q '[[:blank:]]' &&
1210         die "Out of tree builds are impossible with whitespace in source path."
1211 fi
1212
1213 FFMPEG_CONFIGURATION="$@"
1214
1215 find_things(){
1216     thing=$1
1217     pattern=$2
1218     file=$source_path/$3
1219     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1220 }
1221
1222 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1223 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1224 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1225 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1226 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1227 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1228 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1229 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1230 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1231 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1232
1233 enable $ARCH_EXT_LIST \
1234        $DECODER_LIST \
1235        $ENCODER_LIST \
1236        $PARSER_LIST \
1237        $BSF_LIST \
1238        $DEMUXER_LIST \
1239        $MUXER_LIST \
1240        $FILTER_LIST \
1241        $PROTOCOL_LIST \
1242        $INDEV_LIST \
1243        $OUTDEV_LIST \
1244
1245 die_unknown(){
1246     echo "Unknown option \"$1\"."
1247     echo "See $0 --help for available options."
1248     exit 1
1249 }
1250
1251 show_list() {
1252     suffix=_$1
1253     shift
1254     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1255     exit 0
1256 }
1257
1258 for opt do
1259     optval="${opt#*=}"
1260     case "$opt" in
1261     --extra-cflags=*) add_cflags $optval
1262     ;;
1263     --extra-ldflags=*) add_ldflags $optval
1264     ;;
1265     --extra-libs=*) add_extralibs $optval
1266     ;;
1267     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1268     ;;
1269     --enable-debug=*) debuglevel="$optval"
1270     ;;
1271     --enable-*=*|--disable-*=*)
1272     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1273     case "$thing" in
1274         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1275         *) die_unknown "$opt" ;;
1276     esac
1277     ;;
1278     --enable-?*|--disable-?*)
1279     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1280     if is_in $option $COMPONENT_LIST; then
1281         eval $action \$$(toupper ${option%s})_LIST
1282     elif is_in $option $CMDLINE_SELECT; then
1283         $action $option
1284     else
1285         die_unknown $opt
1286     fi
1287     ;;
1288     --list-*)
1289         NAME="${opt#--list-}"
1290         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1291         NAME=${NAME%s}
1292         eval show_list $NAME \$$(toupper $NAME)_LIST
1293     ;;
1294     --help|-h) show_help
1295     ;;
1296     *)
1297     optname="${opt%%=*}"
1298     optname="${optname#--}"
1299     optname=$(echo "$optname" | sed 's/-/_/g')
1300     is_in $optname $CMDLINE_SET || die_unknown $opt
1301     eval $optname='$optval'
1302     ;;
1303     esac
1304 done
1305
1306 disabled logging && logfile=/dev/null
1307
1308 echo "# $0 $@" > $logfile
1309 set >> $logfile
1310
1311 test -n "$cross_prefix" && enable cross_compile
1312
1313 ar="${cross_prefix}${ar}"
1314 cc_default="${cross_prefix}${cc_default}"
1315 nm_default="${cross_prefix}${nm_default}"
1316 ranlib="${cross_prefix}${ranlib}"
1317 strip="${cross_prefix}${strip}"
1318
1319 set_default cc nm
1320 enabled cross_compile || host_cc_default=$cc
1321 set_default host_cc
1322
1323 case $target_os in
1324     mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1325 esac
1326
1327 # set temporary file name
1328 : ${TMPDIR:=$TEMPDIR}
1329 : ${TMPDIR:=$TMP}
1330 : ${TMPDIR:=/tmp}
1331
1332 TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1333 TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1334 TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1335 TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1336 TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1337 TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1338
1339 # make sure we can execute files in $TMPDIR
1340 cat > $TMPSH 2>> $logfile <<EOF
1341 #! /bin/sh
1342 EOF
1343 chmod +x $TMPSH >> $logfile 2>&1
1344 if ! $TMPSH >> $logfile 2>&1; then
1345     cat <<EOF
1346 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1347 variable to another directory and make sure that it is not mounted noexec.
1348 EOF
1349     die "Sanity test failed."
1350 fi
1351 rm $TMPSH
1352
1353 # compiler sanity check
1354 check_exec <<EOF
1355 int main(void){ return 0; }
1356 EOF
1357 if test "$?" != 0; then
1358     echo "$cc is unable to create an executable file."
1359     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1360         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1361         echo "Only do this if you know what cross compiling means."
1362     fi
1363     die "C compiler test failed."
1364 fi
1365
1366 check_cflags -std=c99
1367
1368 case "$arch" in
1369     alpha)
1370         arch="alpha"
1371         enable fast_64bit
1372         check_cflags -mieee
1373     ;;
1374     arm|armv[4567]*l)
1375         arch="arm"
1376     ;;
1377     bfin)
1378         arch="bfin"
1379     ;;
1380     ia64)
1381         arch="ia64"
1382         enable fast_64bit
1383     ;;
1384     m68k)
1385         arch="m68k"
1386     ;;
1387     mips|mipsel|IP*)
1388         arch="mips"
1389     ;;
1390     mips64)
1391         arch="mips"
1392         enable fast_64bit
1393     ;;
1394     parisc|hppa)
1395         arch="parisc"
1396     ;;
1397     parisc64|hppa64)
1398         arch="parisc"
1399         enable fast_64bit
1400     ;;
1401     "Power Macintosh"|ppc|powerpc)
1402         arch="ppc"
1403         enable fast_unaligned
1404     ;;
1405     ppc64)
1406         arch="ppc"
1407         enable fast_64bit
1408         enable fast_unaligned
1409     ;;
1410     s390|s390x)
1411         arch="s390"
1412     ;;
1413     sh4|sh)
1414         arch="sh4"
1415     ;;
1416     sparc)
1417         arch="sparc"
1418     ;;
1419     sun4u|sparc64)
1420         arch="sparc"
1421         subarch="sparc64"
1422         enable fast_64bit
1423     ;;
1424     i386|i486|i586|i686|i86pc|BePC)
1425         arch="x86"
1426         subarch="x86_32"
1427         enable fast_unaligned
1428     ;;
1429     x86_64|amd64)
1430         arch="x86"
1431         subarch="x86_32"
1432         enable cmov
1433         enable fast_cmov
1434         enable fast_unaligned
1435         check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1436         int test[sizeof(char*) - 7];
1437 EOF
1438     ;;
1439     *)
1440         arch="unknown"
1441     ;;
1442 esac
1443
1444 enable $arch $subarch
1445
1446 # OS specific
1447 case $target_os in
1448     beos|haiku|zeta)
1449         prefix_default="$HOME/config"
1450         # helps building libavcodec
1451         add_cflags -DPIC -fomit-frame-pointer
1452         # 3 gcc releases known for BeOS, each with ugly bugs
1453         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1454         case "$gcc_version" in
1455           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1456             disable mmx
1457             ;;
1458           *20010315*) echo "BeBits gcc"
1459             add_cflags -fno-expensive-optimizations
1460             ;;
1461         esac
1462         SHFLAGS=-nostart
1463         # enable BeOS things
1464         enable audio_beos
1465         # no need for libm, but the inet stuff
1466         # Check for BONE
1467         # XXX: actually should check for NOT net_server
1468         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1469             network_extralibs="-lbind -lsocket"
1470         else
1471             enable beos_netserver
1472             network_extralibs="-lnet"
1473         fi ;;
1474     sunos)
1475         FFSERVERLDFLAGS=""
1476         SHFLAGS='-shared -Wl,-h,$$(@F)'
1477         network_extralibs="-lsocket -lnsl"
1478         add_cflags -D__EXTENSIONS__
1479         ;;
1480     netbsd)
1481         oss_demuxer_extralibs="-lossaudio"
1482         oss_muxer_extralibs="-lossaudio"
1483         ;;
1484     openbsd)
1485         disable need_memalign
1486         LIBOBJFLAGS='$(PIC)'
1487         SHFLAGS='-shared'
1488         oss_demuxer_extralibs="-lossaudio"
1489         oss_muxer_extralibs="-lossaudio"
1490         ;;
1491     freebsd)
1492         disable need_memalign
1493         ;;
1494     bsd/os)
1495         osextralibs="-lpoll -lgnugetopt"
1496         strip="strip -d"
1497         ;;
1498     darwin)
1499         disable need_memalign
1500         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1501         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1502         strip="strip -x"
1503         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1504         SLIBSUF=".dylib"
1505         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1506         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1507         FFSERVERLDFLAGS=-Wl,-bind_at_load
1508         objformat="macho"
1509         enabled x86_64 && objformat="macho64"
1510         ;;
1511     mingw32*)
1512         target_os=mingw32
1513         LIBTARGET=i386
1514         if enabled x86_64; then
1515             disable need_memalign
1516             LIBTARGET=x64
1517         fi
1518         shlibdir_default="$bindir_default"
1519         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1520         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1521         if enabled swscale; then
1522             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1523             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1524         fi
1525         disable ffserver
1526         SLIBPREF=""
1527         SLIBSUF=".dll"
1528         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1529         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1530         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1531         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1532             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1533         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1534         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1535         objformat="win32"
1536         enable dos_paths
1537         if ! enabled x86_64; then
1538             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1539                 die "ERROR: MinGW runtime version must be >= 3.15."
1540             enabled_any avisynth vfwcap_demuxer &&
1541                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1542                   die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1543             fi
1544         ;;
1545     cygwin*)
1546         target_os=cygwin
1547         shlibdir_default="$bindir_default"
1548         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1549         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1550         if enabled swscale; then
1551             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1552             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1553         fi
1554         SLIBPREF="cyg"
1555         SLIBSUF=".dll"
1556         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1557         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1558         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1559         objformat="win32"
1560         enable dos_paths
1561         ;;
1562     *-dos|freedos|opendos)
1563         disable ffplay ffserver vhook
1564         disable $INDEV_LIST $OUTDEV_LIST
1565         network_extralibs="-lsocket"
1566         objformat="coff"
1567         enable dos_paths
1568         ;;
1569     linux)
1570         enable dv1394
1571         ;;
1572     irix*)
1573         target_os=irix
1574         ranlib="echo ignoring ranlib"
1575         ;;
1576     os/2*)
1577         strip="lxlite"
1578         ln_s="cp -f"
1579         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1580         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1581         FFSERVERLDFLAGS=""
1582         LIBSUF="_s.a"
1583         SLIBPREF=""
1584         SLIBSUF=".dll"
1585         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1586         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1587         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1588           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1589           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1590           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1591           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1592           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1593         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1594           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1595         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1596         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1597         disable vhook
1598         enable dos_paths
1599         ;;
1600     interix)
1601         disable vhook
1602         ;;
1603
1604     *)
1605         die "Unknown OS '$target_os'."
1606         ;;
1607 esac
1608
1609 set_default $PATHS_LIST
1610
1611 add_extralibs $osextralibs
1612
1613 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1614 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1615
1616 # we need to build at least one lib type
1617 if ! enabled_any static shared; then
1618     cat <<EOF
1619 At least one library type must be built.
1620 Specify --enable-static to build the static libraries or --enable-shared to
1621 build the shared libraries as well. To only build the shared libraries specify
1622 --disable-static in addition to --enable-shared.
1623 EOF
1624     exit 1;
1625 fi
1626
1627 disabled static && LIBNAME=""
1628
1629 if enabled_any libfaad libfaadbin ; then
1630     if check_header faad.h; then
1631         check_cc <<EOF
1632 #include <faad.h>
1633 #ifndef FAAD2_VERSION
1634 ok faad1
1635 #endif
1636 int main(void) { return 0; }
1637 EOF
1638         test $? = 0 && enable libfaad2
1639     else
1640         die "FAAD test failed."
1641     fi
1642 fi
1643
1644
1645 if ! enabled gpl; then
1646     die_gpl_disabled(){
1647         name=$1
1648         shift
1649         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1650     }
1651     die_gpl_disabled "The Postprocessing code" postproc
1652     die_gpl_disabled "libx264"                 libx264
1653     die_gpl_disabled "libxvidcore"             libxvid
1654     die_gpl_disabled "FAAD2"                   libfaad2
1655     die_gpl_disabled "The X11 grabber"         x11grab
1656     die_gpl_disabled "The software scaler"     swscale
1657 fi
1658
1659 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1660     die "libamr is nonfree and --enable-nonfree is not specified."
1661 fi
1662
1663 check_deps $ARCH_EXT_LIST
1664
1665 test -z "$need_memalign" && need_memalign="$mmx"
1666
1667 #Darwin CC versions
1668 if test $target_os = darwin; then
1669     if $cc -v 2>&1 | grep -q xlc; then
1670         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1671     else
1672         add_cflags -pipe
1673         check_cflags -force_cpusubtype_ALL
1674         check_cflags -Wno-sign-compare
1675         enabled shared || check_cflags -mdynamic-no-pic
1676     fi
1677 fi
1678
1679 disabled optimizations || check_cflags -fomit-frame-pointer
1680
1681 # Add processor-specific flags
1682 if test $cpu != "generic"; then
1683     warn_altivec(){
1684         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1685     }
1686     case $cpu in
1687         601|ppc601|PowerPC601)
1688             add_cflags -mcpu=601
1689             warn_altivec enabled PPC601
1690         ;;
1691         603*|ppc603*|PowerPC603*)
1692             add_cflags -mcpu=603
1693             warn_altivec enabled PPC603
1694         ;;
1695         604*|ppc604*|PowerPC604*)
1696             add_cflags -mcpu=604
1697             warn_altivec enabled PPC604
1698         ;;
1699         G3|g3|75*|ppc75*|PowerPC75*)
1700             add_cflags -mcpu=750 -mpowerpc-gfxopt
1701             warn_altivec enabled PPC75x
1702         ;;
1703         G4|g4|745*|ppc745*|PowerPC745*)
1704             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1705             warn_altivec disabled PPC745x
1706         ;;
1707         74*|ppc74*|PowerPC74*)
1708             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1709             warn_altivec disabled PPC74xx
1710         ;;
1711         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1712             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1713             warn_altivec disabled PPC970
1714             enable ppc64
1715         ;;
1716         Cell|CELL|cell)
1717             add_cflags -mcpu=cell
1718             warn_altivec disabled Cell
1719             enable ppc64
1720         ;;
1721         # targets that do NOT support conditional mov (cmov)
1722         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1723             add_cflags -march=$cpu
1724             disable cmov
1725         ;;
1726         # targets that do support conditional mov (cmov)
1727         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1728             add_cflags -march=$cpu
1729             enable cmov
1730             enable fast_cmov
1731         ;;
1732         # targets that do support conditional mov but on which it's slow
1733         pentium4|pentium4m|prescott|nocona)
1734             add_cflags -march=$cpu
1735             enable cmov
1736             disable fast_cmov
1737         ;;
1738         sparc64)
1739             add_cflags -mcpu=v9
1740         ;;
1741         arm11*|cortex*)
1742             add_cflags -mcpu=$cpu
1743             enable fast_unaligned
1744         ;;
1745         armv*)
1746             add_cflags -march=$cpu
1747         ;;
1748         arm*)
1749             add_cflags -mcpu=$cpu
1750         ;;
1751         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1752             add_cflags -mcpu=$cpu
1753         ;;
1754         *)
1755             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1756         ;;
1757     esac
1758 fi
1759
1760 check_cc <<EOF || die "Symbol mangling check failed."
1761 int ff_extern;
1762 EOF
1763 sym=$($nm -P -g $TMPO | grep ff_extern)
1764 extern_prefix=${sym%%ff_extern*}
1765
1766 check_asm inline_asm '""'
1767
1768 if enabled x86; then
1769     # check whether EBP is available on x86
1770     # As 'i' is stored on the stack, this program will crash
1771     # if the base pointer is used to access it because the
1772     # base pointer is cleared in the inline assembly code.
1773     check_exec_crash <<EOF && enable ebp_available
1774     volatile int i=0;
1775     __asm__ volatile (
1776         "xorl %%ebp, %%ebp"
1777     ::: "%ebp");
1778     return i;
1779 EOF
1780
1781     # check wether EBX is available on x86
1782     check_asm ebx_available '"":::"%ebx"'
1783
1784     # check whether more than 10 operands are supported
1785     check_cc <<EOF && enable ten_operands
1786 int main(void) {
1787     int x=0;
1788     __asm__ volatile(
1789         ""
1790         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1791     );
1792     return 0;
1793 }
1794 EOF
1795
1796     # check whether binutils is new enough to compile SSSE3/MMX2
1797     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1798     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1799
1800     check_asm bswap '"bswap %%eax" ::: "%eax"'
1801
1802     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1803     enabled     x86_64        && append YASMFLAGS "-m amd64"
1804     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1805     case "$objformat" in
1806         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1807         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1808         *)                    append YASMFLAGS "-DPREFIX"  ;;
1809     esac
1810     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1811 fi
1812
1813 # check for assembler specific support
1814
1815 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1816 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1817
1818 # check for SIMD availability
1819
1820 # AltiVec flags: The FSF version of GCC differs from the Apple version
1821 if enabled altivec; then
1822     check_cflags -maltivec -mabi=altivec &&
1823         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1824         check_cflags -faltivec
1825
1826     # check if our compiler supports Motorola AltiVec C API
1827     check_cc <<EOF || disable altivec
1828 $inc_altivec_h
1829 int main(void) {
1830     vector signed int v1, v2, v3;
1831     v1 = vec_add(v2,v3);
1832     return 0;
1833 }
1834 EOF
1835
1836     # check if our compiler supports braces for vector declarations
1837     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1838 $inc_altivec_h
1839 int main (void) { (vector int) {1}; return 0; }
1840 EOF
1841 fi
1842
1843 # We have to check if pld is a nop and disable it.
1844 enabled arm     && check_asm pld     '"pld [r0]"'
1845 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1846 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1847 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1848 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1849 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1850 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1851 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1852 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1853
1854 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1855
1856 # ---
1857 # big/little-endian test
1858 check_cc <<EOF || die "endian test failed"
1859 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1860 EOF
1861 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1862
1863 # ---
1864 # check availability of some header files
1865
1866 if check_func dlopen; then
1867     ldl=
1868 elif check_func dlopen -ldl; then
1869     ldl=-ldl
1870 fi
1871
1872 check_func  fork
1873 check_func  gethrtime
1874 check_func  getrusage
1875 check_func  inet_aton $network_extralibs
1876 check_func  memalign
1877 check_func  mkstemp
1878 check_func  posix_memalign
1879 check_func_headers io.h setmode
1880 check_func_headers windows.h GetProcessTimes
1881
1882 check_header conio.h
1883 check_header dlfcn.h
1884 check_header malloc.h
1885 check_header poll.h
1886 check_header sys/mman.h
1887 check_header sys/resource.h
1888 check_header sys/select.h
1889 check_header termios.h
1890 check_header vdpau/vdpau.h
1891 check_header vdpau/vdpau_x11.h
1892 check_header X11/extensions/XvMClib.h
1893
1894 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1895     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1896 fi
1897
1898 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1899 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1900
1901 # check for some common methods of building with pthread support
1902 # do this before the optional library checks as some of them require pthreads
1903 if enabled pthreads; then
1904     if check_func pthread_create; then
1905         :
1906     elif check_func pthread_create -pthread; then
1907         add_cflags -pthread
1908         add_extralibs -pthread
1909     elif check_func pthread_create -pthreads; then
1910         add_cflags -pthreads
1911         add_extralibs -pthreads
1912     elif check_func pthread_create -lpthreadGC2; then
1913         add_extralibs -lpthreadGC2
1914     elif ! check_lib pthread.h pthread_create -lpthread; then
1915         die "ERROR: can't find pthreads library"
1916     fi
1917 fi
1918
1919 for thread in $THREADS_LIST; do
1920     if enabled $thread; then
1921         test -n "$thread_type" &&
1922             die "ERROR: Only one thread type must be selected." ||
1923             thread_type="$thread"
1924     fi
1925 done
1926
1927 check_lib math.h sin -lm
1928
1929 # test for C99 functions in math.h
1930 for func in llrint lrint lrintf round roundf truncf; do
1931     check_exec <<EOF && enable $func || disable $func
1932 #include <math.h>
1933 int main(void) { return ($func(3.999f) > 0)?0:1; }
1934 EOF
1935 done
1936
1937 # these are off by default, so fail if requested and not available
1938 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1939 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1940 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1941 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
1942                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
1943                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1944 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1945 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1946 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1947 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1948 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1949 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
1950 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
1951                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1952 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1953 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1954 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1955 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1956                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
1957                         die "ERROR: libx264 version must be >= 0.65."; }
1958 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1959 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1960
1961 # libdc1394 check
1962 if enabled libdc1394; then
1963     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1964         enable libdc1394_2; } ||
1965     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1966         enable libdc1394_1; } ||
1967     die "ERROR: No version of libdc1394 found "
1968 fi
1969
1970
1971 _restrict=
1972 for restrict_keyword in restrict __restrict__ __restrict; do
1973     check_cc <<EOF && _restrict=$restrict_keyword && break
1974 void foo(char * $restrict_keyword p);
1975 EOF
1976 done
1977
1978 test "$vhook" = "default" && vhook="$dlopen"
1979
1980 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1981     disable vhook
1982     echo
1983     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1984     echo "Patches welcome."
1985     echo
1986 fi
1987
1988 if enabled vhook; then
1989     check_ldflags -rdynamic
1990     check_ldflags -export-dynamic
1991 fi
1992
1993 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1994 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1995
1996 ##########################################
1997 # SDL check
1998
1999 disable sdl_too_old
2000 disable sdl
2001 SDL_CONFIG="${cross_prefix}sdl-config"
2002 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2003     sdl_cflags=`"${SDL_CONFIG}" --cflags`
2004     temp_cflags $sdl_cflags
2005     temp_extralibs `"${SDL_CONFIG}" --libs`
2006     if check_lib2 SDL.h SDL_Init; then
2007         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2008         if test "$_sdlversion" -lt 121 ; then
2009             enable sdl_too_old
2010         else
2011             enable sdl
2012             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2013 #include <SDL.h>
2014 int main(int argc, char **argv){
2015     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2016     int w = vi->current_w;
2017     return 0;
2018 }
2019 EOF
2020         fi
2021     fi
2022     restore_flags
2023 fi
2024
2025 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2026
2027 ##########################################
2028 # Network check
2029
2030 if enabled network; then
2031     check_type "sys/types.h sys/socket.h" socklen_t
2032     # Prefer arpa/inet.h over winsock2
2033     if check_header arpa/inet.h ; then
2034         check_func closesocket
2035     elif check_header winsock2.h ; then
2036         network_extralibs="-lws2_32"
2037         check_type ws2tcpip.h socklen_t
2038         check_func_headers winsock2.h closesocket
2039     fi
2040 fi
2041
2042 ##########################################
2043 # IPv6 check
2044
2045 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2046 #include <sys/types.h>
2047 #include <sys/socket.h>
2048 #include <netinet/in.h>
2049 #include <netdb.h>
2050 int main(void) {
2051     struct sockaddr_storage saddr;
2052     struct ipv6_mreq mreq6;
2053     getaddrinfo(0,0,0,0);
2054     getnameinfo(0,0,0,0,0,0,0);
2055     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2056 }
2057 EOF
2058
2059 check_header linux/videodev.h
2060 check_header linux/videodev2.h
2061 check_header sys/videoio.h
2062
2063 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2064
2065 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2066 { check_header dev/bktr/ioctl_meteor.h &&
2067   check_header dev/bktr/ioctl_bt848.h; } ||
2068 { check_header machine/ioctl_meteor.h &&
2069   check_header machine/ioctl_bt848.h; } ||
2070 { check_header dev/video/meteor/ioctl_meteor.h &&
2071   check_header dev/video/bktr/ioctl_bt848.h; } ||
2072 check_header dev/ic/bt8xx.h
2073
2074 check_header sys/soundcard.h
2075 check_header soundcard.h
2076
2077 check_header alsa/asoundlib.h &&
2078 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2079
2080 # deal with the X11 frame grabber
2081 enabled x11grab                         &&
2082 check_header X11/Xlib.h                 &&
2083 check_header X11/extensions/XShm.h      &&
2084 check_func XOpenDisplay -lX11           &&
2085 check_func XShmCreateImage -lX11 -lXext
2086
2087 enabled debug && add_cflags -g"$debuglevel"
2088
2089 # add some useful compiler flags if supported
2090 check_cflags -Wdeclaration-after-statement
2091 check_cflags -Wall
2092 check_cflags -Wno-switch
2093 check_cflags -Wdisabled-optimization
2094 check_cflags -Wpointer-arith
2095 check_cflags -Wredundant-decls
2096 check_cflags -Wno-pointer-sign
2097 check_cflags -Wcast-qual
2098 check_cflags -Wwrite-strings
2099 check_cflags -Wtype-limits
2100 check_cflags -Wundef
2101 enabled extra_warnings && check_cflags -Winline
2102
2103 # add some linker flags
2104 check_ldflags -Wl,--warn-common
2105 check_ldflags -Wl,--as-needed
2106 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'
2107 check_ldflags -Wl,-Bsymbolic
2108
2109 if enabled small; then
2110     check_cflags -Os            # not all compilers support -Os
2111     optimizations="small"
2112 elif enabled optimizations; then
2113     if $cc -v 2>&1 | grep -q xlc; then
2114         add_cflags  -O5
2115         add_ldflags -O5
2116     else
2117         add_cflags -O3
2118     fi
2119 fi
2120 check_cflags -fno-math-errno
2121 check_cflags -fno-signed-zeros
2122
2123 # add some flags for Intel C Compiler
2124 if $cc --version 2> /dev/null | grep -q Intel; then
2125   # Just warnings, no remarks
2126   check_cflags -w1
2127   # -wd: Disable following warnings
2128   # 144, 167, 556: -Wno-pointer-sign
2129   # 10006: ignoring unknown option -fno-signed-zeros
2130   # 10156: ignoring option '-W'; no argument required
2131   check_cflags -wd144,167,556,10006,10156
2132   # 11030: Warning unknown option --as-needed
2133   # 10156: ignoring option '-export'; no argument required
2134   check_ldflags -wd10156,11030
2135   # Allow to compile with optimizations
2136   check_ldflags -march=$cpu
2137 fi
2138
2139 # PIC flags for shared library objects where they are needed
2140 if enabled shared; then
2141     # LIBOBJFLAGS may have already been set in the OS configuration
2142     if test -z "$LIBOBJFLAGS" ; then
2143         case "${subarch-$arch}" in
2144             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2145         esac
2146     fi
2147 fi
2148
2149 if enabled gprof; then
2150     add_cflags  -p
2151     add_ldflags -p
2152 fi
2153
2154 VHOOKCFLAGS="-fPIC"
2155
2156 # Find out if the .align argument is a power of two or not.
2157 check_asm asmalign_pot '".align 3"'
2158
2159 enabled_any $DECODER_LIST      && enable decoders
2160 enabled_any $ENCODER_LIST      && enable encoders
2161 enabled_any $BSF_LIST          && enable bsfs
2162 enabled_any $DEMUXER_LIST      && enable demuxers
2163 enabled_any $MUXER_LIST        && enable muxers
2164 enabled_any $FILTER_LIST       && enable filters
2165 enabled_any $INDEV_LIST        && enable demuxers
2166 enabled_any $OUTDEV_LIST       && enable muxers
2167 enabled_any $PROTOCOL_LIST     && enable protocols
2168
2169 enabled_any $THREADS_LIST      && enable threads
2170
2171 check_deps $CONFIG_LIST       \
2172            $CONFIG_EXTRA      \
2173            $HAVE_LIST         \
2174            $DECODER_LIST      \
2175            $ENCODER_LIST      \
2176            $PARSER_LIST       \
2177            $BSF_LIST          \
2178            $DEMUXER_LIST      \
2179            $MUXER_LIST        \
2180            $FILTER_LIST       \
2181            $INDEV_LIST        \
2182            $OUTDEV_LIST       \
2183            $PROTOCOL_LIST     \
2184
2185 echo "install prefix            $prefix"
2186 echo "source path               $source_path"
2187 echo "C compiler                $cc"
2188 echo ".align is power-of-two    $asmalign_pot"
2189 echo "ARCH                      $arch ($cpu)"
2190 if test "$build_suffix" != ""; then
2191     echo "build suffix              $build_suffix"
2192 fi
2193 if test "$extra_version" != ""; then
2194     echo "version string suffix     $extra_version"
2195 fi
2196 echo "big-endian                ${bigendian-no}"
2197 if enabled x86; then
2198     echo "yasm                      ${yasm-no}"
2199     echo "MMX enabled               ${mmx-no}"
2200     echo "MMX2 enabled              ${mmx2-no}"
2201     echo "3DNow! enabled            ${amd3dnow-no}"
2202     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2203     echo "SSE enabled               ${sse-no}"
2204     echo "SSSE3 enabled             ${ssse3-no}"
2205     echo "CMOV enabled              ${cmov-no}"
2206     echo "CMOV is fast              ${fast_cmov-no}"
2207     echo "EBX available             ${ebx_available-no}"
2208     echo "EBP available             ${ebp_available-no}"
2209     echo "10 operands supported     ${ten_operands-no}"
2210 fi
2211 if enabled arm; then
2212     echo "ARMv5TE enabled           ${armv5te-no}"
2213     echo "ARMv6 enabled             ${armv6-no}"
2214     echo "ARMv6T2 enabled           ${armv6t2-no}"
2215     echo "ARM VFP enabled           ${armvfp-no}"
2216     echo "IWMMXT enabled            ${iwmmxt-no}"
2217     echo "NEON enabled              ${neon-no}"
2218 fi
2219 if enabled mips; then
2220     echo "MMI enabled               ${mmi-no}"
2221 fi
2222 if enabled ppc; then
2223     echo "AltiVec enabled           ${altivec-no}"
2224     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2225     echo "dcbzl available           ${dcbzl-no}"
2226     echo "performance report        ${powerpc_perf-no}"
2227 fi
2228 if enabled sparc; then
2229     echo "VIS enabled               ${vis-no}"
2230 fi
2231 echo "gprof enabled             ${gprof-no}"
2232 echo "debug symbols             ${debug-no}"
2233 echo "strip symbols             ${stripping-no}"
2234 echo "optimizations             ${optimizations-no}"
2235 echo "static                    ${static-no}"
2236 echo "shared                    ${shared-no}"
2237 echo "postprocessing support    ${postproc-no}"
2238 echo "software scaler enabled   ${swscale-no}"
2239 echo "new filter support        ${avfilter-no}"
2240 echo "filters using lavformat   ${avfilter_lavf-no}"
2241 echo "video hooking             ${vhook-no}"
2242 if enabled vhook; then
2243     echo "Imlib2 support            ${imlib2-no}"
2244     echo "FreeType support          ${freetype2-no}"
2245 fi
2246 echo "network support           ${network-no}"
2247 if enabled network; then
2248     echo "IPv6 support              ${ipv6-no}"
2249 fi
2250 echo "threading support         ${thread_type-no}"
2251 echo "SDL support               ${sdl-no}"
2252 if enabled sdl_too_old; then
2253     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2254 fi
2255 echo "Sun medialib support      ${mlib-no}"
2256 echo "AVISynth enabled          ${avisynth-no}"
2257 echo "libamr-nb support         ${libamr_nb-no}"
2258 echo "libamr-wb support         ${libamr_wb-no}"
2259 echo "libdc1394 support         ${libdc1394-no}"
2260 echo "libdirac enabled          ${libdirac-no}"
2261 echo "libfaac enabled           ${libfaac-no}"
2262 echo "libfaad enabled           ${libfaad-no}"
2263 echo "libfaad dlopened          ${libfaadbin-no}"
2264 echo "libgsm enabled            ${libgsm-no}"
2265 echo "libmp3lame enabled        ${libmp3lame-no}"
2266 echo "libnut enabled            ${libnut-no}"
2267 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2268 echo "libschroedinger enabled   ${libschroedinger-no}"
2269 echo "libspeex enabled          ${libspeex-no}"
2270 echo "libtheora enabled         ${libtheora-no}"
2271 echo "libvorbis enabled         ${libvorbis-no}"
2272 echo "libx264 enabled           ${libx264-no}"
2273 echo "libxvid enabled           ${libxvid-no}"
2274 echo "vdpau enabled             ${vdpau-no}"
2275 echo "zlib enabled              ${zlib-no}"
2276 echo "bzlib enabled             ${bzlib-no}"
2277 echo
2278
2279 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2280     echo "Enabled ${type}s:"
2281     eval list=\$$(toupper $type)_LIST
2282     for part in $list; do
2283         enabled $part && echo ${part%_*}
2284     done | sort | pr -3 -t
2285     echo
2286 done
2287
2288 license="LGPL"
2289 if enabled nonfree; then
2290     license="unredistributable"
2291 elif enabled gpl; then
2292     license="GPL"
2293 fi
2294
2295 echo "License: $license"
2296
2297 echo "Creating config.mak and config.h..."
2298
2299 echo "# Automatically generated by configure - do not modify!" > config.mak
2300 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2301 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2302 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2303 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2304 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2305
2306 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2307 echo "prefix=$prefix" >> config.mak
2308 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2309 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2310 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2311 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2312 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2313 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2314 echo "CC=$cc" >> config.mak
2315 echo "YASM=$yasmexe" >> config.mak
2316 echo "AR=$ar" >> config.mak
2317 echo "RANLIB=$ranlib" >> config.mak
2318 echo "LN_S=$ln_s" >> config.mak
2319 enabled stripping &&
2320     echo "STRIP=$strip" >> config.mak ||
2321     echo "STRIP=echo ignoring strip" >> config.mak
2322
2323 echo "OPTFLAGS=$CFLAGS" >> config.mak
2324 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2325 echo "LDFLAGS=$LDFLAGS" >> config.mak
2326 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2327 echo "SHFLAGS=$SHFLAGS" >> config.mak
2328 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2329 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2330 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2331 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2332 echo "BUILD_STATIC=$static" >> config.mak
2333 echo "BUILDSUF=$build_suffix" >> config.mak
2334 echo "FULLNAME=$FULLNAME" >> config.mak
2335 echo "LIBPREF=$LIBPREF" >> config.mak
2336 echo "LIBSUF=$LIBSUF" >> config.mak
2337 echo "LIBNAME=$LIBNAME" >> config.mak
2338 echo "SLIBPREF=$SLIBPREF" >> config.mak
2339 echo "SLIBSUF=$SLIBSUF" >> config.mak
2340 echo "EXESUF=$EXESUF" >> config.mak
2341 echo "EXTRA_VERSION=$extra_version" >> config.mak
2342 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2343 echo "HOSTCC=$host_cc" >> config.mak
2344 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2345 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2346 echo "HOSTLIBS=$host_libs" >> config.mak
2347 echo "TARGET_EXEC=$target_exec" >> config.mak
2348 echo "TARGET_PATH=$target_path" >> config.mak
2349
2350 if enabled bigendian; then
2351     echo "WORDS_BIGENDIAN=yes" >> config.mak
2352     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2353 fi
2354
2355 if enabled sdl; then
2356     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2357     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2358 fi
2359 if enabled texi2html; then
2360     echo "BUILD_DOC=yes" >> config.mak
2361 fi
2362
2363 get_version(){
2364     name=$1
2365     file=$source_path/$2
2366     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2367     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2368     lcname=$(tolower $name)
2369     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2370     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2371 }
2372
2373 get_version LIBSWSCALE  libswscale/swscale.h
2374 get_version LIBPOSTPROC libpostproc/postprocess.h
2375 get_version LIBAVCODEC  libavcodec/avcodec.h
2376 get_version LIBAVDEVICE libavdevice/avdevice.h
2377 get_version LIBAVFORMAT libavformat/avformat.h
2378 get_version LIBAVUTIL   libavutil/avutil.h
2379 get_version LIBAVFILTER libavfilter/avfilter.h
2380
2381 if enabled shared; then
2382     echo "BUILD_SHARED=yes" >> config.mak
2383     echo "PIC=-fPIC -DPIC" >> config.mak
2384     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2385     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2386     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2387     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2388     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2389     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2390     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2391     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2392 fi
2393 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2394 echo "EXTRALIBS=$extralibs" >> config.mak
2395
2396 echo "ARCH=$arch" >> config.mak
2397
2398 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2399 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2400 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2401                                       $CONFIG_EXTRA      \
2402                                       $DECODER_LIST      \
2403                                       $ENCODER_LIST      \
2404                                       $PARSER_LIST       \
2405                                       $BSF_LIST          \
2406                                       $DEMUXER_LIST      \
2407                                       $MUXER_LIST        \
2408                                       $FILTER_LIST       \
2409                                       $PROTOCOL_LIST     \
2410                                       $INDEV_LIST        \
2411                                       $OUTDEV_LIST       \
2412
2413 echo "#define restrict $_restrict" >> $TMPH
2414
2415 if enabled small; then
2416     echo "#define av_always_inline"  >> $TMPH
2417 fi
2418
2419 echo "SRC_PATH=\"$source_path\"" >> config.mak
2420 echo "SRC_PATH_BARE=$source_path" >> config.mak
2421 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2422
2423 # Apparently it's not possible to portably echo a backslash.
2424 enabled asmalign_pot &&
2425     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2426     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2427
2428 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2429
2430 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2431
2432 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2433 cmp -s $TMPH config.h &&
2434     echo "config.h is unchanged" ||
2435     mv -f $TMPH config.h
2436
2437 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2438
2439 # build tree in object directory if source path is different from current one
2440 if enabled source_path_used; then
2441     DIRS="\
2442         doc               \
2443         libavcodec        \
2444         libavcodec/alpha  \
2445         libavcodec/arm    \
2446         libavcodec/bfin   \
2447         libavcodec/mlib   \
2448         libavcodec/ppc    \
2449         libavcodec/sh4    \
2450         libavcodec/sparc  \
2451         libavcodec/x86    \
2452         libavdevice       \
2453         libavfilter       \
2454         libavformat       \
2455         libavutil         \
2456         libpostproc       \
2457         libswscale        \
2458         tests             \
2459         tools             \
2460         vhook             \
2461         "
2462     FILES="\
2463         Makefile             \
2464         common.mak           \
2465         subdir.mak           \
2466         doc/texi2pod.pl      \
2467         libavcodec/Makefile  \
2468         libavdevice/Makefile \
2469         libavfilter/Makefile \
2470         libavformat/Makefile \
2471         libavutil/Makefile   \
2472         libpostproc/Makefile \
2473         libswscale/Makefile  \
2474         "
2475     for dir in $DIRS ; do
2476         mkdir -p $dir
2477     done
2478     for f in $FILES ; do
2479         $ln_s "$source_path/$f" $f
2480     done
2481 fi
2482
2483
2484 # build pkg-config files
2485
2486 pkgconfig_generate(){
2487 name=$1
2488 shortname=${name#lib}${build_suffix}
2489 comment=$2
2490 version=$3
2491 libs=$4
2492 requires=$5
2493 cat <<EOF > $name/$name.pc
2494 prefix=$prefix
2495 exec_prefix=\${prefix}
2496 libdir=$libdir
2497 includedir=$incdir
2498
2499 Name: $name
2500 Description: $comment
2501 Version: $version
2502 Requires: $(disabled shared && echo $requires)
2503 Requires.private: $(enabled shared && echo $requires)
2504 Conflicts:
2505 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2506 Libs.private: $(enabled shared && echo $libs)
2507 Cflags: -I\${includedir}
2508 EOF
2509 cat <<EOF > $name/$name-uninstalled.pc
2510 prefix=
2511 exec_prefix=
2512 libdir=\${pcfiledir}
2513 includedir=${source_path}
2514
2515 Name: $name
2516 Description: $comment
2517 Version: $version
2518 Requires: $requires
2519 Conflicts:
2520 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2521 Cflags: -I\${includedir}
2522 EOF
2523 }
2524
2525 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2526 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2527 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2528 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2529 enabled avfilter &&
2530     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2531 enabled postproc &&
2532     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2533 if enabled swscale; then
2534     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2535 else
2536     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2537     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2538 fi