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