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