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