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