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