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