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