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