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