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