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