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