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