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