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