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