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