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