]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - configure
enable the native AC-3 decoder
[frescor/ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000, 2001, 2002 Fabrice Bellard
6 # Copyright (c) 2005-2006 Diego Biurrun
7 # Copyright (c) 2005-2006 Mans Rullgard
8 #
9
10 # make sure we are running under a compatible shell
11 # try to make this part work with most shells
12
13 try_exec(){
14     echo "Trying shell $1"
15     type "$1" >/dev/null 2>&1 && exec "$@"
16 }
17
18 unset foo
19 (: ${foo%%bar}) 2>/dev/null
20 E1="$?"
21
22 (: ${foo?}) 2>/dev/null
23 E2="$?"
24
25 if test "$E1" != 0 || test "$E2" = 0; then
26     echo "Broken shell detected.  Trying alternatives."
27     export FF_CONF_EXEC
28     if test "0$FF_CONF_EXEC" -lt 1; then
29         FF_CONF_EXEC=1
30         try_exec bash "$0" "$@"
31     fi
32     if test "0$FF_CONF_EXEC" -lt 2; then
33         FF_CONF_EXEC=2
34         try_exec ksh "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 3; then
37         FF_CONF_EXEC=3
38         try_exec /usr/xpg4/bin/sh "$0" "$@"
39     fi
40     echo "No compatible shell script interpreter found."
41     echo "This configure script requires a POSIX-compatible shell"
42     echo "such as bash or ksh."
43     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
44     echo "Instead, install a working POSIX-compatible shell."
45     echo "Disabling this configure test will create a broken FFmpeg."
46     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
47         echo "This bash version ($BASH_VERSION) is broken on your platform."
48         echo "Upgrade to a later version if available."
49     fi
50     exit 1
51 fi
52
53 show_help(){
54   echo "Usage: configure [options]"
55   echo "Options: [defaults in brackets after descriptions]"
56   echo
57   echo "Standard options:"
58   echo "  --help                   print this message"
59   echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
60   echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
61   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
62   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
63   echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
64   echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
65   echo "  --enable-static          build static libraries [default=yes]"
66   echo "  --disable-static         do not build static libraries [default=no]"
67   echo "  --enable-shared          build shared libraries [default=no]"
68   echo "  --disable-shared         do not build shared libraries [default=yes]"
69   echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
70   echo "                           and ffmpeg will be under GPL [default=no]"
71   echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
72   echo "  --enable-swscaler        software scaler support [default=no]"
73   echo "  --enable-beosthreads     use BeOS threads [default=no]"
74   echo "  --enable-pthreads        use pthreads [default=no]"
75   echo "  --enable-w32threads      use Win32 threads [default=no]"
76   echo "  --enable-x11grab         enable X11 grabbing [default=no]"
77   echo
78   echo "External library support:"
79   echo "  --enable-sunmlib         use Sun medialib [default=no]"
80   echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
81   echo "                           and libraw1394 [default=no]"
82   echo "  --enable-liba52          enable GPLed liba52 support [default=no]"
83   echo "  --enable-liba52bin       open liba52.so.0 at runtime [default=no]"
84   echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
85   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
86   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
87   echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
88   echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
89   echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
90   echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
91   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
92   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
93   echo "                           native demuxer exists [default=no]"
94   echo "  --enable-libogg          enable Ogg muxing via libogg [default=no]"
95   echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
96   echo "  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,"
97   echo "                           native implementations exist [default=no]"
98   echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
99   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
100   echo "                           native MPEG-4/Xvid encoder exists [default=no]"
101   echo ""
102   echo "Advanced options (experts only):"
103   echo "  --source-path=PATH       path to source code [$source_path]"
104   echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
105   echo "  --cross-compile          assume a cross-compiler is used"
106   echo "  --target-os=OS           compiler targets OS [$targetos]"
107   echo "  --cc=CC                  use C compiler CC [$cc]"
108   echo "  --make=MAKE              use specified make [$make]"
109   echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
110   echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
111   echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
112   echo "  --build-suffix=SUFFIX    suffix for application specific build []"
113   echo "  --arch=ARCH              select architecture  [$arch]"
114   echo "  --cpu=CPU                selects the minimum cpu required (affects"
115   echo "                           instruction selection, may crash on older CPUs)"
116   echo "  --enable-powerpc-perf    enable performance report on PPC"
117   echo "                           (requires enabling PMC)"
118   echo "  --disable-mmx            disable MMX usage"
119   echo "  --disable-armv5te        disable armv5te usage"
120   echo "  --disable-armv6          disable armv6 usage"
121   echo "  --disable-iwmmxt         disable iwmmxt usage"
122   echo "  --disable-altivec        disable AltiVec usage"
123   echo "  --disable-audio-oss      disable OSS audio support [default=no]"
124   echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
125   echo "  --disable-v4l            disable video4linux grabbing [default=no]"
126   echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
127   echo "  --disable-bktr           disable bktr video grabbing [default=no]"
128   echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
129   echo "  --disable-network        disable network support [default=no]"
130   echo "  --disable-ipv6           disable ipv6 support [default=no]"
131   echo "  --disable-zlib           disable zlib [default=no]"
132   echo "  --disable-vhook          disable video hooking support"
133   echo "  --disable-debug          disable debugging symbols"
134   echo "  --disable-mpegaudio-hp   faster (but less accurate)"
135   echo "                           MPEG audio decoding [default=no]"
136   echo "  --enable-gray            enable full grayscale support (slower color)"
137   echo "  --disable-ffmpeg         disable ffmpeg build"
138   echo "  --disable-ffserver       disable ffserver build"
139   echo "  --disable-ffplay         disable ffplay build"
140   echo "  --enable-small           optimize for size instead of speed"
141   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
142   echo "  --disable-encoder=NAME   disables encoder NAME"
143   echo "  --enable-encoder=NAME    enables encoder NAME"
144   echo "  --disable-decoder=NAME   disables decoder NAME"
145   echo "  --enable-decoder=NAME    enables decoder NAME"
146   echo "  --disable-encoders       disables all encoders"
147   echo "  --disable-decoders       disables all decoders"
148   echo "  --disable-muxer=NAME     disables muxer NAME"
149   echo "  --enable-muxer=NAME      enables muxer NAME"
150   echo "  --disable-muxers         disables all muxers"
151   echo "  --disable-demuxer=NAME   disables demuxer NAME"
152   echo "  --enable-demuxer=NAME    enables demuxer NAME"
153   echo "  --disable-demuxers       disables all demuxers"
154   echo "  --enable-parser=NAME     enables parser NAME"
155   echo "  --disable-parser=NAME    disables parser NAME"
156   echo "  --disable-parsers        disables all parsers"
157   echo "  --enable-bsf=NAME        enables bitstream filter NAME"
158   echo "  --disable-bsf=NAME       disables bitstream filter NAME"
159   echo "  --disable-bsfs           disables all bitstream filters"
160   echo "  --enable-protocol=NAME   enables protocol NAME"
161   echo "  --disable-protocol=NAME  disables protocol NAME"
162   echo "  --disable-protocols      disables all protocols"
163   echo "  --list-decoders          show all available decoders"
164   echo "  --list-encoders          show all available encoders"
165   echo "  --list-muxers            show all available muxers"
166   echo "  --list-demuxers          show all available demuxers"
167   echo "  --list-parsers           show all available parsers"
168   echo "  --list-protocols         show all available protocols"
169   echo "  --list-bsfs              show all available bitstream filters"
170   echo
171   echo "Developer options (useful when working on FFmpeg itself):"
172   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
173   echo "  --disable-opts           disable compiler optimizations"
174   echo "  --enable-extra-warnings  enable more compiler warnings"
175   echo "  --disable-strip          disable stripping of executables and shared libraries"
176   echo ""
177   echo "NOTE: Object files are built at the place where configure is launched."
178   exit 1
179 }
180
181 log(){
182     echo "$@" >>$logfile
183 }
184
185 log_file(){
186     log BEGIN $1
187     cat -n $1 >>$logfile
188     log END $1
189 }
190
191 echolog(){
192     log "$@"
193     echo "$@"
194 }
195
196 die(){
197     echolog "$@"
198     cat <<EOF
199 If you think configure made a mistake, make sure you are using the latest
200 version from SVN.  If the latest version fails, report the problem to the
201 ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
202 EOF
203     if enabled logging; then
204         cat <<EOF
205 Include the log file "$logfile" produced by configure as this will help
206 solving the problem.
207 EOF
208     else
209 cat <<EOF
210 Rerun configure with logging enabled (do not use --log=no), and include the
211 log this produces with your report.
212 EOF
213     fi
214     rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
215     exit 1
216 }
217
218 # "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
219 toupper(){
220     echo "$@" | tr '[a-z]' '[A-Z]'
221 }
222
223 tolower(){
224     echo "$@" | tr '[A-Z]' '[a-z]'
225 }
226
227 set_all(){
228     value=$1
229     shift
230     for var in $*; do
231         eval $var=$value
232     done
233 }
234
235 pushvar(){
236     for var in $*; do
237         eval level=\${${var}_level:=0}
238         eval ${var}_${level}="\$$var"
239         eval ${var}_level=$(($level+1))
240     done
241 }
242
243 popvar(){
244     for var in $*; do
245         eval level=\${${var}_level:-0}
246         test $level = 0 && continue
247         eval level=$(($level-1))
248         eval $var="\${${var}_${level}}"
249         eval ${var}_level=$level
250         eval unset ${var}_${level}
251     done
252 }
253
254 enable(){
255     set_all yes $*
256 }
257
258 disable(){
259     set_all no $*
260 }
261
262 enabled(){
263     eval test "x\$$1" = "xyes"
264 }
265
266 disabled(){
267     eval test "x\$$1" = "xno"
268 }
269
270 enabled_all(){
271     for opt; do
272         enabled $opt || return 1
273     done
274 }
275
276 disabled_all(){
277     for opt; do
278         disabled $opt || return 1
279     done
280 }
281
282 enabled_any(){
283     for opt; do
284         enabled $opt && return 0
285     done
286 }
287
288 disabled_any(){
289     for opt; do
290         disabled $opt && return 0
291     done
292 }
293
294 check_deps(){
295     for cfg; do
296         enabled ${cfg}_checking && die "Circular dependency for $cfg."
297         disabled ${cfg}_checking && continue
298         enable ${cfg}_checking
299
300         eval dep_all="\$${cfg}_deps"
301         eval dep_any="\$${cfg}_deps_any"
302
303         pushvar cfg dep_all dep_any
304         check_deps $dep_all $dep_any
305         popvar cfg dep_all dep_any
306
307         enabled_all $dep_all || disable $cfg
308         enabled_any $dep_any || disable $cfg
309
310         disable ${cfg}_checking
311     done
312 }
313
314 print_config(){
315     pfx=$1
316     header=$2
317     makefile=$3
318     shift 3
319     for cfg; do
320         ucname="`toupper $cfg`"
321         if enabled $cfg; then
322             echo "#define ${pfx}${ucname} 1" >> $header
323             echo "#define ENABLE_${ucname} 1" >> $header
324             echo "${pfx}${ucname}=yes" >> $makefile
325         else
326             echo "#define ENABLE_${ucname} 0" >> $header
327         fi
328     done
329 }
330
331 flags_saved(){
332     (: ${SAVE_CFLAGS?}) 2>/dev/null
333 }
334
335 save_flags(){
336     flags_saved && return
337     SAVE_CFLAGS="$CFLAGS"
338     SAVE_LDFLAGS="$LDFLAGS"
339     SAVE_extralibs="$extralibs"
340 }
341
342 restore_flags(){
343     flags_saved || return
344     CFLAGS="$SAVE_CFLAGS"
345     LDFLAGS="$SAVE_LDFLAGS"
346     extralibs="$SAVE_extralibs"
347     unset SAVE_CFLAGS
348     unset SAVE_LDFLAGS
349     unset SAVE_extralibs
350 }
351
352 temp_cflags(){
353     save_flags
354     CFLAGS="$CFLAGS $*"
355 }
356
357 temp_ldflags(){
358     save_flags
359     LDFLAGS="$LDFLAGS $*"
360 }
361
362 temp_extralibs(){
363     save_flags
364     extralibs="$extralibs $*"
365 }
366
367 append(){
368     var=$1
369     shift
370     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
371     eval "$var=\"\$$var $*\""
372 }
373
374 add_cflags(){
375     append CFLAGS "$@"
376 }
377
378 add_ldflags(){
379     append LDFLAGS "$@"
380 }
381
382 add_extralibs(){
383     append extralibs "$@"
384 }
385
386 check_cmd(){
387     log "$@"
388     "$@" >>$logfile 2>&1
389 }
390
391 check_cc(){
392     log check_cc "$@"
393     cat >$TMPC
394     log_file $TMPC
395     check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
396 }
397
398 check_cpp(){
399     log check_cpp "$@"
400     cat >$TMPC
401     log_file $TMPC
402     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
403 }
404
405 check_ld(){
406     log check_ld "$@"
407     check_cc || return
408     flags=''
409     libs=''
410     for f; do
411         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
412     done
413     check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
414 }
415
416 check_cflags(){
417     log check_cflags "$@"
418     check_cc "$@" <<EOF && add_cflags "$@"
419 int x;
420 EOF
421 }
422
423 check_ldflags(){
424     log check_ldflags "$@"
425     check_ld "$@" <<EOF && add_ldflags "$@"
426 int main(){
427     return 0;
428 }
429 EOF
430 }
431
432 check_header(){
433     log check_header "$@"
434     header=$1
435     shift
436     var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
437     disable $var
438     check_cpp "$@" <<EOF && enable $var
439 #include <$header>
440 int x;
441 EOF
442 }
443
444 check_func(){
445     log check_func "$@"
446     func=$1
447     shift
448     disable $func
449     check_ld "$@" <<EOF && enable $func
450 extern int $func();
451 int main(){
452     $func();
453 }
454 EOF
455 }
456
457 check_func2(){
458     log check_func2 "$@"
459     headers=$1
460     func=$2
461     shift 2
462     disable $func
463     incs=""
464     for hdr in $headers; do
465         incs="$incs
466 #include <$hdr>"
467     done
468     check_ld "$@" <<EOF && enable $func
469 $incs
470 int main(){
471     (void) $func;
472     return 0;
473 }
474 EOF
475 }
476
477 check_lib(){
478     log check_lib "$@"
479     header="$1"
480     func="$2"
481     shift 2
482     temp_extralibs "$@"
483     check_header $header && check_func $func && add_extralibs "$@"
484     err=$?
485     restore_flags
486     return $err
487 }
488
489 check_lib2(){
490     log check_lib2 "$@"
491     headers="$1"
492     func="$2"
493     shift 2
494     temp_extralibs "$@"
495     check_func2 "$headers" $func && add_extralibs "$@"
496     err=$?
497     restore_flags
498     return $err
499 }
500
501 check_exec(){
502     check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
503 }
504
505 check_exec_crash(){
506     code=`cat`
507
508     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
509     # are safe but may not be available everywhere.  Thus we use
510     # raise(SIGTERM) instead.  The check is run in a subshell so we
511     # can redirect the "Terminated" message from the shell.  SIGBUS
512     # is not defined by standard C so it is used conditionally.
513
514     (check_exec "$@") >>$logfile 2>&1 <<EOF
515 #include <signal.h>
516 static void sighandler(int sig){
517     raise(SIGTERM);
518 }
519 int main(){
520     signal(SIGILL, sighandler);
521     signal(SIGFPE, sighandler);
522     signal(SIGSEGV, sighandler);
523 #ifdef SIGBUS
524     signal(SIGBUS, sighandler);
525 #endif
526     { $code }
527 }
528 EOF
529 }
530
531 require(){
532     name="$1"
533     header="$2"
534     func="$3"
535     shift 3
536     check_lib $header $func "$@" || die "ERROR: $name not found"
537 }
538
539 require2(){
540     name="$1"
541     headers="$2"
542     func="$3"
543     shift 3
544     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
545 }
546
547 check_foo_config(){
548     cfg=$1
549     pkg=$2
550     header=$3
551     func=$4
552     shift 4
553     disable $cfg
554     check_cmd ${pkg}-config --version
555     err=$?
556     if test "$err" = 0; then
557         temp_cflags `${pkg}-config --cflags`
558         temp_extralibs `${pkg}-config --libs`
559         check_lib "$@" $header $func && enable $cfg
560     fi
561     return $err
562 }
563
564 apply(){
565     file=$1
566     shift
567     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
568 }
569
570 CONFIG_LIST='
571     audio_beos
572     audio_oss
573     avisynth
574     beos_netserver
575     bktr
576     bsfs
577     dc1394
578     decoders
579     demuxers
580     dv1394
581     encoders
582     ffmpeg
583     ffplay
584     ffserver
585     gpl
586     gprof
587     gray
588     ipv6
589     liba52
590     liba52bin
591     libamr
592     libamr_nb
593     libamr_wb
594     libfaac
595     libfaad
596     libfaadbin
597     libgsm
598     libmp3lame
599     libnut
600     libogg
601     libtheora
602     libvorbis
603     libx264
604     libxvid
605     memalign_hack
606     mpegaudio_hp
607     muxers
608     network
609     parsers
610     powerpc_perf
611     pp
612     protocols
613     small
614     swscaler
615     vhook
616     v4l
617     v4l2
618     x11grab
619     zlib
620 '
621
622 THREADS_LIST='
623     beosthreads
624     pthreads
625     w32threads
626 '
627
628 ARCH_LIST='
629     alpha
630     armv4l
631     bfin
632     ia64
633     m68k
634     mips
635     parisc
636     powerpc
637     s390
638     sh4
639     sparc
640     sparc64
641     x86
642     x86_32
643     x86_64
644 '
645
646 ARCH_EXT_LIST='
647     altivec
648     armv5te
649     armv6
650     iwmmxt
651     mmi
652     mmx
653     ssse3
654 '
655
656 HAVE_LIST="
657     $ARCH_EXT_LIST
658     $THREADS_LIST
659     altivec_h
660     arpa_inet_h
661     byteswap_h
662     cmov
663     conio_h
664     dcbzl
665     dev_bktr_ioctl_bt848_h
666     dev_bktr_ioctl_meteor_h
667     dev_ic_bt8xx_h
668     dev_video_meteor_ioctl_meteor_h
669     dev_video_bktr_ioctl_bt848_h
670     dlfcn_h
671     dlopen
672     ebp_available
673     ebx_available
674     fast_64bit
675     fast_cmov
676     fast_unaligned
677     fork
678     freetype2
679     GetProcessTimes
680     getrusage
681     imlib2
682     inet_aton
683     lrintf
684     machine_ioctl_bt848_h
685     machine_ioctl_meteor_h
686     malloc_h
687     memalign
688     mkstemp
689     mlib
690     ppc64
691     sdl
692     sdl_video_size
693     soundcard_h
694     sys_poll_h
695     sys_soundcard_h
696     termios_h
697     threads
698 "
699
700 CMDLINE_SELECT="
701     $ARCH_EXT_LIST
702     $CONFIG_LIST
703     $THREADS_LIST
704     debug
705     extra_warnings
706     shared
707     static
708 "
709
710 # code dependency declarations
711
712 # architecture extensions
713 altivec_deps="powerpc"
714 armv5te_deps="armv4l"
715 armv6_deps="armv4l"
716 iwmmxt_deps="armv4l"
717 mmi_deps="mips"
718 mmx_deps="x86"
719 ssse3_deps="x86"
720
721 # decoders / encoders
722 ac3_decoder_deps="gpl"
723 dxa_decoder_deps="zlib"
724 flashsv_decoder_deps="zlib"
725 flashsv_encoder_deps="zlib"
726 flv_decoder_deps="h263_decoder"
727 h263_decoder_deps="h263_parser mpeg4video_parser"
728 h263i_decoder_deps="h263_decoder"
729 h264_decoder_deps="h264_parser"
730 mpeg_xvmc_decoder_deps="xvmc"
731 mpeg4_decoder_deps="h263_decoder"
732 msmpeg4v1_decoder_deps="h263_decoder"
733 msmpeg4v2_decoder_deps="h263_decoder"
734 msmpeg4v3_decoder_deps="h263_decoder"
735 png_decoder_deps="zlib"
736 png_encoder_deps="zlib"
737 svq3_decoder_deps="h264_parser"
738 vc1_decoder_deps="h263_decoder"
739 wmv1_decoder_deps="h263_decoder"
740 wmv2_decoder_deps="h263_decoder"
741 wmv3_decoder_deps="h263_decoder"
742 zmbv_decoder_deps="zlib"
743 zmbv_encoder_deps="zlib"
744
745 # external libraries
746 mpeg4aac_decoder_deps="libfaad"
747 liba52_decoder_deps="liba52"
748 libamr_nb_decoder_deps="libamr_nb"
749 libamr_nb_encoder_deps="libamr_nb"
750 libamr_wb_decoder_deps="libamr_wb"
751 libamr_wb_encoder_deps="libamr_wb"
752 libfaac_encoder_deps="libfaac"
753 libfaad_decoder_deps="libfaad"
754 libgsm_decoder_deps="libgsm"
755 libgsm_encoder_deps="libgsm"
756 libgsm_ms_decoder_deps="libgsm"
757 libgsm_ms_encoder_deps="libgsm"
758 libmp3lame_encoder_deps="libmp3lame"
759 libtheora_encoder_deps="libtheora"
760 libvorbis_decoder_deps="libvorbis"
761 libvorbis_encoder_deps="libvorbis"
762 libx264_encoder_deps="libx264"
763 libxvid_encoder_deps="libxvid"
764
765 # demuxers / muxers
766 ac3_demuxer_deps="ac3_parser"
767 audio_demuxer_deps_any="audio_oss audio_beos"
768 audio_muxer_deps_any="audio_oss audio_beos"
769 dc1394_demuxer_deps="dc1394"
770 dv1394_demuxer_deps="dv1394"
771 libnut_demuxer_deps="libnut"
772 libnut_muxer_deps="libnut"
773 mp3_demuxer_deps="mpegaudio_parser"
774 ogg_muxer_deps="libogg"
775 redir_demuxer_deps="network"
776 rtp_muxer_deps="network mpegts_demuxer"
777 rtsp_demuxer_deps="rtp_protocol rtp_muxer"
778 sdp_demuxer_deps="rtsp_demuxer"
779 v4l2_demuxer_deps="v4l2"
780 video_grab_bktr_demuxer_deps="bktr"
781 video_grab_v4l_demuxer_deps="v4l"
782 x11_grab_device_demuxer_deps="x11grab"
783
784 # protocols
785 http_protocol_deps="network"
786 rtp_protocol_deps="udp_protocol"
787 tcp_protocol_deps="network"
788 udp_protocol_deps="network"
789
790 # programs
791 ffplay_deps="sdl"
792 ffserver_deps="muxers rtp_protocol"
793
794
795 # set temporary file name
796 if test ! -z "$TMPDIR" ; then
797     TMPDIR1="${TMPDIR}"
798 elif test ! -z "$TEMPDIR" ; then
799     TMPDIR1="${TEMPDIR}"
800 else
801     TMPDIR1="/tmp"
802 fi
803
804 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
805 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
806 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
807 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
808 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
809
810 # default parameters
811
812 logging="yes"
813 logfile="config.err"
814
815 # installation paths
816 PREFIX="/usr/local"
817 libdir='$(PREFIX)/lib'
818 shlibdir="$libdir"
819 incdir='$(PREFIX)/include/ffmpeg'
820 mandir='$(PREFIX)/man'
821 bindir='$(PREFIX)/bin'
822
823 # toolchain
824 cc="gcc"
825 ar="ar"
826 ranlib="ranlib"
827 make="make"
828 strip="strip"
829 asmalign_pot="unknown"
830
831 # machine
832 arch=`uname -m`
833 cpu="generic"
834
835 # OS
836 targetos=$(tolower $(uname -s))
837
838 # non-library system interfaces
839 audio_oss="yes"
840 bktr="yes"
841 dv1394="yes"
842 v4l2="yes"
843 v4l="yes"
844
845 # libraries
846 zlib="yes"
847
848 # configurable options
849 debug="yes"
850 dostrip="yes"
851 ffmpeg="yes"
852 ffplay="yes"
853 ffserver="yes"
854 ipv6="yes"
855 static="yes"
856 mpegaudio_hp="yes"
857 network="yes"
858 optimize="yes"
859 protocols="yes"
860 vhook="default"
861
862 # build settings
863 SHFLAGS='-shared -Wl,-soname,$@'
864 VHOOKSHFLAGS='$(SHFLAGS)'
865 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
866 FFSERVERLDFLAGS=-Wl,-E
867 LDCONFIG="ldconfig"
868 LIBPREF="lib"
869 LIBSUF=".a"
870 LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
871 SLIBPREF="lib"
872 SLIBSUF=".so"
873 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
874 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
875 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
876 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIB)"'
877
878 # find source path
879 source_path="`dirname \"$0\"`"
880 source_path_used="yes"
881 if test -z "$source_path" -o "$source_path" = "." ; then
882     source_path="`pwd`"
883     source_path_used="no"
884 else
885     source_path="`cd \"$source_path\"; pwd`"
886     echo "$source_path" | grep -q '[[:blank:]]' &&
887       die "Out of tree builds are impossible with whitespace in source path."
888 fi
889
890 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
891     show_help
892 fi
893
894 FFMPEG_CONFIGURATION="$@"
895
896 ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
897 DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
898 PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
899 BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
900 MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
901 DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
902 PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
903
904 enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
905 enable $ARCH_EXT_LIST
906
907 die_unknown(){
908     echo "Unknown option \"$1\"."
909     echo "See $0 --help for available options."
910     exit 1
911 }
912
913 show_list() {
914     for part in $*; do
915         echo $part | sed 's/_[^_]*$//'
916     done | sort
917     exit 0
918 }
919
920 for opt do
921   optval="${opt#*=}"
922   case "$opt" in
923   --log)
924   ;;
925   --log=*) logging="$optval"
926   ;;
927   --prefix=*) PREFIX="$optval"
928   ;;
929   --libdir=*) libdir="$optval"
930   ;;
931   --shlibdir=*) shlibdir="$optval"
932   ;;
933   --incdir=*) incdir="$optval"
934   ;;
935   --mandir=*) mandir="$optval"
936   ;;
937   --source-path=*) source_path="$optval"
938   ;;
939   --cross-prefix=*) cross_prefix="$optval"
940   ;;
941   --cross-compile) cross_compile="yes"
942   ;;
943   --target-os=*) targetos="$optval"
944   ;;
945   --cc=*) cc="$optval"
946   ;;
947   --make=*) make="$optval"
948   ;;
949   --extra-cflags=*) add_cflags "$optval"
950   ;;
951   --extra-ldflags=*) add_ldflags "$optval"
952   ;;
953   --extra-libs=*) add_extralibs "$optval"
954   ;;
955   --build-suffix=*) BUILDSUF="$optval"
956   ;;
957   --arch=*) arch="$optval"
958   ;;
959   --cpu=*) cpu="$optval"
960   ;;
961   --disable-opts) optimize="no"
962   ;;
963   --enable-sunmlib) mlib="yes"
964   ;;
965   --disable-strip) dostrip="no"
966   ;;
967   --disable-encoders) disable $ENCODER_LIST
968   ;;
969   --disable-decoders) disable $DECODER_LIST
970   ;;
971   --disable-muxers) disable $MUXER_LIST
972   ;;
973   --disable-demuxers) disable $DEMUXER_LIST
974   ;;
975   --disable-parsers) disable $PARSER_LIST
976   ;;
977   --disable-bsfs) disable $BSF_LIST
978   ;;
979   --disable-protocols) disable $PROTOCOL_LIST
980   ;;
981   --enable-*=*|--disable-*=*)
982   eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
983   case "$thing" in
984       encoder|decoder|muxer|demuxer|parser|bsf|protocol) $action ${optval}_${thing} ;;
985       *) die_unknown "$opt" ;;
986   esac
987   ;;
988   --enable-?*|--disable-?*)
989   eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
990   echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
991   $action $option
992   ;;
993   --list-*)
994     NAME="${opt#--list-}"
995     NAME=$(toupper ${NAME%s})
996     eval show_list \$${NAME}_LIST
997   ;;
998   --help) show_help
999   ;;
1000   *)
1001   die_unknown $opt
1002   ;;
1003   esac
1004 done
1005
1006 case "$arch" in
1007   i386|i486|i586|i686|i86pc|BePC)
1008     arch="x86_32"
1009     enable fast_unaligned
1010   ;;
1011   x86_64|amd64)
1012     arch="x86_32"
1013     enable fast_unaligned
1014     canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1015     if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1016       if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1017         arch="x86_64"
1018         enable fast_64bit
1019       fi
1020     fi
1021   ;;
1022   # armv4l is a subset of armv[567]*l
1023   arm|armv[4567]*l)
1024     arch="armv4l"
1025   ;;
1026   alpha)
1027     arch="alpha"
1028     enable fast_64bit
1029   ;;
1030   "Power Macintosh"|ppc|powerpc)
1031     arch="powerpc"
1032   ;;
1033   ppc64)
1034     arch="powerpc"
1035     enable fast_64bit
1036   ;;
1037   mips|mipsel|IP*)
1038     arch="mips"
1039   ;;
1040   sun4u|sparc64)
1041     arch="sparc64"
1042     enable fast_64bit
1043   ;;
1044   sparc)
1045     arch="sparc"
1046   ;;
1047   sh4)
1048     arch="sh4"
1049   ;;
1050   parisc)
1051     arch="parisc"
1052   ;;
1053   parisc64)
1054     arch="parisc"
1055     enable fast_64bit
1056   ;;
1057   s390|s390x)
1058     arch="s390"
1059   ;;
1060   m68k)
1061     arch="m68k"
1062   ;;
1063   ia64)
1064     arch="ia64"
1065     enable fast_64bit
1066   ;;
1067   bfin)
1068     arch="bfin"
1069   ;;
1070   *)
1071     arch="unknown"
1072   ;;
1073 esac
1074
1075 enable $arch
1076 enabled_any x86_32 x86_64 && enable x86
1077 enabled     sparc64       && enable sparc
1078
1079 # OS specific
1080 osextralibs="-lm"
1081 case $targetos in
1082   beos|haiku|zeta)
1083     PREFIX="$HOME/config"
1084     # helps building libavcodec
1085     add_cflags "-DPIC -fomit-frame-pointer"
1086     # 3 gcc releases known for BeOS, each with ugly bugs
1087     gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1088     case "$gcc_version" in
1089       2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1090         mmx="no"
1091         ;;
1092       *20010315*) echo "BeBits gcc"
1093         add_cflags "-fno-expensive-optimizations"
1094         ;;
1095     esac
1096     LDCONFIG="echo ignoring ldconfig"
1097     SHFLAGS=-nostart
1098     # disable Linux things
1099     dv1394="no"
1100     # enable BeOS things
1101     disabled audio_beos || enable_audio_beos
1102     # no need for libm, but the inet stuff
1103     # Check for BONE
1104     # XXX: actually should check for NOT net_server
1105     if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1106         osextralibs="-lbind -lsocket"
1107     else
1108         beos_netserver="yes"
1109         osextralibs="-lnet"
1110     fi ;;
1111   sunos)
1112     dv1394="no"
1113     FFSERVERLDFLAGS=""
1114     SHFLAGS="-shared -Wl,-h,\$@"
1115     add_extralibs "-lsocket -lnsl"
1116     ;;
1117   netbsd)
1118     dv1394="no"
1119     add_extralibs "-lossaudio"
1120     ;;
1121   openbsd)
1122     dv1394="no"
1123     need_memalign="no"
1124     LIBOBJFLAGS="\$(PIC)"
1125     LDCONFIG="ldconfig -m \$(SHLIBDIR)"
1126     SHFLAGS='-shared'
1127     SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
1128     SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1129     SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1130     add_extralibs "-lossaudio"
1131     ;;
1132   freebsd)
1133     dv1394="no"
1134     need_memalign="no"
1135     add_cflags "-pthread"
1136     ;;
1137   gnu/kfreebsd)
1138     dv1394="no"
1139     add_cflags "-pthread"
1140     ;;
1141   bsd/os)
1142     dv1394="no"
1143     osextralibs="-lpoll -lgnugetopt -lm"
1144     strip="strip -d"
1145     ;;
1146   darwin)
1147     dv1394="no"
1148     need_memalign="no"
1149     SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(SHLIBDIR)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
1150     VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1151     osextralibs=""
1152     strip="strip -x"
1153     FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1154     SLIBSUF=".dylib"
1155     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
1156     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
1157     FFSERVERLDFLAGS=-Wl,-bind_at_load
1158     ;;
1159   mingw32*)
1160     targetos=mingw32
1161     shlibdir="$bindir"
1162     dv1394="no"
1163     VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libswscale -L$(BUILD_ROOT)/libavutil'
1164     VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lswscale$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1165     ffserver="no"
1166     network="no"
1167     SLIBPREF=""
1168     SLIBSUF=".dll"
1169     EXESUF=".exe"
1170     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1171     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1172     SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1173     SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(SHLIBDIR)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1174     SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base"
1175     enabled network && add_extralibs -lws2_32
1176     ;;
1177   cygwin*)
1178     targetos=cygwin
1179     shlibdir="$bindir"
1180     dv1394="no"
1181     VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1182     VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1183     if enabled swscaler; then
1184         VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1185         VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1186     fi
1187     osextralibs=""
1188     EXESUF=".exe"
1189     SLIBPREF="cyg"
1190     SLIBSUF=".dll"
1191     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1192     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1193     SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a -Wl,--enable-auto-image-base'
1194     ;;
1195   linux)
1196     LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1197     ;;
1198   irix*)
1199     targetos=irix
1200     ranlib="echo ignoring ranlib"
1201     ;;
1202   *)
1203     targetos="${targetos}-UNKNOWN"
1204     ;;
1205 esac
1206
1207 add_extralibs $osextralibs
1208
1209 if ! disabled logging ; then
1210     enabled logging || logfile="$logging"
1211     echo "# $0 $@" >$logfile
1212     set >>$logfile
1213 else
1214     logfile=/dev/null
1215 fi
1216
1217 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1218 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1219
1220 test -n "$cross_prefix" && cross_compile=yes
1221 cc="${cross_prefix}${cc}"
1222 ar="${cross_prefix}${ar}"
1223 ranlib="${cross_prefix}${ranlib}"
1224 strip="${cross_prefix}${strip}"
1225
1226 # we need to build at least one lib type
1227 if ! enabled_any static shared; then
1228     cat <<EOF
1229 At least one library type must be built.
1230 Specify --enable-static to build the static libraries or --enable-shared to
1231 build the shared libraries as well. To only build the shared libraries specify
1232 --disable-static in addition to --enable-shared.
1233 EOF
1234     exit 1;
1235 fi
1236
1237 if ! enabled libogg; then
1238     enabled libtheora && die "libogg must be enabled to enable libtheora."
1239     enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1240 fi
1241
1242 if enabled_any libfaad libfaadbin ; then
1243     if check_header faad.h; then
1244         check_cc << EOF
1245 #include <faad.h>
1246 #ifndef FAAD2_VERSION
1247 ok faad1
1248 #endif
1249 int main( void ) { return 0; }
1250 EOF
1251         test $? = 0 && enable libfaad2
1252     else
1253         die "FAAD test failed."
1254     fi
1255 fi
1256
1257
1258 if ! enabled gpl; then
1259     die_gpl_disabled(){
1260         name=$1
1261         shift
1262         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1263     }
1264     die_gpl_disabled "The Postprocessing code" pp
1265     die_gpl_disabled "liba52"                  liba52
1266     die_gpl_disabled "libx264"                 libx264
1267     die_gpl_disabled "libxvidcore"             libxvid
1268     die_gpl_disabled "FAAD2"                   libfaad2
1269     die_gpl_disabled "The X11 grabber"         x11grab
1270     die_gpl_disabled "The software scaler"     swscaler
1271 fi
1272
1273 check_deps $ARCH_EXT_LIST
1274
1275 test -z "$need_memalign" && need_memalign="$mmx"
1276
1277 #Darwin CC versions
1278 needmdynamicnopic="no"
1279 if test $targetos = darwin; then
1280     if test -n "`$cc -v 2>&1 | grep xlc`"; then
1281         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1282     else
1283         add_cflags "-no-cpp-precomp -pipe"
1284         check_cflags "-force_cpusubtype_ALL"
1285         check_cflags "-Wno-sign-compare"
1286         disabled shared && needmdynamicnopic="yes"
1287     fi
1288 fi
1289 enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1290
1291 disabled optimize || add_cflags -fomit-frame-pointer
1292
1293 # Add processor-specific flags
1294 if test $cpu != "generic"; then
1295     warn_altivec(){
1296         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1297     }
1298     case $cpu in
1299         601|ppc601|PowerPC601)
1300             add_cflags "-mcpu=601"
1301             warn_altivec enabled PPC601
1302         ;;
1303         603*|ppc603*|PowerPC603*)
1304             add_cflags "-mcpu=603"
1305             warn_altivec enabled PPC603
1306         ;;
1307         604*|ppc604*|PowerPC604*)
1308             add_cflags "-mcpu=604"
1309             warn_altivec enabled PPC604
1310         ;;
1311         G3|g3|75*|ppc75*|PowerPC75*)
1312             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1313             warn_altivec enabled PPC75x
1314         ;;
1315         G4|g4|745*|ppc745*|PowerPC745*)
1316             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1317             warn_altivec disabled PPC745x
1318         ;;
1319         74*|ppc74*|PowerPC74*)
1320             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1321             warn_altivec disabled PPC74xx
1322         ;;
1323         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1324             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1325             warn_altivec disabled PPC970
1326             enable ppc64
1327         ;;
1328         Cell|CELL|cell)
1329             add_cflags "-mcpu=cell"
1330             warn_altivec disabled Cell
1331             enable ppc64
1332         ;;
1333         # targets that do NOT support conditional mov (cmov)
1334         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1335             add_cflags "-march=$cpu"
1336             cmov="no"
1337         ;;
1338         # targets that do support conditional mov (cmov)
1339         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1340             add_cflags "-march=$cpu"
1341             cmov="yes"
1342             fast_cmov="yes"
1343         ;;
1344         # targets that do support conditional mov but on which it's slow
1345         pentium4|prescott|nocona)
1346             add_cflags "-march=$cpu"
1347             cmov="yes"
1348             fast_cmov="no"
1349         ;;
1350         sparc64)
1351             add_cflags "-mcpu=v9"
1352         ;;
1353         bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
1354             add_cflags "-mfdpic"
1355             add_ldflags "-mfdpic"
1356         ;;
1357         *)
1358         echo "WARNING: Unknown CPU \"$cpu\", ignored."
1359         ;;
1360     esac
1361 fi
1362
1363 gnu_make(){
1364     $1 --version 2>&1 | grep -q GNU
1365 }
1366
1367 if ! gnu_make $make; then
1368     gnu_make gmake && make=gmake || die "GNU make not found."
1369 fi
1370
1371 # make sure we can execute files in $TMPDIR
1372 cat >$TMPE 2>>$logfile <<EOF
1373 #! /bin/sh
1374 EOF
1375 chmod +x $TMPE >>$logfile 2>&1
1376 if ! $TMPE >>$logfile 2>&1; then
1377     cat <<EOF
1378 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1379 variable to another directory and make sure that $TMPDIR1 is not mounted
1380 noexec.
1381 EOF
1382     die "Sanity test failed."
1383 fi
1384 rm $TMPE
1385
1386 # compiler sanity check
1387 check_exec <<EOF
1388 int main(){
1389     return 0;
1390 }
1391 EOF
1392 if test "$?" != 0; then
1393     echo "$cc is unable to create an executable file."
1394     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1395         echo "If $cc is a cross-compiler, use the --cross-compile option."
1396         echo "Only do this if you know what cross compiling means."
1397     fi
1398     die "C compiler test failed."
1399 fi
1400
1401 if enabled x86; then
1402     # check whether EBP is available on x86
1403     # As 'i' is stored on the stack, this program will crash
1404     # if the base pointer is used to access it because the
1405     # base pointer is cleared in the inline assembly code.
1406     check_exec_crash <<EOF && enable ebp_available
1407     volatile int i=0;
1408     asm volatile (
1409         "xorl %%ebp, %%ebp"
1410     ::: "%ebp");
1411     return i;
1412 EOF
1413
1414     # check wether EBX is available on x86
1415     check_cc <<EOF && enable ebx_available
1416 int main(){
1417     asm volatile ("":::"%ebx");
1418 }
1419 EOF
1420
1421     # check whether binutils is new enough to compile SSSE3
1422     enabled ssse3 && check_cc <<EOF || disable ssse3
1423 int main(){
1424     asm volatile ("pabsw %xmm0, %xmm0");
1425 }
1426 EOF
1427 fi
1428
1429 # check for assembler specific support
1430
1431 if test $arch = "powerpc"; then
1432 check_cc <<EOF && dcbzl=yes
1433 int main(void) {
1434     register long zero = 0;
1435     char data[1024];
1436     asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1437 return 0;
1438 }
1439 EOF
1440 fi
1441
1442 # check for SIMD availability
1443
1444 # AltiVec flags: The FSF version of GCC differs from the Apple version
1445 if enabled altivec; then
1446     if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1447         add_cflags "-faltivec"
1448     else
1449         add_cflags "-maltivec -mabi=altivec"
1450     fi
1451
1452     check_header altivec.h
1453
1454     # check if our compiler supports Motorola AltiVec C API
1455     if enabled altivec_h; then
1456         inc_altivec_h="#include <altivec.h>"
1457     else
1458         inc_altivec_h=
1459     fi
1460     check_cc <<EOF || altivec=no
1461 $inc_altivec_h
1462 int main(void) {
1463     vector signed int v1, v2, v3;
1464     v1 = vec_add(v2,v3);
1465     return 0;
1466 }
1467 EOF
1468 fi
1469
1470 # check armv5te instructions support
1471 enabled armv5te && check_cc <<EOF || disable armv5te
1472 int main(void) {
1473     __asm__ __volatile__ ("qadd r0, r0, r0");
1474 }
1475 EOF
1476
1477 enabled armv6 && check_cc <<EOF || disable armv6
1478 int main(void) {
1479     __asm__ __volatile__ ("sadd16 r0, r0, r0");
1480 }
1481 EOF
1482
1483 # check iwmmxt support
1484 enabled iwmmxt && check_cc <<EOF || disable iwmmxt
1485 int main(void) {
1486     __asm__ __volatile__ ("wunpckelub wr6, wr4");
1487 }
1488 EOF
1489
1490 # check if our compiler supports mmi
1491 enabled mmi && check_cc <<EOF || mmi="no"
1492 int main(void) {
1493     __asm__ ("lq \$2, 0(\$2)");
1494     return 0;
1495 }
1496 EOF
1497
1498 # ---
1499 # big/little-endian test
1500 if ! enabled cross_compile; then
1501     check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1502 #include <inttypes.h>
1503 int main(int argc, char ** argv){
1504         volatile uint32_t i=0x01234567;
1505         return (*((uint8_t*)(&i))) == 0x67;
1506 }
1507 EOF
1508 else
1509     # programs cannot be launched if cross compiling, so make a static guess
1510     if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1511         bigendian="yes"
1512     fi
1513 fi
1514
1515 # ---
1516 # check availability of some header files
1517
1518 check_header malloc.h
1519 check_func memalign
1520
1521 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1522     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1523 fi
1524
1525 check_header byteswap.h
1526
1527 check_func mkstemp
1528
1529 check_header termios.h
1530 check_header conio.h
1531
1532 check_header arpa/inet.h
1533
1534 check_func inet_aton
1535 enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1536
1537 # ffserver uses poll(),
1538 # if it's not found we can emulate it using select().
1539 if enabled ffserver; then
1540     check_header sys/poll.h
1541 fi
1542
1543 # check for some common methods of building with pthread support
1544 # do this before the optional library checks as some of them require pthreads
1545 if enabled pthreads; then
1546     if check_func pthread_create; then
1547         :
1548     elif check_func pthread_create -pthread; then
1549         add_cflags -pthread
1550         add_ldflags -pthread
1551     elif check_func pthread_create -pthreads; then
1552         add_cflags -pthreads
1553         add_ldflags -pthreads
1554     elif ! check_lib pthread.h pthread_create -lpthread; then
1555         die "ERROR: can't find pthreads library"
1556     fi
1557 fi
1558
1559 for thread in $THREADS_LIST; do
1560     if enabled $thread; then
1561         if test -n "$thread_type"; then
1562             die "ERROR: Only one thread type must be selected."
1563         else
1564             thread_type="$thread"
1565         fi
1566     fi
1567 done
1568
1569 # test for lrintf in math.h
1570 check_exec <<EOF && lrintf=yes || lrintf=no
1571 #define _ISOC9X_SOURCE  1
1572 #include <math.h>
1573 int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1574 EOF
1575
1576 enabled_any libamr_nb libamr_wb && enable libamr
1577
1578 # these are off by default, so fail if requested and not available
1579 enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1580 enabled libamr_nb  && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1581 enabled libamr_wb  && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1582 enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1583 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1584 enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1585 enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1586 enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1587 enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1588 enabled libx264    && require x264 x264.h x264_encoder_open -lx264
1589 enabled libxvid    && require Xvid xvid.h xvid_global -lxvidcore
1590 enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1591 enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1592 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1593 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1594 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1595
1596 # disable the native AC-3 decoder if liba52 is enabled
1597 enabled liba52 && disable ac3_decoder
1598
1599 _restrict=
1600 for restrict_keyword in restrict __restrict__ __restrict; do
1601     check_cc <<EOF && _restrict=$restrict_keyword && break
1602 void foo(char * $restrict_keyword p);
1603 EOF
1604 done
1605
1606 # dlopen/dlfcn.h probing
1607
1608 check_header dlfcn.h
1609
1610 if check_func dlopen; then
1611     ldl=
1612 elif check_func dlopen -ldl; then
1613     ldl=-ldl
1614 fi
1615
1616 check_func getrusage
1617 check_func2 windows.h GetProcessTimes
1618
1619 check_func fork
1620
1621 test "$vhook" = "default" && vhook="$dlopen"
1622
1623 enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1624
1625 if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1626     vhook="no"
1627     echo
1628     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1629     echo "Patches welcome."
1630     echo
1631 fi
1632
1633 if enabled vhook; then
1634     check_ldflags -rdynamic
1635     check_ldflags -export-dynamic
1636 fi
1637
1638 enabled audio_beos && add_extralibs "-lmedia -lbe"
1639
1640 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1641 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1642
1643 ##########################################
1644 # SDL check
1645
1646 sdl_too_old=no
1647 sdl=no
1648 SDL_CONFIG="${cross_prefix}sdl-config"
1649 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1650     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1651     temp_cflags $sdl_cflags
1652     temp_extralibs `"${SDL_CONFIG}" --libs`
1653     if check_lib SDL.h SDL_Init; then
1654         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1655         if test "$_sdlversion" -lt 121 ; then
1656             sdl_too_old=yes
1657         else
1658             sdl=yes
1659             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1660 #include <SDL.h>
1661 int main(void){
1662     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1663     int w = vi->current_w;
1664     return 0;
1665 }
1666 EOF
1667         fi
1668     fi
1669     restore_flags
1670 fi
1671
1672 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1673
1674 ##########################################
1675 # IPv6 check
1676
1677 enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1678 #include <sys/types.h>
1679 #include <sys/socket.h>
1680 #include <netinet/in.h>
1681 #include <netdb.h>
1682 int main( void ) {
1683   struct sockaddr_storage saddr;
1684   struct ipv6_mreq mreq6;
1685   getaddrinfo(0,0,0,0);
1686   getnameinfo(0,0,0,0,0,0,0);
1687   IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1688 }
1689 EOF
1690
1691 enabled v4l  && check_header linux/videodev.h  || disable v4l
1692 enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1693
1694 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1695 if enabled bktr; then
1696     { check_header dev/bktr/ioctl_meteor.h &&
1697       check_header dev/bktr/ioctl_bt848.h; } ||
1698     { check_header machine/ioctl_meteor.h &&
1699       check_header machine/ioctl_bt848.h; } ||
1700     { check_header dev/video/meteor/ioctl_meteor.h &&
1701       check_header dev/video/bktr/ioctl_bt848.h; } ||
1702     check_header dev/ic/bt8xx.h ||
1703     disable bktr
1704 fi
1705
1706 enabled audio_oss &&
1707     check_header sys/soundcard.h ||
1708     check_header soundcard.h ||
1709     disable audio_oss
1710
1711 # Deal with the x11 frame grabber
1712 enabled x11grab                         &&
1713 enabled gpl                             &&
1714 enabled x11_grab_device_demuxer         &&
1715 check_header X11/Xlib.h                 &&
1716 check_header X11/extensions/XShm.h      &&
1717 check_func XOpenDisplay -lX11           &&
1718 check_func XShmCreateImage -lX11 -lXext &&
1719 add_extralibs -lX11 -lXext              ||
1720 disable x11_grab_device_demuxer
1721
1722 enabled debug && add_cflags -g
1723
1724 # add some useful compiler flags if supported
1725 check_cflags -Wdeclaration-after-statement
1726 check_cflags -Wall
1727 check_cflags -Wno-switch
1728 check_cflags -Wdisabled-optimization
1729 check_cflags -Wpointer-arith
1730 check_cflags -Wredundant-decls
1731 check_cflags -Wno-pointer-sign
1732 enabled extra_warnings && check_cflags -Winline
1733
1734 # add some linker flags
1735 check_ldflags -Wl,--warn-common
1736 check_ldflags $LDLATEFLAGS
1737
1738 if enabled small; then
1739     check_cflags -Os            # not all compilers support -Os
1740     optimize="small"
1741 elif enabled optimize; then
1742     if test -n "`$cc -v 2>&1 | grep xlc`"; then
1743         add_cflags  "-O5"
1744         add_ldflags "-O5"
1745     else
1746         add_cflags "-O3"
1747     fi
1748 fi
1749
1750 # PIC flags for shared library objects where they are needed
1751 if enabled shared; then
1752     # LIBOBJFLAGS may have already been set in the OS configuration
1753     if test -z "$LIBOBJFLAGS" ; then
1754         case "$arch" in
1755             x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1756         esac
1757     fi
1758 fi
1759
1760 if enabled gprof; then
1761     add_cflags  "-p"
1762     add_ldflags "-p"
1763 fi
1764
1765 VHOOKCFLAGS="-fPIC"
1766
1767 # find if .align arg is power-of-two or not
1768 if test $asmalign_pot = "unknown"; then
1769     asmalign_pot="no"
1770     echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1771 fi
1772
1773 enabled_any $ENCODER_LIST  && enable encoders
1774 enabled_any $DECODER_LIST  && enable decoders
1775 enabled_any $MUXER_LIST    && enable muxers
1776 enabled_any $DEMUXER_LIST  && enable demuxers
1777 enabled_any $PROTOCOL_LIST && enable protocols
1778 enabled_any $BSF_LIST      && enable bsfs
1779
1780 enabled_any $THREADS_LIST  && enable threads
1781
1782 check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1783     $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1784
1785 enabled libogg    && append pkg_requires "ogg >= 1.1"
1786 enabled libtheora && append pkg_requires "theora"
1787 enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1788 enabled dc1394    && append pkg_requires "libraw1394"
1789
1790 echo "install prefix            $PREFIX"
1791 echo "source path               $source_path"
1792 echo "C compiler                $cc"
1793 echo "make                      $make"
1794 echo ".align is power-of-two    $asmalign_pot"
1795 echo "ARCH                      $arch ($cpu)"
1796 if test "$BUILDSUF" != ""; then
1797     echo "build suffix              $BUILDSUF"
1798 fi
1799 echo "big-endian                ${bigendian-no}"
1800 if test $arch = "x86_32" -o $arch = "x86_64"; then
1801     echo "MMX enabled               ${mmx-no}"
1802     echo "CMOV enabled              ${cmov-no}"
1803     echo "CMOV is fast              ${fast_cmov-no}"
1804 fi
1805 if test $arch = "armv4l"; then
1806     echo "ARMv5TE enabled           ${armv5te-no}"
1807     echo "ARMv6 enabled             ${armv6-no}"
1808     echo "IWMMXT enabled            ${iwmmxt-no}"
1809 fi
1810 if test $arch = "mips"; then
1811     echo "MMI enabled               ${mmi-no}"
1812 fi
1813 if test $arch = "powerpc"; then
1814     echo "AltiVec enabled           ${altivec-no}"
1815     echo "dcbzl available           ${dcbzl-no}"
1816 fi
1817 echo "gprof enabled             ${gprof-no}"
1818 echo "debug symbols             ${debug-no}"
1819 echo "strip symbols             ${dostrip-no}"
1820 echo "optimize                  ${optimize-no}"
1821 echo "static                    ${static-no}"
1822 echo "shared                    ${shared-no}"
1823 echo "postprocessing support    ${pp-no}"
1824 echo "software scaler enabled   ${swscaler-no}"
1825 echo "video hooking             ${vhook-no}"
1826 if enabled vhook; then
1827     echo "Imlib2 support            ${imlib2-no}"
1828     echo "FreeType support          ${freetype2-no}"
1829 fi
1830 echo "network support           ${network-no}"
1831 if enabled network; then
1832     echo "IPv6 support              ${ipv6-no}"
1833 fi
1834 echo "threading support         ${thread_type-no}"
1835 echo "SDL support               ${sdl-no}"
1836 if enabled sdl_too_old; then
1837     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1838 fi
1839 echo "Sun medialib support      ${mlib-no}"
1840 echo "AVISynth enabled          ${avisynth-no}"
1841 echo "liba52 support            ${liba52-no}"
1842 echo "liba52 dlopened           ${liba52bin-no}"
1843 echo "libamr-nb support         ${libamr_nb-no}"
1844 echo "libamr-wb support         ${libamr_wb-no}"
1845 echo "libfaac enabled           ${libfaac-no}"
1846 echo "libfaad enabled           ${libfaad-no}"
1847 echo "libfaad dlopened          ${libfaadbin-no}"
1848 echo "libgsm enabled            ${libgsm-no}"
1849 echo "libmp3lame enabled        ${libmp3lame-no}"
1850 echo "libnut enabled            ${libnut-no}"
1851 echo "libogg enabled            ${libogg-no}"
1852 echo "libtheora enabled         ${libtheora-no}"
1853 echo "libvorbis enabled         ${libvorbis-no}"
1854 echo "x264 enabled              ${libx264-no}"
1855 echo "XviD enabled              ${libxvid-no}"
1856 echo "zlib enabled              ${zlib-no}"
1857 if ! enabled gpl; then
1858     echo "License: LGPL"
1859 else
1860     echo "License: GPL"
1861 fi
1862
1863 echo "Creating config.mak and config.h..."
1864
1865 echo "# Automatically generated by configure - do not modify!" > config.mak
1866 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1867 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1868
1869 echo "PREFIX=$PREFIX" >> config.mak
1870 echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1871 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1872 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1873 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1874 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1875 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1876 echo "MAKE=$make" >> config.mak
1877 echo "CC=$cc" >> config.mak
1878 echo "AR=$ar" >> config.mak
1879 echo "RANLIB=$ranlib" >> config.mak
1880 if enabled dostrip; then
1881     echo "STRIP=$strip" >> config.mak
1882 else
1883     echo "STRIP=echo ignoring strip" >> config.mak
1884 fi
1885
1886 echo "OPTFLAGS=$CFLAGS" >> config.mak
1887 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1888 echo "LDFLAGS=$LDFLAGS" >> config.mak
1889 echo "LDCONFIG=$LDCONFIG" >> config.mak
1890 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1891 echo "SHFLAGS=$SHFLAGS" >> config.mak
1892 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1893 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1894 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1895 echo "BUILD_STATIC=$static" >> config.mak
1896 echo "BUILDSUF=$BUILDSUF" >> config.mak
1897 echo "LIBPREF=$LIBPREF" >> config.mak
1898 echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1899 if enabled static; then
1900   echo "LIB=$LIB" >> config.mak
1901 else # Some Make complain if this variable does not exist.
1902   echo "LIB=" >> config.mak
1903 fi
1904 echo "SLIBPREF=$SLIBPREF" >> config.mak
1905 echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1906 echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1907
1908 if enabled bigendian; then
1909   echo "WORDS_BIGENDIAN=yes" >> config.mak
1910   echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1911 fi
1912 if enabled mmx; then
1913   echo "#define __CPU__ 586" >> $TMPH
1914 fi
1915
1916 if enabled sdl; then
1917   echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1918   echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1919 fi
1920 if enabled texi2html; then
1921   echo "BUILD_DOC=yes" >> config.mak
1922 fi
1923
1924 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1925 pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1926 lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1927 lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1928 lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1929
1930
1931
1932 if enabled shared; then
1933   echo "BUILD_SHARED=yes" >> config.mak
1934   echo "PIC=-fPIC -DPIC" >> config.mak
1935   echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1936   echo "SPPVERSION=$pp_version" >> config.mak
1937   echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1938   echo "LAVCVERSION=$lavc_version" >> config.mak
1939   echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1940   echo "LAVFVERSION=$lavf_version" >> config.mak
1941   echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1942   echo "LAVUVERSION=$lavu_version" >> config.mak
1943   echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1944   echo "SWSVERSION=$sws_version" >> config.mak
1945   echo "SLIBNAME=${SLIBNAME}" >> config.mak
1946   echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1947   echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1948   echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1949   echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1950 fi
1951 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1952 echo "EXTRALIBS=$extralibs" >> config.mak
1953
1954 print_config ARCH_   $TMPH config.mak $ARCH_LIST
1955 print_config HAVE_   $TMPH config.mak $HAVE_LIST
1956 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1957                                       $DECODER_LIST  \
1958                                       $ENCODER_LIST  \
1959                                       $PARSER_LIST   \
1960                                       $BSF_LIST      \
1961                                       $DEMUXER_LIST  \
1962                                       $MUXER_LIST    \
1963                                       $PROTOCOL_LIST \
1964
1965 if test "$targetos" = darwin; then
1966   echo "#define CONFIG_DARWIN 1"  >> $TMPH
1967 fi
1968
1969 echo "#define restrict $_restrict" >> $TMPH
1970
1971 if enabled small; then
1972   echo "#define always_inline"  >> $TMPH
1973 fi
1974
1975 echo "SRC_PATH=\"$source_path\"" >> config.mak
1976 echo "SRC_PATH_BARE=$source_path" >> config.mak
1977 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1978
1979 # Apparently it's not possible to portably echo a backslash.
1980 if enabled asmalign_pot; then
1981   printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1982 else
1983   printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1984 fi
1985
1986
1987 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1988 if ! cmp -s $TMPH config.h; then
1989         mv -f $TMPH config.h
1990 else
1991         echo "config.h is unchanged"
1992 fi
1993
1994 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1995
1996 # build tree in object directory if source path is different from current one
1997 if enabled source_path_used; then
1998     DIRS="\
1999          doc \
2000          libavformat \
2001          libavcodec \
2002          libavcodec/alpha \
2003          libavcodec/armv4l \
2004          libavcodec/bfin \
2005          libavcodec/i386 \
2006          libavcodec/sparc \
2007          libavcodec/mlib \
2008          libavcodec/ppc \
2009          libpostproc \
2010          libavutil \
2011          libswscale \
2012          tests \
2013          tools \
2014          vhook \
2015          "
2016     FILES="\
2017           Makefile \
2018           common.mak \
2019           libavformat/Makefile \
2020           libavcodec/Makefile \
2021           libpostproc/Makefile \
2022           libavutil/Makefile \
2023           libswscale/Makefile \
2024           doc/texi2pod.pl \
2025           "
2026     for dir in $DIRS ; do
2027             mkdir -p $dir
2028     done
2029     for f in $FILES ; do
2030         ln -sf "$source_path/$f" $f
2031     done
2032 fi
2033
2034
2035 # build pkg-config files
2036 # FIXME: libdir and includedir are hardcoded and may differ from the real path.
2037
2038 pkgconfig_generate(){
2039 name=$1
2040 comment=$2
2041 version=$3
2042 libs=$4
2043 requires=$5
2044 include=$6
2045 cat <<EOF >$name.pc
2046 prefix=$PREFIX
2047 exec_prefix=\${prefix}
2048 libdir=\${exec_prefix}/lib
2049 includedir=\${prefix}/include
2050
2051 Name: $name
2052 Description: $comment
2053 Version: $version
2054 Requires: $requires
2055 Conflicts:
2056 Libs: -L\${libdir} $libs
2057 Cflags: -I\${includedir} -I\${includedir}/$include
2058 EOF
2059 }
2060
2061 pkgconfig_generate_uninstalled(){
2062 name=$1
2063 shortname=${name#lib}
2064 comment=$2
2065 version=$3
2066 libs=$4
2067 requires=$5
2068 cat <<EOF >$name-uninstalled.pc
2069 prefix=
2070 exec_prefix=
2071 libdir=\${pcfiledir}/$name
2072 includedir=\${pcfiledir}/$name
2073
2074 Name: $name
2075 Description: $comment
2076 Version: $version
2077 Requires: $requires
2078 Conflicts:
2079 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2080 Cflags: -I\${includedir}
2081 EOF
2082 }
2083
2084 pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2085 pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2086
2087 pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2088 pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2089
2090 pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2091 pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2092
2093 if enabled pp; then
2094   pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2095   pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2096 fi
2097
2098 if enabled swscaler; then
2099   pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2100   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2101 else
2102   pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2103   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2104   apply libswscale.pc sed s/^Libs:.*$/Libs:/
2105   apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2106 fi