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