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