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