]> git.sesse.net Git - ffmpeg/blob - configure
Remove declaration of non-existing functions
[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 "  --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,$(SLIBNAME_WITH_MAJOR)'
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) -MM $(CFLAGS) $(filter-out %.h,$^) | sed "s,[0-9a-z._-]*: \($(SRC_DIR)/\)*\([a-z0-9]*/\)[^/]* ,\\2&,"'
944 VHOOK_DEPEND_CMD='$(CC) -MM $(VHOOKCFLAGS) $(filter-out %.h,$^) | sed "s,^\([a-z]\),vhook/\\1,"'
945
946 # find source path
947 source_path="`dirname \"$0\"`"
948 enable source_path_used
949 if test -z "$source_path" -o "$source_path" = "." ; then
950     source_path="`pwd`"
951     disable source_path_used
952 else
953     source_path="`cd \"$source_path\"; pwd`"
954     echo "$source_path" | grep -q '[[:blank:]]' &&
955         die "Out of tree builds are impossible with whitespace in source path."
956 fi
957
958 FFMPEG_CONFIGURATION="$@"
959
960 find_things(){
961     thing=$1
962     pattern=$2
963     file=$source_path/$3
964     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
965 }
966
967 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
968 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
969 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
970 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
971 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
972 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
973 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
974 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
975 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
976 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
977
978 enable $ARCH_EXT_LIST \
979        $DECODER_LIST \
980        $ENCODER_LIST \
981        $PARSER_LIST \
982        $BSF_LIST \
983        $DEMUXER_LIST \
984        $MUXER_LIST \
985        $FILTER_LIST \
986        $PROTOCOL_LIST \
987        $INDEV_LIST \
988        $OUTDEV_LIST \
989
990 die_unknown(){
991     echo "Unknown option \"$1\"."
992     echo "See $0 --help for available options."
993     exit 1
994 }
995
996 show_list() {
997     suffix=_$1
998     shift
999     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1000     exit 0
1001 }
1002
1003 for opt do
1004     optval="${opt#*=}"
1005     case "$opt" in
1006     --extra-cflags=*) add_cflags "$optval"
1007     ;;
1008     --extra-ldflags=*) add_ldflags "$optval"
1009     ;;
1010     --extra-libs=*) add_extralibs "$optval"
1011     ;;
1012     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1013     ;;
1014     --enable-debug=*) debuglevel="$optval"
1015     ;;
1016     --enable-*=*|--disable-*=*)
1017     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1018     case "$thing" in
1019         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1020         *) die_unknown "$opt" ;;
1021     esac
1022     ;;
1023     --enable-?*|--disable-?*)
1024     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1025     if is_in $option $COMPONENT_LIST; then
1026         eval $action \$$(toupper ${option%s})_LIST
1027     elif is_in $option $CMDLINE_SELECT; then
1028         $action $option
1029     else
1030         die_unknown $opt
1031     fi
1032     ;;
1033     --list-*)
1034         NAME="${opt#--list-}"
1035         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1036         NAME=${NAME%s}
1037         eval show_list $NAME \$$(toupper $NAME)_LIST
1038     ;;
1039     --help|-h) show_help
1040     ;;
1041     *)
1042     optname="${opt%=*}"
1043     optname="${optname#--}"
1044     optname=$(echo "$optname" | sed 's/-/_/g')
1045     is_in $optname $CMDLINE_SET || die_unknown $opt
1046     eval $optname='$optval'
1047     ;;
1048     esac
1049 done
1050
1051 # OS specific
1052 case $target_os in
1053     beos|haiku|zeta)
1054         prefix="$HOME/config"
1055         # helps building libavcodec
1056         add_cflags "-DPIC -fomit-frame-pointer"
1057         # 3 gcc releases known for BeOS, each with ugly bugs
1058         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1059         case "$gcc_version" in
1060           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1061             disable mmx
1062             ;;
1063           *20010315*) echo "BeBits gcc"
1064             add_cflags "-fno-expensive-optimizations"
1065             ;;
1066         esac
1067         SHFLAGS=-nostart
1068         # enable BeOS things
1069         enable audio_beos
1070         # no need for libm, but the inet stuff
1071         # Check for BONE
1072         # XXX: actually should check for NOT net_server
1073         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1074             network_extralibs="-lbind -lsocket"
1075         else
1076             enable beos_netserver
1077             network_extralibs="-lnet"
1078         fi ;;
1079     sunos)
1080         FFSERVERLDFLAGS=""
1081         SHFLAGS='-shared -Wl,-h,$(SLIBNAME_WITH_MAJOR)'
1082         network_extralibs="-lsocket -lnsl"
1083         ;;
1084     netbsd)
1085         oss_demuxer_extralibs="-lossaudio"
1086         oss_muxer_extralibs="-lossaudio"
1087         ;;
1088     openbsd)
1089         disable need_memalign
1090         LIBOBJFLAGS='$(PIC)'
1091         SHFLAGS='-shared'
1092         SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1093         SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1094         SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1095         oss_demuxer_extralibs="-lossaudio"
1096         oss_muxer_extralibs="-lossaudio"
1097         ;;
1098     freebsd)
1099         disable need_memalign
1100         ;;
1101     bsd/os)
1102         osextralibs="-lpoll -lgnugetopt"
1103         strip="strip -d"
1104         ;;
1105     darwin)
1106         disable need_memalign
1107         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1108         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1109         strip="strip -x"
1110         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1111         SLIBSUF=".dylib"
1112         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1113         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1114         FFSERVERLDFLAGS=-Wl,-bind_at_load
1115         ;;
1116     mingw32*)
1117         target_os=mingw32
1118         shlibdir="$bindir"
1119         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1120         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1121         if enabled swscale; then
1122             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1123             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1124         fi
1125         disable ffserver
1126         SLIBPREF=""
1127         SLIBSUF=".dll"
1128         EXESUF=".exe"
1129         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1130         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1131         SLIB_EXTRA_CMD='-lib /machine:i386 /def:$(@:$(SLIBSUF)=.def)'
1132         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1133         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1134         SHFLAGS='-shared -Wl,--output-def,$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1135         ;;
1136     cygwin*)
1137         target_os=cygwin
1138         shlibdir="$bindir"
1139         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1140         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1141         if enabled swscale; then
1142             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1143             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1144         fi
1145         EXESUF=".exe"
1146         SLIBPREF="cyg"
1147         SLIBSUF=".dll"
1148         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1149         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1150         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1151         ;;
1152     *-dos|freedos|opendos)
1153         disable ffplay ffserver vhook
1154         disable $INDEV_LIST $OUTDEV_LIST
1155         network_extralibs="-lsocket"
1156         EXESUF=".exe"
1157         ;;
1158     linux)
1159         LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1160         enable dv1394
1161         ;;
1162     irix*)
1163         target_os=irix
1164         ranlib="echo ignoring ranlib"
1165         ;;
1166     os/2*)
1167         strip="lxlite"
1168         ln_s="cp -f"
1169         EXESUF=".exe"
1170         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1171         SHFLAGS='$(NAME).def -Zdll -Zomf'
1172         FFSERVERLDFLAGS=""
1173         LIBSUF="_s.a"
1174         SLIBPREF=""
1175         SLIBSUF=".dll"
1176         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1177         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1178         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(NAME).def; \
1179           echo PROTMODE >> $(NAME).def; \
1180           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(NAME).def; \
1181           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(NAME).def; \
1182           echo EXPORTS >> $(NAME).def; \
1183           emxexp -o $(OBJS) >> $(NAME).def'
1184         SLIB_EXTRA_CMD='emximp -o $(LIBPREF)$(NAME)_dll.a $(NAME).def; \
1185           emximp -o $(LIBPREF)$(NAME)_dll.lib $(NAME).def;'
1186         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1187         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1188         disable vhook
1189         ;;
1190     interix)
1191         disable vhook
1192         ;;
1193
1194     *)
1195         target_os="${target_os}-UNKNOWN"
1196         ;;
1197 esac
1198
1199 # set temporary file name
1200 if test ! -z "$TMPDIR" ; then
1201     TMPDIR1="${TMPDIR}"
1202 elif test ! -z "$TEMPDIR" ; then
1203     TMPDIR1="${TEMPDIR}"
1204 else
1205     TMPDIR1="/tmp"
1206 fi
1207
1208 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1209 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1210 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1211 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1212 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1213 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1214
1215
1216 add_extralibs $osextralibs
1217
1218 disabled logging && logfile=/dev/null
1219
1220 echo "# $0 $@" >$logfile
1221 set >>$logfile
1222
1223 case "$arch" in
1224     i386|i486|i586|i686|i86pc|BePC)
1225         arch="x86_32"
1226         enable fast_unaligned
1227     ;;
1228     x86_64|amd64)
1229         arch="x86_32"
1230         enable fast_unaligned
1231         check_cc <<EOF && enable fast_64bit && arch="x86_64"
1232         int test[sizeof(char*) - 7];
1233 EOF
1234     ;;
1235     # armv4l is a subset of armv[567]*l
1236     arm|armv[4567]*l)
1237         arch="armv4l"
1238     ;;
1239     alpha)
1240         arch="alpha"
1241         enable fast_64bit
1242     ;;
1243     "Power Macintosh"|ppc|powerpc)
1244         arch="powerpc"
1245     ;;
1246     ppc64)
1247         arch="powerpc"
1248         enable fast_64bit
1249     ;;
1250     mips|mipsel|IP*)
1251         arch="mips"
1252     ;;
1253     sun4u|sparc64)
1254         arch="sparc64"
1255         enable fast_64bit
1256     ;;
1257     sparc)
1258         arch="sparc"
1259     ;;
1260     sh4)
1261         arch="sh4"
1262     ;;
1263     parisc)
1264         arch="parisc"
1265     ;;
1266     parisc64)
1267         arch="parisc"
1268         enable fast_64bit
1269     ;;
1270     s390|s390x)
1271         arch="s390"
1272     ;;
1273     m68k)
1274         arch="m68k"
1275     ;;
1276     ia64)
1277         arch="ia64"
1278         enable fast_64bit
1279     ;;
1280     bfin)
1281         arch="bfin"
1282     ;;
1283     *)
1284         arch="unknown"
1285     ;;
1286 esac
1287
1288 enable $arch
1289 enabled_any x86_32 x86_64 && enable x86
1290 enabled     sparc64       && enable sparc
1291
1292 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1293 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1294
1295 test -n "$cross_prefix" && enable cross_compile
1296 cc="${cross_prefix}${cc}"
1297 ar="${cross_prefix}${ar}"
1298 nm="${cross_prefix}${nm}"
1299 ranlib="${cross_prefix}${ranlib}"
1300 strip="${cross_prefix}${strip}"
1301
1302 # we need to build at least one lib type
1303 if ! enabled_any static shared; then
1304     cat <<EOF
1305 At least one library type must be built.
1306 Specify --enable-static to build the static libraries or --enable-shared to
1307 build the shared libraries as well. To only build the shared libraries specify
1308 --disable-static in addition to --enable-shared.
1309 EOF
1310     exit 1;
1311 fi
1312
1313 disabled static && LIBNAME=""
1314
1315 if enabled_any libfaad libfaadbin ; then
1316     if check_header faad.h; then
1317         check_cc << EOF
1318 #include <faad.h>
1319 #ifndef FAAD2_VERSION
1320 ok faad1
1321 #endif
1322 int main(void) { return 0; }
1323 EOF
1324         test $? = 0 && enable libfaad2
1325     else
1326         die "FAAD test failed."
1327     fi
1328 fi
1329
1330
1331 if ! enabled gpl; then
1332     die_gpl_disabled(){
1333         name=$1
1334         shift
1335         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1336     }
1337     die_gpl_disabled "The Postprocessing code" postproc
1338     die_gpl_disabled "liba52"                  liba52
1339     die_gpl_disabled "libx264"                 libx264
1340     die_gpl_disabled "libxvidcore"             libxvid
1341     die_gpl_disabled "FAAD2"                   libfaad2
1342     die_gpl_disabled "The X11 grabber"         x11grab
1343     die_gpl_disabled "The software scaler"     swscale
1344 fi
1345
1346 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1347     die "libamr is nonfree and --enable-nonfree is not specified."
1348 fi
1349
1350 check_deps $ARCH_EXT_LIST
1351
1352 test -z "$need_memalign" && need_memalign="$mmx"
1353
1354 #Darwin CC versions
1355 if test $target_os = darwin; then
1356     if $cc -v 2>&1 | grep -q xlc; then
1357         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1358     else
1359         add_cflags "-pipe"
1360         check_cflags "-force_cpusubtype_ALL"
1361         check_cflags "-Wno-sign-compare"
1362         enabled shared || add_cflags -mdynamic-no-pic
1363     fi
1364 fi
1365
1366 disabled optimizations || add_cflags -fomit-frame-pointer
1367
1368 # Add processor-specific flags
1369 if test $cpu != "generic"; then
1370     warn_altivec(){
1371         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1372     }
1373     case $cpu in
1374         601|ppc601|PowerPC601)
1375             add_cflags "-mcpu=601"
1376             warn_altivec enabled PPC601
1377         ;;
1378         603*|ppc603*|PowerPC603*)
1379             add_cflags "-mcpu=603"
1380             warn_altivec enabled PPC603
1381         ;;
1382         604*|ppc604*|PowerPC604*)
1383             add_cflags "-mcpu=604"
1384             warn_altivec enabled PPC604
1385         ;;
1386         G3|g3|75*|ppc75*|PowerPC75*)
1387             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1388             warn_altivec enabled PPC75x
1389         ;;
1390         G4|g4|745*|ppc745*|PowerPC745*)
1391             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1392             warn_altivec disabled PPC745x
1393         ;;
1394         74*|ppc74*|PowerPC74*)
1395             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1396             warn_altivec disabled PPC74xx
1397         ;;
1398         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1399             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1400             warn_altivec disabled PPC970
1401             enable ppc64
1402         ;;
1403         Cell|CELL|cell)
1404             add_cflags "-mcpu=cell"
1405             warn_altivec disabled Cell
1406             enable ppc64
1407         ;;
1408         # targets that do NOT support conditional mov (cmov)
1409         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1410             add_cflags "-march=$cpu"
1411             disable cmov
1412         ;;
1413         # targets that do support conditional mov (cmov)
1414         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1415             add_cflags "-march=$cpu"
1416             enable cmov
1417             enable fast_cmov
1418         ;;
1419         # targets that do support conditional mov but on which it's slow
1420         pentium4|pentium4m|prescott|nocona)
1421             add_cflags "-march=$cpu"
1422             enable cmov
1423             disable fast_cmov
1424         ;;
1425         sparc64)
1426             add_cflags "-mcpu=v9"
1427         ;;
1428         arm*)
1429             add_cflags "-mcpu=$cpu"
1430         ;;
1431         *)
1432             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1433         ;;
1434     esac
1435 fi
1436
1437 gnu_make(){
1438     $1 --version 2>&1 | grep -q GNU
1439 }
1440
1441 if ! gnu_make $make; then
1442     gnu_make gmake && make=gmake || die "GNU make not found."
1443 fi
1444
1445 # make sure we can execute files in $TMPDIR
1446 cat >$TMPSH 2>>$logfile <<EOF
1447 #! /bin/sh
1448 EOF
1449 chmod +x $TMPSH >>$logfile 2>&1
1450 if ! $TMPSH >>$logfile 2>&1; then
1451     cat <<EOF
1452 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1453 variable to another directory and make sure that $TMPDIR1 is not mounted
1454 noexec.
1455 EOF
1456     die "Sanity test failed."
1457 fi
1458 rm $TMPSH
1459
1460 # compiler sanity check
1461 check_exec <<EOF
1462 int main(void){ return 0; }
1463 EOF
1464 if test "$?" != 0; then
1465     echo "$cc is unable to create an executable file."
1466     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1467         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1468         echo "Only do this if you know what cross compiling means."
1469     fi
1470     die "C compiler test failed."
1471 fi
1472
1473 check_cc <<EOF || die "Symbol mangling check failed."
1474 int ff_extern;
1475 EOF
1476 sym=$($nm -P -g $TMPO)
1477 extern_prefix=${sym%%ff_extern*}
1478
1479 check_asm inline_asm '""'
1480
1481 if enabled x86; then
1482     # check whether EBP is available on x86
1483     # As 'i' is stored on the stack, this program will crash
1484     # if the base pointer is used to access it because the
1485     # base pointer is cleared in the inline assembly code.
1486     check_exec_crash <<EOF && enable ebp_available
1487     volatile int i=0;
1488     asm volatile (
1489         "xorl %%ebp, %%ebp"
1490     ::: "%ebp");
1491     return i;
1492 EOF
1493
1494     # check wether EBX is available on x86
1495     check_asm ebx_available '"":::"%ebx"'
1496
1497     # check whether binutils is new enough to compile SSSE3/MMX2
1498     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1499     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1500
1501     check_asm bswap '"bswap %%eax" ::: "%eax"'
1502 fi
1503
1504 # check for assembler specific support
1505
1506 if test $arch = "powerpc"; then
1507 check_cc <<EOF && enable dcbzl
1508 int main(void) {
1509     register long zero = 0;
1510     char data[1024];
1511     asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1512 return 0;
1513 }
1514 EOF
1515 fi
1516
1517 # check for SIMD availability
1518
1519 # AltiVec flags: The FSF version of GCC differs from the Apple version
1520 if enabled altivec; then
1521     check_cflags -maltivec -mabi=altivec &&
1522         check_header altivec.h ||
1523         check_cflags -faltivec
1524
1525     # check if our compiler supports Motorola AltiVec C API
1526     enabled altivec_h &&
1527         inc_altivec_h="#include <altivec.h>" ||
1528         inc_altivec_h=
1529     check_cc <<EOF || disable altivec
1530 $inc_altivec_h
1531 int main(void) {
1532     vector signed int v1, v2, v3;
1533     v1 = vec_add(v2,v3);
1534     return 0;
1535 }
1536 EOF
1537 fi
1538
1539 # We have to check if pld is a nop and disable it.
1540 enabled armv4l  && check_asm pld     '"pld [r0]"'
1541 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1542 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1543 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1544 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1545 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1546
1547 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1548
1549 # ---
1550 # big/little-endian test
1551 check_cc <<EOF || die "endian test failed"
1552 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1553 EOF
1554 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1555
1556 # ---
1557 # check availability of some header files
1558
1559 if check_func dlopen; then
1560     ldl=
1561 elif check_func dlopen -ldl; then
1562     ldl=-ldl
1563 fi
1564
1565 check_func  fork
1566 check_func  gethrtime
1567 check_func  getrusage
1568 check_func  inet_aton $network_extralibs
1569 check_func  memalign
1570 check_func  mkstemp
1571 check_func2 windows.h GetProcessTimes
1572
1573 check_header byteswap.h
1574 check_header conio.h
1575 check_header dlfcn.h
1576 check_header malloc.h
1577 check_header sys/mman.h
1578 check_header termios.h
1579
1580 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1581     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1582 fi
1583
1584 enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1585
1586 # ffserver uses poll(),
1587 # if it's not found we can emulate it using select().
1588 if enabled ffserver; then
1589     check_header poll.h
1590     check_header sys/select.h
1591 fi
1592
1593 # check for some common methods of building with pthread support
1594 # do this before the optional library checks as some of them require pthreads
1595 if enabled pthreads; then
1596     if check_func pthread_create; then
1597         :
1598     elif check_func pthread_create -pthread; then
1599         add_cflags -pthread
1600         add_extralibs -pthread
1601     elif check_func pthread_create -pthreads; then
1602         add_cflags -pthreads
1603         add_extralibs -pthreads
1604     elif ! check_lib pthread.h pthread_create -lpthread; then
1605         die "ERROR: can't find pthreads library"
1606     fi
1607 fi
1608
1609 for thread in $THREADS_LIST; do
1610     if enabled $thread; then
1611         test -n "$thread_type" &&
1612             die "ERROR: Only one thread type must be selected." ||
1613             thread_type="$thread"
1614     fi
1615 done
1616
1617 check_lib math.h sin -lm
1618
1619 # test for C99 functions in math.h
1620 for func in llrint lrint lrintf round roundf; do
1621     check_exec <<EOF && enable $func || disable $func
1622 #define _ISOC9X_SOURCE  1
1623 #include <math.h>
1624 int main(void) { return ($func(3.999f) > 0)?0:1; }
1625 EOF
1626 done
1627
1628 # these are off by default, so fail if requested and not available
1629 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1630 enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1631 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1632 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1633 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1634 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1635 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1636 enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1637 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1638 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1639 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1640 enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1641 enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1642 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1643
1644 # disable the native AC-3 decoder if liba52 is enabled
1645 enabled liba52 && disable ac3_decoder
1646
1647 # libdc1394 check
1648 if enabled libdc1394; then
1649     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1650         enable libdc1394_2; } ||
1651     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1652         enable libdc1394_1; } ||
1653     die "ERROR: No version of libdc1394 found "
1654 fi
1655
1656
1657 _restrict=
1658 for restrict_keyword in restrict __restrict__ __restrict; do
1659     check_cc <<EOF && _restrict=$restrict_keyword && break
1660 void foo(char * $restrict_keyword p);
1661 EOF
1662 done
1663
1664 test "$vhook" = "default" && vhook="$dlopen"
1665
1666 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1667     disable vhook
1668     echo
1669     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1670     echo "Patches welcome."
1671     echo
1672 fi
1673
1674 if enabled vhook; then
1675     check_ldflags -rdynamic
1676     check_ldflags -export-dynamic
1677 fi
1678
1679 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1680 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1681
1682 ##########################################
1683 # SDL check
1684
1685 disable sdl_too_old
1686 disable sdl
1687 SDL_CONFIG="${cross_prefix}sdl-config"
1688 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1689     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1690     temp_cflags $sdl_cflags
1691     temp_extralibs `"${SDL_CONFIG}" --libs`
1692     if check_lib2 SDL.h SDL_Init; then
1693         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1694         if test "$_sdlversion" -lt 121 ; then
1695             enable sdl_too_old
1696         else
1697             enable sdl
1698             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1699 #include <SDL.h>
1700 int main(int argc, char **argv){
1701     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1702     int w = vi->current_w;
1703     return 0;
1704 }
1705 EOF
1706         fi
1707     fi
1708     restore_flags
1709 fi
1710
1711 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1712
1713 check_type sys/socket.h socklen_t
1714
1715 ##########################################
1716 # Network check
1717
1718 if enabled network; then
1719     # Prefer arpa/inet.h over winsock2
1720     if check_header arpa/inet.h ; then
1721         check_func closesocket
1722     elif check_header winsock2.h ; then
1723         network_extralibs="-lws2_32"
1724         check_type ws2tcpip.h socklen_t
1725         check_func2 winsock2.h closesocket
1726     fi
1727 fi
1728
1729 ##########################################
1730 # IPv6 check
1731
1732 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1733 #include <sys/types.h>
1734 #include <sys/socket.h>
1735 #include <netinet/in.h>
1736 #include <netdb.h>
1737 int main(void) {
1738     struct sockaddr_storage saddr;
1739     struct ipv6_mreq mreq6;
1740     getaddrinfo(0,0,0,0);
1741     getnameinfo(0,0,0,0,0,0,0);
1742     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1743 }
1744 EOF
1745
1746 check_header linux/videodev.h
1747 check_header linux/videodev2.h
1748
1749 check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1750
1751 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1752 { check_header dev/bktr/ioctl_meteor.h &&
1753   check_header dev/bktr/ioctl_bt848.h; } ||
1754 { check_header machine/ioctl_meteor.h &&
1755   check_header machine/ioctl_bt848.h; } ||
1756 { check_header dev/video/meteor/ioctl_meteor.h &&
1757   check_header dev/video/bktr/ioctl_bt848.h; } ||
1758 check_header dev/ic/bt8xx.h
1759
1760 check_header sys/soundcard.h
1761 check_header soundcard.h
1762
1763 # deal with the X11 frame grabber
1764 enabled x11grab                         &&
1765 check_header X11/Xlib.h                 &&
1766 check_header X11/extensions/XShm.h      &&
1767 check_func XOpenDisplay -lX11           &&
1768 check_func XShmCreateImage -lX11 -lXext
1769
1770 enabled debug && add_cflags -g"$debuglevel"
1771
1772 # add some useful compiler flags if supported
1773 check_cflags -Wdeclaration-after-statement
1774 check_cflags -Wall
1775 check_cflags -Wno-switch
1776 check_cflags -Wdisabled-optimization
1777 check_cflags -Wpointer-arith
1778 check_cflags -Wredundant-decls
1779 check_cflags -Wno-pointer-sign
1780 check_cflags -Wcast-qual
1781 check_cflags -Wwrite-strings
1782 check_cflags -Wtype-limits
1783 enabled extra_warnings && check_cflags -Winline
1784
1785 # add some linker flags
1786 check_ldflags -Wl,--warn-common
1787 check_ldflags $LDLATEFLAGS
1788 check_ldflags -Wl,-Bsymbolic
1789
1790 if enabled small; then
1791     check_cflags -Os            # not all compilers support -Os
1792     optimizations="small"
1793 elif enabled optimizations; then
1794     if $cc -v 2>&1 | grep -q xlc; then
1795         add_cflags  "-O5"
1796         add_ldflags "-O5"
1797     else
1798         add_cflags "-O3"
1799     fi
1800 fi
1801 check_cflags -fno-math-errno
1802 check_cflags -fno-signed-zeros
1803
1804 # PIC flags for shared library objects where they are needed
1805 if enabled shared; then
1806     # LIBOBJFLAGS may have already been set in the OS configuration
1807     if test -z "$LIBOBJFLAGS" ; then
1808         case "$arch" in
1809             x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1810         esac
1811     fi
1812 fi
1813
1814 if enabled gprof; then
1815     add_cflags  "-p"
1816     add_ldflags "-p"
1817 fi
1818
1819 VHOOKCFLAGS="-fPIC"
1820
1821 # Find out if the .align argument is a power of two or not.
1822 if test $asmalign_pot = "unknown"; then
1823     disable asmalign_pot
1824     echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1825 fi
1826
1827 enabled_any $DECODER_LIST      && enable decoders
1828 enabled_any $ENCODER_LIST      && enable encoders
1829 enabled_any $BSF_LIST          && enable bsfs
1830 enabled_any $DEMUXER_LIST      && enable demuxers
1831 enabled_any $MUXER_LIST        && enable muxers
1832 enabled_any $FILTER_LIST       && enable filters
1833 enabled_any $INDEV_LIST        && enable demuxers
1834 enabled_any $OUTDEV_LIST       && enable muxers
1835 enabled_any $PROTOCOL_LIST     && enable protocols
1836
1837 enabled_any $THREADS_LIST      && enable threads
1838
1839 check_deps $CONFIG_LIST       \
1840            $HAVE_LIST         \
1841            $DECODER_LIST      \
1842            $ENCODER_LIST      \
1843            $PARSER_LIST       \
1844            $BSF_LIST          \
1845            $DEMUXER_LIST      \
1846            $MUXER_LIST        \
1847            $FILTER_LIST       \
1848            $INDEV_LIST        \
1849            $OUTDEV_LIST       \
1850            $PROTOCOL_LIST     \
1851
1852 enabled libdc1394 && append pkg_requires "libraw1394"
1853 enabled libtheora && append pkg_requires "theora"
1854 enabled libvorbis && append pkg_requires "vorbisenc"
1855
1856 echo "install prefix            $prefix"
1857 echo "source path               $source_path"
1858 echo "C compiler                $cc"
1859 echo "make                      $make"
1860 echo ".align is power-of-two    $asmalign_pot"
1861 echo "ARCH                      $arch ($cpu)"
1862 if test "$build_suffix" != ""; then
1863     echo "build suffix              $build_suffix"
1864 fi
1865 echo "big-endian                ${bigendian-no}"
1866 if test $arch = "x86_32" -o $arch = "x86_64"; then
1867     echo "MMX enabled               ${mmx-no}"
1868     echo "CMOV enabled              ${cmov-no}"
1869     echo "CMOV is fast              ${fast_cmov-no}"
1870     echo "EBX available             ${ebx_available-no}"
1871     echo "EBP available             ${ebp_available-no}"
1872 fi
1873 if test $arch = "armv4l"; then
1874     echo "ARMv5TE enabled           ${armv5te-no}"
1875     echo "ARMv6 enabled             ${armv6-no}"
1876     echo "IWMMXT enabled            ${iwmmxt-no}"
1877 fi
1878 if test $arch = "mips"; then
1879     echo "MMI enabled               ${mmi-no}"
1880 fi
1881 if test $arch = "powerpc"; then
1882     echo "AltiVec enabled           ${altivec-no}"
1883     echo "dcbzl available           ${dcbzl-no}"
1884 fi
1885 echo "gprof enabled             ${gprof-no}"
1886 echo "debug symbols             ${debug-no}"
1887 echo "strip symbols             ${stripping-no}"
1888 echo "optimizations             ${optimizations-no}"
1889 echo "static                    ${static-no}"
1890 echo "shared                    ${shared-no}"
1891 echo "postprocessing support    ${postproc-no}"
1892 echo "software scaler enabled   ${swscale-no}"
1893 echo "new filter support        ${avfilter-no}"
1894 echo "filters using lavformat   ${avfilter_lavf-no}"
1895 echo "video hooking             ${vhook-no}"
1896 if enabled vhook; then
1897     echo "Imlib2 support            ${imlib2-no}"
1898     echo "FreeType support          ${freetype2-no}"
1899 fi
1900 echo "network support           ${network-no}"
1901 if enabled network; then
1902     echo "IPv6 support              ${ipv6-no}"
1903 fi
1904 echo "threading support         ${thread_type-no}"
1905 echo "SDL support               ${sdl-no}"
1906 if enabled sdl_too_old; then
1907     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1908 fi
1909 echo "Sun medialib support      ${mlib-no}"
1910 echo "AVISynth enabled          ${avisynth-no}"
1911 echo "liba52 support            ${liba52-no}"
1912 echo "liba52 dlopened           ${liba52bin-no}"
1913 echo "libamr-nb support         ${libamr_nb-no}"
1914 echo "libamr-wb support         ${libamr_wb-no}"
1915 echo "libdc1394 support         ${libdc1394-no}"
1916 echo "libfaac enabled           ${libfaac-no}"
1917 echo "libfaad enabled           ${libfaad-no}"
1918 echo "libfaad dlopened          ${libfaadbin-no}"
1919 echo "libgsm enabled            ${libgsm-no}"
1920 echo "libmp3lame enabled        ${libmp3lame-no}"
1921 echo "libnut enabled            ${libnut-no}"
1922 echo "libtheora enabled         ${libtheora-no}"
1923 echo "libvorbis enabled         ${libvorbis-no}"
1924 echo "x264 enabled              ${libx264-no}"
1925 echo "XviD enabled              ${libxvid-no}"
1926 echo "zlib enabled              ${zlib-no}"
1927 echo
1928
1929 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
1930     echo "Enabled ${type}s:"
1931     eval list=\$$(toupper $type)_LIST
1932     for part in $list; do
1933         enabled $part && echo ${part%_*}
1934     done | sort | pr -3 -t
1935     echo
1936 done
1937
1938 enabled nonfree &&
1939     echo "License: unredistributable" ||
1940     (enabled gpl &&
1941         echo "License: GPL" ||
1942         echo "License: LGPL")
1943
1944 echo "Creating config.mak and config.h..."
1945
1946 echo "# Automatically generated by configure - do not modify!" > config.mak
1947 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1948 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1949 echo "#define FFMPEG_CONFIG_H" >> $TMPH
1950 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1951
1952 echo "PREFIX=$prefix" >> config.mak
1953 echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1954 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1955 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1956 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1957 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1958 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1959 echo "MAKE=$make" >> config.mak
1960 echo "CC=$cc" >> config.mak
1961 echo "AR=$ar" >> config.mak
1962 echo "RANLIB=$ranlib" >> config.mak
1963 echo "LN_S=$ln_s" >> config.mak
1964 enabled stripping &&
1965     echo "STRIP=$strip" >> config.mak ||
1966     echo "STRIP=echo ignoring strip" >> config.mak
1967
1968 echo "OPTFLAGS=$CFLAGS" >> config.mak
1969 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1970 echo "LDFLAGS=$LDFLAGS" >> config.mak
1971 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1972 echo "SHFLAGS=$SHFLAGS" >> config.mak
1973 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1974 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1975 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1976 echo "BUILD_STATIC=$static" >> config.mak
1977 echo "BUILDSUF=$build_suffix" >> config.mak
1978 echo "FULLNAME=$FULLNAME" >> config.mak
1979 echo "LIBPREF=$LIBPREF" >> config.mak
1980 echo "LIBSUF=$LIBSUF" >> config.mak
1981 echo "LIBNAME=$LIBNAME" >> config.mak
1982 echo "SLIBPREF=$SLIBPREF" >> config.mak
1983 echo "SLIBSUF=$SLIBSUF" >> config.mak
1984 echo "EXESUF=$EXESUF" >> config.mak
1985 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
1986 echo "VHOOK_DEPEND_CMD=$VHOOK_DEPEND_CMD" >> config.mak
1987
1988 if enabled bigendian; then
1989     echo "WORDS_BIGENDIAN=yes" >> config.mak
1990     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1991 fi
1992
1993 if enabled sdl; then
1994     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1995     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1996 fi
1997 if enabled texi2html; then
1998     echo "BUILD_DOC=yes" >> config.mak
1999 fi
2000
2001 get_version(){
2002     name=$1
2003     file=$source_path/$2
2004     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2005     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2006     lcname=$(tolower $name)
2007     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2008     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2009 }
2010
2011 get_version LIBSWSCALE  libswscale/swscale.h
2012 get_version LIBPOSTPROC libpostproc/postprocess.h
2013 get_version LIBAVCODEC  libavcodec/avcodec.h
2014 get_version LIBAVDEVICE libavdevice/avdevice.h
2015 get_version LIBAVFORMAT libavformat/avformat.h
2016 get_version LIBAVUTIL   libavutil/avutil.h
2017 get_version LIBAVFILTER libavfilter/avfilter.h
2018
2019 if enabled shared; then
2020     echo "BUILD_SHARED=yes" >> config.mak
2021     echo "PIC=-fPIC -DPIC" >> config.mak
2022     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2023     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2024     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2025     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2026     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2027     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2028     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2029 fi
2030 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2031 echo "EXTRALIBS=$extralibs" >> config.mak
2032
2033 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2034 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2035 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2036                                       $DECODER_LIST      \
2037                                       $ENCODER_LIST      \
2038                                       $PARSER_LIST       \
2039                                       $BSF_LIST          \
2040                                       $DEMUXER_LIST      \
2041                                       $MUXER_LIST        \
2042                                       $FILTER_LIST       \
2043                                       $PROTOCOL_LIST     \
2044                                       $INDEV_LIST        \
2045                                       $OUTDEV_LIST       \
2046
2047 echo "#define restrict $_restrict" >> $TMPH
2048
2049 if enabled small; then
2050     echo "#define av_always_inline"  >> $TMPH
2051 fi
2052
2053 echo "SRC_PATH=\"$source_path\"" >> config.mak
2054 echo "SRC_PATH_BARE=$source_path" >> config.mak
2055 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2056
2057 # Apparently it's not possible to portably echo a backslash.
2058 enabled asmalign_pot &&
2059     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2060     printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2061
2062 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2063
2064 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2065
2066 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2067 cmp -s $TMPH config.h &&
2068     echo "config.h is unchanged" ||
2069     mv -f $TMPH config.h
2070
2071 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2072
2073 # build tree in object directory if source path is different from current one
2074 if enabled source_path_used; then
2075     DIRS="\
2076         doc               \
2077         libavcodec        \
2078         libavcodec/alpha  \
2079         libavcodec/armv4l \
2080         libavcodec/bfin   \
2081         libavcodec/i386   \
2082         libavcodec/mlib   \
2083         libavcodec/ppc    \
2084         libavcodec/sh4    \
2085         libavcodec/sparc  \
2086         libavdevice       \
2087         libavfilter       \
2088         libavformat       \
2089         libavutil         \
2090         libpostproc       \
2091         libswscale        \
2092         tests             \
2093         tools             \
2094         vhook             \
2095         "
2096     FILES="\
2097         Makefile             \
2098         common.mak           \
2099         doc/texi2pod.pl      \
2100         libavcodec/Makefile  \
2101         libavdevice/Makefile \
2102         libavfilter/Makefile \
2103         libavformat/Makefile \
2104         libavutil/Makefile   \
2105         libpostproc/Makefile \
2106         libswscale/Makefile  \
2107         "
2108     for dir in $DIRS ; do
2109         mkdir -p $dir
2110     done
2111     for f in $FILES ; do
2112         $ln_s "$source_path/$f" $f
2113     done
2114 fi
2115
2116
2117 # build pkg-config files
2118 # FIXME: libdir and includedir are hardcoded and may differ from the real path.
2119
2120 pkgconfig_generate(){
2121 name=$1
2122 comment=$2
2123 version=$3
2124 libs=$4
2125 requires=$5
2126 cat <<EOF >$name.pc
2127 prefix=$prefix
2128 exec_prefix=\${prefix}
2129 libdir=\${exec_prefix}/lib
2130 includedir=\${prefix}/include
2131
2132 Name: $name
2133 Description: $comment
2134 Version: $version
2135 Requires: $requires
2136 Conflicts:
2137 Libs: -L\${libdir} $libs
2138 Cflags: -I\${includedir}
2139 EOF
2140 }
2141
2142 pkgconfig_generate_uninstalled(){
2143 name=$1
2144 shortname=${name#lib}
2145 comment=$2
2146 version=$3
2147 libs=$4
2148 requires=$5
2149 cat <<EOF >$name-uninstalled.pc
2150 prefix=
2151 exec_prefix=
2152 libdir=\${pcfiledir}/$name
2153 includedir=\${pcfiledir}
2154
2155 Name: $name
2156 Description: $comment
2157 Version: $version
2158 Requires: $requires
2159 Conflicts:
2160 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2161 Cflags: -I\${includedir}
2162 EOF
2163 }
2164
2165 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" -lavutil ""
2166 pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2167
2168 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "-lavcodec $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2169 pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2170
2171 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "-lavformat $extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2172 pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2173
2174 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "-lavdevice $extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2175 pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2176 if enabled postproc; then
2177     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" -lpostproc ""
2178     pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2179 fi
2180
2181 if enabled swscale; then
2182     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" -lswscale "libavutil = $LIBAVUTIL_VERSION"
2183     pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2184 else
2185     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2186     pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2187     apply libswscale.pc sed s/^Libs:.*$/Libs:/
2188     apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2189 fi
2190
2191 if enabled avfilter; then
2192   pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "-lavfilter $extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION" ffmpeg
2193   pkgconfig_generate_uninstalled libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2194 fi