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