* reinserting gethrtime in alphabetical order
[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     closesocket
663     cmov
664     conio_h
665     dcbzl
666     dev_bktr_ioctl_bt848_h
667     dev_bktr_ioctl_meteor_h
668     dev_ic_bt8xx_h
669     dev_video_meteor_ioctl_meteor_h
670     dev_video_bktr_ioctl_bt848_h
671     dlfcn_h
672     dlopen
673     ebp_available
674     ebx_available
675     fast_64bit
676     fast_cmov
677     fast_unaligned
678     fork
679     freetype2
680     GetProcessTimes
681     gethrtime
682     getrusage
683     imlib2
684     inet_aton
685     lrintf
686     machine_ioctl_bt848_h
687     machine_ioctl_meteor_h
688     malloc_h
689     memalign
690     mkstemp
691     mlib
692     ppc64
693     sdl
694     sdl_video_size
695     soundcard_h
696     sys_poll_h
697     sys_soundcard_h
698     termios_h
699     threads
700     winsock2_h
701 "
702
703 CMDLINE_SELECT="
704     $ARCH_EXT_LIST
705     $CONFIG_LIST
706     $THREADS_LIST
707     debug
708     extra_warnings
709     shared
710     static
711 "
712
713 # code dependency declarations
714
715 # architecture extensions
716 altivec_deps="powerpc"
717 armv5te_deps="armv4l"
718 armv6_deps="armv4l"
719 iwmmxt_deps="armv4l"
720 mmi_deps="mips"
721 mmx_deps="x86"
722 ssse3_deps="x86"
723
724 # decoders / encoders
725 ac3_decoder_deps="gpl"
726 dxa_decoder_deps="zlib"
727 flashsv_decoder_deps="zlib"
728 flashsv_encoder_deps="zlib"
729 flv_decoder_deps="h263_decoder"
730 h263_decoder_deps="h263_parser mpeg4video_parser"
731 h263i_decoder_deps="h263_decoder"
732 h264_decoder_deps="h264_parser"
733 mpeg_xvmc_decoder_deps="xvmc"
734 mpeg4_decoder_deps="h263_decoder"
735 msmpeg4v1_decoder_deps="h263_decoder"
736 msmpeg4v2_decoder_deps="h263_decoder"
737 msmpeg4v3_decoder_deps="h263_decoder"
738 png_decoder_deps="zlib"
739 png_encoder_deps="zlib"
740 svq3_decoder_deps="h264_parser"
741 vc1_decoder_deps="h263_decoder"
742 wmv1_decoder_deps="h263_decoder"
743 wmv2_decoder_deps="h263_decoder"
744 wmv3_decoder_deps="h263_decoder"
745 zmbv_decoder_deps="zlib"
746 zmbv_encoder_deps="zlib"
747
748 # external libraries
749 mpeg4aac_decoder_deps="libfaad"
750 liba52_decoder_deps="liba52"
751 libamr_nb_decoder_deps="libamr_nb"
752 libamr_nb_encoder_deps="libamr_nb"
753 libamr_wb_decoder_deps="libamr_wb"
754 libamr_wb_encoder_deps="libamr_wb"
755 libfaac_encoder_deps="libfaac"
756 libfaad_decoder_deps="libfaad"
757 libgsm_decoder_deps="libgsm"
758 libgsm_encoder_deps="libgsm"
759 libgsm_ms_decoder_deps="libgsm"
760 libgsm_ms_encoder_deps="libgsm"
761 libmp3lame_encoder_deps="libmp3lame"
762 libtheora_encoder_deps="libtheora"
763 libvorbis_decoder_deps="libvorbis"
764 libvorbis_encoder_deps="libvorbis"
765 libx264_encoder_deps="libx264"
766 libxvid_encoder_deps="libxvid"
767
768 # demuxers / muxers
769 ac3_demuxer_deps="ac3_parser"
770 audio_demuxer_deps_any="audio_oss audio_beos"
771 audio_muxer_deps_any="audio_oss audio_beos"
772 dc1394_demuxer_deps="dc1394"
773 dv1394_demuxer_deps="dv1394"
774 libnut_demuxer_deps="libnut"
775 libnut_muxer_deps="libnut"
776 mp3_demuxer_deps="mpegaudio_parser"
777 ogg_muxer_deps="libogg"
778 redir_demuxer_deps="network"
779 rtp_muxer_deps="network mpegts_demuxer"
780 rtsp_demuxer_deps="rtp_protocol rtp_muxer"
781 sdp_demuxer_deps="rtsp_demuxer"
782 v4l2_demuxer_deps="v4l2"
783 video_grab_bktr_demuxer_deps="bktr"
784 video_grab_v4l_demuxer_deps="v4l"
785 x11_grab_device_demuxer_deps="x11grab"
786
787 # protocols
788 http_protocol_deps="network"
789 rtp_protocol_deps="udp_protocol"
790 tcp_protocol_deps="network"
791 udp_protocol_deps="network"
792
793 # programs
794 ffplay_deps="sdl"
795 ffserver_deps="muxers rtp_protocol"
796
797
798 # set temporary file name
799 if test ! -z "$TMPDIR" ; then
800     TMPDIR1="${TMPDIR}"
801 elif test ! -z "$TEMPDIR" ; then
802     TMPDIR1="${TEMPDIR}"
803 else
804     TMPDIR1="/tmp"
805 fi
806
807 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
808 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
809 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
810 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
811 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
812
813 # default parameters
814
815 logging="yes"
816 logfile="config.err"
817
818 # installation paths
819 PREFIX="/usr/local"
820 libdir='$(PREFIX)/lib'
821 shlibdir="$libdir"
822 incdir='$(PREFIX)/include/ffmpeg'
823 mandir='$(PREFIX)/man'
824 bindir='$(PREFIX)/bin'
825
826 # toolchain
827 cc="gcc"
828 ar="ar"
829 ranlib="ranlib"
830 make="make"
831 strip="strip"
832 asmalign_pot="unknown"
833
834 # machine
835 arch=`uname -m`
836 cpu="generic"
837
838 # OS
839 targetos=$(tolower $(uname -s))
840
841 # non-library system interfaces
842 audio_oss="yes"
843 bktr="yes"
844 dv1394="yes"
845 v4l2="yes"
846 v4l="yes"
847
848 # libraries
849 zlib="yes"
850
851 # configurable options
852 debug="yes"
853 dostrip="yes"
854 ffmpeg="yes"
855 ffplay="yes"
856 ffserver="yes"
857 ipv6="yes"
858 static="yes"
859 mpegaudio_hp="yes"
860 network="yes"
861 optimize="yes"
862 protocols="yes"
863 vhook="default"
864
865 # build settings
866 SHFLAGS='-shared -Wl,-soname,$@'
867 VHOOKSHFLAGS='$(SHFLAGS)'
868 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
869 FFSERVERLDFLAGS=-Wl,-E
870 LDCONFIG="ldconfig"
871 LIBPREF="lib"
872 LIBSUF=".a"
873 LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
874 SLIBPREF="lib"
875 SLIBSUF=".so"
876 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
877 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
878 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
879 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIB)"'
880
881 # find source path
882 source_path="`dirname \"$0\"`"
883 source_path_used="yes"
884 if test -z "$source_path" -o "$source_path" = "." ; then
885     source_path="`pwd`"
886     source_path_used="no"
887 else
888     source_path="`cd \"$source_path\"; pwd`"
889     echo "$source_path" | grep -q '[[:blank:]]' &&
890       die "Out of tree builds are impossible with whitespace in source path."
891 fi
892
893 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
894     show_help
895 fi
896
897 FFMPEG_CONFIGURATION="$@"
898
899 ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
900 DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
901 PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
902 BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
903 MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
904 DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
905 PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
906
907 enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
908 enable $ARCH_EXT_LIST
909
910 die_unknown(){
911     echo "Unknown option \"$1\"."
912     echo "See $0 --help for available options."
913     exit 1
914 }
915
916 show_list() {
917     for part in $*; do
918         echo $part | sed 's/_[^_]*$//'
919     done | sort
920     exit 0
921 }
922
923 for opt do
924   optval="${opt#*=}"
925   case "$opt" in
926   --log)
927   ;;
928   --log=*) logging="$optval"
929   ;;
930   --prefix=*) PREFIX="$optval"
931   ;;
932   --libdir=*) libdir="$optval"
933   ;;
934   --shlibdir=*) shlibdir="$optval"
935   ;;
936   --incdir=*) incdir="$optval"
937   ;;
938   --mandir=*) mandir="$optval"
939   ;;
940   --source-path=*) source_path="$optval"
941   ;;
942   --cross-prefix=*) cross_prefix="$optval"
943   ;;
944   --cross-compile) cross_compile="yes"
945   ;;
946   --target-os=*) targetos="$optval"
947   ;;
948   --cc=*) cc="$optval"
949   ;;
950   --make=*) make="$optval"
951   ;;
952   --extra-cflags=*) add_cflags "$optval"
953   ;;
954   --extra-ldflags=*) add_ldflags "$optval"
955   ;;
956   --extra-libs=*) add_extralibs "$optval"
957   ;;
958   --build-suffix=*) BUILDSUF="$optval"
959   ;;
960   --arch=*) arch="$optval"
961   ;;
962   --cpu=*) cpu="$optval"
963   ;;
964   --disable-opts) optimize="no"
965   ;;
966   --enable-sunmlib) mlib="yes"
967   ;;
968   --disable-strip) dostrip="no"
969   ;;
970   --disable-encoders) disable $ENCODER_LIST
971   ;;
972   --disable-decoders) disable $DECODER_LIST
973   ;;
974   --disable-muxers) disable $MUXER_LIST
975   ;;
976   --disable-demuxers) disable $DEMUXER_LIST
977   ;;
978   --disable-parsers) disable $PARSER_LIST
979   ;;
980   --disable-bsfs) disable $BSF_LIST
981   ;;
982   --disable-protocols) disable $PROTOCOL_LIST
983   ;;
984   --enable-*=*|--disable-*=*)
985   eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
986   case "$thing" in
987       encoder|decoder|muxer|demuxer|parser|bsf|protocol) $action ${optval}_${thing} ;;
988       *) die_unknown "$opt" ;;
989   esac
990   ;;
991   --enable-?*|--disable-?*)
992   eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
993   echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
994   $action $option
995   ;;
996   --list-*)
997     NAME="${opt#--list-}"
998     NAME=$(toupper ${NAME%s})
999     eval show_list \$${NAME}_LIST
1000   ;;
1001   --help) show_help
1002   ;;
1003   *)
1004   die_unknown $opt
1005   ;;
1006   esac
1007 done
1008
1009 case "$arch" in
1010   i386|i486|i586|i686|i86pc|BePC)
1011     arch="x86_32"
1012     enable fast_unaligned
1013   ;;
1014   x86_64|amd64)
1015     arch="x86_32"
1016     enable fast_unaligned
1017     canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1018     if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1019       if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1020         arch="x86_64"
1021         enable fast_64bit
1022       fi
1023     fi
1024   ;;
1025   # armv4l is a subset of armv[567]*l
1026   arm|armv[4567]*l)
1027     arch="armv4l"
1028   ;;
1029   alpha)
1030     arch="alpha"
1031     enable fast_64bit
1032   ;;
1033   "Power Macintosh"|ppc|powerpc)
1034     arch="powerpc"
1035   ;;
1036   ppc64)
1037     arch="powerpc"
1038     enable fast_64bit
1039   ;;
1040   mips|mipsel|IP*)
1041     arch="mips"
1042   ;;
1043   sun4u|sparc64)
1044     arch="sparc64"
1045     enable fast_64bit
1046   ;;
1047   sparc)
1048     arch="sparc"
1049   ;;
1050   sh4)
1051     arch="sh4"
1052   ;;
1053   parisc)
1054     arch="parisc"
1055   ;;
1056   parisc64)
1057     arch="parisc"
1058     enable fast_64bit
1059   ;;
1060   s390|s390x)
1061     arch="s390"
1062   ;;
1063   m68k)
1064     arch="m68k"
1065   ;;
1066   ia64)
1067     arch="ia64"
1068     enable fast_64bit
1069   ;;
1070   bfin)
1071     arch="bfin"
1072   ;;
1073   *)
1074     arch="unknown"
1075   ;;
1076 esac
1077
1078 enable $arch
1079 enabled_any x86_32 x86_64 && enable x86
1080 enabled     sparc64       && enable sparc
1081
1082 # OS specific
1083 osextralibs="-lm"
1084 case $targetos in
1085   beos|haiku|zeta)
1086     PREFIX="$HOME/config"
1087     # helps building libavcodec
1088     add_cflags "-DPIC -fomit-frame-pointer"
1089     # 3 gcc releases known for BeOS, each with ugly bugs
1090     gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1091     case "$gcc_version" in
1092       2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1093         mmx="no"
1094         ;;
1095       *20010315*) echo "BeBits gcc"
1096         add_cflags "-fno-expensive-optimizations"
1097         ;;
1098     esac
1099     LDCONFIG="echo ignoring ldconfig"
1100     SHFLAGS=-nostart
1101     # disable Linux things
1102     dv1394="no"
1103     # enable BeOS things
1104     disabled audio_beos || enable_audio_beos
1105     # no need for libm, but the inet stuff
1106     # Check for BONE
1107     # XXX: actually should check for NOT net_server
1108     if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1109         osextralibs="-lbind -lsocket"
1110     else
1111         beos_netserver="yes"
1112         osextralibs="-lnet"
1113     fi ;;
1114   sunos)
1115     dv1394="no"
1116     FFSERVERLDFLAGS=""
1117     SHFLAGS="-shared -Wl,-h,\$@"
1118     add_extralibs "-lsocket -lnsl"
1119     ;;
1120   netbsd)
1121     dv1394="no"
1122     add_extralibs "-lossaudio"
1123     ;;
1124   openbsd)
1125     dv1394="no"
1126     need_memalign="no"
1127     LIBOBJFLAGS="\$(PIC)"
1128     LDCONFIG="ldconfig -m \$(SHLIBDIR)"
1129     SHFLAGS='-shared'
1130     SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
1131     SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1132     SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1133     add_extralibs "-lossaudio"
1134     ;;
1135   freebsd)
1136     dv1394="no"
1137     need_memalign="no"
1138     add_cflags "-pthread"
1139     ;;
1140   gnu/kfreebsd)
1141     dv1394="no"
1142     add_cflags "-pthread"
1143     ;;
1144   bsd/os)
1145     dv1394="no"
1146     osextralibs="-lpoll -lgnugetopt -lm"
1147     strip="strip -d"
1148     ;;
1149   darwin)
1150     dv1394="no"
1151     need_memalign="no"
1152     SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(SHLIBDIR)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
1153     VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1154     osextralibs=""
1155     strip="strip -x"
1156     FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1157     SLIBSUF=".dylib"
1158     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
1159     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
1160     FFSERVERLDFLAGS=-Wl,-bind_at_load
1161     ;;
1162   mingw32*)
1163     targetos=mingw32
1164     shlibdir="$bindir"
1165     dv1394="no"
1166     VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libswscale -L$(BUILD_ROOT)/libavutil'
1167     VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lswscale$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1168     ffserver="no"
1169     network="no"
1170     SLIBPREF=""
1171     SLIBSUF=".dll"
1172     EXESUF=".exe"
1173     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1174     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1175     SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1176     SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(SHLIBDIR)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1177     SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base"
1178     enabled network && add_extralibs -lws2_32
1179     ;;
1180   cygwin*)
1181     targetos=cygwin
1182     shlibdir="$bindir"
1183     dv1394="no"
1184     VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1185     VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1186     if enabled swscaler; then
1187         VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1188         VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1189     fi
1190     osextralibs=""
1191     EXESUF=".exe"
1192     SLIBPREF="cyg"
1193     SLIBSUF=".dll"
1194     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1195     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1196     SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a -Wl,--enable-auto-image-base'
1197     ;;
1198   linux)
1199     LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1200     ;;
1201   irix*)
1202     targetos=irix
1203     ranlib="echo ignoring ranlib"
1204     ;;
1205   *)
1206     targetos="${targetos}-UNKNOWN"
1207     ;;
1208 esac
1209
1210 add_extralibs $osextralibs
1211
1212 if ! disabled logging ; then
1213     enabled logging || logfile="$logging"
1214     echo "# $0 $@" >$logfile
1215     set >>$logfile
1216 else
1217     logfile=/dev/null
1218 fi
1219
1220 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1221 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1222
1223 test -n "$cross_prefix" && cross_compile=yes
1224 cc="${cross_prefix}${cc}"
1225 ar="${cross_prefix}${ar}"
1226 ranlib="${cross_prefix}${ranlib}"
1227 strip="${cross_prefix}${strip}"
1228
1229 # we need to build at least one lib type
1230 if ! enabled_any static shared; then
1231     cat <<EOF
1232 At least one library type must be built.
1233 Specify --enable-static to build the static libraries or --enable-shared to
1234 build the shared libraries as well. To only build the shared libraries specify
1235 --disable-static in addition to --enable-shared.
1236 EOF
1237     exit 1;
1238 fi
1239
1240 if disabled static; then
1241     LIB=""
1242 fi
1243
1244 if ! enabled libogg; then
1245     enabled libtheora && die "libogg must be enabled to enable libtheora."
1246     enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1247 fi
1248
1249 if enabled_any libfaad libfaadbin ; then
1250     if check_header faad.h; then
1251         check_cc << EOF
1252 #include <faad.h>
1253 #ifndef FAAD2_VERSION
1254 ok faad1
1255 #endif
1256 int main( void ) { return 0; }
1257 EOF
1258         test $? = 0 && enable libfaad2
1259     else
1260         die "FAAD test failed."
1261     fi
1262 fi
1263
1264
1265 if ! enabled gpl; then
1266     die_gpl_disabled(){
1267         name=$1
1268         shift
1269         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1270     }
1271     die_gpl_disabled "The Postprocessing code" pp
1272     die_gpl_disabled "liba52"                  liba52
1273     die_gpl_disabled "libx264"                 libx264
1274     die_gpl_disabled "libxvidcore"             libxvid
1275     die_gpl_disabled "FAAD2"                   libfaad2
1276     die_gpl_disabled "The X11 grabber"         x11grab
1277     die_gpl_disabled "The software scaler"     swscaler
1278 fi
1279
1280 check_deps $ARCH_EXT_LIST
1281
1282 test -z "$need_memalign" && need_memalign="$mmx"
1283
1284 #Darwin CC versions
1285 needmdynamicnopic="no"
1286 if test $targetos = darwin; then
1287     if test -n "`$cc -v 2>&1 | grep xlc`"; then
1288         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1289     else
1290         add_cflags "-no-cpp-precomp -pipe"
1291         check_cflags "-force_cpusubtype_ALL"
1292         check_cflags "-Wno-sign-compare"
1293         disabled shared && needmdynamicnopic="yes"
1294     fi
1295 fi
1296 enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1297
1298 disabled optimize || add_cflags -fomit-frame-pointer
1299
1300 # Add processor-specific flags
1301 if test $cpu != "generic"; then
1302     warn_altivec(){
1303         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1304     }
1305     case $cpu in
1306         601|ppc601|PowerPC601)
1307             add_cflags "-mcpu=601"
1308             warn_altivec enabled PPC601
1309         ;;
1310         603*|ppc603*|PowerPC603*)
1311             add_cflags "-mcpu=603"
1312             warn_altivec enabled PPC603
1313         ;;
1314         604*|ppc604*|PowerPC604*)
1315             add_cflags "-mcpu=604"
1316             warn_altivec enabled PPC604
1317         ;;
1318         G3|g3|75*|ppc75*|PowerPC75*)
1319             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1320             warn_altivec enabled PPC75x
1321         ;;
1322         G4|g4|745*|ppc745*|PowerPC745*)
1323             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1324             warn_altivec disabled PPC745x
1325         ;;
1326         74*|ppc74*|PowerPC74*)
1327             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1328             warn_altivec disabled PPC74xx
1329         ;;
1330         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1331             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1332             warn_altivec disabled PPC970
1333             enable ppc64
1334         ;;
1335         Cell|CELL|cell)
1336             add_cflags "-mcpu=cell"
1337             warn_altivec disabled Cell
1338             enable ppc64
1339         ;;
1340         # targets that do NOT support conditional mov (cmov)
1341         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1342             add_cflags "-march=$cpu"
1343             cmov="no"
1344         ;;
1345         # targets that do support conditional mov (cmov)
1346         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1347             add_cflags "-march=$cpu"
1348             cmov="yes"
1349             fast_cmov="yes"
1350         ;;
1351         # targets that do support conditional mov but on which it's slow
1352         pentium4|prescott|nocona)
1353             add_cflags "-march=$cpu"
1354             cmov="yes"
1355             fast_cmov="no"
1356         ;;
1357         sparc64)
1358             add_cflags "-mcpu=v9"
1359         ;;
1360         bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
1361             add_cflags "-mfdpic"
1362             add_ldflags "-mfdpic"
1363         ;;
1364         *)
1365         echo "WARNING: Unknown CPU \"$cpu\", ignored."
1366         ;;
1367     esac
1368 fi
1369
1370 gnu_make(){
1371     $1 --version 2>&1 | grep -q GNU
1372 }
1373
1374 if ! gnu_make $make; then
1375     gnu_make gmake && make=gmake || die "GNU make not found."
1376 fi
1377
1378 # make sure we can execute files in $TMPDIR
1379 cat >$TMPE 2>>$logfile <<EOF
1380 #! /bin/sh
1381 EOF
1382 chmod +x $TMPE >>$logfile 2>&1
1383 if ! $TMPE >>$logfile 2>&1; then
1384     cat <<EOF
1385 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1386 variable to another directory and make sure that $TMPDIR1 is not mounted
1387 noexec.
1388 EOF
1389     die "Sanity test failed."
1390 fi
1391 rm $TMPE
1392
1393 # compiler sanity check
1394 check_exec <<EOF
1395 int main(){
1396     return 0;
1397 }
1398 EOF
1399 if test "$?" != 0; then
1400     echo "$cc is unable to create an executable file."
1401     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1402         echo "If $cc is a cross-compiler, use the --cross-compile option."
1403         echo "Only do this if you know what cross compiling means."
1404     fi
1405     die "C compiler test failed."
1406 fi
1407
1408 if enabled x86; then
1409     # check whether EBP is available on x86
1410     # As 'i' is stored on the stack, this program will crash
1411     # if the base pointer is used to access it because the
1412     # base pointer is cleared in the inline assembly code.
1413     check_exec_crash <<EOF && enable ebp_available
1414     volatile int i=0;
1415     asm volatile (
1416         "xorl %%ebp, %%ebp"
1417     ::: "%ebp");
1418     return i;
1419 EOF
1420
1421     # check wether EBX is available on x86
1422     check_cc <<EOF && enable ebx_available
1423 int main(){
1424     asm volatile ("":::"%ebx");
1425 }
1426 EOF
1427
1428     # check whether binutils is new enough to compile SSSE3
1429     enabled ssse3 && check_cc <<EOF || disable ssse3
1430 int main(){
1431     asm volatile ("pabsw %xmm0, %xmm0");
1432 }
1433 EOF
1434 fi
1435
1436 # check for assembler specific support
1437
1438 if test $arch = "powerpc"; then
1439 check_cc <<EOF && dcbzl=yes
1440 int main(void) {
1441     register long zero = 0;
1442     char data[1024];
1443     asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1444 return 0;
1445 }
1446 EOF
1447 fi
1448
1449 # check for SIMD availability
1450
1451 # AltiVec flags: The FSF version of GCC differs from the Apple version
1452 if enabled altivec; then
1453     if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1454         add_cflags "-faltivec"
1455     else
1456         add_cflags "-maltivec -mabi=altivec"
1457     fi
1458
1459     check_header altivec.h
1460
1461     # check if our compiler supports Motorola AltiVec C API
1462     if enabled altivec_h; then
1463         inc_altivec_h="#include <altivec.h>"
1464     else
1465         inc_altivec_h=
1466     fi
1467     check_cc <<EOF || altivec=no
1468 $inc_altivec_h
1469 int main(void) {
1470     vector signed int v1, v2, v3;
1471     v1 = vec_add(v2,v3);
1472     return 0;
1473 }
1474 EOF
1475 fi
1476
1477 # check armv5te instructions support
1478 enabled armv5te && check_cc <<EOF || disable armv5te
1479 int main(void) {
1480     __asm__ __volatile__ ("qadd r0, r0, r0");
1481 }
1482 EOF
1483
1484 enabled armv6 && check_cc <<EOF || disable armv6
1485 int main(void) {
1486     __asm__ __volatile__ ("sadd16 r0, r0, r0");
1487 }
1488 EOF
1489
1490 # check iwmmxt support
1491 enabled iwmmxt && check_cc <<EOF || disable iwmmxt
1492 int main(void) {
1493     __asm__ __volatile__ ("wunpckelub wr6, wr4");
1494 }
1495 EOF
1496
1497 # check if our compiler supports mmi
1498 enabled mmi && check_cc <<EOF || mmi="no"
1499 int main(void) {
1500     __asm__ ("lq \$2, 0(\$2)");
1501     return 0;
1502 }
1503 EOF
1504
1505 # ---
1506 # big/little-endian test
1507 if ! enabled cross_compile; then
1508     check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1509 #include <inttypes.h>
1510 int main(int argc, char ** argv){
1511         volatile uint32_t i=0x01234567;
1512         return (*((uint8_t*)(&i))) == 0x67;
1513 }
1514 EOF
1515 else
1516     # programs cannot be launched if cross compiling, so make a static guess
1517     if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
1518         bigendian="yes"
1519     fi
1520 fi
1521
1522 # ---
1523 # check availability of some header files
1524
1525 check_header malloc.h
1526 check_func memalign
1527
1528 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1529     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1530 fi
1531
1532 check_header byteswap.h
1533
1534 check_func mkstemp
1535 check_func gethrtime
1536
1537 check_header termios.h
1538 check_header conio.h
1539
1540 check_header arpa/inet.h
1541 check_header winsock2.h
1542
1543 check_func inet_aton
1544 enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
1545
1546 # ffserver uses poll(),
1547 # if it's not found we can emulate it using select().
1548 if enabled ffserver; then
1549     check_header sys/poll.h
1550 fi
1551
1552 # check for some common methods of building with pthread support
1553 # do this before the optional library checks as some of them require pthreads
1554 if enabled pthreads; then
1555     if check_func pthread_create; then
1556         :
1557     elif check_func pthread_create -pthread; then
1558         add_cflags -pthread
1559         add_ldflags -pthread
1560     elif check_func pthread_create -pthreads; then
1561         add_cflags -pthreads
1562         add_ldflags -pthreads
1563     elif ! check_lib pthread.h pthread_create -lpthread; then
1564         die "ERROR: can't find pthreads library"
1565     fi
1566 fi
1567
1568 for thread in $THREADS_LIST; do
1569     if enabled $thread; then
1570         if test -n "$thread_type"; then
1571             die "ERROR: Only one thread type must be selected."
1572         else
1573             thread_type="$thread"
1574         fi
1575     fi
1576 done
1577
1578 # test for lrintf in math.h
1579 check_exec <<EOF && lrintf=yes || lrintf=no
1580 #define _ISOC9X_SOURCE  1
1581 #include <math.h>
1582 int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1583 EOF
1584
1585 enabled_any libamr_nb libamr_wb && enable libamr
1586
1587 # these are off by default, so fail if requested and not available
1588 enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1589 enabled libamr_nb  && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1590 enabled libamr_wb  && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1591 enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1592 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1593 enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1594 enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1595 enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1596 enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1597 enabled libx264    && require x264 x264.h x264_encoder_open -lx264
1598 enabled libxvid    && require Xvid xvid.h xvid_global -lxvidcore
1599 enabled dc1394     && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1600 enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1601 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1602 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1603 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1604
1605 # disable the native AC-3 decoder if liba52 is enabled
1606 enabled liba52 && disable ac3_decoder
1607
1608 _restrict=
1609 for restrict_keyword in restrict __restrict__ __restrict; do
1610     check_cc <<EOF && _restrict=$restrict_keyword && break
1611 void foo(char * $restrict_keyword p);
1612 EOF
1613 done
1614
1615 # dlopen/dlfcn.h probing
1616
1617 check_header dlfcn.h
1618
1619 if check_func dlopen; then
1620     ldl=
1621 elif check_func dlopen -ldl; then
1622     ldl=-ldl
1623 fi
1624
1625 check_func getrusage
1626 check_func2 windows.h GetProcessTimes
1627
1628 check_func fork
1629 check_func closesocket
1630
1631 test "$vhook" = "default" && vhook="$dlopen"
1632
1633 enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
1634
1635 if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1636     vhook="no"
1637     echo
1638     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1639     echo "Patches welcome."
1640     echo
1641 fi
1642
1643 if enabled vhook; then
1644     check_ldflags -rdynamic
1645     check_ldflags -export-dynamic
1646 fi
1647
1648 enabled audio_beos && add_extralibs "-lmedia -lbe"
1649
1650 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1651 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1652
1653 ##########################################
1654 # SDL check
1655
1656 sdl_too_old=no
1657 sdl=no
1658 SDL_CONFIG="${cross_prefix}sdl-config"
1659 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1660     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1661     temp_cflags $sdl_cflags
1662     temp_extralibs `"${SDL_CONFIG}" --libs`
1663     if check_lib SDL.h SDL_Init; then
1664         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1665         if test "$_sdlversion" -lt 121 ; then
1666             sdl_too_old=yes
1667         else
1668             sdl=yes
1669             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1670 #include <SDL.h>
1671 int main(void){
1672     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1673     int w = vi->current_w;
1674     return 0;
1675 }
1676 EOF
1677         fi
1678     fi
1679     restore_flags
1680 fi
1681
1682 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1683
1684 ##########################################
1685 # IPv6 check
1686
1687 enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1688 #include <sys/types.h>
1689 #include <sys/socket.h>
1690 #include <netinet/in.h>
1691 #include <netdb.h>
1692 int main( void ) {
1693   struct sockaddr_storage saddr;
1694   struct ipv6_mreq mreq6;
1695   getaddrinfo(0,0,0,0);
1696   getnameinfo(0,0,0,0,0,0,0);
1697   IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1698 }
1699 EOF
1700
1701 enabled v4l  && check_header linux/videodev.h  || disable v4l
1702 enabled v4l2 && check_header linux/videodev2.h || disable v4l2
1703
1704 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1705 if enabled bktr; then
1706     { check_header dev/bktr/ioctl_meteor.h &&
1707       check_header dev/bktr/ioctl_bt848.h; } ||
1708     { check_header machine/ioctl_meteor.h &&
1709       check_header machine/ioctl_bt848.h; } ||
1710     { check_header dev/video/meteor/ioctl_meteor.h &&
1711       check_header dev/video/bktr/ioctl_bt848.h; } ||
1712     check_header dev/ic/bt8xx.h ||
1713     disable bktr
1714 fi
1715
1716 enabled audio_oss &&
1717     check_header sys/soundcard.h ||
1718     check_header soundcard.h ||
1719     disable audio_oss
1720
1721 # Deal with the x11 frame grabber
1722 enabled x11grab                         &&
1723 enabled gpl                             &&
1724 enabled x11_grab_device_demuxer         &&
1725 check_header X11/Xlib.h                 &&
1726 check_header X11/extensions/XShm.h      &&
1727 check_func XOpenDisplay -lX11           &&
1728 check_func XShmCreateImage -lX11 -lXext &&
1729 add_extralibs -lX11 -lXext              ||
1730 disable x11_grab_device_demuxer
1731
1732 enabled debug && add_cflags -g
1733
1734 # add some useful compiler flags if supported
1735 check_cflags -Wdeclaration-after-statement
1736 check_cflags -Wall
1737 check_cflags -Wno-switch
1738 check_cflags -Wdisabled-optimization
1739 check_cflags -Wpointer-arith
1740 check_cflags -Wredundant-decls
1741 check_cflags -Wno-pointer-sign
1742 enabled extra_warnings && check_cflags -Winline
1743
1744 # add some linker flags
1745 check_ldflags -Wl,--warn-common
1746 check_ldflags $LDLATEFLAGS
1747
1748 if enabled small; then
1749     check_cflags -Os            # not all compilers support -Os
1750     optimize="small"
1751 elif enabled optimize; then
1752     if test -n "`$cc -v 2>&1 | grep xlc`"; then
1753         add_cflags  "-O5"
1754         add_ldflags "-O5"
1755     else
1756         add_cflags "-O3"
1757     fi
1758 fi
1759
1760 # PIC flags for shared library objects where they are needed
1761 if enabled shared; then
1762     # LIBOBJFLAGS may have already been set in the OS configuration
1763     if test -z "$LIBOBJFLAGS" ; then
1764         case "$arch" in
1765             x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
1766         esac
1767     fi
1768 fi
1769
1770 if enabled gprof; then
1771     add_cflags  "-p"
1772     add_ldflags "-p"
1773 fi
1774
1775 VHOOKCFLAGS="-fPIC"
1776
1777 # find if .align arg is power-of-two or not
1778 if test $asmalign_pot = "unknown"; then
1779     asmalign_pot="no"
1780     echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
1781 fi
1782
1783 enabled_any $ENCODER_LIST  && enable encoders
1784 enabled_any $DECODER_LIST  && enable decoders
1785 enabled_any $MUXER_LIST    && enable muxers
1786 enabled_any $DEMUXER_LIST  && enable demuxers
1787 enabled_any $PROTOCOL_LIST && enable protocols
1788 enabled_any $BSF_LIST      && enable bsfs
1789
1790 enabled_any $THREADS_LIST  && enable threads
1791
1792 check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1793     $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1794
1795 enabled libogg    && append pkg_requires "ogg >= 1.1"
1796 enabled libtheora && append pkg_requires "theora"
1797 enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1798 enabled dc1394    && append pkg_requires "libraw1394"
1799
1800 echo "install prefix            $PREFIX"
1801 echo "source path               $source_path"
1802 echo "C compiler                $cc"
1803 echo "make                      $make"
1804 echo ".align is power-of-two    $asmalign_pot"
1805 echo "ARCH                      $arch ($cpu)"
1806 if test "$BUILDSUF" != ""; then
1807     echo "build suffix              $BUILDSUF"
1808 fi
1809 echo "big-endian                ${bigendian-no}"
1810 if test $arch = "x86_32" -o $arch = "x86_64"; then
1811     echo "MMX enabled               ${mmx-no}"
1812     echo "CMOV enabled              ${cmov-no}"
1813     echo "CMOV is fast              ${fast_cmov-no}"
1814 fi
1815 if test $arch = "armv4l"; then
1816     echo "ARMv5TE enabled           ${armv5te-no}"
1817     echo "ARMv6 enabled             ${armv6-no}"
1818     echo "IWMMXT enabled            ${iwmmxt-no}"
1819 fi
1820 if test $arch = "mips"; then
1821     echo "MMI enabled               ${mmi-no}"
1822 fi
1823 if test $arch = "powerpc"; then
1824     echo "AltiVec enabled           ${altivec-no}"
1825     echo "dcbzl available           ${dcbzl-no}"
1826 fi
1827 echo "gprof enabled             ${gprof-no}"
1828 echo "debug symbols             ${debug-no}"
1829 echo "strip symbols             ${dostrip-no}"
1830 echo "optimize                  ${optimize-no}"
1831 echo "static                    ${static-no}"
1832 echo "shared                    ${shared-no}"
1833 echo "postprocessing support    ${pp-no}"
1834 echo "software scaler enabled   ${swscaler-no}"
1835 echo "video hooking             ${vhook-no}"
1836 if enabled vhook; then
1837     echo "Imlib2 support            ${imlib2-no}"
1838     echo "FreeType support          ${freetype2-no}"
1839 fi
1840 echo "network support           ${network-no}"
1841 if enabled network; then
1842     echo "IPv6 support              ${ipv6-no}"
1843 fi
1844 echo "threading support         ${thread_type-no}"
1845 echo "SDL support               ${sdl-no}"
1846 if enabled sdl_too_old; then
1847     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1848 fi
1849 echo "Sun medialib support      ${mlib-no}"
1850 echo "AVISynth enabled          ${avisynth-no}"
1851 echo "liba52 support            ${liba52-no}"
1852 echo "liba52 dlopened           ${liba52bin-no}"
1853 echo "libamr-nb support         ${libamr_nb-no}"
1854 echo "libamr-wb support         ${libamr_wb-no}"
1855 echo "libfaac enabled           ${libfaac-no}"
1856 echo "libfaad enabled           ${libfaad-no}"
1857 echo "libfaad dlopened          ${libfaadbin-no}"
1858 echo "libgsm enabled            ${libgsm-no}"
1859 echo "libmp3lame enabled        ${libmp3lame-no}"
1860 echo "libnut enabled            ${libnut-no}"
1861 echo "libogg enabled            ${libogg-no}"
1862 echo "libtheora enabled         ${libtheora-no}"
1863 echo "libvorbis enabled         ${libvorbis-no}"
1864 echo "x264 enabled              ${libx264-no}"
1865 echo "XviD enabled              ${libxvid-no}"
1866 echo "zlib enabled              ${zlib-no}"
1867 if ! enabled gpl; then
1868     echo "License: LGPL"
1869 else
1870     echo "License: GPL"
1871 fi
1872
1873 echo "Creating config.mak and config.h..."
1874
1875 echo "# Automatically generated by configure - do not modify!" > config.mak
1876 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1877 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1878
1879 echo "PREFIX=$PREFIX" >> config.mak
1880 echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1881 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1882 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1883 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1884 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1885 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1886 echo "MAKE=$make" >> config.mak
1887 echo "CC=$cc" >> config.mak
1888 echo "AR=$ar" >> config.mak
1889 echo "RANLIB=$ranlib" >> config.mak
1890 if enabled dostrip; then
1891     echo "STRIP=$strip" >> config.mak
1892 else
1893     echo "STRIP=echo ignoring strip" >> config.mak
1894 fi
1895
1896 echo "OPTFLAGS=$CFLAGS" >> config.mak
1897 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1898 echo "LDFLAGS=$LDFLAGS" >> config.mak
1899 echo "LDCONFIG=$LDCONFIG" >> config.mak
1900 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1901 echo "SHFLAGS=$SHFLAGS" >> config.mak
1902 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1903 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1904 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1905 echo "BUILD_STATIC=$static" >> config.mak
1906 echo "BUILDSUF=$BUILDSUF" >> config.mak
1907 echo "LIBPREF=$LIBPREF" >> config.mak
1908 echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1909 echo "LIB=$LIB" >> config.mak
1910 echo "SLIBPREF=$SLIBPREF" >> config.mak
1911 echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
1912 echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1913
1914 if enabled bigendian; then
1915   echo "WORDS_BIGENDIAN=yes" >> config.mak
1916   echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1917 fi
1918 if enabled mmx; then
1919   echo "#define __CPU__ 586" >> $TMPH
1920 fi
1921
1922 if enabled sdl; then
1923   echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1924   echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1925 fi
1926 if enabled texi2html; then
1927   echo "BUILD_DOC=yes" >> config.mak
1928 fi
1929
1930 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1931 pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1932 lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1933 lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1934 lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1935
1936
1937
1938 if enabled shared; then
1939   echo "BUILD_SHARED=yes" >> config.mak
1940   echo "PIC=-fPIC -DPIC" >> config.mak
1941   echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1942   echo "SPPVERSION=$pp_version" >> config.mak
1943   echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1944   echo "LAVCVERSION=$lavc_version" >> config.mak
1945   echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1946   echo "LAVFVERSION=$lavf_version" >> config.mak
1947   echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1948   echo "LAVUVERSION=$lavu_version" >> config.mak
1949   echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1950   echo "SWSVERSION=$sws_version" >> config.mak
1951   echo "SLIBNAME=${SLIBNAME}" >> config.mak
1952   echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1953   echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1954   echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1955   echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1956 fi
1957 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1958 echo "EXTRALIBS=$extralibs" >> config.mak
1959
1960 print_config ARCH_   $TMPH config.mak $ARCH_LIST
1961 print_config HAVE_   $TMPH config.mak $HAVE_LIST
1962 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1963                                       $DECODER_LIST  \
1964                                       $ENCODER_LIST  \
1965                                       $PARSER_LIST   \
1966                                       $BSF_LIST      \
1967                                       $DEMUXER_LIST  \
1968                                       $MUXER_LIST    \
1969                                       $PROTOCOL_LIST \
1970
1971 if test "$targetos" = darwin; then
1972   echo "#define CONFIG_DARWIN 1"  >> $TMPH
1973 fi
1974
1975 echo "#define restrict $_restrict" >> $TMPH
1976
1977 if enabled small; then
1978   echo "#define av_always_inline"  >> $TMPH
1979 fi
1980
1981 echo "SRC_PATH=\"$source_path\"" >> config.mak
1982 echo "SRC_PATH_BARE=$source_path" >> config.mak
1983 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1984
1985 # Apparently it's not possible to portably echo a backslash.
1986 if enabled asmalign_pot; then
1987   printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1988 else
1989   printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1990 fi
1991
1992
1993 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1994 if ! cmp -s $TMPH config.h; then
1995         mv -f $TMPH config.h
1996 else
1997         echo "config.h is unchanged"
1998 fi
1999
2000 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2001
2002 # build tree in object directory if source path is different from current one
2003 if enabled source_path_used; then
2004     DIRS="\
2005          doc \
2006          libavformat \
2007          libavcodec \
2008          libavcodec/alpha \
2009          libavcodec/armv4l \
2010          libavcodec/bfin \
2011          libavcodec/i386 \
2012          libavcodec/sparc \
2013          libavcodec/mlib \
2014          libavcodec/ppc \
2015          libpostproc \
2016          libavutil \
2017          libswscale \
2018          tests \
2019          tools \
2020          vhook \
2021          "
2022     FILES="\
2023           Makefile \
2024           common.mak \
2025           libavformat/Makefile \
2026           libavcodec/Makefile \
2027           libpostproc/Makefile \
2028           libavutil/Makefile \
2029           libswscale/Makefile \
2030           doc/texi2pod.pl \
2031           "
2032     for dir in $DIRS ; do
2033             mkdir -p $dir
2034     done
2035     for f in $FILES ; do
2036         ln -sf "$source_path/$f" $f
2037     done
2038 fi
2039
2040
2041 # build pkg-config files
2042 # FIXME: libdir and includedir are hardcoded and may differ from the real path.
2043
2044 pkgconfig_generate(){
2045 name=$1
2046 comment=$2
2047 version=$3
2048 libs=$4
2049 requires=$5
2050 include=$6
2051 cat <<EOF >$name.pc
2052 prefix=$PREFIX
2053 exec_prefix=\${prefix}
2054 libdir=\${exec_prefix}/lib
2055 includedir=\${prefix}/include
2056
2057 Name: $name
2058 Description: $comment
2059 Version: $version
2060 Requires: $requires
2061 Conflicts:
2062 Libs: -L\${libdir} $libs
2063 Cflags: -I\${includedir} -I\${includedir}/$include
2064 EOF
2065 }
2066
2067 pkgconfig_generate_uninstalled(){
2068 name=$1
2069 shortname=${name#lib}
2070 comment=$2
2071 version=$3
2072 libs=$4
2073 requires=$5
2074 cat <<EOF >$name-uninstalled.pc
2075 prefix=
2076 exec_prefix=
2077 libdir=\${pcfiledir}/$name
2078 includedir=\${pcfiledir}/$name
2079
2080 Name: $name
2081 Description: $comment
2082 Version: $version
2083 Requires: $requires
2084 Conflicts:
2085 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2086 Cflags: -I\${includedir}
2087 EOF
2088 }
2089
2090 pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2091 pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2092
2093 pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2094 pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2095
2096 pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2097 pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2098
2099 if enabled pp; then
2100   pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2101   pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2102 fi
2103
2104 if enabled swscaler; then
2105   pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2106   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2107 else
2108   pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2109   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2110   apply libswscale.pc sed s/^Libs:.*$/Libs:/
2111   apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2112 fi