]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - configure
configure: add help for fastdiv
[frescor/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-sse            disable SSE optimizations"
145   echo "  --disable-ssse3          disable SSSE3 optimizations"
146   echo "  --disable-armv5te        disable armv5te optimizations"
147   echo "  --disable-armv6          disable armv6 optimizations"
148   echo "  --disable-armv6t2        disable armv6t2 optimizations"
149   echo "  --disable-armvfp         disable ARM VFP optimizations"
150   echo "  --disable-iwmmxt         disable iwmmxt optimizations"
151   echo "  --disable-mmi            disable MMI optimizations"
152   echo "  --disable-neon           disable neon optimizations"
153   echo "  --disable-vis            disable VIS optimizations"
154   echo "  --disable-network        disable network support [no]"
155   echo "  --disable-ipv6           disable IPv6 support [no]"
156   echo "  --disable-mpegaudio-hp   faster (but less accurate)"
157   echo "                           MPEG audio decoding [no]"
158   echo "  --disable-aandct         disable AAN DCT code"
159   echo "  --disable-fft            disable FFT code"
160   echo "  --disable-golomb         disable Golomb code"
161   echo "  --disable-mdct           disable MDCT code"
162   echo "  --enable-gray            enable full grayscale support (slower color)"
163   echo "  --disable-fastdiv        disable table-based division"
164   echo "  --disable-ffmpeg         disable ffmpeg build"
165   echo "  --disable-ffplay         disable ffplay build"
166   echo "  --disable-ffserver       disable ffserver build"
167   echo "  --enable-small           optimize for size instead of speed"
168   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
169   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
170   echo "  --enable-beos-netserver  enable BeOS netserver"
171   echo "  --disable-encoder=NAME   disable encoder NAME"
172   echo "  --enable-encoder=NAME    enable encoder NAME"
173   echo "  --disable-encoders       disable all encoders"
174   echo "  --disable-decoder=NAME   disable decoder NAME"
175   echo "  --enable-decoder=NAME    enable decoder NAME"
176   echo "  --disable-decoders       disable all decoders"
177   echo "  --disable-muxer=NAME     disable muxer NAME"
178   echo "  --enable-muxer=NAME      enable muxer NAME"
179   echo "  --disable-muxers         disable all muxers"
180   echo "  --disable-demuxer=NAME   disable demuxer NAME"
181   echo "  --enable-demuxer=NAME    enable demuxer NAME"
182   echo "  --disable-demuxers       disable all demuxers"
183   echo "  --enable-parser=NAME     enable parser NAME"
184   echo "  --disable-parser=NAME    disable parser NAME"
185   echo "  --disable-parsers        disable all parsers"
186   echo "  --enable-bsf=NAME        enable bitstream filter NAME"
187   echo "  --disable-bsf=NAME       disable bitstream filter NAME"
188   echo "  --disable-bsfs           disable all bitstream filters"
189   echo "  --enable-protocol=NAME   enable protocol NAME"
190   echo "  --disable-protocol=NAME  disable protocol NAME"
191   echo "  --disable-protocols      disable all protocols"
192   echo "  --disable-indevs         disable input devices"
193   echo "  --disable-outdevs        disable output devices"
194   echo "  --disable-devices        disable all devices"
195   echo "  --enable-filter=NAME     enable filter NAME"
196   echo "  --disable-filter=NAME    disable filter NAME"
197   echo "  --disable-filters        disable all filters"
198   echo "  --list-decoders          show all available decoders"
199   echo "  --list-encoders          show all available encoders"
200   echo "  --list-muxers            show all available muxers"
201   echo "  --list-demuxers          show all available demuxers"
202   echo "  --list-parsers           show all available parsers"
203   echo "  --list-protocols         show all available protocols"
204   echo "  --list-bsfs              show all available bitstream filters"
205   echo "  --list-indevs            show all available input devices"
206   echo "  --list-outdevs           show all available output devices"
207   echo "  --list-filters           show all available filters"
208   echo
209   echo "Developer options (useful when working on FFmpeg itself):"
210   echo "  --disable-debug          disable debugging symbols"
211   echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
212   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
213   echo "  --disable-optimizations  disable compiler optimizations"
214   echo "  --enable-extra-warnings  enable more compiler warnings"
215   echo "  --disable-stripping      disable stripping of executables and shared libraries"
216   echo ""
217   echo "NOTE: Object files are built at the place where configure is launched."
218   exit 0
219 }
220
221 log(){
222     echo "$@" >> $logfile
223 }
224
225 log_file(){
226     log BEGIN $1
227     pr -n -t $1 >> $logfile
228     log END $1
229 }
230
231 echolog(){
232     log "$@"
233     echo "$@"
234 }
235
236 die(){
237     echolog "$@"
238     cat <<EOF
239 If you think configure made a mistake, make sure you are using the latest
240 version from SVN.  If the latest version fails, report the problem to the
241 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
242 EOF
243     if disabled logging; then
244         cat <<EOF
245 Rerun configure with logging enabled (do not use --disable-logging), and
246 include the log this produces with your report.
247 EOF
248     else
249 cat <<EOF
250 Include the log file "$logfile" produced by configure as this will help
251 solving the problem.
252 EOF
253     fi
254     rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
255     exit 1
256 }
257
258 # Avoid locale weirdness, besides we really just want to translate ASCII.
259 toupper(){
260     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
261 }
262
263 tolower(){
264     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
265 }
266
267 set_all(){
268     value=$1
269     shift
270     for var in $*; do
271         eval $var=$value
272     done
273 }
274
275 set_weak(){
276     value=$1
277     shift
278     for var; do
279         eval : \${$var:=$value}
280     done
281 }
282
283 pushvar(){
284     for var in $*; do
285         eval level=\${${var}_level:=0}
286         eval ${var}_${level}="\$$var"
287         eval ${var}_level=$(($level+1))
288     done
289 }
290
291 popvar(){
292     for var in $*; do
293         eval level=\${${var}_level:-0}
294         test $level = 0 && continue
295         eval level=$(($level-1))
296         eval $var="\${${var}_${level}}"
297         eval ${var}_level=$level
298         eval unset ${var}_${level}
299     done
300 }
301
302 enable(){
303     set_all yes $*
304 }
305
306 disable(){
307     set_all no $*
308 }
309
310 enable_weak(){
311     set_weak yes $*
312 }
313
314 disable_weak(){
315     set_weak no $*
316 }
317
318 do_enable_deep(){
319     for var; do
320         enabled $var && continue
321         eval sel="\$${var}_select"
322         eval sgs="\$${var}_suggest"
323         pushvar var sgs
324         enable_deep $sel
325         popvar sgs
326         enable_deep_weak $sgs
327         popvar var
328     done
329 }
330
331 enable_deep(){
332     do_enable_deep $*
333     enable $*
334 }
335
336 enable_deep_weak(){
337     do_enable_deep $*
338     enable_weak $*
339 }
340
341 enabled(){
342     test "${1#!}" = "$1" && op== || op=!=
343     eval test "x\$${1#!}" $op "xyes"
344 }
345
346 disabled(){
347     test "${1#!}" = "$1" && op== || op=!=
348     eval test "x\$${1#!}" $op "xno"
349 }
350
351 enabled_all(){
352     for opt; do
353         enabled $opt || return 1
354     done
355 }
356
357 disabled_all(){
358     for opt; do
359         disabled $opt || return 1
360     done
361 }
362
363 enabled_any(){
364     for opt; do
365         enabled $opt && return 0
366     done
367 }
368
369 disabled_any(){
370     for opt; do
371         disabled $opt && return 0
372     done
373     return 1
374 }
375
376 set_default(){
377     for opt; do
378         eval : \${$opt:=\$${opt}_default}
379     done
380 }
381
382 is_in(){
383     value=$1
384     shift
385     for var in $*; do
386         [ $var = $value ] && return 0
387     done
388     return 1
389 }
390
391 check_deps(){
392     for cfg; do
393         cfg="${cfg#!}"
394         enabled ${cfg}_checking && die "Circular dependency for $cfg."
395         disabled ${cfg}_checking && continue
396         enable ${cfg}_checking
397
398         eval dep_all="\$${cfg}_deps"
399         eval dep_any="\$${cfg}_deps_any"
400         eval dep_sel="\$${cfg}_select"
401         eval dep_sgs="\$${cfg}_suggest"
402
403         pushvar cfg dep_all dep_any dep_sel dep_sgs
404         check_deps $dep_all $dep_any $dep_sel $dep_sgs
405         popvar cfg dep_all dep_any dep_sel dep_sgs
406
407         enabled_all  $dep_all || disable $cfg
408         enabled_any  $dep_any || disable $cfg
409         disabled_any $dep_sel && disable $cfg
410
411         if enabled $cfg; then
412             eval dep_extralibs="\$${cfg}_extralibs"
413             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
414             enable_deep $dep_sel
415             enable_deep_weak $dep_sgs
416         fi
417
418         disable ${cfg}_checking
419     done
420 }
421
422 print_config(){
423     pfx=$1
424     header=$2
425     makefile=$3
426     shift 3
427     for cfg; do
428         ucname="`toupper $cfg`"
429         if enabled $cfg; then
430             echo "#define ${pfx}${ucname} 1" >> $header
431             echo "${pfx}${ucname}=yes" >> $makefile
432         else
433             echo "#define ${pfx}${ucname} 0" >> $header
434         fi
435     done
436 }
437
438 flags_saved(){
439     (: ${SAVE_CFLAGS?}) 2> /dev/null
440 }
441
442 save_flags(){
443     flags_saved && return
444     SAVE_CFLAGS="$CFLAGS"
445     SAVE_LDFLAGS="$LDFLAGS"
446     SAVE_extralibs="$extralibs"
447 }
448
449 restore_flags(){
450     flags_saved || return
451     CFLAGS="$SAVE_CFLAGS"
452     LDFLAGS="$SAVE_LDFLAGS"
453     extralibs="$SAVE_extralibs"
454     unset SAVE_CFLAGS
455     unset SAVE_LDFLAGS
456     unset SAVE_extralibs
457 }
458
459 temp_cflags(){
460     save_flags
461     CFLAGS="$CFLAGS $*"
462 }
463
464 temp_ldflags(){
465     save_flags
466     LDFLAGS="$LDFLAGS $*"
467 }
468
469 temp_extralibs(){
470     save_flags
471     extralibs="$extralibs $*"
472 }
473
474 append(){
475     var=$1
476     shift
477     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
478     eval "$var=\"\$$var $*\""
479 }
480
481 add_cflags(){
482     append CFLAGS "$@"
483 }
484
485 add_ldflags(){
486     append LDFLAGS "$@"
487 }
488
489 add_extralibs(){
490     append extralibs "$@"
491 }
492
493 check_cmd(){
494     log "$@"
495     "$@" >> $logfile 2>&1
496 }
497
498 check_cc(){
499     log check_cc "$@"
500     cat > $TMPC
501     log_file $TMPC
502     check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
503 }
504
505 check_cpp(){
506     log check_cpp "$@"
507     cat > $TMPC
508     log_file $TMPC
509     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
510 }
511
512 check_asm(){
513     log check_asm "$@"
514     name="$1"
515     asm="$2"
516     shift 2
517     check_cc "$@" <<EOF && enable $name || disable $name
518 void foo(void){ __asm__ volatile($asm); }
519 EOF
520 }
521
522 check_yasm(){
523     log check_yasm "$@"
524     echo "$1" > $TMPS
525     log_file $TMPS
526     shift 1
527     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
528 }
529
530 check_ld(){
531     log check_ld "$@"
532     check_cc || return
533     flags=''
534     libs=''
535     for f; do
536         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
537     done
538     check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
539 }
540
541 check_cflags(){
542     log check_cflags "$@"
543     check_cc "$@" <<EOF && add_cflags "$@"
544 int x;
545 EOF
546 }
547
548 check_ldflags(){
549     log check_ldflags "$@"
550     check_ld "$@" <<EOF && add_ldflags "$@"
551 int main(void){ return 0; }
552 EOF
553 }
554
555 check_header(){
556     log check_header "$@"
557     header=$1
558     shift
559     var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
560     disable $var
561     check_cpp "$@" <<EOF && enable $var
562 #include <$header>
563 int x;
564 EOF
565 }
566
567 check_func(){
568     log check_func "$@"
569     func=$1
570     shift
571     disable $func
572     check_ld "$@" <<EOF && enable $func
573 extern int $func();
574 int main(void){ $func(); }
575 EOF
576 }
577
578 check_func_headers(){
579     log check_func_headers "$@"
580     headers=$1
581     func=$2
582     shift 2
583     disable $func
584     incs=""
585     for hdr in $headers; do
586         incs="$incs
587 #include <$hdr>"
588     done
589     check_ld "$@" <<EOF && enable $func
590 $incs
591 int main(int argc, char **argv){
592     (void) $func;
593     return 0;
594 }
595 EOF
596 }
597
598 check_cpp_condition(){
599     log check_cpp_condition "$@"
600     header=$1
601     condition=$2
602     check_cpp <<EOF
603 #include <$header>
604 #if !($condition)
605 #error "unsatisfied condition: $condition"
606 #endif
607 EOF
608 }
609
610 check_lib(){
611     log check_lib "$@"
612     header="$1"
613     func="$2"
614     shift 2
615     temp_extralibs "$@"
616     check_header $header && check_func $func && add_extralibs "$@"
617     err=$?
618     restore_flags
619     return $err
620 }
621
622 check_lib2(){
623     log check_lib2 "$@"
624     headers="$1"
625     func="$2"
626     shift 2
627     temp_extralibs "$@"
628     check_func_headers "$headers" $func && add_extralibs "$@"
629     err=$?
630     restore_flags
631     return $err
632 }
633
634 check_exec(){
635     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
636 }
637
638 check_exec_crash(){
639     code=`cat`
640
641     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
642     # are safe but may not be available everywhere.  Thus we use
643     # raise(SIGTERM) instead.  The check is run in a subshell so we
644     # can redirect the "Terminated" message from the shell.  SIGBUS
645     # is not defined by standard C so it is used conditionally.
646
647     (check_exec "$@") >> $logfile 2>&1 <<EOF
648 #include <signal.h>
649 static void sighandler(int sig){
650     raise(SIGTERM);
651 }
652 int main(void){
653     signal(SIGILL, sighandler);
654     signal(SIGFPE, sighandler);
655     signal(SIGSEGV, sighandler);
656 #ifdef SIGBUS
657     signal(SIGBUS, sighandler);
658 #endif
659     { $code }
660 }
661 EOF
662 }
663
664 check_type(){
665     log check_type "$@"
666     headers=$1
667     type=$2
668     shift 2
669     disable $type
670     incs=""
671     for hdr in $headers; do
672         incs="$incs
673 #include <$hdr>"
674     done
675     check_cc "$@" <<EOF && enable $type
676 $incs
677 $type v;
678 EOF
679 }
680
681 require(){
682     name="$1"
683     header="$2"
684     func="$3"
685     shift 3
686     check_lib $header $func "$@" || die "ERROR: $name not found"
687 }
688
689 require2(){
690     name="$1"
691     headers="$2"
692     func="$3"
693     shift 3
694     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
695 }
696
697 check_foo_config(){
698     cfg=$1
699     pkg=$2
700     header=$3
701     func=$4
702     shift 4
703     disable $cfg
704     check_cmd ${pkg}-config --version
705     err=$?
706     if test "$err" = 0; then
707         temp_cflags `${pkg}-config --cflags`
708         temp_extralibs `${pkg}-config --libs`
709         check_lib "$@" $header $func && enable $cfg
710     fi
711     return $err
712 }
713
714 apply(){
715     file=$1
716     shift
717     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
718 }
719
720 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
721 # system-dependent things.
722
723 COMPONENT_LIST="
724     bsfs
725     decoders
726     demuxers
727     encoders
728     filters
729     indevs
730     muxers
731     outdevs
732     parsers
733     protocols
734 "
735
736 CONFIG_LIST="
737     $COMPONENT_LIST
738     aandct
739     avfilter
740     avfilter_lavf
741     avisynth
742     beos_netserver
743     bzlib
744     fastdiv
745     ffmpeg
746     ffplay
747     ffserver
748     fft
749     golomb
750     gpl
751     gprof
752     gray
753     hardcoded_tables
754     ipv6
755     libamr_nb
756     libamr_wb
757     libdc1394
758     libdirac
759     libfaac
760     libfaad
761     libfaadbin
762     libgsm
763     libmp3lame
764     libnut
765     libschroedinger
766     libspeex
767     libtheora
768     libvorbis
769     libx264
770     libxvid
771     mdct
772     memalign_hack
773     mlib
774     mpegaudio_hp
775     network
776     nonfree
777     postproc
778     powerpc_perf
779     shared
780     small
781     static
782     swscale
783     vdpau
784     vhook
785     x11grab
786     xvmc
787     zlib
788 "
789
790 THREADS_LIST='
791     beosthreads
792     os2threads
793     pthreads
794     w32threads
795 '
796
797 ARCH_LIST='
798     alpha
799     arm
800     bfin
801     ia64
802     m68k
803     mips
804     parisc
805     ppc
806     s390
807     sh4
808     sparc
809     sparc64
810     x86
811     x86_32
812     x86_64
813 '
814
815 ARCH_EXT_LIST='
816     altivec
817     armv5te
818     armv6
819     armv6t2
820     armvfp
821     iwmmxt
822     mmi
823     mmx
824     mmx2
825     neon
826     sse
827     ssse3
828     vis
829 '
830
831 HAVE_LIST="
832     $ARCH_EXT_LIST
833     $THREADS_LIST
834     altivec_h
835     arpa_inet_h
836     bswap
837     closesocket
838     cmov
839     conio_h
840     dcbzl
841     dev_bktr_ioctl_bt848_h
842     dev_bktr_ioctl_meteor_h
843     dev_ic_bt8xx_h
844     dev_video_meteor_ioctl_meteor_h
845     dev_video_bktr_ioctl_bt848_h
846     dlfcn_h
847     dlopen
848     dos_paths
849     ebp_available
850     ebx_available
851     fast_64bit
852     fast_cmov
853     fast_unaligned
854     fork
855     freetype2
856     gethrtime
857     GetProcessTimes
858     getrusage
859     imlib2
860     inet_aton
861     inline_asm
862     libdc1394_1
863     libdc1394_2
864     llrint
865     lrint
866     lrintf
867     machine_ioctl_bt848_h
868     machine_ioctl_meteor_h
869     malloc_h
870     memalign
871     mkstemp
872     pld
873     posix_memalign
874     ppc64
875     round
876     roundf
877     sdl
878     sdl_video_size
879     setmode
880     socklen_t
881     soundcard_h
882     poll_h
883     sys_mman_h
884     sys_resource_h
885     sys_select_h
886     sys_soundcard_h
887     sys_videoio_h
888     termios_h
889     threads
890     truncf
891     winsock2_h
892     yasm
893 "
894
895 # options emitted with CONFIG_ prefix but not available on command line
896 CONFIG_EXTRA="
897     fft_mmx
898     oldscaler
899 "
900
901 CMDLINE_SELECT="
902     $ARCH_EXT_LIST
903     $CONFIG_LIST
904     $THREADS_LIST
905     cross_compile
906     debug
907     extra_warnings
908     logging
909     optimizations
910     stripping
911 "
912
913 PATHS_LIST='
914     bindir
915     incdir
916     libdir
917     mandir
918     prefix
919     shlibdir
920 '
921
922 CMDLINE_SET="
923     $PATHS_LIST
924     arch
925     build_suffix
926     cc
927     cpu
928     cross_prefix
929     extra_version
930     host_cc
931     host_cflags
932     host_ldflags
933     host_libs
934     logfile
935     nm
936     source_path
937     target_exec
938     target_os
939     target_path
940 "
941
942 # code dependency declarations
943
944 # architecture extensions
945 altivec_deps="ppc"
946 armv5te_deps="arm"
947 armv6_deps="arm"
948 armv6t2_deps="arm"
949 armvfp_deps="arm"
950 iwmmxt_deps="arm"
951 mmi_deps="mips"
952 mmx_deps="x86"
953 mmx2_deps="x86 mmx"
954 neon_deps="arm"
955 sse_deps="mmx"
956 ssse3_deps="x86 sse"
957 vis_deps="sparc"
958
959 # common features
960 fft_suggest="fft_mmx"
961 fft_mmx_deps="mmx yasm"
962 oldscaler_deps="!swscale"
963
964 # decoders / encoders
965 aac_decoder_select="fft mdct"
966 ac3_decoder_deps="gpl"
967 ac3_decoder_select="fft mdct"
968 atrac3_decoder_select="fft mdct"
969 cavs_decoder_select="golomb"
970 cook_decoder_select="fft mdct"
971 cscd_decoder_suggest="zlib"
972 dca_decoder_select="fft mdct"
973 dnxhd_encoder_select="aandct"
974 dxa_decoder_select="zlib"
975 eac3_decoder_deps="gpl"
976 eac3_decoder_select="fft mdct"
977 eatgq_decoder_select="aandct"
978 ffv1_decoder_select="golomb"
979 flac_decoder_select="golomb"
980 flac_encoder_select="golomb"
981 flashsv_decoder_select="zlib"
982 flashsv_encoder_select="zlib"
983 flv_encoder_select="aandct"
984 h261_encoder_select="aandct"
985 h263_encoder_select="aandct"
986 h263p_encoder_select="aandct"
987 h264_decoder_select="golomb"
988 h264_vdpau_decoder_deps="vdpau"
989 imc_decoder_select="fft mdct"
990 jpegls_decoder_select="golomb"
991 jpegls_encoder_select="golomb"
992 ljpeg_encoder_select="aandct"
993 loco_decoder_select="golomb"
994 mjpeg_encoder_select="aandct"
995 mpeg1video_encoder_select="aandct"
996 mpeg2video_encoder_select="aandct"
997 mpeg4_encoder_select="aandct"
998 mpeg_vdpau_decoder_deps="vdpau"
999 mpeg1_vdpau_decoder_deps="vdpau"
1000 mpeg_xvmc_decoder_deps="xvmc X11_extensions_XvMClib_h"
1001 msmpeg4v1_encoder_select="aandct"
1002 msmpeg4v2_encoder_select="aandct"
1003 msmpeg4v3_encoder_select="aandct"
1004 nellymoser_decoder_select="fft mdct"
1005 nellymoser_encoder_select="fft mdct"
1006 png_decoder_select="zlib"
1007 png_encoder_select="zlib"
1008 qdm2_decoder_select="fft mdct"
1009 rv10_encoder_select="aandct"
1010 rv20_encoder_select="aandct"
1011 shorten_decoder_select="golomb"
1012 sonic_decoder_select="golomb"
1013 sonic_encoder_select="golomb"
1014 sonic_ls_encoder_select="golomb"
1015 svq3_decoder_select="golomb"
1016 svq3_decoder_suggest="zlib"
1017 tiff_decoder_suggest="zlib"
1018 tiff_encoder_suggest="zlib"
1019 tscc_decoder_select="zlib"
1020 vc1_vdpau_decoder_deps="vdpau"
1021 vorbis_decoder_select="fft mdct"
1022 vorbis_encoder_select="fft mdct"
1023 wmav1_decoder_select="fft mdct"
1024 wmav1_encoder_select="fft mdct"
1025 wmav2_decoder_select="fft mdct"
1026 wmav2_encoder_select="fft mdct"
1027 wmv1_encoder_select="aandct"
1028 wmv2_encoder_select="aandct"
1029 wmv3_vdpau_decoder_deps="vdpau"
1030 zlib_decoder_select="zlib"
1031 zlib_encoder_select="zlib"
1032 zmbv_decoder_select="zlib"
1033 zmbv_encoder_select="zlib"
1034
1035 # external libraries
1036 libamr_nb_decoder_deps="libamr_nb"
1037 libamr_nb_encoder_deps="libamr_nb"
1038 libamr_wb_decoder_deps="libamr_wb"
1039 libamr_wb_encoder_deps="libamr_wb"
1040 libdirac_decoder_deps="libdirac !libschroedinger"
1041 libdirac_encoder_deps="libdirac"
1042 libfaac_encoder_deps="libfaac"
1043 libfaad_decoder_deps="libfaad"
1044 libfaadbin_decoder_extralibs='$ldl'
1045 libgsm_decoder_deps="libgsm"
1046 libgsm_encoder_deps="libgsm"
1047 libgsm_ms_decoder_deps="libgsm"
1048 libgsm_ms_encoder_deps="libgsm"
1049 libmp3lame_encoder_deps="libmp3lame"
1050 libschroedinger_decoder_deps="libschroedinger"
1051 libschroedinger_encoder_deps="libschroedinger"
1052 libspeex_decoder_deps="libspeex"
1053 libtheora_encoder_deps="libtheora"
1054 libvorbis_encoder_deps="libvorbis"
1055 libx264_encoder_deps="libx264"
1056 libxvid_encoder_deps="libxvid"
1057 mpeg4aac_decoder_deps="libfaad"
1058 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1059
1060 # demuxers / muxers
1061 ac3_demuxer_deps="ac3_parser"
1062 audio_beos_demuxer_deps="audio_beos"
1063 audio_beos_demuxer_extralibs="-lmedia -lbe"
1064 audio_beos_muxer_deps="audio_beos"
1065 audio_beos_muxer_extralibs="-lmedia -lbe"
1066 avisynth_demuxer_deps="avisynth"
1067 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1068 dirac_demuxer_deps="dirac_parser"
1069 dv1394_demuxer_deps="dv1394 dv_demuxer"
1070 libdc1394_demuxer_deps="libdc1394"
1071 libnut_demuxer_deps="libnut"
1072 libnut_muxer_deps="libnut"
1073 matroska_demuxer_suggest="zlib bzlib"
1074 mov_demuxer_suggest="zlib"
1075 mp3_demuxer_deps="mpegaudio_parser"
1076 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1077 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1078 redir_demuxer_deps="network"
1079 rtp_muxer_deps="network rtp_protocol"
1080 rtsp_demuxer_deps="sdp_demuxer"
1081 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1082 v4l_demuxer_deps="linux_videodev_h"
1083 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1084 vfwcap_demuxer_deps="capCreateCaptureWindow"
1085 vfwcap_demuxer_extralibs="-lvfw32"
1086 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1087 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1088
1089 # protocols
1090 http_protocol_deps="network"
1091 rtp_protocol_deps="udp_protocol"
1092 tcp_protocol_deps="network"
1093 udp_protocol_deps="network"
1094
1095 # filters
1096 movie_filter_deps="avfilter_lavf"
1097
1098 # programs
1099 ffplay_deps="sdl"
1100 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1101 ffserver_extralibs='$ldl'
1102 vhook_extralibs='$ldl'
1103
1104
1105 # default parameters
1106
1107 logfile="config.err"
1108
1109 # installation paths
1110 prefix_default="/usr/local"
1111 bindir_default='${prefix}/bin'
1112 incdir_default='${prefix}/include'
1113 libdir_default='${prefix}/lib'
1114 mandir_default='${prefix}/share/man'
1115 shlibdir_default="$libdir_default"
1116
1117 # toolchain
1118 ar="ar"
1119 cc_default="gcc"
1120 host_cc_default="gcc"
1121 ln_s="ln -sf"
1122 nm_default="nm"
1123 objformat="elf"
1124 ranlib="ranlib"
1125 strip="strip"
1126 yasmexe="yasm"
1127
1128 # machine
1129 arch=`uname -m`
1130 cpu="generic"
1131
1132 # OS
1133 target_os=$(tolower $(uname -s))
1134
1135 # configurable options
1136 enable debug
1137 enable ffmpeg
1138 enable ffplay
1139 enable ffserver
1140 enable ipv6
1141 enable mpegaudio_hp
1142 enable network
1143 enable oldscaler
1144 enable optimizations
1145 enable protocols
1146 enable static
1147 enable stripping
1148 vhook="default"
1149
1150 # build settings
1151 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1152 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1153 VHOOKSHFLAGS='$(SHFLAGS)'
1154 FFSERVERLDFLAGS=-Wl,-E
1155 LIBPREF="lib"
1156 LIBSUF=".a"
1157 FULLNAME='$(NAME)$(BUILDSUF)'
1158 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1159 SLIBPREF="lib"
1160 SLIBSUF=".so"
1161 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1162 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1163 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1164 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1165
1166 host_cflags='-O3 -g -Wall'
1167 host_libs='-lm'
1168
1169 target_path='.'
1170
1171 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1172 # full relative path for objects in subdirectories for non-recursive Make.
1173 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,"'
1174
1175 # find source path
1176 source_path="`dirname \"$0\"`"
1177 enable source_path_used
1178 if test -z "$source_path" -o "$source_path" = "." ; then
1179     source_path="`pwd`"
1180     disable source_path_used
1181 else
1182     source_path="`cd \"$source_path\"; pwd`"
1183     echo "$source_path" | grep -q '[[:blank:]]' &&
1184         die "Out of tree builds are impossible with whitespace in source path."
1185 fi
1186
1187 FFMPEG_CONFIGURATION="$@"
1188
1189 find_things(){
1190     thing=$1
1191     pattern=$2
1192     file=$source_path/$3
1193     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1194 }
1195
1196 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1197 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1198 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1199 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1200 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1201 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1202 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1203 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1204 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1205 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1206
1207 enable $ARCH_EXT_LIST \
1208        $DECODER_LIST \
1209        $ENCODER_LIST \
1210        $PARSER_LIST \
1211        $BSF_LIST \
1212        $DEMUXER_LIST \
1213        $MUXER_LIST \
1214        $FILTER_LIST \
1215        $PROTOCOL_LIST \
1216        $INDEV_LIST \
1217        $OUTDEV_LIST \
1218
1219 die_unknown(){
1220     echo "Unknown option \"$1\"."
1221     echo "See $0 --help for available options."
1222     exit 1
1223 }
1224
1225 show_list() {
1226     suffix=_$1
1227     shift
1228     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1229     exit 0
1230 }
1231
1232 for opt do
1233     optval="${opt#*=}"
1234     case "$opt" in
1235     --extra-cflags=*) add_cflags $optval
1236     ;;
1237     --extra-ldflags=*) add_ldflags $optval
1238     ;;
1239     --extra-libs=*) add_extralibs $optval
1240     ;;
1241     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1242     ;;
1243     --enable-debug=*) debuglevel="$optval"
1244     ;;
1245     --enable-*=*|--disable-*=*)
1246     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1247     case "$thing" in
1248         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1249         *) die_unknown "$opt" ;;
1250     esac
1251     ;;
1252     --enable-?*|--disable-?*)
1253     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1254     if is_in $option $COMPONENT_LIST; then
1255         eval $action \$$(toupper ${option%s})_LIST
1256     elif is_in $option $CMDLINE_SELECT; then
1257         $action $option
1258     else
1259         die_unknown $opt
1260     fi
1261     ;;
1262     --list-*)
1263         NAME="${opt#--list-}"
1264         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1265         NAME=${NAME%s}
1266         eval show_list $NAME \$$(toupper $NAME)_LIST
1267     ;;
1268     --help|-h) show_help
1269     ;;
1270     *)
1271     optname="${opt%%=*}"
1272     optname="${optname#--}"
1273     optname=$(echo "$optname" | sed 's/-/_/g')
1274     is_in $optname $CMDLINE_SET || die_unknown $opt
1275     eval $optname='$optval'
1276     ;;
1277     esac
1278 done
1279
1280 disabled logging && logfile=/dev/null
1281
1282 echo "# $0 $@" > $logfile
1283 set >> $logfile
1284
1285 test -n "$cross_prefix" && enable cross_compile
1286
1287 ar="${cross_prefix}${ar}"
1288 cc_default="${cross_prefix}${cc_default}"
1289 nm_default="${cross_prefix}${nm_default}"
1290 ranlib="${cross_prefix}${ranlib}"
1291 strip="${cross_prefix}${strip}"
1292
1293 set_default cc nm
1294 enabled cross_compile || host_cc_default=$cc
1295 set_default host_cc
1296
1297 # set temporary file name
1298 : ${TMPDIR:=$TEMPDIR}
1299 : ${TMPDIR:=$TMP}
1300 : ${TMPDIR:=/tmp}
1301
1302 TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1303 TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1304 TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1305 TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1306 TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1307 TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1308
1309 check_cflags -std=c99
1310
1311 case "$arch" in
1312     i386|i486|i586|i686|i86pc|BePC)
1313         arch="x86"
1314         subarch="x86_32"
1315         enable fast_unaligned
1316     ;;
1317     x86_64|amd64)
1318         arch="x86"
1319         subarch="x86_32"
1320         enable cmov
1321         enable fast_cmov
1322         enable fast_unaligned
1323         check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1324         int test[sizeof(char*) - 7];
1325 EOF
1326     ;;
1327     arm|armv[4567]*l)
1328         arch="arm"
1329     ;;
1330     alpha)
1331         arch="alpha"
1332         enable fast_64bit
1333         check_cflags -mieee
1334     ;;
1335     "Power Macintosh"|ppc|powerpc)
1336         arch="ppc"
1337         enable fast_unaligned
1338     ;;
1339     ppc64)
1340         arch="ppc"
1341         enable fast_64bit
1342         enable fast_unaligned
1343     ;;
1344     mips|mipsel|IP*)
1345         arch="mips"
1346     ;;
1347     mips64)
1348         arch="mips"
1349         enable fast_64bit
1350     ;;
1351     sun4u|sparc64)
1352         arch="sparc"
1353         subarch="sparc64"
1354         enable fast_64bit
1355     ;;
1356     sparc)
1357         arch="sparc"
1358     ;;
1359     sh4|sh)
1360         arch="sh4"
1361     ;;
1362     parisc|hppa)
1363         arch="parisc"
1364     ;;
1365     parisc64|hppa64)
1366         arch="parisc"
1367         enable fast_64bit
1368     ;;
1369     s390|s390x)
1370         arch="s390"
1371     ;;
1372     m68k)
1373         arch="m68k"
1374     ;;
1375     ia64)
1376         arch="ia64"
1377         enable fast_64bit
1378     ;;
1379     bfin)
1380         arch="bfin"
1381     ;;
1382     *)
1383         arch="unknown"
1384     ;;
1385 esac
1386
1387 enable $arch $subarch
1388
1389 # OS specific
1390 case $target_os in
1391     beos|haiku|zeta)
1392         prefix_default="$HOME/config"
1393         # helps building libavcodec
1394         add_cflags -DPIC -fomit-frame-pointer
1395         # 3 gcc releases known for BeOS, each with ugly bugs
1396         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1397         case "$gcc_version" in
1398           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1399             disable mmx
1400             ;;
1401           *20010315*) echo "BeBits gcc"
1402             add_cflags -fno-expensive-optimizations
1403             ;;
1404         esac
1405         SHFLAGS=-nostart
1406         # enable BeOS things
1407         enable audio_beos
1408         # no need for libm, but the inet stuff
1409         # Check for BONE
1410         # XXX: actually should check for NOT net_server
1411         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1412             network_extralibs="-lbind -lsocket"
1413         else
1414             enable beos_netserver
1415             network_extralibs="-lnet"
1416         fi ;;
1417     sunos)
1418         FFSERVERLDFLAGS=""
1419         SHFLAGS='-shared -Wl,-h,$$(@F)'
1420         network_extralibs="-lsocket -lnsl"
1421         add_cflags -D__EXTENSIONS__
1422         ;;
1423     netbsd)
1424         oss_demuxer_extralibs="-lossaudio"
1425         oss_muxer_extralibs="-lossaudio"
1426         ;;
1427     openbsd)
1428         disable need_memalign
1429         LIBOBJFLAGS='$(PIC)'
1430         SHFLAGS='-shared'
1431         oss_demuxer_extralibs="-lossaudio"
1432         oss_muxer_extralibs="-lossaudio"
1433         ;;
1434     freebsd)
1435         disable need_memalign
1436         ;;
1437     bsd/os)
1438         osextralibs="-lpoll -lgnugetopt"
1439         strip="strip -d"
1440         ;;
1441     darwin)
1442         disable need_memalign
1443         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1444         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1445         strip="strip -x"
1446         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1447         SLIBSUF=".dylib"
1448         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1449         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1450         FFSERVERLDFLAGS=-Wl,-bind_at_load
1451         objformat="macho"
1452         enabled x86_64 && objformat="macho64"
1453         ;;
1454     mingw32*)
1455         target_os=mingw32
1456         LIBTARGET=i386
1457         if enabled x86_64; then
1458             disable need_memalign
1459             LIBTARGET=x64
1460         fi
1461         shlibdir_default="$bindir_default"
1462         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1463         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1464         if enabled swscale; then
1465             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1466             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1467         fi
1468         disable ffserver
1469         SLIBPREF=""
1470         SLIBSUF=".dll"
1471         EXESUF=".exe"
1472         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1473         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1474         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1475         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1476             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1477         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1478         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1479         objformat="win32"
1480         enable dos_paths
1481         check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1482             die "ERROR: MinGW runtime version must be >= 3.15."
1483         enabled_any avisynth vfwcap_demuxer &&
1484             { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1485               die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1486         ;;
1487     cygwin*)
1488         target_os=cygwin
1489         shlibdir_default="$bindir_default"
1490         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1491         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1492         if enabled swscale; then
1493             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1494             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1495         fi
1496         EXESUF=".exe"
1497         SLIBPREF="cyg"
1498         SLIBSUF=".dll"
1499         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1500         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1501         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1502         objformat="win32"
1503         enable dos_paths
1504         ;;
1505     *-dos|freedos|opendos)
1506         disable ffplay ffserver vhook
1507         disable $INDEV_LIST $OUTDEV_LIST
1508         network_extralibs="-lsocket"
1509         EXESUF=".exe"
1510         objformat="coff"
1511         enable dos_paths
1512         ;;
1513     linux)
1514         enable dv1394
1515         ;;
1516     irix*)
1517         target_os=irix
1518         ranlib="echo ignoring ranlib"
1519         ;;
1520     os/2*)
1521         strip="lxlite"
1522         ln_s="cp -f"
1523         EXESUF=".exe"
1524         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1525         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1526         FFSERVERLDFLAGS=""
1527         LIBSUF="_s.a"
1528         SLIBPREF=""
1529         SLIBSUF=".dll"
1530         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1531         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1532         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1533           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1534           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1535           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1536           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1537           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1538         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1539           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1540         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1541         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1542         disable vhook
1543         enable dos_paths
1544         ;;
1545     interix)
1546         disable vhook
1547         ;;
1548
1549     *)
1550         target_os="${target_os}-UNKNOWN"
1551         ;;
1552 esac
1553
1554 set_default $PATHS_LIST
1555
1556 add_extralibs $osextralibs
1557
1558 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1559 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1560
1561 # we need to build at least one lib type
1562 if ! enabled_any static shared; then
1563     cat <<EOF
1564 At least one library type must be built.
1565 Specify --enable-static to build the static libraries or --enable-shared to
1566 build the shared libraries as well. To only build the shared libraries specify
1567 --disable-static in addition to --enable-shared.
1568 EOF
1569     exit 1;
1570 fi
1571
1572 disabled static && LIBNAME=""
1573
1574 if enabled_any libfaad libfaadbin ; then
1575     if check_header faad.h; then
1576         check_cc <<EOF
1577 #include <faad.h>
1578 #ifndef FAAD2_VERSION
1579 ok faad1
1580 #endif
1581 int main(void) { return 0; }
1582 EOF
1583         test $? = 0 && enable libfaad2
1584     else
1585         die "FAAD test failed."
1586     fi
1587 fi
1588
1589
1590 if ! enabled gpl; then
1591     die_gpl_disabled(){
1592         name=$1
1593         shift
1594         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1595     }
1596     die_gpl_disabled "The Postprocessing code" postproc
1597     die_gpl_disabled "libx264"                 libx264
1598     die_gpl_disabled "libxvidcore"             libxvid
1599     die_gpl_disabled "FAAD2"                   libfaad2
1600     die_gpl_disabled "The X11 grabber"         x11grab
1601     die_gpl_disabled "The software scaler"     swscale
1602 fi
1603
1604 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1605     die "libamr is nonfree and --enable-nonfree is not specified."
1606 fi
1607
1608 check_deps $ARCH_EXT_LIST
1609
1610 test -z "$need_memalign" && need_memalign="$mmx"
1611
1612 #Darwin CC versions
1613 if test $target_os = darwin; then
1614     if $cc -v 2>&1 | grep -q xlc; then
1615         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1616     else
1617         add_cflags -pipe
1618         check_cflags -force_cpusubtype_ALL
1619         check_cflags -Wno-sign-compare
1620         enabled shared || check_cflags -mdynamic-no-pic
1621     fi
1622 fi
1623
1624 disabled optimizations || check_cflags -fomit-frame-pointer
1625
1626 # Add processor-specific flags
1627 if test $cpu != "generic"; then
1628     warn_altivec(){
1629         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1630     }
1631     case $cpu in
1632         601|ppc601|PowerPC601)
1633             add_cflags -mcpu=601
1634             warn_altivec enabled PPC601
1635         ;;
1636         603*|ppc603*|PowerPC603*)
1637             add_cflags -mcpu=603
1638             warn_altivec enabled PPC603
1639         ;;
1640         604*|ppc604*|PowerPC604*)
1641             add_cflags -mcpu=604
1642             warn_altivec enabled PPC604
1643         ;;
1644         G3|g3|75*|ppc75*|PowerPC75*)
1645             add_cflags -mcpu=750 -mpowerpc-gfxopt
1646             warn_altivec enabled PPC75x
1647         ;;
1648         G4|g4|745*|ppc745*|PowerPC745*)
1649             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1650             warn_altivec disabled PPC745x
1651         ;;
1652         74*|ppc74*|PowerPC74*)
1653             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1654             warn_altivec disabled PPC74xx
1655         ;;
1656         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1657             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1658             warn_altivec disabled PPC970
1659             enable ppc64
1660         ;;
1661         Cell|CELL|cell)
1662             add_cflags -mcpu=cell
1663             warn_altivec disabled Cell
1664             enable ppc64
1665         ;;
1666         # targets that do NOT support conditional mov (cmov)
1667         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1668             add_cflags -march=$cpu
1669             disable cmov
1670         ;;
1671         # targets that do support conditional mov (cmov)
1672         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1673             add_cflags -march=$cpu
1674             enable cmov
1675             enable fast_cmov
1676         ;;
1677         # targets that do support conditional mov but on which it's slow
1678         pentium4|pentium4m|prescott|nocona)
1679             add_cflags -march=$cpu
1680             enable cmov
1681             disable fast_cmov
1682         ;;
1683         sparc64)
1684             add_cflags -mcpu=v9
1685         ;;
1686         arm11*|cortex*)
1687             add_cflags -mcpu=$cpu
1688             enable fast_unaligned
1689         ;;
1690         armv*)
1691             add_cflags -march=$cpu
1692         ;;
1693         arm*)
1694             add_cflags -mcpu=$cpu
1695         ;;
1696         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1697             add_cflags -mcpu=$cpu
1698         ;;
1699         *)
1700             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1701         ;;
1702     esac
1703 fi
1704
1705 # make sure we can execute files in $TMPDIR
1706 cat > $TMPSH 2>> $logfile <<EOF
1707 #! /bin/sh
1708 EOF
1709 chmod +x $TMPSH >> $logfile 2>&1
1710 if ! $TMPSH >> $logfile 2>&1; then
1711     cat <<EOF
1712 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1713 variable to another directory and make sure that it is not mounted noexec.
1714 EOF
1715     die "Sanity test failed."
1716 fi
1717 rm $TMPSH
1718
1719 # compiler sanity check
1720 check_exec <<EOF
1721 int main(void){ return 0; }
1722 EOF
1723 if test "$?" != 0; then
1724     echo "$cc is unable to create an executable file."
1725     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1726         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1727         echo "Only do this if you know what cross compiling means."
1728     fi
1729     die "C compiler test failed."
1730 fi
1731
1732 check_cc <<EOF || die "Symbol mangling check failed."
1733 int ff_extern;
1734 EOF
1735 sym=$($nm -P -g $TMPO | grep ff_extern)
1736 extern_prefix=${sym%%ff_extern*}
1737
1738 check_asm inline_asm '""'
1739
1740 if enabled x86; then
1741     # check whether EBP is available on x86
1742     # As 'i' is stored on the stack, this program will crash
1743     # if the base pointer is used to access it because the
1744     # base pointer is cleared in the inline assembly code.
1745     check_exec_crash <<EOF && enable ebp_available
1746     volatile int i=0;
1747     __asm__ volatile (
1748         "xorl %%ebp, %%ebp"
1749     ::: "%ebp");
1750     return i;
1751 EOF
1752
1753     # check wether EBX is available on x86
1754     check_asm ebx_available '"":::"%ebx"'
1755
1756     # check whether binutils is new enough to compile SSSE3/MMX2
1757     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1758     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1759
1760     check_asm bswap '"bswap %%eax" ::: "%eax"'
1761
1762     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1763     enabled     x86_64        && append YASMFLAGS "-m amd64"
1764     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1765     case "$objformat" in
1766         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1767         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1768         *)                    append YASMFLAGS "-DPREFIX"  ;;
1769     esac
1770     check_yasm "pabsw xmm0, xmm0" && enable yasm
1771 fi
1772
1773 # check for assembler specific support
1774
1775 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
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