Add DragonFlyBSD to the list of supported OSes.
[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-indevs disable input devices"
135 echo " --disable-outdevs disable output devices"
136 echo " --disable-devices disable all devices"
137 echo " --enable-filter=NAME enable filter NAME"
138 echo " --disable-filter=NAME disable filter NAME"
139 echo " --disable-filters disable all filters"
140 echo " --list-decoders show all available decoders"
141 echo " --list-encoders show all available encoders"
142 echo " --list-hwaccels show all available hardware accelerators"
143 echo " --list-muxers show all available muxers"
144 echo " --list-demuxers show all available demuxers"
145 echo " --list-parsers show all available parsers"
146 echo " --list-protocols show all available protocols"
147 echo " --list-bsfs show all available bitstream filters"
148 echo " --list-indevs show all available input devices"
149 echo " --list-outdevs show all available output devices"
150 echo " --list-filters show all available filters"
151 echo
152 echo "External library support:"
153 echo " --enable-avisynth enable reading of AVISynth script files [no]"
154 echo " --enable-bzlib enable bzlib [autodetect]"
155 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
156 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
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 set_all(){
287 value=$1
288 shift
289 for var in $*; do
290 eval $var=$value
291 done
292 }
293
294 set_weak(){
295 value=$1
296 shift
297 for var; do
298 eval : \${$var:=$value}
299 done
300 }
301
302 pushvar(){
303 for var in $*; do
304 eval level=\${${var}_level:=0}
305 eval ${var}_${level}="\$$var"
306 eval ${var}_level=$(($level+1))
307 done
308 }
309
310 popvar(){
311 for var in $*; do
312 eval level=\${${var}_level:-0}
313 test $level = 0 && continue
314 eval level=$(($level-1))
315 eval $var="\${${var}_${level}}"
316 eval ${var}_level=$level
317 eval unset ${var}_${level}
318 done
319 }
320
321 enable(){
322 set_all yes $*
323 }
324
325 disable(){
326 set_all no $*
327 }
328
329 enable_weak(){
330 set_weak yes $*
331 }
332
333 disable_weak(){
334 set_weak no $*
335 }
336
337 enable_safe(){
338 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
339 }
340
341 disable_safe(){
342 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
343 }
344
345 do_enable_deep(){
346 for var; do
347 enabled $var && continue
348 eval sel="\$${var}_select"
349 eval sgs="\$${var}_suggest"
350 pushvar var sgs
351 enable_deep $sel
352 popvar sgs
353 enable_deep_weak $sgs
354 popvar var
355 done
356 }
357
358 enable_deep(){
359 do_enable_deep $*
360 enable $*
361 }
362
363 enable_deep_weak(){
364 do_enable_deep $*
365 enable_weak $*
366 }
367
368 enabled(){
369 test "${1#!}" = "$1" && op== || op=!=
370 eval test "x\$${1#!}" $op "xyes"
371 }
372
373 disabled(){
374 test "${1#!}" = "$1" && op== || op=!=
375 eval test "x\$${1#!}" $op "xno"
376 }
377
378 enabled_all(){
379 for opt; do
380 enabled $opt || return 1
381 done
382 }
383
384 disabled_all(){
385 for opt; do
386 disabled $opt || return 1
387 done
388 }
389
390 enabled_any(){
391 for opt; do
392 enabled $opt && return 0
393 done
394 }
395
396 disabled_any(){
397 for opt; do
398 disabled $opt && return 0
399 done
400 return 1
401 }
402
403 set_default(){
404 for opt; do
405 eval : \${$opt:=\$${opt}_default}
406 done
407 }
408
409 is_in(){
410 value=$1
411 shift
412 for var in $*; do
413 [ $var = $value ] && return 0
414 done
415 return 1
416 }
417
418 check_deps(){
419 for cfg; do
420 cfg="${cfg#!}"
421 enabled ${cfg}_checking && die "Circular dependency for $cfg."
422 disabled ${cfg}_checking && continue
423 enable ${cfg}_checking
424
425 eval dep_all="\$${cfg}_deps"
426 eval dep_any="\$${cfg}_deps_any"
427 eval dep_sel="\$${cfg}_select"
428 eval dep_sgs="\$${cfg}_suggest"
429
430 pushvar cfg dep_all dep_any dep_sel dep_sgs
431 check_deps $dep_all $dep_any $dep_sel $dep_sgs
432 popvar cfg dep_all dep_any dep_sel dep_sgs
433
434 enabled_all $dep_all || disable $cfg
435 enabled_any $dep_any || disable $cfg
436 disabled_any $dep_sel && disable $cfg
437
438 if enabled $cfg; then
439 eval dep_extralibs="\$${cfg}_extralibs"
440 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
441 enable_deep $dep_sel
442 enable_deep_weak $dep_sgs
443 fi
444
445 disable ${cfg}_checking
446 done
447 }
448
449 print_config(){
450 pfx=$1
451 header=$2
452 makefile=$3
453 shift 3
454 for cfg; do
455 ucname="$(toupper $cfg)"
456 if enabled $cfg; then
457 echo "#define ${pfx}${ucname} 1" >> $header
458 echo "${pfx}${ucname}=yes" >> $makefile
459 else
460 echo "#define ${pfx}${ucname} 0" >> $header
461 fi
462 done
463 }
464
465 flags_saved(){
466 (: ${SAVE_CFLAGS?}) 2> /dev/null
467 }
468
469 save_flags(){
470 flags_saved && return
471 SAVE_CFLAGS="$CFLAGS"
472 SAVE_LDFLAGS="$LDFLAGS"
473 SAVE_extralibs="$extralibs"
474 }
475
476 restore_flags(){
477 flags_saved || return
478 CFLAGS="$SAVE_CFLAGS"
479 LDFLAGS="$SAVE_LDFLAGS"
480 extralibs="$SAVE_extralibs"
481 unset SAVE_CFLAGS
482 unset SAVE_LDFLAGS
483 unset SAVE_extralibs
484 }
485
486 temp_cflags(){
487 save_flags
488 CFLAGS="$CFLAGS $*"
489 }
490
491 temp_ldflags(){
492 save_flags
493 LDFLAGS="$LDFLAGS $*"
494 }
495
496 temp_extralibs(){
497 save_flags
498 extralibs="$extralibs $*"
499 }
500
501 append(){
502 var=$1
503 shift
504 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
505 eval "$var=\"\$$var $*\""
506 }
507
508 add_cflags(){
509 append CFLAGS "$@"
510 }
511
512 add_ldflags(){
513 append LDFLAGS "$@"
514 }
515
516 add_extralibs(){
517 append extralibs "$@"
518 }
519
520 check_cmd(){
521 log "$@"
522 "$@" >> $logfile 2>&1
523 }
524
525 check_cc(){
526 log check_cc "$@"
527 cat > $TMPC
528 log_file $TMPC
529 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
530 }
531
532 check_cpp(){
533 log check_cpp "$@"
534 cat > $TMPC
535 log_file $TMPC
536 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
537 }
538
539 check_as(){
540 log check_as "$@"
541 cat > $TMPC
542 log_file $TMPC
543 check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
544 }
545
546 check_asm(){
547 log check_asm "$@"
548 name="$1"
549 asm="$2"
550 shift 2
551 check_as "$@" <<EOF && enable $name || disable $name
552 void foo(void){ __asm__ volatile($asm); }
553 EOF
554 }
555
556 check_yasm(){
557 log check_yasm "$@"
558 echo "$1" > $TMPS
559 log_file $TMPS
560 shift 1
561 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
562 }
563
564 check_ld(){
565 log check_ld "$@"
566 check_cc || return
567 flags=''
568 libs=''
569 for f; do
570 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
571 done
572 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
573 }
574
575 check_cflags(){
576 log check_cflags "$@"
577 check_cc "$@" <<EOF && add_cflags "$@"
578 int x;
579 EOF
580 }
581
582 check_ldflags(){
583 log check_ldflags "$@"
584 check_ld "$@" <<EOF && add_ldflags "$@"
585 int main(void){ return 0; }
586 EOF
587 }
588
589 check_header(){
590 log check_header "$@"
591 header=$1
592 shift
593 disable_safe $header
594 check_cpp "$@" <<EOF && enable_safe $header
595 #include <$header>
596 int x;
597 EOF
598 }
599
600 check_func(){
601 log check_func "$@"
602 func=$1
603 shift
604 disable $func
605 check_ld "$@" <<EOF && enable $func
606 extern int $func();
607 int main(void){ $func(); }
608 EOF
609 }
610
611 check_func_headers(){
612 log check_func_headers "$@"
613 headers=$1
614 func=$2
615 shift 2
616 disable $func
617 incs=""
618 for hdr in $headers; do
619 incs="$incs
620 #include <$hdr>"
621 done
622 check_ld "$@" <<EOF && enable $func && enable_safe $headers
623 $incs
624 int main(int argc, char **argv){
625 (void) $func;
626 return 0;
627 }
628 EOF
629 }
630
631 check_cpp_condition(){
632 log check_cpp_condition "$@"
633 header=$1
634 condition=$2
635 check_cpp <<EOF
636 #include <$header>
637 #if !($condition)
638 #error "unsatisfied condition: $condition"
639 #endif
640 EOF
641 }
642
643 check_lib(){
644 log check_lib "$@"
645 header="$1"
646 func="$2"
647 shift 2
648 temp_extralibs "$@"
649 check_header $header && check_func $func && add_extralibs "$@"
650 err=$?
651 restore_flags
652 return $err
653 }
654
655 check_lib2(){
656 log check_lib2 "$@"
657 headers="$1"
658 func="$2"
659 shift 2
660 temp_extralibs "$@"
661 check_func_headers "$headers" $func && add_extralibs "$@"
662 err=$?
663 restore_flags
664 return $err
665 }
666
667 check_exec(){
668 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
669 }
670
671 check_exec_crash(){
672 code=$(cat)
673
674 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
675 # are safe but may not be available everywhere. Thus we use
676 # raise(SIGTERM) instead. The check is run in a subshell so we
677 # can redirect the "Terminated" message from the shell. SIGBUS
678 # is not defined by standard C so it is used conditionally.
679
680 (check_exec "$@") >> $logfile 2>&1 <<EOF
681 #include <signal.h>
682 static void sighandler(int sig){
683 raise(SIGTERM);
684 }
685 int main(void){
686 signal(SIGILL, sighandler);
687 signal(SIGFPE, sighandler);
688 signal(SIGSEGV, sighandler);
689 #ifdef SIGBUS
690 signal(SIGBUS, sighandler);
691 #endif
692 { $code }
693 }
694 EOF
695 }
696
697 check_type(){
698 log check_type "$@"
699 headers=$1
700 type=$2
701 shift 2
702 disable $type
703 incs=""
704 for hdr in $headers; do
705 incs="$incs
706 #include <$hdr>"
707 done
708 check_cc "$@" <<EOF && enable $type
709 $incs
710 $type v;
711 EOF
712 }
713
714 require(){
715 name="$1"
716 header="$2"
717 func="$3"
718 shift 3
719 check_lib $header $func "$@" || die "ERROR: $name not found"
720 }
721
722 require2(){
723 name="$1"
724 headers="$2"
725 func="$3"
726 shift 3
727 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
728 }
729
730 check_foo_config(){
731 cfg=$1
732 pkg=$2
733 header=$3
734 func=$4
735 shift 4
736 disable $cfg
737 check_cmd ${pkg}-config --version
738 err=$?
739 if test "$err" = 0; then
740 temp_cflags $(${pkg}-config --cflags)
741 temp_extralibs $(${pkg}-config --libs)
742 check_lib "$@" $header $func && enable $cfg
743 fi
744 return $err
745 }
746
747 apply(){
748 file=$1
749 shift
750 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
751 }
752
753 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
754 # system-dependent things.
755
756 COMPONENT_LIST="
757 bsfs
758 decoders
759 demuxers
760 encoders
761 filters
762 hwaccels
763 indevs
764 muxers
765 outdevs
766 parsers
767 protocols
768 "
769
770 CONFIG_LIST="
771 $COMPONENT_LIST
772 aandct
773 avfilter
774 avfilter_lavf
775 avisynth
776 beos_netserver
777 bzlib
778 fastdiv
779 ffmpeg
780 ffplay
781 ffserver
782 fft
783 golomb
784 gpl
785 gprof
786 gray
787 hardcoded_tables
788 ipv6
789 libamr_nb
790 libamr_wb
791 libdc1394
792 libdirac
793 libfaac
794 libfaad
795 libfaadbin
796 libgsm
797 libmp3lame
798 libnut
799 libopencore_amrnb
800 libopencore_amrwb
801 libopenjpeg
802 libschroedinger
803 libspeex
804 libtheora
805 libvorbis
806 libx264
807 libxvid
808 mdct
809 memalign_hack
810 mlib
811 mpegaudio_hp
812 network
813 nonfree
814 postproc
815 powerpc_perf
816 rdft
817 runtime_cpudetect
818 shared
819 small
820 static
821 swscale_alpha
822 vaapi
823 vdpau
824 version3
825 x11grab
826 zlib
827 "
828
829 THREADS_LIST='
830 beosthreads
831 os2threads
832 pthreads
833 w32threads
834 '
835
836 ARCH_LIST='
837 alpha
838 arm
839 bfin
840 ia64
841 m68k
842 mips
843 mips64
844 parisc
845 ppc
846 ppc64
847 s390
848 sh4
849 sparc
850 sparc64
851 x86
852 x86_32
853 x86_64
854 '
855
856 ARCH_EXT_LIST='
857 altivec
858 amd3dnow
859 amd3dnowext
860 armv5te
861 armv6
862 armv6t2
863 armvfp
864 iwmmxt
865 mmi
866 mmx
867 mmx2
868 neon
869 ppc4xx
870 sse
871 ssse3
872 vis
873 '
874
875 HAVE_LIST="
876 $ARCH_EXT_LIST
877 $THREADS_LIST
878 alsa_asoundlib_h
879 altivec_h
880 arpa_inet_h
881 bigendian
882 bswap
883 closesocket
884 cmov
885 conio_h
886 dcbzl
887 dev_bktr_ioctl_bt848_h
888 dev_bktr_ioctl_meteor_h
889 dev_ic_bt8xx_h
890 dev_video_meteor_ioctl_meteor_h
891 dev_video_bktr_ioctl_bt848_h
892 dlfcn_h
893 dlopen
894 dos_paths
895 ebp_available
896 ebx_available
897 fast_64bit
898 fast_cmov
899 fast_unaligned
900 fork
901 gethrtime
902 GetProcessTimes
903 getrusage
904 inet_aton
905 inline_asm
906 ldbrx
907 libdc1394_1
908 libdc1394_2
909 llrint
910 loongson
911 lrint
912 lrintf
913 lzo1x_999_compress
914 machine_ioctl_bt848_h
915 machine_ioctl_meteor_h
916 malloc_h
917 memalign
918 mkstemp
919 pld
920 posix_memalign
921 round
922 roundf
923 sdl
924 sdl_video_size
925 setmode
926 socklen_t
927 soundcard_h
928 poll_h
929 sys_mman_h
930 sys_resource_h
931 sys_select_h
932 sys_soundcard_h
933 sys_videoio_h
934 ten_operands
935 termios_h
936 threads
937 truncf
938 VirtualAlloc
939 winsock2_h
940 xform_asm
941 yasm
942 "
943
944 # options emitted with CONFIG_ prefix but not available on command line
945 CONFIG_EXTRA="
946 gplv3
947 lgplv3
948 "
949
950 CMDLINE_SELECT="
951 $ARCH_EXT_LIST
952 $CONFIG_LIST
953 $THREADS_LIST
954 cross_compile
955 debug
956 extra_warnings
957 logging
958 optimizations
959 stripping
960 yasm
961 "
962
963 PATHS_LIST='
964 bindir
965 datadir
966 incdir
967 libdir
968 mandir
969 prefix
970 shlibdir
971 '
972
973 CMDLINE_SET="
974 $PATHS_LIST
975 arch
976 as
977 build_suffix
978 cc
979 cpu
980 cross_prefix
981 extra_version
982 host_cc
983 host_cflags
984 host_ldflags
985 host_libs
986 host_os
987 logfile
988 nm
989 source_path
990 sysinclude
991 sysroot
992 target_exec
993 target_os
994 target_path
995 "
996
997 # code dependency declarations
998
999 # architecture extensions
1000 altivec_deps="ppc"
1001 amd3dnow_deps="mmx"
1002 amd3dnowext_deps="amd3dnow"
1003 armv5te_deps="arm"
1004 armv6_deps="arm"
1005 armv6t2_deps="arm"
1006 armvfp_deps="arm"
1007 iwmmxt_deps="arm"
1008 mmi_deps="mips"
1009 mmx_deps="x86"
1010 mmx2_deps="mmx"
1011 neon_deps="arm"
1012 ppc4xx_deps="ppc"
1013 sse_deps="mmx"
1014 ssse3_deps="sse"
1015 vis_deps="sparc"
1016
1017 # decoders / encoders / hardware accelerators
1018 aac_decoder_select="fft mdct"
1019 ac3_decoder_select="fft mdct"
1020 atrac3_decoder_select="fft mdct"
1021 cavs_decoder_select="golomb"
1022 cook_decoder_select="fft mdct"
1023 cscd_decoder_suggest="zlib"
1024 dca_decoder_select="fft mdct"
1025 dnxhd_encoder_select="aandct"
1026 dxa_decoder_select="zlib"
1027 eac3_decoder_select="fft mdct"
1028 eatgq_decoder_select="aandct"
1029 eatqi_decoder_select="aandct"
1030 ffv1_decoder_select="golomb"
1031 flac_decoder_select="golomb"
1032 flac_encoder_select="golomb"
1033 flashsv_decoder_select="zlib"
1034 flashsv_encoder_select="zlib"
1035 flv_encoder_select="aandct"
1036 h261_encoder_select="aandct"
1037 h263_encoder_select="aandct"
1038 h263_vaapi_hwaccel_deps="va_va_h"
1039 h263_vaapi_hwaccel_select="vaapi"
1040 h263p_encoder_select="aandct"
1041 h264_decoder_select="golomb"
1042 h264_vaapi_hwaccel_deps="va_va_h"
1043 h264_vaapi_hwaccel_select="vaapi"
1044 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1045 h264_vdpau_decoder_select="vdpau"
1046 imc_decoder_select="fft mdct"
1047 jpegls_decoder_select="golomb"
1048 jpegls_encoder_select="golomb"
1049 ljpeg_encoder_select="aandct"
1050 loco_decoder_select="golomb"
1051 mjpeg_encoder_select="aandct"
1052 mpeg1video_encoder_select="aandct"
1053 mpeg2video_encoder_select="aandct"
1054 mpeg4_encoder_select="aandct"
1055 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1056 mpeg_vdpau_decoder_select="vdpau"
1057 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1058 mpeg1_vdpau_decoder_select="vdpau"
1059 mpeg2_vaapi_hwaccel_deps="va_va_h"
1060 mpeg2_vaapi_hwaccel_select="vaapi"
1061 mpeg4_vaapi_hwaccel_deps="va_va_h"
1062 mpeg4_vaapi_hwaccel_select="vaapi"
1063 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1064 msmpeg4v1_encoder_select="aandct"
1065 msmpeg4v2_encoder_select="aandct"
1066 msmpeg4v3_encoder_select="aandct"
1067 nellymoser_decoder_select="fft mdct"
1068 nellymoser_encoder_select="fft mdct"
1069 png_decoder_select="zlib"
1070 png_encoder_select="zlib"
1071 qdm2_decoder_select="fft mdct rdft"
1072 rv10_encoder_select="aandct"
1073 rv20_encoder_select="aandct"
1074 rv30_decoder_select="golomb"
1075 rv40_decoder_select="golomb"
1076 shorten_decoder_select="golomb"
1077 sonic_decoder_select="golomb"
1078 sonic_encoder_select="golomb"
1079 sonic_ls_encoder_select="golomb"
1080 svq3_decoder_select="golomb"
1081 svq3_decoder_suggest="zlib"
1082 tiff_decoder_suggest="zlib"
1083 tiff_encoder_suggest="zlib"
1084 tscc_decoder_select="zlib"
1085 vc1_vaapi_hwaccel_deps="va_va_h"
1086 vc1_vaapi_hwaccel_select="vaapi"
1087 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1088 vc1_vdpau_decoder_select="vdpau"
1089 vorbis_decoder_select="fft mdct"
1090 vorbis_encoder_select="fft mdct"
1091 wmav1_decoder_select="fft mdct"
1092 wmav1_encoder_select="fft mdct"
1093 wmav2_decoder_select="fft mdct"
1094 wmav2_encoder_select="fft mdct"
1095 wmv1_encoder_select="aandct"
1096 wmv2_encoder_select="aandct"
1097 wmv3_vaapi_hwaccel_deps="va_va_h"
1098 wmv3_vaapi_hwaccel_select="vaapi"
1099 wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1100 wmv3_vdpau_decoder_select="vdpau"
1101 zlib_decoder_select="zlib"
1102 zlib_encoder_select="zlib"
1103 zmbv_decoder_select="zlib"
1104 zmbv_encoder_select="zlib"
1105
1106 # parsers
1107 h264_parser_select="golomb"
1108
1109 # external libraries
1110 libamr_nb_decoder_deps="libamr_nb"
1111 libamr_nb_encoder_deps="libamr_nb"
1112 libamr_wb_decoder_deps="libamr_wb"
1113 libamr_wb_encoder_deps="libamr_wb"
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 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1139 alsa_demuxer_extralibs="-lasound"
1140 alsa_muxer_deps="alsa_asoundlib_h"
1141 alsa_muxer_extralibs="-lasound"
1142 audio_beos_demuxer_deps="audio_beos"
1143 audio_beos_demuxer_extralibs="-lmedia -lbe"
1144 audio_beos_muxer_deps="audio_beos"
1145 audio_beos_muxer_extralibs="-lmedia -lbe"
1146 avisynth_demuxer_deps="avisynth"
1147 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1148 dirac_demuxer_deps="dirac_parser"
1149 dv1394_demuxer_deps="dv1394 dv_demuxer"
1150 jack_demuxer_deps="jack_jack_h"
1151 jack_demuxer_extralibs="-ljack"
1152 libdc1394_demuxer_deps="libdc1394"
1153 libnut_demuxer_deps="libnut"
1154 libnut_muxer_deps="libnut"
1155 matroska_demuxer_suggest="zlib bzlib"
1156 mov_demuxer_suggest="zlib"
1157 mp3_demuxer_deps="mpegaudio_parser"
1158 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1159 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1160 redir_demuxer_deps="network"
1161 rtp_muxer_deps="network rtp_protocol"
1162 rtsp_demuxer_deps="sdp_demuxer"
1163 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1164 v4l_demuxer_deps="linux_videodev_h"
1165 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1166 vfwcap_demuxer_deps="capCreateCaptureWindow"
1167 vfwcap_demuxer_extralibs="-lvfw32"
1168 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1169 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1170
1171 # protocols
1172 gopher_protocol_deps="network"
1173 http_protocol_deps="network"
1174 rtp_protocol_deps="udp_protocol"
1175 tcp_protocol_deps="network"
1176 udp_protocol_deps="network"
1177
1178 # filters
1179 movie_filter_deps="avfilter_lavf"
1180
1181 # programs
1182 ffplay_deps="sdl"
1183 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1184 ffserver_extralibs='$ldl'
1185
1186
1187 # default parameters
1188
1189 logfile="config.err"
1190
1191 # installation paths
1192 prefix_default="/usr/local"
1193 bindir_default='${prefix}/bin'
1194 datadir_default='${prefix}/share/ffmpeg'
1195 incdir_default='${prefix}/include'
1196 libdir_default='${prefix}/lib'
1197 mandir_default='${prefix}/share/man'
1198 shlibdir_default="$libdir_default"
1199
1200 # toolchain
1201 ar="ar"
1202 cc_default="gcc"
1203 host_cc_default="gcc"
1204 ln_s="ln -sf"
1205 nm_default="nm"
1206 objformat="elf"
1207 ranlib="ranlib"
1208 strip="strip"
1209 yasmexe="yasm"
1210
1211 # machine
1212 arch=$(uname -m)
1213 cpu="generic"
1214
1215 # OS
1216 target_os=$(tolower $(uname -s))
1217 host_os=$target_os
1218
1219 # configurable options
1220 enable debug
1221 enable fastdiv
1222 enable ffmpeg
1223 enable ffplay
1224 enable ffserver
1225 enable ipv6
1226 enable mpegaudio_hp
1227 enable network
1228 enable optimizations
1229 enable protocols
1230 enable static
1231 enable stripping
1232 enable swscale_alpha
1233
1234 # build settings
1235 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1236 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1237 FFSERVERLDFLAGS=-Wl,-E
1238 LIBPREF="lib"
1239 LIBSUF=".a"
1240 FULLNAME='$(NAME)$(BUILDSUF)'
1241 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1242 SLIBPREF="lib"
1243 SLIBSUF=".so"
1244 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1245 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1246 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1247 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1248
1249 host_cflags='-O3 -g -Wall'
1250 host_libs='-lm'
1251
1252 target_path='.'
1253
1254 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1255 # full relative path for objects in subdirectories for non-recursive Make.
1256 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1257
1258 # find source path
1259 source_path="$(dirname "$0")"
1260 enable source_path_used
1261 if test -z "$source_path" -o "$source_path" = "." ; then
1262 source_path="$(pwd)"
1263 disable source_path_used
1264 else
1265 source_path="$(cd "$source_path"; pwd)"
1266 echo "$source_path" | grep -q '[[:blank:]]' &&
1267 die "Out of tree builds are impossible with whitespace in source path."
1268 test -e "$source_path/config.h" &&
1269 die "Out of tree builds are impossible with config.h in source dir."
1270 fi
1271
1272 for v in "$@"; do
1273 r="${v#*=}"
1274 l="${v%$r}"
1275 test "$r" = "${r#* }" || r="'$r'"
1276 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1277 done
1278
1279 find_things(){
1280 thing=$1
1281 pattern=$2
1282 file=$source_path/$3
1283 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1284 }
1285
1286 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1287 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1288 HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1289 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1290 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1291 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1292 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1293 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1294 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1295 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1296 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1297
1298 enable $ARCH_EXT_LIST \
1299 $DECODER_LIST \
1300 $ENCODER_LIST \
1301 $HWACCEL_LIST \
1302 $PARSER_LIST \
1303 $BSF_LIST \
1304 $DEMUXER_LIST \
1305 $MUXER_LIST \
1306 $FILTER_LIST \
1307 $PROTOCOL_LIST \
1308 $INDEV_LIST \
1309 $OUTDEV_LIST \
1310
1311 die_unknown(){
1312 echo "Unknown option \"$1\"."
1313 echo "See $0 --help for available options."
1314 exit 1
1315 }
1316
1317 show_list() {
1318 suffix=_$1
1319 shift
1320 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1321 exit 0
1322 }
1323
1324 for opt do
1325 optval="${opt#*=}"
1326 case "$opt" in
1327 --extra-cflags=*) add_cflags $optval
1328 ;;
1329 --extra-ldflags=*) add_ldflags $optval
1330 ;;
1331 --extra-libs=*) add_extralibs $optval
1332 ;;
1333 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1334 ;;
1335 --enable-debug=*) debuglevel="$optval"
1336 ;;
1337 --enable-*=*|--disable-*=*)
1338 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1339 case "$thing" in
1340 encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1341 *) die_unknown "$opt" ;;
1342 esac
1343 ;;
1344 --enable-?*|--disable-?*)
1345 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1346 if is_in $option $COMPONENT_LIST; then
1347 eval $action \$$(toupper ${option%s})_LIST
1348 elif is_in $option $CMDLINE_SELECT; then
1349 $action $option
1350 else
1351 die_unknown $opt
1352 fi
1353 ;;
1354 --list-*)
1355 NAME="${opt#--list-}"
1356 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1357 NAME=${NAME%s}
1358 eval show_list $NAME \$$(toupper $NAME)_LIST
1359 ;;
1360 --help|-h) show_help
1361 ;;
1362 *)
1363 optname="${opt%%=*}"
1364 optname="${optname#--}"
1365 optname=$(echo "$optname" | sed 's/-/_/g')
1366 is_in $optname $CMDLINE_SET || die_unknown $opt
1367 eval $optname='$optval'
1368 ;;
1369 esac
1370 done
1371
1372 disabled logging && logfile=/dev/null
1373
1374 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1375 set >> $logfile
1376
1377 test -n "$cross_prefix" && enable cross_compile
1378
1379 ar="${cross_prefix}${ar}"
1380 cc_default="${cross_prefix}${cc_default}"
1381 nm_default="${cross_prefix}${nm_default}"
1382 ranlib="${cross_prefix}${ranlib}"
1383 strip="${cross_prefix}${strip}"
1384
1385 sysinclude_default="${sysroot}/usr/include"
1386
1387 set_default cc nm sysinclude
1388 as_default=$cc
1389 enabled cross_compile || host_cc_default=$cc
1390 set_default host_cc
1391
1392 exesuf() {
1393 case $1 in
1394 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1395 esac
1396 }
1397
1398 EXESUF=$(exesuf $target_os)
1399 HOSTEXESUF=$(exesuf $host_os)
1400
1401 # set temporary file name
1402 : ${TMPDIR:=$TEMPDIR}
1403 : ${TMPDIR:=$TMP}
1404 : ${TMPDIR:=/tmp}
1405
1406 if ! check_cmd type mktemp; then
1407 # simple replacement for missing mktemp
1408 # NOT SAFE FOR GENERAL USE
1409 mktemp(){
1410 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1411 }
1412 fi
1413
1414 tmpfile(){
1415 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1416 (set -C; exec > $tmp) 2>/dev/null ||
1417 die "Unable to create temoporary file in $TMPDIR."
1418 append TMPFILES $tmp
1419 eval $1=$tmp
1420 }
1421
1422 trap 'rm -f -- $TMPFILES' EXIT
1423 trap exit HUP INT TERM
1424
1425 tmpfile TMPC .c
1426 tmpfile TMPE $EXESUF
1427 tmpfile TMPH .h
1428 tmpfile TMPO .o
1429 tmpfile TMPS .S
1430 tmpfile TMPSH .sh
1431
1432 unset -f mktemp
1433
1434 # make sure we can execute files in $TMPDIR
1435 cat > $TMPSH 2>> $logfile <<EOF
1436 #! /bin/sh
1437 EOF
1438 chmod +x $TMPSH >> $logfile 2>&1
1439 if ! $TMPSH >> $logfile 2>&1; then
1440 cat <<EOF
1441 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1442 variable to another directory and make sure that it is not mounted noexec.
1443 EOF
1444 die "Sanity test failed."
1445 fi
1446
1447 if $cc --version 2>/dev/null | grep -qi gcc; then
1448 cc_type=gcc
1449 elif $cc --version 2>/dev/null | grep -q Intel; then
1450 cc_type=icc
1451 elif $cc -v 2>&1 | grep -q xlc; then
1452 cc_type=xlc
1453 elif $cc -V 2>/dev/null | grep -q Compaq; then
1454 cc_type=ccc
1455 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1456 debuglevel=3
1457 add_ldflags -Wl,-z,now # calls to libots crash without this
1458 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1459 test -d "$sysroot" || die "No valid sysroot specified."
1460 cc_type=armcc
1461 armcc_conf="$PWD/armcc.conf"
1462 $cc --arm_linux_configure \
1463 --arm_linux_config_file="$armcc_conf" \
1464 --configure_sysroot="$sysroot" \
1465 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1466 die "Error creating armcc configuration file."
1467 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1468 as_default="${cross_prefix}gcc"
1469 fi
1470
1471 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1472
1473 set_default as
1474
1475 if test -n "$sysroot"; then
1476 case "$cc_type" in
1477 gcc)
1478 add_cflags --sysroot="$sysroot"
1479 add_ldflags --sysroot="$sysroot"
1480 ;;
1481 esac
1482 fi
1483
1484 # compiler sanity check
1485 check_exec <<EOF
1486 int main(void){ return 0; }
1487 EOF
1488 if test "$?" != 0; then
1489 echo "$cc is unable to create an executable file."
1490 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1491 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1492 echo "Only do this if you know what cross compiling means."
1493 fi
1494 die "C compiler test failed."
1495 fi
1496
1497 check_cflags -std=c99
1498 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1499 #include <stdlib.h>
1500 EOF
1501 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1502 #include <stdlib.h>
1503 EOF
1504
1505 case "$arch" in
1506 alpha)
1507 arch="alpha"
1508 enable fast_64bit
1509 check_cflags -mieee
1510 ;;
1511 arm|armv[4567]*l)
1512 arch="arm"
1513 ;;
1514 avr32)
1515 ;;
1516 bfin)
1517 arch="bfin"
1518 ;;
1519 ia64)
1520 arch="ia64"
1521 enable fast_64bit
1522 ;;
1523 m68k)
1524 arch="m68k"
1525 ;;
1526 mips|mipsel|IP*)
1527 arch="mips"
1528 ;;
1529 mips64)
1530 arch="mips"
1531 subarch="mips64"
1532 enable fast_64bit
1533 ;;
1534 parisc|hppa)
1535 arch="parisc"
1536 ;;
1537 parisc64|hppa64)
1538 arch="parisc"
1539 enable fast_64bit
1540 ;;
1541 "Power Macintosh"|ppc|powerpc)
1542 arch="ppc"
1543 enable fast_unaligned
1544 ;;
1545 ppc64)
1546 arch="ppc"
1547 subarch="ppc64"
1548 enable fast_64bit
1549 enable fast_unaligned
1550 ;;
1551 s390|s390x)
1552 arch="s390"
1553 ;;
1554 sh4|sh)
1555 arch="sh4"
1556 ;;
1557 sparc)
1558 arch="sparc"
1559 ;;
1560 sun4u|sparc64)
1561 arch="sparc"
1562 subarch="sparc64"
1563 enable fast_64bit
1564 ;;
1565 i386|i486|i586|i686|i86pc|BePC)
1566 arch="x86"
1567 subarch="x86_32"
1568 enable fast_unaligned
1569 ;;
1570 x86_64|amd64)
1571 arch="x86"
1572 subarch="x86_32"
1573 enable cmov
1574 enable fast_cmov
1575 enable fast_unaligned
1576 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1577 int test[sizeof(char*) - 7];
1578 EOF
1579 ;;
1580 *)
1581 arch="unknown"
1582 ;;
1583 esac
1584
1585 enable $arch $subarch
1586
1587 # OS specific
1588 case $target_os in
1589 beos|haiku|zeta)
1590 prefix_default="$HOME/config"
1591 # helps building libavcodec
1592 add_cflags -DPIC -fomit-frame-pointer
1593 # 3 gcc releases known for BeOS, each with ugly bugs
1594 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1595 case "$gcc_version" in
1596 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1597 disable mmx
1598 ;;
1599 *20010315*) echo "BeBits gcc"
1600 add_cflags -fno-expensive-optimizations
1601 ;;
1602 esac
1603 SHFLAGS=-nostart
1604 # enable BeOS things
1605 enable audio_beos
1606 # no need for libm, but the inet stuff
1607 # Check for BONE
1608 # XXX: actually should check for NOT net_server
1609 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1610 network_extralibs="-lbind -lsocket"
1611 else
1612 enable beos_netserver
1613 network_extralibs="-lnet"
1614 fi ;;
1615 sunos)
1616 FFSERVERLDFLAGS=""
1617 SHFLAGS='-shared -Wl,-h,$$(@F)'
1618 network_extralibs="-lsocket -lnsl"
1619 add_cflags -D__EXTENSIONS__
1620 ;;
1621 netbsd)
1622 oss_demuxer_extralibs="-lossaudio"
1623 oss_muxer_extralibs="-lossaudio"
1624 ;;
1625 openbsd)
1626 disable need_memalign
1627 LIBOBJFLAGS='$(PIC)'
1628 SHFLAGS='-shared'
1629 oss_demuxer_extralibs="-lossaudio"
1630 oss_muxer_extralibs="-lossaudio"
1631 ;;
1632 freebsd)
1633 disable need_memalign
1634 ;;
1635 dragonfly)
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 libamr_nb
1788 die_license_disabled nonfree libamr_wb
1789 die_license_disabled nonfree libfaac
1790
1791 die_license_disabled version3 libopencore_amrnb
1792 die_license_disabled version3 libopencore_amrwb
1793
1794 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1795
1796 check_deps $ARCH_EXT_LIST
1797
1798 test -z "$need_memalign" && need_memalign="$mmx"
1799
1800 #Darwin CC versions
1801 if test $target_os = darwin; then
1802 if enabled xlc; then
1803 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1804 else
1805 add_cflags -pipe
1806 check_cflags -force_cpusubtype_ALL
1807 check_cflags -Wno-sign-compare
1808 enabled shared || check_cflags -mdynamic-no-pic
1809 fi
1810 fi
1811
1812 disabled optimizations || check_cflags -fomit-frame-pointer
1813
1814 # Add processor-specific flags
1815 if test $cpu != "generic"; then
1816 warn_altivec(){
1817 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1818 }
1819 case $cpu in
1820 601|ppc601|PowerPC601)
1821 add_cflags -mcpu=601
1822 warn_altivec enabled PPC601
1823 ;;
1824 603*|ppc603*|PowerPC603*)
1825 add_cflags -mcpu=603
1826 warn_altivec enabled PPC603
1827 ;;
1828 604*|ppc604*|PowerPC604*)
1829 add_cflags -mcpu=604
1830 warn_altivec enabled PPC604
1831 ;;
1832 G3|g3|75*|ppc75*|PowerPC75*)
1833 add_cflags -mcpu=750 -mpowerpc-gfxopt
1834 warn_altivec enabled PPC75x
1835 ;;
1836 G4|g4|745*|ppc745*|PowerPC745*)
1837 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1838 warn_altivec disabled PPC745x
1839 ;;
1840 74*|ppc74*|PowerPC74*)
1841 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1842 warn_altivec disabled PPC74xx
1843 ;;
1844 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1845 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1846 warn_altivec disabled PPC970
1847 ;;
1848 Cell|CELL|cell)
1849 add_cflags -mcpu=cell
1850 warn_altivec disabled Cell
1851 enable ldbrx
1852 ;;
1853 # targets that do NOT support conditional mov (cmov)
1854 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1855 add_cflags -march=$cpu
1856 disable cmov
1857 ;;
1858 # targets that do support conditional mov (cmov)
1859 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1860 add_cflags -march=$cpu
1861 enable cmov
1862 enable fast_cmov
1863 ;;
1864 # targets that do support conditional mov but on which it's slow
1865 pentium4|pentium4m|prescott|nocona)
1866 add_cflags -march=$cpu
1867 enable cmov
1868 disable fast_cmov
1869 ;;
1870 sparc64)
1871 add_cflags -mcpu=v9
1872 ;;
1873 arm11*|cortex*)
1874 add_cflags -mcpu=$cpu
1875 enable fast_unaligned
1876 ;;
1877 armv*)
1878 add_cflags -march=$cpu
1879 ;;
1880 arm*)
1881 add_cflags -mcpu=$cpu
1882 ;;
1883 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1884 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1885 ;;
1886 bf*)
1887 add_cflags -mcpu=$cpu
1888 ;;
1889 mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1890 add_cflags -march=$cpu
1891 ;;
1892 *)
1893 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1894 ;;
1895 esac
1896 fi
1897
1898 check_cc <<EOF || die "Symbol mangling check failed."
1899 int ff_extern;
1900 EOF
1901 sym=$($nm -P -g $TMPO | grep ff_extern)
1902 extern_prefix=${sym%%ff_extern*}
1903
1904 check_cc <<EOF && enable inline_asm
1905 void foo(void) { __asm__ volatile ("" ::); }
1906 EOF
1907
1908 if enabled x86; then
1909 # check whether EBP is available on x86
1910 # As 'i' is stored on the stack, this program will crash
1911 # if the base pointer is used to access it because the
1912 # base pointer is cleared in the inline assembly code.
1913 check_exec_crash <<EOF && enable ebp_available
1914 volatile int i=0;
1915 __asm__ volatile (
1916 "xorl %%ebp, %%ebp"
1917 ::: "%ebp");
1918 return i;
1919 EOF
1920
1921 # check wether EBX is available on x86
1922 check_asm ebx_available '"":::"%ebx"'
1923
1924 # check whether more than 10 operands are supported
1925 check_cc <<EOF && enable ten_operands
1926 int main(void) {
1927 int x=0;
1928 __asm__ volatile(
1929 ""
1930 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1931 );
1932 return 0;
1933 }
1934 EOF
1935
1936 # check whether binutils is new enough to compile SSSE3/MMX2
1937 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1938 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
1939
1940 check_asm bswap '"bswap %%eax" ::: "%eax"'
1941
1942 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1943 enabled x86_64 && append YASMFLAGS "-m amd64"
1944 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1945 case "$objformat" in
1946 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1947 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1948 *) append YASMFLAGS "-DPREFIX" ;;
1949 esac
1950 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1951 fi
1952
1953 # check for assembler specific support
1954
1955 enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1956
1957 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1958 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1959 enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1960
1961 # check for SIMD availability
1962
1963 # AltiVec flags: The FSF version of GCC differs from the Apple version
1964 if enabled altivec; then
1965 check_cflags -maltivec -mabi=altivec &&
1966 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1967 check_cflags -faltivec
1968
1969 # check if our compiler supports Motorola AltiVec C API
1970 check_cc <<EOF || disable altivec
1971 $inc_altivec_h
1972 int main(void) {
1973 vector signed int v1, v2, v3;
1974 v1 = vec_add(v2,v3);
1975 return 0;
1976 }
1977 EOF
1978
1979 # check if our compiler supports braces for vector declarations
1980 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1981 $inc_altivec_h
1982 int main (void) { (vector int) {1}; return 0; }
1983 EOF
1984 fi
1985
1986 # We have to check if pld is a nop and disable it.
1987 enabled arm && check_asm pld '"pld [r0]"'
1988 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1989 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1990 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1991 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1992 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1993 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1994 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1995 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1996
1997 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1998
1999 # ---
2000 # big/little-endian test
2001 check_cc <<EOF || die "endian test failed"
2002 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2003 EOF
2004 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2005
2006 # ---
2007 # check availability of some header files
2008
2009 if check_func dlopen; then
2010 ldl=
2011 elif check_func dlopen -ldl; then
2012 ldl=-ldl
2013 fi
2014
2015 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2016 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2017
2018 check_func fork
2019 check_func gethrtime
2020 check_func getrusage
2021 check_func inet_aton $network_extralibs
2022 check_func memalign
2023 check_func mkstemp
2024 check_func posix_memalign
2025 check_func_headers io.h setmode
2026 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2027 check_func_headers windows.h GetProcessTimes
2028 check_func_headers windows.h VirtualAlloc
2029
2030 check_header conio.h
2031 check_header dlfcn.h
2032 check_header malloc.h
2033 check_header poll.h
2034 check_header sys/mman.h
2035 check_header sys/resource.h
2036 check_header sys/select.h
2037 check_header termios.h
2038 check_header vdpau/vdpau.h
2039 check_header vdpau/vdpau_x11.h
2040 check_header X11/extensions/XvMClib.h
2041
2042 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2043 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2044 fi
2045
2046 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2047 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2048
2049 # check for some common methods of building with pthread support
2050 # do this before the optional library checks as some of them require pthreads
2051 if enabled pthreads; then
2052 if check_func pthread_create; then
2053 :
2054 elif check_func pthread_create -pthread; then
2055 add_cflags -pthread
2056 add_extralibs -pthread
2057 elif check_func pthread_create -pthreads; then
2058 add_cflags -pthreads
2059 add_extralibs -pthreads
2060 elif check_func pthread_create -lpthreadGC2; then
2061 add_extralibs -lpthreadGC2
2062 elif ! check_lib pthread.h pthread_create -lpthread; then
2063 die "ERROR: can't find pthreads library"
2064 fi
2065 fi
2066
2067 for thread in $THREADS_LIST; do
2068 if enabled $thread; then
2069 test -n "$thread_type" &&
2070 die "ERROR: Only one thread type must be selected." ||
2071 thread_type="$thread"
2072 fi
2073 done
2074
2075 check_lib math.h sin -lm
2076 check_lib va/va.h vaInitialize -lva
2077
2078 # test for C99 functions in math.h
2079 for func in llrint lrint lrintf round roundf truncf; do
2080 check_exec <<EOF && enable $func || disable $func
2081 #include <math.h>
2082 int main(void) { return ($func(3.999f) > 0)?0:1; }
2083 EOF
2084 done
2085
2086 # these are off by default, so fail if requested and not available
2087 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2088 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2089 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
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 fi
2173 fi
2174
2175 ##########################################
2176 # IPv6 check
2177
2178 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2179 #include <sys/types.h>
2180 #include <sys/socket.h>
2181 #include <netinet/in.h>
2182 #include <netdb.h>
2183 int main(void) {
2184 struct sockaddr_storage saddr;
2185 struct ipv6_mreq mreq6;
2186 getaddrinfo(0,0,0,0);
2187 getnameinfo(0,0,0,0,0,0,0);
2188 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2189 }
2190 EOF
2191
2192 check_header linux/videodev.h
2193 check_header linux/videodev2.h
2194 check_header sys/videoio.h
2195
2196 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2197
2198 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2199 { check_header dev/bktr/ioctl_meteor.h &&
2200 check_header dev/bktr/ioctl_bt848.h; } ||
2201 { check_header machine/ioctl_meteor.h &&
2202 check_header machine/ioctl_bt848.h; } ||
2203 { check_header dev/video/meteor/ioctl_meteor.h &&
2204 check_header dev/video/bktr/ioctl_bt848.h; } ||
2205 check_header dev/ic/bt8xx.h
2206
2207 check_header sys/soundcard.h
2208 check_header soundcard.h
2209
2210 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2211
2212 check_lib2 jack/jack.h jack_client_open -ljack
2213
2214 # deal with the X11 frame grabber
2215 enabled x11grab &&
2216 check_header X11/Xlib.h &&
2217 check_header X11/extensions/XShm.h &&
2218 check_func XOpenDisplay -lX11 &&
2219 check_func XShmCreateImage -lX11 -lXext
2220
2221 enabled debug && add_cflags -g"$debuglevel"
2222
2223 # add some useful compiler flags if supported
2224 check_cflags -Wdeclaration-after-statement
2225 check_cflags -Wall
2226 check_cflags -Wno-switch
2227 check_cflags -Wdisabled-optimization
2228 check_cflags -Wpointer-arith
2229 check_cflags -Wredundant-decls
2230 check_cflags -Wno-pointer-sign
2231 check_cflags -Wcast-qual
2232 check_cflags -Wwrite-strings
2233 check_cflags -Wtype-limits
2234 check_cflags -Wundef
2235 enabled extra_warnings && check_cflags -Winline
2236
2237 # add some linker flags
2238 check_ldflags -Wl,--warn-common
2239 check_ldflags -Wl,--as-needed
2240 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'
2241 check_ldflags -Wl,-Bsymbolic
2242
2243 if enabled small; then
2244 check_cflags -Os # not all compilers support -Os
2245 optimizations="small"
2246 elif enabled optimizations; then
2247 if enabled xlc; then
2248 add_cflags -O5
2249 add_ldflags -O5
2250 elif enabled ccc; then
2251 add_cflags -fast
2252 else
2253 add_cflags -O3
2254 fi
2255 fi
2256 check_cflags -fno-math-errno
2257 check_cflags -fno-signed-zeros
2258
2259 # add some flags for Intel C Compiler
2260 if enabled icc; then
2261 # Just warnings, no remarks
2262 check_cflags -w1
2263 # -wd: Disable following warnings
2264 # 144, 167, 556: -Wno-pointer-sign
2265 # 10006: ignoring unknown option -fno-signed-zeros
2266 # 10156: ignoring option '-W'; no argument required
2267 check_cflags -wd144,167,556,10006,10156
2268 # 11030: Warning unknown option --as-needed
2269 # 10156: ignoring option '-export'; no argument required
2270 check_ldflags -wd10156,11030
2271 # Allow to compile with optimizations
2272 check_ldflags -march=$cpu
2273 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2274 enable ebp_available
2275 elif enabled ccc; then
2276 # disable some annoying warnings
2277 add_cflags -msg_disable cvtu32to64
2278 add_cflags -msg_disable embedcomment
2279 add_cflags -msg_disable needconstext
2280 add_cflags -msg_disable nomainieee
2281 add_cflags -msg_disable ptrmismatch1
2282 add_cflags -msg_disable unreachcode
2283 fi
2284
2285 # PIC flags for shared library objects where they are needed
2286 if enabled shared; then
2287 # LIBOBJFLAGS may have already been set in the OS configuration
2288 if test -z "$LIBOBJFLAGS" ; then
2289 case "${subarch-$arch}" in
2290 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2291 esac
2292 fi
2293 fi
2294
2295 if enabled gprof; then
2296 add_cflags -p
2297 add_ldflags -p
2298 fi
2299
2300 # Find out if the .align argument is a power of two or not.
2301 check_asm asmalign_pot '".align 3"'
2302
2303 enabled_any $DECODER_LIST && enable decoders
2304 enabled_any $ENCODER_LIST && enable encoders
2305 enabled_any $HWACCEL_LIST && enable hwaccels
2306 enabled_any $BSF_LIST && enable bsfs
2307 enabled_any $DEMUXER_LIST && enable demuxers
2308 enabled_any $MUXER_LIST && enable muxers
2309 enabled_any $FILTER_LIST && enable filters
2310 enabled_any $INDEV_LIST && enable demuxers
2311 enabled_any $OUTDEV_LIST && enable muxers
2312 enabled_any $PROTOCOL_LIST && enable protocols
2313
2314 enabled_any $THREADS_LIST && enable threads
2315
2316 check_deps $CONFIG_LIST \
2317 $CONFIG_EXTRA \
2318 $HAVE_LIST \
2319 $DECODER_LIST \
2320 $ENCODER_LIST \
2321 $HWACCEL_LIST \
2322 $PARSER_LIST \
2323 $BSF_LIST \
2324 $DEMUXER_LIST \
2325 $MUXER_LIST \
2326 $FILTER_LIST \
2327 $INDEV_LIST \
2328 $OUTDEV_LIST \
2329 $PROTOCOL_LIST \
2330
2331 echo "install prefix $prefix"
2332 echo "source path $source_path"
2333 echo "C compiler $cc"
2334 echo ".align is power-of-two $asmalign_pot"
2335 echo "ARCH $arch ($cpu)"
2336 if test "$build_suffix" != ""; then
2337 echo "build suffix $build_suffix"
2338 fi
2339 if test "$extra_version" != ""; then
2340 echo "version string suffix $extra_version"
2341 fi
2342 echo "big-endian ${bigendian-no}"
2343 echo "runtime cpu detection ${runtime_cpudetect-no}"
2344 if enabled x86; then
2345 echo "yasm ${yasm-no}"
2346 echo "MMX enabled ${mmx-no}"
2347 echo "MMX2 enabled ${mmx2-no}"
2348 echo "3DNow! enabled ${amd3dnow-no}"
2349 echo "3DNow! extended enabled ${amd3dnowext-no}"
2350 echo "SSE enabled ${sse-no}"
2351 echo "SSSE3 enabled ${ssse3-no}"
2352 echo "CMOV enabled ${cmov-no}"
2353 echo "CMOV is fast ${fast_cmov-no}"
2354 echo "EBX available ${ebx_available-no}"
2355 echo "EBP available ${ebp_available-no}"
2356 echo "10 operands supported ${ten_operands-no}"
2357 fi
2358 if enabled arm; then
2359 echo "ARMv5TE enabled ${armv5te-no}"
2360 echo "ARMv6 enabled ${armv6-no}"
2361 echo "ARMv6T2 enabled ${armv6t2-no}"
2362 echo "ARM VFP enabled ${armvfp-no}"
2363 echo "IWMMXT enabled ${iwmmxt-no}"
2364 echo "NEON enabled ${neon-no}"
2365 fi
2366 if enabled mips; then
2367 echo "MMI enabled ${mmi-no}"
2368 fi
2369 if enabled ppc; then
2370 echo "AltiVec enabled ${altivec-no}"
2371 echo "PPC 4xx optimizations ${ppc4xx-no}"
2372 echo "dcbzl available ${dcbzl-no}"
2373 echo "performance report ${powerpc_perf-no}"
2374 fi
2375 if enabled sparc; then
2376 echo "VIS enabled ${vis-no}"
2377 fi
2378 echo "gprof enabled ${gprof-no}"
2379 echo "debug symbols ${debug-no}"
2380 echo "strip symbols ${stripping-no}"
2381 echo "optimizations ${optimizations-no}"
2382 echo "static ${static-no}"
2383 echo "shared ${shared-no}"
2384 echo "postprocessing support ${postproc-no}"
2385 echo "new filter support ${avfilter-no}"
2386 echo "filters using lavformat ${avfilter_lavf-no}"
2387 echo "network support ${network-no}"
2388 if enabled network; then
2389 echo "IPv6 support ${ipv6-no}"
2390 fi
2391 echo "threading support ${thread_type-no}"
2392 echo "SDL support ${sdl-no}"
2393 if enabled sdl_too_old; then
2394 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2395 fi
2396 echo "Sun medialib support ${mlib-no}"
2397 echo "AVISynth enabled ${avisynth-no}"
2398 echo "libamr-nb support ${libamr_nb-no}"
2399 echo "libamr-wb support ${libamr_wb-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 \"$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"