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