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