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