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