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