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