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