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