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