Check for VERSION in source dir.
[libav.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
43 fi
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
53 fi
54 exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Standard options:
63 --help print this message
64 --logfile=FILE log tests and output to FILE [config.err]
65 --disable-logging do not log configure debug information
66 --prefix=PREFIX install in PREFIX [$prefix]
67 --bindir=DIR install binaries in DIR [PREFIX/bin]
68 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
69 --libdir=DIR install libs in DIR [PREFIX/lib]
70 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
71 --incdir=DIR install includes in DIR [PREFIX/include]
72 --mandir=DIR install man page in DIR [PREFIX/share/man]
73
74 Configuration options:
75 --disable-static do not build static libraries [no]
76 --enable-shared build shared libraries [no]
77 --enable-gpl allow use of GPL code, the resulting libs
78 and binaries will be under GPL [no]
79 --enable-version3 upgrade (L)GPL to version 3 [no]
80 --enable-nonfree allow use of nonfree code, the resulting libs
81 and binaries will be unredistributable [no]
82 --disable-doc do not build documentation
83 --disable-ffmpeg disable ffmpeg build
84 --disable-ffplay disable ffplay build
85 --disable-ffserver disable ffserver build
86 --enable-postproc enable GPLed postprocessing support [no]
87 --enable-avfilter video filter support [no]
88 --enable-avfilter-lavf video filters dependent on avformat [no]
89 --enable-beosthreads use BeOS threads [no]
90 --enable-os2threads use OS/2 threads [no]
91 --enable-pthreads use pthreads [no]
92 --enable-w32threads use Win32 threads [no]
93 --enable-x11grab enable X11 grabbing [no]
94 --disable-network disable network support [no]
95 --disable-ipv6 disable IPv6 support [no]
96 --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
97 --enable-gray enable full grayscale support (slower color)
98 --disable-swscale-alpha disable alpha channel support in swscale
99 --disable-fastdiv disable table-based division
100 --enable-small optimize for size instead of speed
101 --disable-aandct disable AAN DCT code
102 --disable-fft disable FFT code
103 --disable-golomb disable Golomb code
104 --disable-lpc disable LPC code
105 --disable-mdct disable MDCT code
106 --disable-rdft disable RDFT code
107 --disable-vaapi disable VAAPI code
108 --disable-vdpau disable VDPAU code
109 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
110 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
111 --enable-memalign-hack emulate memalign, interferes with memory debuggers
112 --enable-beos-netserver enable BeOS netserver
113 --disable-encoder=NAME disable encoder NAME
114 --enable-encoder=NAME enable encoder NAME
115 --disable-encoders disable all encoders
116 --disable-decoder=NAME disable decoder NAME
117 --enable-decoder=NAME enable decoder NAME
118 --disable-decoders disable all decoders
119 --disable-hwaccel=NAME disable hwaccel NAME
120 --enable-hwaccel=NAME enable hwaccel NAME
121 --disable-hwaccels disable all hwaccels
122 --disable-muxer=NAME disable muxer NAME
123 --enable-muxer=NAME enable muxer NAME
124 --disable-muxers disable all muxers
125 --disable-demuxer=NAME disable demuxer NAME
126 --enable-demuxer=NAME enable demuxer NAME
127 --disable-demuxers disable all demuxers
128 --enable-parser=NAME enable parser NAME
129 --disable-parser=NAME disable parser NAME
130 --disable-parsers disable all parsers
131 --enable-bsf=NAME enable bitstream filter NAME
132 --disable-bsf=NAME disable bitstream filter NAME
133 --disable-bsfs disable all bitstream filters
134 --enable-protocol=NAME enable protocol NAME
135 --disable-protocol=NAME disable protocol NAME
136 --disable-protocols disable all protocols
137 --disable-indev=NAME disable input device NAME
138 --disable-outdev=NAME disable output device NAME
139 --disable-indevs disable input devices
140 --disable-outdevs disable output devices
141 --disable-devices disable all devices
142 --enable-filter=NAME enable filter NAME
143 --disable-filter=NAME disable filter NAME
144 --disable-filters disable all filters
145 --list-decoders show all available decoders
146 --list-encoders show all available encoders
147 --list-hwaccels show all available hardware accelerators
148 --list-muxers show all available muxers
149 --list-demuxers show all available demuxers
150 --list-parsers show all available parsers
151 --list-protocols show all available protocols
152 --list-bsfs show all available bitstream filters
153 --list-indevs show all available input devices
154 --list-outdevs show all available output devices
155 --list-filters show all available filters
156
157 External library support:
158 --enable-avisynth enable reading of AVISynth script files [no]
159 --enable-bzlib enable bzlib [autodetect]
160 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
161 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
162 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
163 and libraw1394 [no]
164 --enable-libdirac enable Dirac support via libdirac [no]
165 --enable-libfaac enable FAAC support via libfaac [no]
166 --enable-libfaad enable FAAD support via libfaad [no]
167 --enable-libfaadbin open libfaad.so.0 at runtime [no]
168 --enable-libgsm enable GSM support via libgsm [no]
169 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
170 --enable-libnut enable NUT (de)muxing via libnut,
171 native (de)muxer exists [no]
172 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
173 --enable-libschroedinger enable Dirac support via libschroedinger [no]
174 --enable-libspeex enable Speex decoding via libspeex [no]
175 --enable-libtheora enable Theora encoding via libtheora [no]
176 --enable-libvorbis enable Vorbis encoding via libvorbis,
177 native implementation exists [no]
178 --enable-libx264 enable H.264 encoding via x264 [no]
179 --enable-libxvid enable Xvid encoding via xvidcore,
180 native MPEG-4/Xvid encoder exists [no]
181 --enable-mlib enable Sun medialib [no]
182 --enable-zlib enable zlib [autodetect]
183
184 Advanced options (experts only):
185 --source-path=PATH path to source code [$source_path]
186 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
187 --enable-cross-compile assume a cross-compiler is used
188 --sysroot=PATH root of cross-build tree
189 --sysinclude=PATH location of cross-build system headers
190 --target-os=OS compiler targets OS [$target_os]
191 --target-exec=CMD command to run executables on target
192 --target-path=DIR path to view of build directory on target
193 --nm=NM use nm tool
194 --as=AS use assembler AS [$as_default]
195 --cc=CC use C compiler CC [$cc_default]
196 --ld=LD use linker LD
197 --host-cc=HOSTCC use host C compiler HOSTCC
198 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
199 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
200 --host-libs=HLIBS use libs HLIBS when linking for host
201 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
202 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
203 --extra-libs=ELIBS add ELIBS [$ELIBS]
204 --extra-version=STRING version string suffix []
205 --build-suffix=SUFFIX library name suffix []
206 --arch=ARCH select architecture [$arch]
207 --cpu=CPU select the minimum required CPU (affects
208 instruction selection, may crash on older CPUs)
209 --enable-powerpc-perf enable performance report on PPC
210 (requires enabling PMC)
211 --disable-altivec disable AltiVec optimizations
212 --disable-amd3dnow disable 3DNow! optimizations
213 --disable-amd3dnowext disable 3DNow! extended optimizations
214 --disable-mmx disable MMX optimizations
215 --disable-mmx2 disable MMX2 optimizations
216 --disable-sse disable SSE optimizations
217 --disable-ssse3 disable SSSE3 optimizations
218 --disable-armv5te disable armv5te optimizations
219 --disable-armv6 disable armv6 optimizations
220 --disable-armv6t2 disable armv6t2 optimizations
221 --disable-armvfp disable ARM VFP optimizations
222 --disable-iwmmxt disable iwmmxt optimizations
223 --disable-mmi disable MMI optimizations
224 --disable-neon disable neon optimizations
225 --disable-vis disable VIS optimizations
226 --disable-yasm disable use of yasm assembler
227 --enable-pic build position-independent code
228
229 Developer options (useful when working on FFmpeg itself):
230 --disable-debug disable debugging symbols
231 --enable-debug=LEVEL set the debug level [$debuglevel]
232 --enable-gprof enable profiling with gprof [$gprof]
233 --disable-optimizations disable compiler optimizations
234 --enable-extra-warnings enable more compiler warnings
235 --disable-stripping disable stripping of executables and shared libraries
236
237 NOTE: Object files are built at the place where configure is launched.
238 EOF
239 exit 0
240 }
241
242 log(){
243 echo "$@" >> $logfile
244 }
245
246 log_file(){
247 log BEGIN $1
248 pr -n -t $1 >> $logfile
249 log END $1
250 }
251
252 echolog(){
253 log "$@"
254 echo "$@"
255 }
256
257 die(){
258 echolog "$@"
259 cat <<EOF
260
261 If you think configure made a mistake, make sure you are using the latest
262 version from SVN. If the latest version fails, report the problem to the
263 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
264 EOF
265 if disabled logging; then
266 cat <<EOF
267 Rerun configure with logging enabled (do not use --disable-logging), and
268 include the log this produces with your report.
269 EOF
270 else
271 cat <<EOF
272 Include the log file "$logfile" produced by configure as this will help
273 solving the problem.
274 EOF
275 fi
276 exit 1
277 }
278
279 # Avoid locale weirdness, besides we really just want to translate ASCII.
280 toupper(){
281 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
282 }
283
284 tolower(){
285 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
286 }
287
288 c_escape(){
289 echo "$*" | sed 's/["\\]/\\\0/g'
290 }
291
292 sh_quote(){
293 v=$(echo "$1" | sed "s/'/'\\\\''/g")
294 test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
295 echo "$v"
296 }
297
298 filter(){
299 pat=$1
300 shift
301 for v; do
302 eval "case $v in $pat) echo $v ;; esac"
303 done
304 }
305
306 set_all(){
307 value=$1
308 shift
309 for var in $*; do
310 eval $var=$value
311 done
312 }
313
314 set_weak(){
315 value=$1
316 shift
317 for var; do
318 eval : \${$var:=$value}
319 done
320 }
321
322 pushvar(){
323 for var in $*; do
324 eval level=\${${var}_level:=0}
325 eval ${var}_${level}="\$$var"
326 eval ${var}_level=$(($level+1))
327 done
328 }
329
330 popvar(){
331 for var in $*; do
332 eval level=\${${var}_level:-0}
333 test $level = 0 && continue
334 eval level=$(($level-1))
335 eval $var="\${${var}_${level}}"
336 eval ${var}_level=$level
337 eval unset ${var}_${level}
338 done
339 }
340
341 enable(){
342 set_all yes $*
343 }
344
345 disable(){
346 set_all no $*
347 }
348
349 enable_weak(){
350 set_weak yes $*
351 }
352
353 disable_weak(){
354 set_weak no $*
355 }
356
357 enable_safe(){
358 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
359 }
360
361 disable_safe(){
362 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
363 }
364
365 do_enable_deep(){
366 for var; do
367 enabled $var && continue
368 eval sel="\$${var}_select"
369 eval sgs="\$${var}_suggest"
370 pushvar var sgs
371 enable_deep $sel
372 popvar sgs
373 enable_deep_weak $sgs
374 popvar var
375 done
376 }
377
378 enable_deep(){
379 do_enable_deep $*
380 enable $*
381 }
382
383 enable_deep_weak(){
384 do_enable_deep $*
385 enable_weak $*
386 }
387
388 enabled(){
389 test "${1#!}" = "$1" && op== || op=!=
390 eval test "x\$${1#!}" $op "xyes"
391 }
392
393 disabled(){
394 test "${1#!}" = "$1" && op== || op=!=
395 eval test "x\$${1#!}" $op "xno"
396 }
397
398 enabled_all(){
399 for opt; do
400 enabled $opt || return 1
401 done
402 }
403
404 disabled_all(){
405 for opt; do
406 disabled $opt || return 1
407 done
408 }
409
410 enabled_any(){
411 for opt; do
412 enabled $opt && return 0
413 done
414 }
415
416 disabled_any(){
417 for opt; do
418 disabled $opt && return 0
419 done
420 return 1
421 }
422
423 set_default(){
424 for opt; do
425 eval : \${$opt:=\$${opt}_default}
426 done
427 }
428
429 is_in(){
430 value=$1
431 shift
432 for var in $*; do
433 [ $var = $value ] && return 0
434 done
435 return 1
436 }
437
438 check_deps(){
439 for cfg; do
440 cfg="${cfg#!}"
441 enabled ${cfg}_checking && die "Circular dependency for $cfg."
442 disabled ${cfg}_checking && continue
443 enable ${cfg}_checking
444
445 eval dep_all="\$${cfg}_deps"
446 eval dep_any="\$${cfg}_deps_any"
447 eval dep_sel="\$${cfg}_select"
448 eval dep_sgs="\$${cfg}_suggest"
449
450 pushvar cfg dep_all dep_any dep_sel dep_sgs
451 check_deps $dep_all $dep_any $dep_sel $dep_sgs
452 popvar cfg dep_all dep_any dep_sel dep_sgs
453
454 enabled_all $dep_all || disable $cfg
455 enabled_any $dep_any || disable $cfg
456 disabled_any $dep_sel && disable $cfg
457
458 if enabled $cfg; then
459 eval dep_extralibs="\$${cfg}_extralibs"
460 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
461 enable_deep $dep_sel
462 enable_deep_weak $dep_sgs
463 fi
464
465 disable ${cfg}_checking
466 done
467 }
468
469 print_config(){
470 pfx=$1
471 header=$2
472 makefile=$3
473 shift 3
474 for cfg; do
475 ucname="$(toupper $cfg)"
476 if enabled $cfg; then
477 echo "#define ${pfx}${ucname} 1" >> $header
478 echo "${pfx}${ucname}=yes" >> $makefile
479 else
480 echo "#define ${pfx}${ucname} 0" >> $header
481 fi
482 done
483 }
484
485 flags_saved(){
486 (: ${SAVE_CFLAGS?}) 2> /dev/null
487 }
488
489 save_flags(){
490 flags_saved && return
491 SAVE_CFLAGS="$CFLAGS"
492 SAVE_LDFLAGS="$LDFLAGS"
493 SAVE_extralibs="$extralibs"
494 }
495
496 restore_flags(){
497 flags_saved || return
498 CFLAGS="$SAVE_CFLAGS"
499 LDFLAGS="$SAVE_LDFLAGS"
500 extralibs="$SAVE_extralibs"
501 unset SAVE_CFLAGS
502 unset SAVE_LDFLAGS
503 unset SAVE_extralibs
504 }
505
506 temp_cflags(){
507 save_flags
508 CFLAGS="$CFLAGS $*"
509 }
510
511 temp_ldflags(){
512 save_flags
513 LDFLAGS="$LDFLAGS $*"
514 }
515
516 temp_extralibs(){
517 save_flags
518 extralibs="$extralibs $*"
519 }
520
521 append(){
522 var=$1
523 shift
524 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
525 eval "$var=\"\$$var $*\""
526 }
527
528 add_cppflags(){
529 append CPPFLAGS $($filter_cppflags "$@")
530 }
531
532 add_cflags(){
533 append CFLAGS $($filter_cflags "$@")
534 }
535
536 add_asflags(){
537 append ASFLAGS $($filter_asflags "$@")
538 }
539
540 add_ldflags(){
541 append LDFLAGS "$@"
542 }
543
544 add_extralibs(){
545 append extralibs "$@"
546 }
547
548 check_cmd(){
549 log "$@"
550 "$@" >> $logfile 2>&1
551 }
552
553 check_cc(){
554 log check_cc "$@"
555 cat > $TMPC
556 log_file $TMPC
557 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
558 }
559
560 check_cpp(){
561 log check_cpp "$@"
562 cat > $TMPC
563 log_file $TMPC
564 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
565 }
566
567 check_as(){
568 log check_as "$@"
569 cat > $TMPC
570 log_file $TMPC
571 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
572 }
573
574 check_asm(){
575 log check_asm "$@"
576 name="$1"
577 asm="$2"
578 shift 2
579 disable $name
580 check_as "$@" <<EOF && enable $name
581 void foo(void){ __asm__ volatile($asm); }
582 EOF
583 }
584
585 check_yasm(){
586 log check_yasm "$@"
587 echo "$1" > $TMPS
588 log_file $TMPS
589 shift 1
590 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
591 }
592
593 check_ld(){
594 log check_ld "$@"
595 check_cc || return
596 flags=''
597 libs=''
598 for f; do
599 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
600 done
601 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
602 }
603
604 check_cppflags(){
605 log check_cppflags "$@"
606 set -- $($filter_cppflags "$@")
607 check_cc "$@" <<EOF && append CPPFLAGS "$@"
608 int x;
609 EOF
610 }
611
612 check_cflags(){
613 log check_cflags "$@"
614 set -- $($filter_cflags "$@")
615 check_cc "$@" <<EOF && append CFLAGS "$@"
616 int x;
617 EOF
618 }
619
620 check_ldflags(){
621 log check_ldflags "$@"
622 check_ld "$@" <<EOF && add_ldflags "$@"
623 int main(void){ return 0; }
624 EOF
625 }
626
627 check_header(){
628 log check_header "$@"
629 header=$1
630 shift
631 disable_safe $header
632 check_cpp "$@" <<EOF && enable_safe $header
633 #include <$header>
634 int x;
635 EOF
636 }
637
638 check_func(){
639 log check_func "$@"
640 func=$1
641 shift
642 disable $func
643 check_ld "$@" <<EOF && enable $func
644 extern int $func();
645 int main(void){ $func(); }
646 EOF
647 }
648
649 check_func_headers(){
650 log check_func_headers "$@"
651 headers=$1
652 func=$2
653 shift 2
654 disable $func
655 incs=""
656 for hdr in $headers; do
657 incs="$incs
658 #include <$hdr>"
659 done
660 check_ld "$@" <<EOF && enable $func && enable_safe $headers
661 $incs
662 int main(int argc, char **argv){
663 return (long) $func;
664 }
665 EOF
666 }
667
668 check_cpp_condition(){
669 log check_cpp_condition "$@"
670 header=$1
671 condition=$2
672 check_cpp <<EOF
673 #include <$header>
674 #if !($condition)
675 #error "unsatisfied condition: $condition"
676 #endif
677 EOF
678 }
679
680 check_lib(){
681 log check_lib "$@"
682 header="$1"
683 func="$2"
684 shift 2
685 temp_extralibs "$@"
686 check_header $header && check_func $func && add_extralibs "$@"
687 err=$?
688 restore_flags
689 return $err
690 }
691
692 check_lib2(){
693 log check_lib2 "$@"
694 headers="$1"
695 func="$2"
696 shift 2
697 temp_extralibs "$@"
698 check_func_headers "$headers" $func && add_extralibs "$@"
699 err=$?
700 restore_flags
701 return $err
702 }
703
704 check_exec(){
705 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
706 }
707
708 check_exec_crash(){
709 code=$(cat)
710
711 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
712 # are safe but may not be available everywhere. Thus we use
713 # raise(SIGTERM) instead. The check is run in a subshell so we
714 # can redirect the "Terminated" message from the shell. SIGBUS
715 # is not defined by standard C so it is used conditionally.
716
717 (check_exec "$@") >> $logfile 2>&1 <<EOF
718 #include <signal.h>
719 static void sighandler(int sig){
720 raise(SIGTERM);
721 }
722 int main(void){
723 signal(SIGILL, sighandler);
724 signal(SIGFPE, sighandler);
725 signal(SIGSEGV, sighandler);
726 #ifdef SIGBUS
727 signal(SIGBUS, sighandler);
728 #endif
729 { $code }
730 }
731 EOF
732 }
733
734 check_type(){
735 log check_type "$@"
736 headers=$1
737 type=$2
738 shift 2
739 disable $type
740 incs=""
741 for hdr in $headers; do
742 incs="$incs
743 #include <$hdr>"
744 done
745 check_cc "$@" <<EOF && enable $type
746 $incs
747 $type v;
748 EOF
749 }
750
751 require(){
752 name="$1"
753 header="$2"
754 func="$3"
755 shift 3
756 check_lib $header $func "$@" || die "ERROR: $name not found"
757 }
758
759 require2(){
760 name="$1"
761 headers="$2"
762 func="$3"
763 shift 3
764 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
765 }
766
767 check_foo_config(){
768 cfg=$1
769 pkg=$2
770 header=$3
771 func=$4
772 shift 4
773 disable $cfg
774 check_cmd ${pkg}-config --version
775 err=$?
776 if test "$err" = 0; then
777 temp_cflags $(${pkg}-config --cflags)
778 temp_extralibs $(${pkg}-config --libs)
779 check_lib "$@" $header $func && enable $cfg
780 fi
781 return $err
782 }
783
784 check_host_cc(){
785 log check_host_cc "$@"
786 cat > $TMPC
787 log_file $TMPC
788 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
789 }
790
791 check_host_cflags(){
792 log check_host_cflags "$@"
793 check_host_cc "$@" <<EOF && append host_cflags "$@"
794 int x;
795 EOF
796 }
797
798 apply(){
799 file=$1
800 shift
801 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
802 }
803
804 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
805 # system-dependent things.
806
807 COMPONENT_LIST="
808 bsfs
809 decoders
810 demuxers
811 encoders
812 filters
813 hwaccels
814 indevs
815 muxers
816 outdevs
817 parsers
818 protocols
819 "
820
821 CONFIG_LIST="
822 $COMPONENT_LIST
823 aandct
824 avfilter
825 avfilter_lavf
826 avisynth
827 beos_netserver
828 bzlib
829 doc
830 fastdiv
831 ffmpeg
832 ffplay
833 ffserver
834 fft
835 golomb
836 gpl
837 gprof
838 gray
839 hardcoded_tables
840 ipv6
841 libdc1394
842 libdirac
843 libfaac
844 libfaad
845 libfaadbin
846 libgsm
847 libmp3lame
848 libnut
849 libopencore_amrnb
850 libopencore_amrwb
851 libopenjpeg
852 libschroedinger
853 libspeex
854 libtheora
855 libvorbis
856 libx264
857 libxvid
858 lpc
859 mdct
860 memalign_hack
861 mlib
862 mpegaudio_hp
863 network
864 nonfree
865 pic
866 postproc
867 powerpc_perf
868 rdft
869 runtime_cpudetect
870 shared
871 small
872 static
873 swscale_alpha
874 vaapi
875 vdpau
876 version3
877 x11grab
878 zlib
879 "
880
881 THREADS_LIST='
882 beosthreads
883 os2threads
884 pthreads
885 w32threads
886 '
887
888 ARCH_LIST='
889 alpha
890 arm
891 avr32
892 avr32_ap
893 avr32_uc
894 bfin
895 ia64
896 m68k
897 mips
898 mips64
899 parisc
900 ppc
901 ppc64
902 s390
903 sh4
904 sparc
905 sparc64
906 x86
907 x86_32
908 x86_64
909 '
910
911 ARCH_EXT_LIST='
912 altivec
913 amd3dnow
914 amd3dnowext
915 armv5te
916 armv6
917 armv6t2
918 armvfp
919 iwmmxt
920 mmi
921 mmx
922 mmx2
923 neon
924 ppc4xx
925 sse
926 ssse3
927 vis
928 '
929
930 HAVE_LIST="
931 $ARCH_EXT_LIST
932 $THREADS_LIST
933 alsa_asoundlib_h
934 altivec_h
935 arpa_inet_h
936 attribute_packed
937 bigendian
938 bswap
939 closesocket
940 cmov
941 conio_h
942 dcbzl
943 dev_bktr_ioctl_bt848_h
944 dev_bktr_ioctl_meteor_h
945 dev_ic_bt8xx_h
946 dev_video_meteor_ioctl_meteor_h
947 dev_video_bktr_ioctl_bt848_h
948 dlfcn_h
949 dlopen
950 dos_paths
951 ebp_available
952 ebx_available
953 fast_64bit
954 fast_cmov
955 fast_unaligned
956 fork
957 gethrtime
958 GetProcessTimes
959 getrusage
960 inet_aton
961 inline_asm
962 isatty
963 ldbrx
964 libdc1394_1
965 libdc1394_2
966 llrint
967 log2
968 loongson
969 lrint
970 lrintf
971 lzo1x_999_compress
972 machine_ioctl_bt848_h
973 machine_ioctl_meteor_h
974 malloc_h
975 memalign
976 mkstemp
977 pld
978 posix_memalign
979 round
980 roundf
981 sdl
982 sdl_video_size
983 setmode
984 socklen_t
985 soundcard_h
986 poll_h
987 sys_mman_h
988 sys_resource_h
989 sys_select_h
990 sys_soundcard_h
991 sys_videoio_h
992 ten_operands
993 termios_h
994 threads
995 truncf
996 vfp_args
997 VirtualAlloc
998 winsock2_h
999 xform_asm
1000 yasm
1001 "
1002
1003 # options emitted with CONFIG_ prefix but not available on command line
1004 CONFIG_EXTRA="
1005 gplv3
1006 lgplv3
1007 "
1008
1009 CMDLINE_SELECT="
1010 $ARCH_EXT_LIST
1011 $CONFIG_LIST
1012 $THREADS_LIST
1013 cross_compile
1014 debug
1015 extra_warnings
1016 logging
1017 optimizations
1018 stripping
1019 yasm
1020 "
1021
1022 PATHS_LIST='
1023 bindir
1024 datadir
1025 incdir
1026 libdir
1027 mandir
1028 prefix
1029 shlibdir
1030 '
1031
1032 CMDLINE_SET="
1033 $PATHS_LIST
1034 arch
1035 as
1036 build_suffix
1037 cc
1038 cpu
1039 cross_prefix
1040 dep_cc
1041 extra_version
1042 host_cc
1043 host_cflags
1044 host_ldflags
1045 host_libs
1046 host_os
1047 ld
1048 logfile
1049 nm
1050 source_path
1051 sysinclude
1052 sysroot
1053 target_exec
1054 target_os
1055 target_path
1056 "
1057
1058 CMDLINE_APPEND="
1059 extra_cflags
1060 "
1061
1062 # code dependency declarations
1063
1064 # architecture extensions
1065 altivec_deps="ppc"
1066 amd3dnow_deps="mmx"
1067 amd3dnowext_deps="amd3dnow"
1068 armv5te_deps="arm"
1069 armv6_deps="arm"
1070 armv6t2_deps="arm"
1071 armvfp_deps="arm"
1072 iwmmxt_deps="arm"
1073 mmi_deps="mips"
1074 mmx_deps="x86"
1075 mmx2_deps="mmx"
1076 neon_deps="arm"
1077 ppc4xx_deps="ppc"
1078 sse_deps="mmx"
1079 ssse3_deps="sse"
1080 vis_deps="sparc"
1081
1082 need_memalign="altivec neon sse"
1083 inline_asm_deps="!tms470"
1084
1085 # decoders / encoders / hardware accelerators
1086 aac_decoder_select="fft mdct aac_parser"
1087 aac_encoder_select="fft mdct"
1088 ac3_decoder_select="fft mdct ac3_parser"
1089 alac_encoder_select="lpc"
1090 atrac3_decoder_select="fft mdct"
1091 cavs_decoder_select="golomb"
1092 cook_decoder_select="fft mdct"
1093 cscd_decoder_suggest="zlib"
1094 dca_decoder_select="fft mdct"
1095 dnxhd_encoder_select="aandct"
1096 dxa_decoder_select="zlib"
1097 eac3_decoder_select="ac3_decoder"
1098 eamad_decoder_select="aandct"
1099 eatgq_decoder_select="aandct"
1100 eatqi_decoder_select="aandct"
1101 ffv1_decoder_select="golomb"
1102 flac_decoder_select="golomb"
1103 flac_encoder_select="golomb lpc"
1104 flashsv_decoder_select="zlib"
1105 flashsv_encoder_select="zlib"
1106 flv_decoder_select="h263_decoder"
1107 flv_encoder_select="h263_encoder"
1108 h261_encoder_select="aandct"
1109 h263_decoder_select="h263_parser"
1110 h263_encoder_select="aandct"
1111 h263_vaapi_hwaccel_deps="va_va_h"
1112 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1113 h263i_decoder_select="h263_decoder"
1114 h263p_encoder_select="h263_encoder"
1115 h264_decoder_select="golomb"
1116 h264_vaapi_hwaccel_deps="va_va_h"
1117 h264_vaapi_hwaccel_select="vaapi"
1118 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1119 h264_vdpau_decoder_select="vdpau h264_decoder"
1120 imc_decoder_select="fft mdct"
1121 jpegls_decoder_select="golomb"
1122 jpegls_encoder_select="golomb"
1123 ljpeg_encoder_select="aandct"
1124 loco_decoder_select="golomb"
1125 mjpeg_encoder_select="aandct"
1126 mlp_decoder_select="mlp_parser"
1127 mpeg1video_encoder_select="aandct"
1128 mpeg2video_encoder_select="aandct"
1129 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1130 mpeg4_encoder_select="h263_encoder"
1131 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1132 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1133 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1134 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1135 mpeg2_vaapi_hwaccel_deps="va_va_h"
1136 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1137 mpeg4_vaapi_hwaccel_deps="va_va_h"
1138 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1139 mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1140 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1141 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1142 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1143 msmpeg4v1_decoder_select="h263_decoder"
1144 msmpeg4v1_encoder_select="h263_encoder"
1145 msmpeg4v2_decoder_select="h263_decoder"
1146 msmpeg4v2_encoder_select="h263_encoder"
1147 msmpeg4v3_decoder_select="h263_decoder"
1148 msmpeg4v3_encoder_select="h263_encoder"
1149 nellymoser_decoder_select="fft mdct"
1150 nellymoser_encoder_select="fft mdct"
1151 png_decoder_select="zlib"
1152 png_encoder_select="zlib"
1153 qdm2_decoder_select="fft mdct rdft"
1154 rv10_decoder_select="h263_decoder"
1155 rv10_encoder_select="h263_encoder"
1156 rv20_decoder_select="h263_decoder"
1157 rv20_encoder_select="h263_encoder"
1158 rv30_decoder_select="golomb"
1159 rv40_decoder_select="golomb"
1160 shorten_decoder_select="golomb"
1161 sonic_decoder_select="golomb"
1162 sonic_encoder_select="golomb"
1163 sonic_ls_encoder_select="golomb"
1164 svq3_decoder_select="golomb"
1165 svq3_decoder_suggest="zlib"
1166 theora_decoder_select="vp3_decoder"
1167 tiff_decoder_suggest="zlib"
1168 tiff_encoder_suggest="zlib"
1169 truehd_decoder_select="mlp_decoder"
1170 tscc_decoder_select="zlib"
1171 vc1_decoder_select="h263_decoder"
1172 vc1_vaapi_hwaccel_deps="va_va_h"
1173 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1174 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1175 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1176 vorbis_decoder_select="fft mdct"
1177 vorbis_encoder_select="fft mdct"
1178 vp6a_decoder_select="vp6_decoder"
1179 vp6f_decoder_select="vp6_decoder"
1180 wmav1_decoder_select="fft mdct"
1181 wmav1_encoder_select="fft mdct"
1182 wmav2_decoder_select="fft mdct"
1183 wmav2_encoder_select="fft mdct"
1184 wmv1_decoder_select="h263_decoder"
1185 wmv1_encoder_select="h263_encoder"
1186 wmv2_decoder_select="h263_decoder"
1187 wmv2_encoder_select="h263_encoder"
1188 wmv3_decoder_select="vc1_decoder"
1189 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1190 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1191 zlib_decoder_select="zlib"
1192 zlib_encoder_select="zlib"
1193 zmbv_decoder_select="zlib"
1194 zmbv_encoder_select="zlib"
1195
1196 # parsers
1197 h264_parser_select="golomb"
1198
1199 # bitstream_filters
1200 aac_adtstoasc_bsf_select="aac_parser"
1201
1202 # external libraries
1203 libdirac_decoder_deps="libdirac !libschroedinger"
1204 libdirac_encoder_deps="libdirac"
1205 libfaac_encoder_deps="libfaac"
1206 libfaad_decoder_deps="libfaad"
1207 libfaadbin_decoder_extralibs='$ldl'
1208 libgsm_decoder_deps="libgsm"
1209 libgsm_encoder_deps="libgsm"
1210 libgsm_ms_decoder_deps="libgsm"
1211 libgsm_ms_encoder_deps="libgsm"
1212 libmp3lame_encoder_deps="libmp3lame"
1213 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1214 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1215 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1216 libopenjpeg_decoder_deps="libopenjpeg"
1217 libschroedinger_decoder_deps="libschroedinger"
1218 libschroedinger_encoder_deps="libschroedinger"
1219 libspeex_decoder_deps="libspeex"
1220 libtheora_encoder_deps="libtheora"
1221 libvorbis_encoder_deps="libvorbis"
1222 libx264_encoder_deps="libx264"
1223 libxvid_encoder_deps="libxvid"
1224
1225 # demuxers / muxers
1226 ac3_demuxer_deps="ac3_parser"
1227 asf_stream_muxer_select="asf_muxer"
1228 avisynth_demuxer_deps="avisynth"
1229 dirac_demuxer_deps="dirac_parser"
1230 eac3_demuxer_select="ac3_parser"
1231 ipod_muxer_select="mov_muxer"
1232 libnut_demuxer_deps="libnut"
1233 libnut_muxer_deps="libnut"
1234 matroska_audio_muxer_select="matroska_muxer"
1235 matroska_demuxer_suggest="zlib bzlib"
1236 mov_demuxer_suggest="zlib"
1237 mp3_demuxer_deps="mpegaudio_parser"
1238 mp4_muxer_select="mov_muxer"
1239 mpegtsraw_demuxer_select="mpegts_demuxer"
1240 mxf_d10_muxer_select="mxf_muxer"
1241 psp_muxer_select="mov_muxer"
1242 rtp_muxer_deps="network rtp_protocol"
1243 rtsp_demuxer_deps="sdp_demuxer"
1244 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1245 spdif_muxer_select="aac_parser"
1246 tg2_muxer_select="mov_muxer"
1247 tgp_muxer_select="mov_muxer"
1248 w64_demuxer_deps="wav_demuxer"
1249
1250 # indevs / outdevs
1251 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1252 alsa_indev_extralibs="-lasound"
1253 alsa_outdev_deps="alsa_asoundlib_h"
1254 alsa_outdev_extralibs="-lasound"
1255 audio_beos_indev_deps="audio_beos"
1256 audio_beos_indev_extralibs="-lmedia -lbe"
1257 audio_beos_outdev_deps="audio_beos"
1258 audio_beos_outdev_extralibs="-lmedia -lbe"
1259 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1260 dv1394_indev_deps="dv1394 dv_demuxer"
1261 jack_indev_deps="jack_jack_h"
1262 jack_indev_extralibs="-ljack"
1263 libdc1394_indev_deps="libdc1394"
1264 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1265 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1266 v4l_indev_deps="linux_videodev_h"
1267 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1268 vfwcap_indev_deps="capCreateCaptureWindow"
1269 vfwcap_indev_extralibs="-lvfw32"
1270 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1271 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1272
1273 # protocols
1274 gopher_protocol_deps="network"
1275 http_protocol_deps="network"
1276 rtmp_protocol_deps="tcp_protocol"
1277 rtp_protocol_deps="udp_protocol"
1278 tcp_protocol_deps="network"
1279 udp_protocol_deps="network"
1280
1281 # filters
1282 movie_filter_deps="avfilter_lavf"
1283
1284 # programs
1285 ffplay_deps="sdl"
1286 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1287 ffserver_extralibs='$ldl'
1288
1289 doc_deps="texi2html"
1290
1291 # default parameters
1292
1293 logfile="config.err"
1294
1295 # installation paths
1296 prefix_default="/usr/local"
1297 bindir_default='${prefix}/bin'
1298 datadir_default='${prefix}/share/ffmpeg'
1299 incdir_default='${prefix}/include'
1300 libdir_default='${prefix}/lib'
1301 mandir_default='${prefix}/share/man'
1302 shlibdir_default="$libdir_default"
1303
1304 # toolchain
1305 ar="ar"
1306 cc_default="gcc"
1307 cc_version=\"unknown\"
1308 host_cc_default="gcc"
1309 ln_s="ln -sf"
1310 nm_default="nm"
1311 objformat="elf"
1312 ranlib="ranlib"
1313 strip="strip"
1314 yasmexe="yasm"
1315
1316 # machine
1317 arch=$(uname -m)
1318 cpu="generic"
1319
1320 # OS
1321 target_os=$(tolower $(uname -s))
1322 host_os=$target_os
1323
1324 # configurable options
1325 enable debug
1326 enable doc
1327 enable fastdiv
1328 enable ffmpeg
1329 enable ffplay
1330 enable ffserver
1331 enable ipv6
1332 enable mpegaudio_hp
1333 enable network
1334 enable optimizations
1335 enable protocols
1336 enable static
1337 enable stripping
1338 enable swscale_alpha
1339
1340 # build settings
1341 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1342 FFSERVERLDFLAGS=-Wl,-E
1343 LIBPREF="lib"
1344 LIBSUF=".a"
1345 FULLNAME='$(NAME)$(BUILDSUF)'
1346 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1347 SLIBPREF="lib"
1348 SLIBSUF=".so"
1349 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1350 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1351 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1352 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1353
1354 CC_O='-o $@'
1355
1356 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1357 host_libs='-lm'
1358
1359 target_path='.'
1360
1361 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1362 # full relative path for objects in subdirectories for non-recursive Make.
1363 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1364 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1365
1366 # find source path
1367 source_path="$(dirname "$0")"
1368 enable source_path_used
1369 if test -f configure; then
1370 source_path="$(pwd)"
1371 disable source_path_used
1372 else
1373 source_path="$(cd "$source_path"; pwd)"
1374 echo "$source_path" | grep -q '[[:blank:]]' &&
1375 die "Out of tree builds are impossible with whitespace in source path."
1376 test -e "$source_path/config.h" &&
1377 die "Out of tree builds are impossible with config.h in source dir."
1378 fi
1379
1380 for v in "$@"; do
1381 r=${v#*=}
1382 l=${v%"$r"}
1383 r=$(sh_quote "$r")
1384 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1385 done
1386
1387 find_things(){
1388 thing=$1
1389 pattern=$2
1390 file=$source_path/$3
1391 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1392 }
1393
1394 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1395 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1396 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1397 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1398 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1399 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1400 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1401 OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1402 INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
1403 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1404 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1405
1406 enable $ARCH_EXT_LIST \
1407 $DECODER_LIST \
1408 $ENCODER_LIST \
1409 $HWACCEL_LIST \
1410 $PARSER_LIST \
1411 $BSF_LIST \
1412 $DEMUXER_LIST \
1413 $MUXER_LIST \
1414 $FILTER_LIST \
1415 $PROTOCOL_LIST \
1416 $INDEV_LIST \
1417 $OUTDEV_LIST \
1418
1419 die_unknown(){
1420 echo "Unknown option \"$1\"."
1421 echo "See $0 --help for available options."
1422 exit 1
1423 }
1424
1425 show_list() {
1426 suffix=_$1
1427 shift
1428 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1429 exit 0
1430 }
1431
1432 for opt do
1433 optval="${opt#*=}"
1434 case "$opt" in
1435 --extra-ldflags=*) add_ldflags $optval
1436 ;;
1437 --extra-libs=*) add_extralibs $optval
1438 ;;
1439 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1440 ;;
1441 --enable-debug=*) debuglevel="$optval"
1442 ;;
1443 --enable-*=*|--disable-*=*)
1444 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1445 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1446 eval list=\$$(toupper $thing)_LIST
1447 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1448 $action $(filter "$name" $list)
1449 ;;
1450 --enable-?*|--disable-?*)
1451 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1452 if is_in $option $COMPONENT_LIST; then
1453 test $action = disable && action=unset
1454 eval $action \$$(toupper ${option%s})_LIST
1455 elif is_in $option $CMDLINE_SELECT; then
1456 $action $option
1457 else
1458 die_unknown $opt
1459 fi
1460 ;;
1461 --list-*)
1462 NAME="${opt#--list-}"
1463 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1464 NAME=${NAME%s}
1465 eval show_list $NAME \$$(toupper $NAME)_LIST
1466 ;;
1467 --help|-h) show_help
1468 ;;
1469 *)
1470 optname="${opt%%=*}"
1471 optname="${optname#--}"
1472 optname=$(echo "$optname" | sed 's/-/_/g')
1473 if is_in $optname $CMDLINE_SET; then
1474 eval $optname='$optval'
1475 elif is_in $optname $CMDLINE_APPEND; then
1476 append $optname "$optval"
1477 else
1478 die_unknown $opt
1479 fi
1480 ;;
1481 esac
1482 done
1483
1484 disabled logging && logfile=/dev/null
1485
1486 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1487 set >> $logfile
1488
1489 test -n "$cross_prefix" && enable cross_compile
1490
1491 ar="${cross_prefix}${ar}"
1492 cc_default="${cross_prefix}${cc_default}"
1493 nm_default="${cross_prefix}${nm_default}"
1494 ranlib="${cross_prefix}${ranlib}"
1495 strip="${cross_prefix}${strip}"
1496
1497 sysinclude_default="${sysroot}/usr/include"
1498
1499 set_default cc nm sysinclude
1500 enabled cross_compile || host_cc_default=$cc
1501 set_default host_cc
1502
1503 exesuf() {
1504 case $1 in
1505 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1506 esac
1507 }
1508
1509 EXESUF=$(exesuf $target_os)
1510 HOSTEXESUF=$(exesuf $host_os)
1511
1512 # set temporary file name
1513 : ${TMPDIR:=$TEMPDIR}
1514 : ${TMPDIR:=$TMP}
1515 : ${TMPDIR:=/tmp}
1516
1517 if ! check_cmd type mktemp; then
1518 # simple replacement for missing mktemp
1519 # NOT SAFE FOR GENERAL USE
1520 mktemp(){
1521 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1522 }
1523 fi
1524
1525 tmpfile(){
1526 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1527 (set -C; exec > $tmp) 2>/dev/null ||
1528 die "Unable to create temporary file in $TMPDIR."
1529 append TMPFILES $tmp
1530 eval $1=$tmp
1531 }
1532
1533 trap 'rm -f -- $TMPFILES' EXIT
1534 trap exit HUP INT TERM
1535
1536 tmpfile TMPC .c
1537 tmpfile TMPE $EXESUF
1538 tmpfile TMPH .h
1539 tmpfile TMPO .o
1540 tmpfile TMPS .S
1541 tmpfile TMPSH .sh
1542
1543 unset -f mktemp
1544
1545 # make sure we can execute files in $TMPDIR
1546 cat > $TMPSH 2>> $logfile <<EOF
1547 #! /bin/sh
1548 EOF
1549 chmod +x $TMPSH >> $logfile 2>&1
1550 if ! $TMPSH >> $logfile 2>&1; then
1551 cat <<EOF
1552 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1553 variable to another directory and make sure that it is not mounted noexec.
1554 EOF
1555 die "Sanity test failed."
1556 fi
1557
1558 filter_cflags=echo
1559 filter_cppflags=echo
1560 filter_asflags=echo
1561
1562 if $cc -v 2>&1 | grep -qi ^gcc; then
1563 cc_type=gcc
1564 cc_version=__VERSION__
1565 if ! $cc -dumpversion | grep -q '^2\.'; then
1566 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1567 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1568 fi
1569 elif $cc --version 2>/dev/null | grep -q Intel; then
1570 cc_type=icc
1571 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1572 CC_DEPFLAGS='-MMD'
1573 AS_DEPFLAGS='-MMD'
1574 elif $cc -v 2>&1 | grep -q xlc; then
1575 cc_type=xlc
1576 cc_version="AV_STRINGIFY(__IBMC__)"
1577 elif $cc -V 2>/dev/null | grep -q Compaq; then
1578 cc_type=ccc
1579 cc_version="AV_STRINGIFY(__DECC_VER)"
1580 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1581 debuglevel=3
1582 add_ldflags -Wl,-z,now # calls to libots crash without this
1583 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1584 test -d "$sysroot" || die "No valid sysroot specified."
1585 cc_type=armcc
1586 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1587 armcc_conf="$PWD/armcc.conf"
1588 $cc --arm_linux_configure \
1589 --arm_linux_config_file="$armcc_conf" \
1590 --configure_sysroot="$sysroot" \
1591 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1592 die "Error creating armcc configuration file."
1593 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1594 as_default="${cross_prefix}gcc"
1595 CC_DEPFLAGS='-MMD'
1596 AS_DEPFLAGS='-MMD'
1597 elif $cc -version 2>/dev/null | grep -q TMS470; then
1598 cc_type=tms470
1599 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1600 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1601 CC_O='-fr=$(@D)'
1602 as_default="${cross_prefix}gcc"
1603 ld_default="${cross_prefix}gcc"
1604 TMPO=$(basename $TMPC .c).o
1605 append TMPFILES $TMPO
1606 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1607 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1608 AS_DEPFLAGS='-MMD'
1609 filter_cflags=tms470_flags
1610 tms470_flags(){
1611 for flag; do
1612 case $flag in
1613 -march=*|-mcpu=*)
1614 case "${flag#*=}" in
1615 armv7-a|cortex-a*) echo -mv=7a8 ;;
1616 armv7-r|cortex-r*) echo -mv=7r4 ;;
1617 armv7-m|cortex-m*) echo -mv=7m3 ;;
1618 armv6*|arm11*) echo -mv=6 ;;
1619 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1620 echo -mv=5e ;;
1621 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1622 esac
1623 ;;
1624 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1625 -mfpu=vfp) echo --float_support=vfpv2 ;;
1626 -msoft-float) echo --float_support=vfplib ;;
1627 -Os) echo -O3 -mf=2 ;;
1628 -O[0-3]) echo $flag -mf=5 ;;
1629 -g) echo -g -mn ;;
1630 esac
1631 done
1632 }
1633 elif $cc -v 2>&1 | grep -q clang; then
1634 cc_type=clang
1635 cc_version=__VERSION__
1636 CC_DEPFLAGS='-MMD'
1637 AS_DEPFLAGS='-MMD'
1638 elif $cc -V 2>&1 | grep -q Sun; then
1639 cc_type=suncc
1640 cc_version="AV_STRINGIFY(__SUNPRO_C)"
1641 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1642 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1643 filter_cflags=suncc_flags
1644 suncc_flags(){
1645 for flag; do
1646 case $flag in
1647 -march=*|-mcpu=*)
1648 case "${flag#*=}" in
1649 native) echo -xtarget=native ;;
1650 v9) echo -xarch=sparc ;;
1651 ultrasparc) echo -xarch=sparcvis ;;
1652 ultrasparc3|niagara*) echo -xarch=sparcvis2 ;;
1653 i586|pentium) echo -xchip=pentium ;;
1654 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
1655 pentium3*|c3-2) echo -xtarget=pentium3 ;;
1656 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
1657 pentium4*) echo -xtarget=pentium4 ;;
1658 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
1659 *-sse3) echo -xarch=sse3 ;;
1660 core2) echo -xarch=ssse3 -xchip=core2 ;;
1661 amdfam10|barcelona) echo -xarch=sse4_1 ;;
1662 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
1663 k8|opteron|athlon64|athlon-fx)
1664 echo -xarch=sse2a ;;
1665 athlon*) echo -xarch=pentium_proa ;;
1666 esac
1667 ;;
1668 -std=c99) echo -xc99 ;;
1669 -fomit-frame-pointer) echo -xregs=frameptr ;;
1670 -fPIC) echo -KPIC -xcode=pic32 ;;
1671 -Os) echo -O5 -xspace ;;
1672 -W*,*) echo $flag ;;
1673 -f*-*|-W*) ;;
1674 *) echo $flag ;;
1675 esac
1676 done
1677 }
1678 fi
1679
1680 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1681
1682 : ${as_default:=$cc}
1683 : ${dep_cc_default:=$cc}
1684 : ${ld_default:=$cc}
1685 set_default as dep_cc ld
1686
1687 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1688 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1689
1690 add_cflags $extra_cflags
1691 add_asflags $extra_cflags
1692
1693 if test -n "$sysroot"; then
1694 case "$cc_type" in
1695 gcc)
1696 add_cppflags --sysroot="$sysroot"
1697 add_ldflags --sysroot="$sysroot"
1698 ;;
1699 tms470)
1700 add_cppflags -I"$sysinclude"
1701 add_ldflags --sysroot="$sysroot"
1702 ;;
1703 clang)
1704 add_cppflags -isysroot="$sysroot"
1705 add_ldflags -isysroot="$sysroot"
1706 ;;
1707 esac
1708 fi
1709
1710 if test "$cpu" = host; then
1711 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1712
1713 case "$cc_type" in
1714 gcc)
1715 check_native(){
1716 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1717 awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1718 }
1719 cpu=$(check_native -march || check_native -mcpu)
1720 ;;
1721 esac
1722
1723 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1724 fi
1725
1726 # Add processor-specific flags
1727 case $cpu in
1728 601|ppc601|PowerPC601)
1729 cpuflags="-mcpu=601"
1730 ;;
1731 603*|ppc603*|PowerPC603*)
1732 cpuflags="-mcpu=603"
1733 ;;
1734 604*|ppc604*|PowerPC604*)
1735 cpuflags="-mcpu=604"
1736 ;;
1737 G3|g3|75*|ppc75*|PowerPC75*)
1738 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1739 ;;
1740 G4|g4|745*|ppc745*|PowerPC745*)
1741 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1742 ;;
1743 74*|ppc74*|PowerPC74*)
1744 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1745 ;;
1746 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1747 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1748 ;;
1749 Cell|CELL|cell)
1750 cpuflags="-mcpu=cell"
1751 enable ldbrx
1752 ;;
1753 # targets that do NOT support conditional mov (cmov)
1754 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1755 cpuflags="-march=$cpu"
1756 disable cmov
1757 ;;
1758 # targets that do support conditional mov (cmov)
1759 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1760 cpuflags="-march=$cpu"
1761 enable cmov
1762 enable fast_cmov
1763 ;;
1764 # targets that do support conditional mov but on which it's slow
1765 pentium4|pentium4m|prescott|nocona)
1766 cpuflags="-march=$cpu"
1767 enable cmov
1768 disable fast_cmov
1769 ;;
1770 sparc64)
1771 cpuflags="-mcpu=v9"
1772 ;;
1773 arm11*|cortex*)
1774 cpuflags="-mcpu=$cpu"
1775 enable fast_unaligned
1776 ;;
1777 armv[67]*)
1778 cpuflags="-march=$cpu"
1779 enable fast_unaligned
1780 ;;
1781 armv*)
1782 cpuflags="-march=$cpu"
1783 ;;
1784 arm*)
1785 cpuflags="-mcpu=$cpu"
1786 ;;
1787 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1788 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1789 ;;
1790 bf*)
1791 cpuflags="-mcpu=$cpu"
1792 ;;
1793 mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1794 cpuflags="-march=$cpu"
1795 ;;
1796 ap7[02]0[0-2])
1797 subarch="avr32_ap"
1798 cpuflags="-mpart=$cpu"
1799 ;;
1800 ap)
1801 subarch="avr32_ap"
1802 cpuflags="-march=$cpu"
1803 ;;
1804 uc3[ab]*)
1805 subarch="avr32_uc"
1806 cpuflags="-mcpu=$cpu"
1807 ;;
1808 uc)
1809 subarch="avr32_uc"
1810 cpuflags="-march=$cpu"
1811 ;;
1812 generic)
1813 ;;
1814 *)
1815 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1816 ;;
1817 esac
1818
1819 add_cflags $cpuflags
1820 add_asflags $cpuflags
1821
1822 # compiler sanity check
1823 check_exec <<EOF
1824 int main(void){ return 0; }
1825 EOF
1826 if test "$?" != 0; then
1827 echo "$cc is unable to create an executable file."
1828 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1829 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1830 echo "Only do this if you know what cross compiling means."
1831 fi
1832 die "C compiler test failed."
1833 fi
1834
1835 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1836 check_cflags -std=c99
1837 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1838 #include <stdlib.h>
1839 EOF
1840 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1841 #include <stdlib.h>
1842 EOF
1843
1844 check_host_cflags -std=c99
1845
1846 case "$arch" in
1847 alpha)
1848 arch="alpha"
1849 enable fast_64bit
1850 check_cflags -mieee
1851 spic=$shared
1852 ;;
1853 arm|armv[4567]*l)
1854 arch="arm"
1855 ;;
1856 avr32)
1857 ;;
1858 bfin)
1859 arch="bfin"
1860 ;;
1861 ia64)
1862 arch="ia64"
1863 enable fast_64bit
1864 spic=$shared
1865 # HACK: currently fails to build if .bss is > 4MB and shared libs are built
1866 enabled shared && enable_weak hardcoded_tables
1867 ;;
1868 m68k)
1869 arch="m68k"
1870 ;;
1871 mips|mipsel|IP*)
1872 arch="mips"
1873 spic=$shared
1874 ;;
1875 mips64)
1876 arch="mips"
1877 subarch="mips64"
1878 enable fast_64bit
1879 spic=$shared
1880 ;;
1881 parisc|hppa)
1882 arch="parisc"
1883 spic=$shared
1884 ;;
1885 parisc64|hppa64)
1886 arch="parisc"
1887 enable fast_64bit
1888 spic=$shared
1889 ;;
1890 "Power Macintosh"|ppc|powerpc)
1891 arch="ppc"
1892 enable fast_unaligned
1893 ;;
1894 ppc64)
1895 arch="ppc"
1896 subarch="ppc64"
1897 enable fast_64bit
1898 enable fast_unaligned
1899 ;;
1900 s390|s390x)
1901 arch="s390"
1902 ;;
1903 sh4|sh)
1904 arch="sh4"
1905 ;;
1906 sparc)
1907 arch="sparc"
1908 spic=$shared
1909 ;;
1910 sun4u|sparc64)
1911 arch="sparc"
1912 subarch="sparc64"
1913 enable fast_64bit
1914 spic=$shared
1915 ;;
1916 i386|i486|i586|i686|i86pc|BePC|x86_64|amd64)
1917 arch="x86"
1918 subarch="x86_32"
1919 enable fast_unaligned
1920 check_cc <<EOF && enable fast_64bit && subarch="x86_64" && spic=$shared
1921 int test[(int)sizeof(char*) - 7];
1922 EOF
1923 if test "$subarch" = "x86_64"; then
1924 enable cmov
1925 enable fast_cmov
1926 fi
1927 ;;
1928 *)
1929 arch="unknown"
1930 ;;
1931 esac
1932
1933 enable $arch $subarch
1934 enabled spic && enable pic
1935 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
1936
1937 # OS specific
1938 case $target_os in
1939 beos|haiku|zeta)
1940 prefix_default="$HOME/config"
1941 # 3 gcc releases known for BeOS, each with ugly bugs
1942 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1943 case "$gcc_version" in
1944 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1945 disable mmx
1946 ;;
1947 *20010315*) echo "BeBits gcc"
1948 add_cflags -fno-expensive-optimizations
1949 ;;
1950 esac
1951 SHFLAGS=-nostart
1952 # enable BeOS things
1953 enable audio_beos
1954 # no need for libm, but the inet stuff
1955 # Check for BONE
1956 # XXX: actually should check for NOT net_server
1957 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1958 network_extralibs="-lbind -lsocket"
1959 else
1960 enable beos_netserver
1961 network_extralibs="-lnet"
1962 fi ;;
1963 sunos)
1964 FFSERVERLDFLAGS=""
1965 SHFLAGS='-shared -Wl,-h,$$(@F)'
1966 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1967 network_extralibs="-lsocket -lnsl"
1968 add_cppflags -D__EXTENSIONS__
1969 ;;
1970 netbsd)
1971 oss_indev_extralibs="-lossaudio"
1972 oss_outdev_extralibs="-lossaudio"
1973 ;;
1974 openbsd)
1975 enable malloc_aligned
1976 # On OpenBSD 4.5. the compiler does not use PIC unless
1977 # explicitly using -fPIC. FFmpeg builds fine without PIC,
1978 # however the generated executable will not do anything
1979 # (simply quits with exit-code 1, no crash, no output).
1980 # Thus explicitly enable PIC here.
1981 enable pic
1982 SHFLAGS='-shared'
1983 oss_indev_extralibs="-lossaudio"
1984 oss_outdev_extralibs="-lossaudio"
1985 ;;
1986 freebsd|dragonfly)
1987 enable malloc_aligned
1988 ;;
1989 bsd/os)
1990 osextralibs="-lpoll -lgnugetopt"
1991 strip="strip -d"
1992 ;;
1993 darwin)
1994 enable malloc_aligned
1995 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1996 strip="strip -x"
1997 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1998 SLIBSUF=".dylib"
1999 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2000 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2001 FFSERVERLDFLAGS=-Wl,-bind_at_load
2002 objformat="macho"
2003 enabled x86_64 && objformat="macho64"
2004 enabled_any pic shared ||
2005 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2006 ;;
2007 mingw32*)
2008 if test $target_os = "mingw32ce"; then
2009 disable network
2010 else
2011 target_os=mingw32
2012 fi
2013 LIBTARGET=i386
2014 if enabled x86_64; then
2015 enable malloc_aligned
2016 LIBTARGET=x64
2017 elif enabled arm; then
2018 LIBTARGET=arm
2019 fi
2020 shlibdir_default="$bindir_default"
2021 disable ffserver
2022 SLIBPREF=""
2023 SLIBSUF=".dll"
2024 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2025 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2026 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2027 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2028 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2029 install -d "$(LIBDIR)"; \
2030 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2031 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2032 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
2033 objformat="win32"
2034 enable dos_paths
2035 check_cflags -fno-common
2036 if ! enabled x86_64; then
2037 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2038 die "ERROR: MinGW runtime version must be >= 3.15."
2039 enabled_any avisynth vfwcap_indev &&
2040 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2041 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2042 fi
2043 ;;
2044 cygwin*)
2045 target_os=cygwin
2046 shlibdir_default="$bindir_default"
2047 SLIBPREF="cyg"
2048 SLIBSUF=".dll"
2049 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2050 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2051 SHFLAGS='-shared -Wl,--enable-auto-image-base'
2052 objformat="win32"
2053 enable dos_paths
2054 check_cflags -fno-common
2055 ;;
2056 *-dos|freedos|opendos)
2057 disable ffplay ffserver
2058 disable $INDEV_LIST $OUTDEV_LIST
2059 network_extralibs="-lsocket"
2060 objformat="coff"
2061 enable dos_paths
2062 ;;
2063 linux)
2064 enable dv1394
2065 ;;
2066 irix*)
2067 target_os=irix
2068 ranlib="echo ignoring ranlib"
2069 ;;
2070 os/2*)
2071 strip="lxlite"
2072 ln_s="cp -f"
2073 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2074 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2075 FFSERVERLDFLAGS=""
2076 LIBSUF="_s.a"
2077 SLIBPREF=""
2078 SLIBSUF=".dll"
2079 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2080 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2081 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2082 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2083 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2084 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2085 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2086 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2087 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2088 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2089 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2090 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2091 enable dos_paths
2092 ;;
2093 gnu/kfreebsd)
2094 ;;
2095 gnu)
2096 ;;
2097
2098 *)
2099 die "Unknown OS '$target_os'."
2100 ;;
2101 esac
2102
2103 set_default $PATHS_LIST
2104
2105 add_extralibs $osextralibs
2106
2107 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2108 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2109
2110 # we need to build at least one lib type
2111 if ! enabled_any static shared; then
2112 cat <<EOF
2113 At least one library type must be built.
2114 Specify --enable-static to build the static libraries or --enable-shared to
2115 build the shared libraries as well. To only build the shared libraries specify
2116 --disable-static in addition to --enable-shared.
2117 EOF
2118 exit 1;
2119 fi
2120
2121 disabled static && LIBNAME=""
2122
2123 if enabled_any libfaad libfaadbin ; then
2124 if check_header faad.h; then
2125 check_cc <<EOF
2126 #include <faad.h>
2127 #ifndef FAAD2_VERSION
2128 ok faad1
2129 #endif
2130 int main(void) { return 0; }
2131 EOF
2132 test $? = 0 && enable libfaad2
2133 else
2134 die "FAAD test failed."
2135 fi
2136 fi
2137
2138
2139 die_license_disabled() {
2140 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2141 }
2142
2143 die_license_disabled gpl libfaad2
2144 die_license_disabled gpl libx264
2145 die_license_disabled gpl libxvid
2146 die_license_disabled gpl postproc
2147 die_license_disabled gpl x11grab
2148
2149 die_license_disabled nonfree libfaac
2150
2151 die_license_disabled version3 libopencore_amrnb
2152 die_license_disabled version3 libopencore_amrwb
2153
2154 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2155
2156 check_deps $ARCH_EXT_LIST
2157
2158 disabled optimizations || check_cflags -fomit-frame-pointer
2159
2160 enable_pic() {
2161 enable pic
2162 add_cppflags -DPIC
2163 add_cflags -fPIC
2164 add_asflags -fPIC
2165 }
2166
2167 enabled pic && enable_pic
2168
2169 check_cc <<EOF || die "Symbol mangling check failed."
2170 int ff_extern;
2171 EOF
2172 sym=$($nm -P -g $TMPO | grep ff_extern)
2173 extern_prefix=${sym%%ff_extern*}
2174
2175 check_cc <<EOF && enable inline_asm
2176 void foo(void) { __asm__ volatile ("" ::); }
2177 EOF
2178
2179 _restrict=
2180 for restrict_keyword in restrict __restrict__ __restrict; do
2181 check_cc <<EOF && _restrict=$restrict_keyword && break
2182 void foo(char * $restrict_keyword p);
2183 EOF
2184 done
2185
2186 check_cc <<EOF && enable attribute_packed
2187 struct { int x; } __attribute__((packed)) x;
2188 EOF
2189
2190 check_cc <<EOF || die "endian test failed"
2191 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2192 EOF
2193 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2194
2195 if enabled arm; then
2196
2197 check_cflags -marm
2198
2199 check_ld <<EOF && enable vfp_args
2200 __asm__ (".eabi_attribute 28, 1");
2201 int main(void) { return 0; }
2202 EOF
2203
2204 # We have to check if pld is a nop and disable it.
2205 check_asm pld '"pld [r0]"'
2206
2207 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2208 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2209 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2210 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2211 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2212 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
2213
2214 enabled_all armv6t2 shared !pic && enable_pic
2215
2216 elif enabled mips; then
2217
2218 check_asm loongson '"dmult.g $1, $2, $3"'
2219 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
2220
2221 elif enabled ppc; then
2222
2223 check_asm dcbzl '"dcbzl 0, 1"'
2224 check_asm ppc4xx '"maclhw r10, r11, r12"'
2225 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2226
2227 # AltiVec flags: The FSF version of GCC differs from the Apple version
2228 if enabled altivec; then
2229 check_cflags -maltivec -mabi=altivec &&
2230 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2231 check_cflags -faltivec
2232
2233 # check if our compiler supports Motorola AltiVec C API
2234 check_cc <<EOF || disable altivec
2235 $inc_altivec_h
2236 int main(void) {
2237 vector signed int v1, v2, v3;
2238 v1 = vec_add(v2,v3);
2239 return 0;
2240 }
2241 EOF
2242
2243 # check if our compiler supports braces for vector declarations
2244 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2245 $inc_altivec_h
2246 int main (void) { (vector int) {1}; return 0; }
2247 EOF
2248 fi
2249
2250 elif enabled sparc; then
2251
2252 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2253 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2254
2255 elif enabled x86; then
2256
2257 # check whether EBP is available on x86
2258 # As 'i' is stored on the stack, this program will crash
2259 # if the base pointer is used to access it because the
2260 # base pointer is cleared in the inline assembly code.
2261 check_exec_crash <<EOF && enable ebp_available
2262 volatile int i=0;
2263 __asm__ volatile (
2264 "xorl %%ebp, %%ebp"
2265 ::: "%ebp");
2266 return i;
2267 EOF
2268
2269 # check whether EBX is available on x86
2270 check_asm ebx_available '""::"b"(0)' &&
2271 check_asm ebx_available '"":::"%ebx"'
2272
2273 # check whether more than 10 operands are supported
2274 check_cc <<EOF && enable ten_operands
2275 int main(void) {
2276 int x=0;
2277 __asm__ volatile(
2278 ""
2279 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2280 );
2281 return 0;
2282 }
2283 EOF
2284
2285 # check whether binutils is new enough to compile SSSE3/MMX2
2286 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2287 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
2288
2289 check_asm bswap '"bswap %%eax" ::: "%eax"'
2290
2291 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2292 enabled x86_64 && append YASMFLAGS "-m amd64"
2293 enabled pic && append YASMFLAGS "-DPIC"
2294 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2295 case "$objformat" in
2296 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2297 esac
2298 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2299
2300 fi
2301
2302 if check_func dlopen; then
2303 ldl=
2304 elif check_func dlopen -ldl; then
2305 ldl=-ldl
2306 fi
2307
2308 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2309 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2310
2311 check_func fork
2312 check_func gethrtime
2313 check_func getrusage
2314 check_func inet_aton $network_extralibs
2315 check_func isatty
2316 check_func memalign
2317 check_func mkstemp
2318 check_func posix_memalign
2319 check_func_headers io.h setmode
2320 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2321 check_func_headers windows.h GetProcessTimes
2322 check_func_headers windows.h VirtualAlloc
2323
2324 check_header conio.h
2325 check_header dlfcn.h
2326 check_header malloc.h
2327 check_header poll.h
2328 check_header sys/mman.h
2329 check_header sys/resource.h
2330 check_header sys/select.h
2331 check_header termios.h
2332 check_header vdpau/vdpau.h
2333 check_header vdpau/vdpau_x11.h
2334 check_header X11/extensions/XvMClib.h
2335
2336 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2337 enabled_any $need_memalign ; then
2338 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2339 fi
2340
2341 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2342 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2343
2344 # check for some common methods of building with pthread support
2345 # do this before the optional library checks as some of them require pthreads
2346 if enabled pthreads; then
2347 if check_func pthread_create; then
2348 :
2349 elif check_func pthread_create -pthread; then
2350 add_cflags -pthread
2351 add_extralibs -pthread
2352 elif check_func pthread_create -pthreads; then
2353 add_cflags -pthreads
2354 add_extralibs -pthreads
2355 elif check_func pthread_create -lpthreadGC2; then
2356 add_extralibs -lpthreadGC2
2357 elif ! check_lib pthread.h pthread_create -lpthread; then
2358 die "ERROR: can't find pthreads library"
2359 fi
2360 fi
2361
2362 for thread in $THREADS_LIST; do
2363 if enabled $thread; then
2364 test -n "$thread_type" &&
2365 die "ERROR: Only one thread type must be selected." ||
2366 thread_type="$thread"
2367 fi
2368 done
2369
2370 check_lib math.h sin -lm
2371 check_lib va/va.h vaInitialize -lva
2372
2373 check_func llrint
2374 check_func log2
2375 check_func lrint
2376 check_func lrintf
2377 check_func round
2378 check_func roundf
2379 check_func truncf
2380
2381 # these are off by default, so fail if requested and not available
2382 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2383 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2384 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2385 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2386 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2387 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2388 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2389 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2390 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2391 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2392 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2393 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2394 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2395 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2396 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2397 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2398 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2399 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
2400 { check_cpp_condition x264.h "X264_BUILD >= 79" ||
2401 die "ERROR: libx264 version must be >= 0.79."; }
2402 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2403 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2404
2405 # libdc1394 check
2406 if enabled libdc1394; then
2407 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2408 enable libdc1394_2; } ||
2409 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2410 enable libdc1394_1; } ||
2411 die "ERROR: No version of libdc1394 found "
2412 fi
2413
2414 disable sdl_too_old
2415 disable sdl
2416 SDL_CONFIG="${cross_prefix}sdl-config"
2417 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2418 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2419 sdl_libs=$("${SDL_CONFIG}" --libs)
2420 temp_cflags $sdl_cflags
2421 temp_extralibs $sdl_libs
2422 if check_lib2 SDL.h SDL_Init; then
2423 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2424 if test "$_sdlversion" -lt 121 ; then
2425 enable sdl_too_old
2426 else
2427 enable sdl
2428 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2429 #include <SDL.h>
2430 int main(int argc, char **argv){
2431 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2432 int w = vi->current_w;
2433 return 0;
2434 }
2435 EOF
2436 fi
2437 fi
2438 restore_flags
2439 fi
2440
2441 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2442
2443 if enabled network; then
2444 check_type "sys/types.h sys/socket.h" socklen_t
2445 # Prefer arpa/inet.h over winsock2
2446 if check_header arpa/inet.h ; then
2447 check_func closesocket
2448 elif check_header winsock2.h ; then
2449 check_func_headers winsock2.h closesocket -lws2 && \
2450 network_extralibs="-lws2" || \
2451 { check_func_headers winsock2.h closesocket -lws2_32 && \
2452 network_extralibs="-lws2_32"; }
2453 check_type ws2tcpip.h socklen_t
2454 else
2455 disable network
2456 fi
2457 fi
2458
2459 enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2460 #include <sys/types.h>
2461 #include <sys/socket.h>
2462 #include <netinet/in.h>
2463 #include <netdb.h>
2464 int main(void) {
2465 struct sockaddr_storage saddr;
2466 struct ipv6_mreq mreq6;
2467 getaddrinfo(0,0,0,0);
2468 getnameinfo(0,0,0,0,0,0,0);
2469 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2470 }
2471 EOF
2472
2473 check_header linux/videodev.h
2474 check_header linux/videodev2.h
2475 check_header sys/videoio.h
2476
2477 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2478
2479 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2480 { check_header dev/bktr/ioctl_meteor.h &&
2481 check_header dev/bktr/ioctl_bt848.h; } ||
2482 { check_header machine/ioctl_meteor.h &&
2483 check_header machine/ioctl_bt848.h; } ||
2484 { check_header dev/video/meteor/ioctl_meteor.h &&
2485 check_header dev/video/bktr/ioctl_bt848.h; } ||
2486 check_header dev/ic/bt8xx.h
2487
2488 check_header sys/soundcard.h
2489 check_header soundcard.h
2490
2491 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2492
2493 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2494
2495 enabled x11grab &&
2496 check_header X11/Xlib.h &&
2497 check_header X11/extensions/XShm.h &&
2498 check_header X11/extensions/Xfixes.h &&
2499 check_func XOpenDisplay -lX11 &&
2500 check_func XShmCreateImage -lX11 -lXext &&
2501 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2502
2503 if enabled vdpau_vdpau_h; then
2504 check_cpp_condition \
2505 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2506 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2507 disable vdpau; }
2508 fi
2509
2510 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2511
2512 # add some useful compiler flags if supported
2513 check_cflags -Wdeclaration-after-statement
2514 check_cflags -Wall
2515 check_cflags -Wno-switch
2516 check_cflags -Wdisabled-optimization
2517 check_cflags -Wpointer-arith
2518 check_cflags -Wredundant-decls
2519 check_cflags -Wno-pointer-sign
2520 check_cflags -Wcast-qual
2521 check_cflags -Wwrite-strings
2522 check_cflags -Wtype-limits
2523 check_cflags -Wundef
2524 enabled extra_warnings && check_cflags -Winline
2525
2526 # add some linker flags
2527 check_ldflags -Wl,--warn-common
2528 check_ldflags -Wl,--as-needed
2529 check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2530 check_ldflags -Wl,-Bsymbolic
2531
2532 if enabled small; then
2533 check_cflags -Os # not all compilers support -Os
2534 optimizations="small"
2535 elif enabled optimizations; then
2536 if enabled xlc; then
2537 add_cflags -O5
2538 add_ldflags -O5
2539 elif enabled suncc; then
2540 add_cflags -O5
2541 elif enabled ccc; then
2542 add_cflags -fast
2543 else
2544 add_cflags -O3
2545 fi
2546 fi
2547 check_cflags -fno-math-errno
2548 check_cflags -fno-signed-zeros
2549
2550 if enabled icc; then
2551 # Just warnings, no remarks
2552 check_cflags -w1
2553 # -wd: Disable following warnings
2554 # 144, 167, 556: -Wno-pointer-sign
2555 # 10006: ignoring unknown option -fno-signed-zeros
2556 # 10156: ignoring option '-W'; no argument required
2557 check_cflags -wd144,167,556,10006,10156
2558 # 11030: Warning unknown option --as-needed
2559 # 10156: ignoring option '-export'; no argument required
2560 check_ldflags -wd10156,11030
2561 # Allow to compile with optimizations
2562 check_ldflags -march=$cpu
2563 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2564 enable ebp_available
2565 elif enabled ccc; then
2566 # disable some annoying warnings
2567 add_cflags -msg_disable cvtu32to64
2568 add_cflags -msg_disable embedcomment
2569 add_cflags -msg_disable needconstext
2570 add_cflags -msg_disable nomainieee
2571 add_cflags -msg_disable ptrmismatch1
2572 add_cflags -msg_disable unreachcode
2573 elif enabled gcc; then
2574 check_cflags -fno-tree-vectorize
2575 elif enabled clang; then
2576 check_cflags -Qunused-arguments
2577 fi
2578
2579 if enabled gprof; then
2580 add_cflags -p
2581 add_ldflags -p
2582 fi
2583
2584 # Find out if the .align argument is a power of two or not.
2585 check_asm asmalign_pot '".align 3"'
2586
2587 enabled_any $DECODER_LIST && enable decoders
2588 enabled_any $ENCODER_LIST && enable encoders
2589 enabled_any $HWACCEL_LIST && enable hwaccels
2590 enabled_any $BSF_LIST && enable bsfs
2591 enabled_any $DEMUXER_LIST && enable demuxers
2592 enabled_any $MUXER_LIST && enable muxers
2593 enabled_any $FILTER_LIST && enable filters
2594 enabled_any $INDEV_LIST && enable indevs
2595 enabled_any $OUTDEV_LIST && enable outdevs
2596 enabled_any $PROTOCOL_LIST && enable protocols
2597
2598 enabled_any $THREADS_LIST && enable threads
2599
2600 check_deps $CONFIG_LIST \
2601 $CONFIG_EXTRA \
2602 $HAVE_LIST \
2603 $DECODER_LIST \
2604 $ENCODER_LIST \
2605 $HWACCEL_LIST \
2606 $PARSER_LIST \
2607 $BSF_LIST \
2608 $DEMUXER_LIST \
2609 $MUXER_LIST \
2610 $FILTER_LIST \
2611 $INDEV_LIST \
2612 $OUTDEV_LIST \
2613 $PROTOCOL_LIST \
2614
2615 echo "install prefix $prefix"
2616 echo "source path $source_path"
2617 echo "C compiler $cc"
2618 echo ".align is power-of-two $asmalign_pot"
2619 echo "ARCH $arch ($cpu)"
2620 if test "$build_suffix" != ""; then
2621 echo "build suffix $build_suffix"
2622 fi
2623 if test "$extra_version" != ""; then
2624 echo "version string suffix $extra_version"
2625 fi
2626 echo "big-endian ${bigendian-no}"
2627 echo "runtime cpu detection ${runtime_cpudetect-no}"
2628 if enabled x86; then
2629 echo "yasm ${yasm-no}"
2630 echo "MMX enabled ${mmx-no}"
2631 echo "MMX2 enabled ${mmx2-no}"
2632 echo "3DNow! enabled ${amd3dnow-no}"
2633 echo "3DNow! extended enabled ${amd3dnowext-no}"
2634 echo "SSE enabled ${sse-no}"
2635 echo "SSSE3 enabled ${ssse3-no}"
2636 echo "CMOV enabled ${cmov-no}"
2637 echo "CMOV is fast ${fast_cmov-no}"
2638 echo "EBX available ${ebx_available-no}"
2639 echo "EBP available ${ebp_available-no}"
2640 echo "10 operands supported ${ten_operands-no}"
2641 fi
2642 if enabled arm; then
2643 echo "ARMv5TE enabled ${armv5te-no}"
2644 echo "ARMv6 enabled ${armv6-no}"
2645 echo "ARMv6T2 enabled ${armv6t2-no}"
2646 echo "ARM VFP enabled ${armvfp-no}"
2647 echo "IWMMXT enabled ${iwmmxt-no}"
2648 echo "NEON enabled ${neon-no}"
2649 fi
2650 if enabled mips; then
2651 echo "MMI enabled ${mmi-no}"
2652 fi
2653 if enabled ppc; then
2654 echo "AltiVec enabled ${altivec-no}"
2655 echo "PPC 4xx optimizations ${ppc4xx-no}"
2656 echo "dcbzl available ${dcbzl-no}"
2657 echo "performance report ${powerpc_perf-no}"
2658 fi
2659 if enabled sparc; then
2660 echo "VIS enabled ${vis-no}"
2661 fi
2662 echo "gprof enabled ${gprof-no}"
2663 echo "debug symbols ${debug-no}"
2664 echo "strip symbols ${stripping-no}"
2665 echo "optimizations ${optimizations-no}"
2666 echo "static ${static-no}"
2667 echo "shared ${shared-no}"
2668 echo "postprocessing support ${postproc-no}"
2669 echo "new filter support ${avfilter-no}"
2670 echo "filters using lavformat ${avfilter_lavf-no}"
2671 echo "network support ${network-no}"
2672 if enabled network; then
2673 echo "IPv6 support ${ipv6-no}"
2674 fi
2675 echo "threading support ${thread_type-no}"
2676 echo "SDL support ${sdl-no}"
2677 if enabled sdl_too_old; then
2678 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2679 fi
2680 echo "Sun medialib support ${mlib-no}"
2681 echo "AVISynth enabled ${avisynth-no}"
2682 echo "libdc1394 support ${libdc1394-no}"
2683 echo "libdirac enabled ${libdirac-no}"
2684 echo "libfaac enabled ${libfaac-no}"
2685 echo "libfaad enabled ${libfaad-no}"
2686 echo "libfaad dlopened ${libfaadbin-no}"
2687 echo "libgsm enabled ${libgsm-no}"
2688 echo "libmp3lame enabled ${libmp3lame-no}"
2689 echo "libnut enabled ${libnut-no}"
2690 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2691 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2692 echo "libopenjpeg enabled ${libopenjpeg-no}"
2693 echo "libschroedinger enabled ${libschroedinger-no}"
2694 echo "libspeex enabled ${libspeex-no}"
2695 echo "libtheora enabled ${libtheora-no}"
2696 echo "libvorbis enabled ${libvorbis-no}"
2697 echo "libx264 enabled ${libx264-no}"
2698 echo "libxvid enabled ${libxvid-no}"
2699 echo "zlib enabled ${zlib-no}"
2700 echo "bzlib enabled ${bzlib-no}"
2701 echo
2702
2703 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2704 echo "Enabled ${type}s:"
2705 eval list=\$$(toupper $type)_LIST
2706 for part in $list; do
2707 enabled $part && echo ${part%_*}
2708 done | sort | pr -3 -t
2709 echo
2710 done
2711
2712 license="LGPL version 2.1 or later"
2713 if enabled nonfree; then
2714 license="nonfree and unredistributable"
2715 elif enabled gplv3; then
2716 license="GPL version 3 or later"
2717 elif enabled lgplv3; then
2718 license="LGPL version 3 or later"
2719 elif enabled gpl; then
2720 license="GPL version 2 or later"
2721 fi
2722
2723 echo "License: $license"
2724
2725 echo "Creating config.mak and config.h..."
2726
2727 enabled stripping || strip="echo skipping strip"
2728
2729 cat > config.mak <<EOF
2730 # Automatically generated by configure - do not modify!
2731 ifndef FFMPEG_CONFIG_MAK
2732 FFMPEG_CONFIG_MAK=1
2733 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2734 prefix=$prefix
2735 LIBDIR=\$(DESTDIR)$libdir
2736 SHLIBDIR=\$(DESTDIR)$shlibdir
2737 INCDIR=\$(DESTDIR)$incdir
2738 BINDIR=\$(DESTDIR)$bindir
2739 DATADIR=\$(DESTDIR)$datadir
2740 MANDIR=\$(DESTDIR)$mandir
2741 SRC_PATH="$source_path"
2742 SRC_PATH_BARE=$source_path
2743 BUILD_ROOT="$PWD"
2744 ARCH=$arch
2745 CC=$cc
2746 AS=$as
2747 LD=$ld
2748 DEPCC=$dep_cc
2749 YASM=$yasmexe
2750 AR=$ar
2751 RANLIB=$ranlib
2752 LN_S=$ln_s
2753 STRIP=$strip
2754 CPPFLAGS=$CPPFLAGS
2755 CFLAGS=$CFLAGS
2756 ASFLAGS=$ASFLAGS
2757 CC_O=$CC_O
2758 LDFLAGS=$LDFLAGS
2759 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2760 SHFLAGS=$SHFLAGS
2761 YASMFLAGS=$YASMFLAGS
2762 BUILDSUF=$build_suffix
2763 FULLNAME=$FULLNAME
2764 LIBPREF=$LIBPREF
2765 LIBSUF=$LIBSUF
2766 LIBNAME=$LIBNAME
2767 SLIBPREF=$SLIBPREF
2768 SLIBSUF=$SLIBSUF
2769 EXESUF=$EXESUF
2770 EXTRA_VERSION=$extra_version
2771 DEPFLAGS=$DEPFLAGS
2772 CCDEP=$CCDEP
2773 ASDEP=$ASDEP
2774 CC_DEPFLAGS=$CC_DEPFLAGS
2775 AS_DEPFLAGS=$AS_DEPFLAGS
2776 HOSTCC=$host_cc
2777 HOSTCFLAGS=$host_cflags
2778 HOSTEXESUF=$HOSTEXESUF
2779 HOSTLDFLAGS=$host_ldflags
2780 HOSTLIBS=$host_libs
2781 TARGET_EXEC=$target_exec
2782 TARGET_PATH=$target_path
2783 SDL_LIBS=$sdl_libs
2784 SDL_CFLAGS=$sdl_cflags
2785 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2786 EXTRALIBS=$extralibs
2787 EOF
2788
2789 get_version(){
2790 name=$1
2791 file=$source_path/$2
2792 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2793 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2794 lcname=$(tolower $name)
2795 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2796 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2797 }
2798
2799 get_version LIBSWSCALE libswscale/swscale.h
2800 get_version LIBPOSTPROC libpostproc/postprocess.h
2801 get_version LIBAVCODEC libavcodec/avcodec.h
2802 get_version LIBAVDEVICE libavdevice/avdevice.h
2803 get_version LIBAVFORMAT libavformat/avformat.h
2804 get_version LIBAVUTIL libavutil/avutil.h
2805 get_version LIBAVFILTER libavfilter/avfilter.h
2806
2807 enabled shared && cat >> config.mak <<EOF
2808 LIBTARGET=${LIBTARGET}
2809 SLIBNAME=${SLIBNAME}
2810 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2811 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2812 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2813 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2814 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2815 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2816 EOF
2817
2818 enabled asmalign_pot || align_shift="1 <<"
2819
2820 cat > $TMPH <<EOF
2821 /* Automatically generated by configure - do not modify! */
2822 #ifndef FFMPEG_CONFIG_H
2823 #define FFMPEG_CONFIG_H
2824 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2825 #define FFMPEG_LICENSE "$(c_escape $license)"
2826 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2827 #define CC_TYPE "$cc_type"
2828 #define CC_VERSION $cc_version
2829 #define restrict $_restrict
2830 #define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2831 #define EXTERN_PREFIX "${extern_prefix}"
2832 #define EXTERN_ASM ${extern_prefix}
2833 EOF
2834
2835 if enabled small || disabled optimizations; then
2836 echo "#define av_always_inline" >> $TMPH
2837 fi
2838
2839 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2840 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2841 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2842 $CONFIG_EXTRA \
2843 $DECODER_LIST \
2844 $ENCODER_LIST \
2845 $HWACCEL_LIST \
2846 $PARSER_LIST \
2847 $BSF_LIST \
2848 $DEMUXER_LIST \
2849 $MUXER_LIST \
2850 $FILTER_LIST \
2851 $PROTOCOL_LIST \
2852 $INDEV_LIST \
2853 $OUTDEV_LIST \
2854
2855 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2856 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2857
2858 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2859 cmp -s $TMPH config.h &&
2860 echo "config.h is unchanged" ||
2861 mv -f $TMPH config.h
2862
2863 # build tree in object directory if source path is different from current one
2864 if enabled source_path_used; then
2865 DIRS="
2866 doc
2867 libavcodec
2868 libavcodec/$arch
2869 libavdevice
2870 libavfilter
2871 libavformat
2872 libavutil
2873 libavutil/$arch
2874 libpostproc
2875 libswscale
2876 libswscale/$arch
2877 tests
2878 tools
2879 "
2880 FILES="
2881 Makefile
2882 common.mak
2883 subdir.mak
2884 doc/texi2pod.pl
2885 libavcodec/Makefile
2886 libavdevice/Makefile
2887 libavfilter/Makefile
2888 libavformat/Makefile
2889 libavutil/Makefile
2890 libpostproc/Makefile
2891 libswscale/Makefile
2892 "
2893 for dir in $DIRS ; do
2894 mkdir -p $dir
2895 done
2896 for f in $FILES ; do
2897 $ln_s "$source_path/$f" $f
2898 done
2899 fi
2900
2901
2902 # build pkg-config files
2903
2904 pkgconfig_generate(){
2905 name=$1
2906 shortname=${name#lib}${build_suffix}
2907 comment=$2
2908 version=$3
2909 libs=$4
2910 requires=$5
2911 cat <<EOF > $name/$name.pc
2912 prefix=$prefix
2913 exec_prefix=\${prefix}
2914 libdir=$libdir
2915 includedir=$incdir
2916
2917 Name: $name
2918 Description: $comment
2919 Version: $version
2920 Requires: $(enabled shared || echo $requires)
2921 Requires.private: $(enabled shared && echo $requires)
2922 Conflicts:
2923 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2924 Libs.private: $(enabled shared && echo $libs)
2925 Cflags: -I\${includedir}
2926 EOF
2927 cat <<EOF > $name/$name-uninstalled.pc
2928 prefix=
2929 exec_prefix=
2930 libdir=\${pcfiledir}
2931 includedir=${source_path}
2932
2933 Name: $name
2934 Description: $comment
2935 Version: $version
2936 Requires: $requires
2937 Conflicts:
2938 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2939 Cflags: -I\${includedir}
2940 EOF
2941 }
2942
2943 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2944 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2945 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2946 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2947 enabled avfilter &&
2948 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2949 enabled postproc &&
2950 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2951 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"