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