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