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