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