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