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