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