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